diff options
Diffstat (limited to 'editor')
420 files changed, 31266 insertions, 14101 deletions
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index 17b03fd479..5d2b825c4f 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,6 +32,7 @@ #include "editor/editor_node.h" #include "editor_scale.h" +#include "scene/resources/text_line.h" float AnimationBezierTrackEdit::_bezier_h_to_pixel(float p_h) { float h = p_h; @@ -247,6 +248,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); int hsep = get_theme_constant("hseparation", "ItemList"); int vsep = get_theme_constant("vseparation", "ItemList"); @@ -286,26 +288,27 @@ void AnimationBezierTrackEdit::_notification(int p_what) { String text; - int h = font->get_height(); - if (node) { int ofs = 0; Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); - h = MAX(h, icon->get_height()); + text = node->get_name(); + ofs += hsep; + ofs += icon->get_width(); + + TextLine text_buf = TextLine(text, font, font_size); + text_buf.set_width(limit - ofs - hsep); + + int h = MAX(text_buf.get_size().y, icon->get_height()); draw_texture(icon, Point2(ofs, vofs + int(h - icon->get_height()) / 2)); margin = icon->get_width(); - text = node->get_name(); - ofs += hsep; - ofs += icon->get_width(); - - Vector2 string_pos = Point2(ofs, vofs + (h - font->get_height()) / 2 + font->get_ascent()); + Vector2 string_pos = Point2(ofs, vofs + (h - text_buf.get_size().y) / 2 + text_buf.get_line_ascent()); string_pos = string_pos.floor(); - draw_string(font, string_pos, text, color, limit - ofs - hsep); + text_buf.draw(get_canvas_item(), string_pos, color); vofs += h + vsep; } @@ -327,7 +330,10 @@ void AnimationBezierTrackEdit::_notification(int p_what) { path = path.replace_first(base_path, ""); Color cc = color; - Rect2 rect = Rect2(margin, vofs, limit - margin - hsep, font->get_height() + vsep); + TextLine text_buf = TextLine(path, font, font_size); + text_buf.set_width(limit - margin - hsep); + + Rect2 rect = Rect2(margin, vofs, limit - margin - hsep, text_buf.get_size().y + vsep); if (i != track) { cc.a *= 0.7; uint32_t hash = path.hash(); @@ -338,7 +344,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { Color subcolor; subcolor.set_hsv(h, 0.2, 0.8); subcolor.a = 0.5; - draw_rect(Rect2(0, vofs + font->get_height() * 0.1, margin - hsep, font->get_height() * 0.8), subcolor); + draw_rect(Rect2(0, vofs + text_buf.get_size().y * 0.1, margin - hsep, text_buf.get_size().y * 0.8), subcolor); subtrack_colors[i] = subcolor; subtracks[i] = rect; @@ -347,19 +353,21 @@ void AnimationBezierTrackEdit::_notification(int p_what) { ac.a = 0.5; draw_rect(rect, ac); } - draw_string(font, Point2(margin, vofs + font->get_ascent()), path, cc, limit - margin - hsep); - vofs += font->get_height() + vsep; + Vector2 string_pos = Point2(margin, vofs + text_buf.get_line_ascent()); + text_buf.draw(get_canvas_item(), string_pos, cc); + + vofs += text_buf.get_size().y + vsep; } Color accent = get_theme_color("accent_color", "Editor"); { //guides - float min_left_scale = font->get_height() + vsep; + float min_left_scale = font->get_height(font_size) + vsep; float scale = (min_left_scale * 2) * v_zoom; float step = Math::pow(10.0, Math::round(Math::log(scale / 5.0) / Math::log(10.0))) * 5.0; - scale = Math::stepify(scale, step); + scale = Math::snapped(scale, step); while (scale / v_zoom < min_left_scale * 2) { scale += step; @@ -367,7 +375,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { bool first = true; int prev_iv = 0; - for (int i = font->get_height(); i < get_size().height; i++) { + for (int i = font->get_height(font_size); i < get_size().height; i++) { float ofs = get_size().height / 2 - i; ofs *= v_zoom; ofs += v_scroll; @@ -382,7 +390,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { draw_line(Point2(limit, i), Point2(right_limit, i), lc); Color c = color; c.a *= 0.5; - draw_string(font, Point2(limit + 8, i - 2), rtos(Math::stepify((iv + 1) * scale, step)), c); + draw_string(font, Point2(limit + 8, i - 2), TS->format_number(rtos(Math::snapped((iv + 1) * scale, step))), HALIGN_LEFT, -1, font_size, c); } first = false; @@ -453,8 +461,8 @@ void AnimationBezierTrackEdit::_notification(int p_what) { ep.point_rect.size = bezier_icon->get_size(); if (selection.has(i)) { draw_texture(selected_icon, ep.point_rect.position); - draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height() - 4), TTR("Time:") + " " + rtos(Math::stepify(offset, 0.001)), accent); - draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + rtos(Math::stepify(value, 0.001)), accent); + draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height(font_size) - 4), TTR("Time:") + " " + TS->format_number(rtos(Math::snapped(offset, 0.001))), HALIGN_LEFT, -1, font_size, accent); + draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + TS->format_number(rtos(Math::snapped(value, 0.001))), HALIGN_LEFT, -1, font_size, accent); } else { draw_texture(bezier_icon, ep.point_rect.position); } @@ -499,14 +507,14 @@ Ref<Animation> AnimationBezierTrackEdit::get_animation() const { void AnimationBezierTrackEdit::set_animation_and_track(const Ref<Animation> &p_animation, int p_track) { animation = p_animation; track = p_track; - if (is_connected_compat("select_key", editor, "_key_selected")) { - disconnect_compat("select_key", editor, "_key_selected"); + if (is_connected("select_key", Callable(editor, "_key_selected"))) { + disconnect("select_key", Callable(editor, "_key_selected")); } - if (is_connected_compat("deselect_key", editor, "_key_deselected")) { - disconnect_compat("deselect_key", editor, "_key_deselected"); + if (is_connected("deselect_key", Callable(editor, "_key_deselected"))) { + disconnect("deselect_key", Callable(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); + connect("select_key", Callable(editor, "_key_selected"), varray(p_track), CONNECT_DEFERRED); + connect("deselect_key", Callable(editor, "_key_deselected"), varray(p_track), CONNECT_DEFERRED); update(); } @@ -525,7 +533,7 @@ void AnimationBezierTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; - connect_compat("clear_selection", editor, "_clear_selection", varray(false)); + connect("clear_selection", Callable(editor, "_clear_selection"), varray(false)); } void AnimationBezierTrackEdit::_play_position_draw() { @@ -1156,7 +1164,7 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() { play_position = memnew(Control); play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); - play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->set_anchors_and_offsets_preset(PRESET_WIDE); play_position->connect("draw", callable_mp(this, &AnimationBezierTrackEdit::_play_position_draw)); set_focus_mode(FOCUS_CLICK); diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h index 217393a3b3..b082cae3ea 100644 --- a/editor/animation_bezier_editor.h +++ b/editor/animation_bezier_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -111,10 +111,10 @@ class AnimationBezierTrackEdit : public Control { Vector2 menu_insert_key; struct AnimMoveRestore { - int track; - float time; + int track = 0; + float time = 0; Variant key; - float transition; + float transition = 0; }; AnimationTrackEditor *editor; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 6f30d5a492..5d49290612 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -37,6 +37,7 @@ #include "editor/plugins/animation_player_editor_plugin.h" #include "editor_node.h" #include "editor_scale.h" +#include "scene/animation/animation_player.h" #include "scene/main/window.h" #include "servers/audio/audio_stream.h" @@ -44,7 +45,7 @@ class AnimationTrackKeyEdit : public Object { GDCLASS(AnimationTrackKeyEdit, Object); public: - bool setting; + bool setting = false; bool _hide_script_from_inspector() { return true; @@ -622,15 +623,15 @@ public: } } - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; Ref<Animation> animation; - int track; - float key_ofs; - Node *root_path; + int track = -1; + float key_ofs = 0; + Node *root_path = nullptr; PropertyInfo hint; NodePath base; - bool use_fps; + bool use_fps = false; void notify_change() { _change_notify(); @@ -644,21 +645,13 @@ public: use_fps = p_enable; _change_notify(); } - - AnimationTrackKeyEdit() { - use_fps = false; - key_ofs = 0; - track = -1; - setting = false; - root_path = nullptr; - } }; class AnimationMultiTrackKeyEdit : public Object { GDCLASS(AnimationMultiTrackKeyEdit, Object); public: - bool setting; + bool setting = false; bool _hide_script_from_inspector() { return true; @@ -1276,11 +1269,11 @@ public: Map<int, NodePath> base_map; PropertyInfo hint; - Node *root_path; + Node *root_path = nullptr; - bool use_fps; + bool use_fps = false; - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; void notify_change() { _change_notify(); @@ -1294,12 +1287,6 @@ public: use_fps = p_enable; _change_notify(); } - - AnimationMultiTrackKeyEdit() { - use_fps = false; - setting = false; - root_path = nullptr; - } }; void AnimationTimelineEdit::_zoom_changed(double) { @@ -1397,6 +1384,7 @@ void AnimationTimelineEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); int zoomw = key_range; @@ -1488,10 +1476,10 @@ void AnimationTimelineEdit::_notification(int p_what) { int decimals = 2; bool step_found = false; - const int period_width = font->get_char_size('.').width; - int max_digit_width = font->get_char_size('0').width; + const int period_width = font->get_char_size('.', 0, font_size).width; + int max_digit_width = font->get_char_size('0', 0, font_size).width; for (int i = 1; i <= 9; i++) { - const int digit_width = font->get_char_size('0' + i).width; + const int digit_width = font->get_char_size('0' + i, 0, font_size).width; max_digit_width = MAX(digit_width, max_digit_width); } const int max_sc = int(Math::ceil(zoomw / scale)); @@ -1538,8 +1526,8 @@ void AnimationTimelineEdit::_notification(int p_what) { if (frame != prev_frame && i >= prev_frame_ofs) { draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE)); - draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height()) / 2 + font->get_ascent()).floor(), itos(frame), sub ? color_time_dec : color_time_sec, zoomw - i); - prev_frame_ofs = i + font->get_string_size(itos(frame)).x + 5 * EDSCALE; + draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), itos(frame), HALIGN_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec); + prev_frame_ofs = i + font->get_string_size(itos(frame), font_size).x + 5 * EDSCALE; } } } @@ -1556,7 +1544,7 @@ void AnimationTimelineEdit::_notification(int p_what) { if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) { int scd = sc < 0 ? prev_sc : sc; draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE)); - draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height()) / 2 + font->get_ascent()).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), sub ? color_time_dec : color_time_sec, zoomw - i); + draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), HALIGN_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec); } } } @@ -1583,7 +1571,8 @@ void AnimationTimelineEdit::set_animation(const Ref<Animation> &p_animation) { Size2 AnimationTimelineEdit::get_minimum_size() const { Size2 ms = add_track->get_minimum_size(); Ref<Font> font = get_theme_font("font", "Label"); - ms.height = MAX(ms.height, font->get_height()); + int font_size = get_theme_font_size("font_size", "Label"); + ms.height = MAX(ms.height, font->get_height(font_size)); ms.width = get_buttons_width() + add_track->get_minimum_size().width + get_theme_icon("Hsize", "EditorIcons")->get_width() + 2; return ms; } @@ -1756,7 +1745,7 @@ AnimationTimelineEdit::AnimationTimelineEdit() { play_position = memnew(Control); play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); - play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->set_anchors_and_offsets_preset(PRESET_WIDE); play_position->connect("draw", callable_mp(this, &AnimationTimelineEdit::_play_position_draw)); add_track = memnew(MenuButton); @@ -1798,6 +1787,8 @@ AnimationTimelineEdit::AnimationTimelineEdit() { panning_timeline = false; dragging_timeline = false; dragging_hsize = false; + + set_layout_direction(Control::LAYOUT_DIRECTION_LTR); } //////////////////////////////////// @@ -1819,6 +1810,7 @@ void AnimationTrackEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); Ref<Texture2D> type_icons[6] = { get_theme_icon("KeyValue", "EditorIcons"), @@ -1890,9 +1882,9 @@ void AnimationTrackEdit::_notification(int p_what) { path_rect = Rect2(ofs, 0, limit - ofs - hsep, get_size().height); - Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height()) / 2 + font->get_ascent()); + Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)); string_pos = string_pos.floor(); - draw_string(font, string_pos, text, text_color, limit - ofs - hsep); + draw_string(font, string_pos, text, HALIGN_LEFT, limit - ofs - hsep, font_size, text_color); draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE)); } @@ -2173,6 +2165,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool if (animation->track_get_type(track) == Animation::TYPE_METHOD) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); color.a = 0.5; @@ -2197,7 +2190,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool int limit = MAX(0, p_clip_right - p_x - icon_to_draw->get_width()); if (limit > 0) { - draw_string(font, Vector2(p_x + icon_to_draw->get_width(), int(get_size().height - font->get_height()) / 2 + font->get_ascent()), text, color, limit); + draw_string(font, Vector2(p_x + icon_to_draw->get_width(), int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), text, HALIGN_LEFT, limit, font_size, color); } } @@ -2216,7 +2209,7 @@ void AnimationTrackEdit::draw_rect_clipped(const Rect2 &p_rect, const Color &p_c return; } Rect2 clip = Rect2(clip_left, 0, clip_right - clip_left, get_size().height); - draw_rect(clip.clip(p_rect), p_color, p_filled); + draw_rect(clip.intersection(p_rect), p_color, p_filled); } void AnimationTrackEdit::draw_bg(int p_clip_left, int p_clip_right) { @@ -2225,10 +2218,6 @@ 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<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<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(); @@ -2302,9 +2291,10 @@ NodePath AnimationTrackEdit::get_path() const { Size2 AnimationTrackEdit::get_minimum_size() const { Ref<Texture2D> texture = get_theme_icon("Object", "EditorIcons"); Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("vseparation", "ItemList"); - int max_h = MAX(texture->get_height(), font->get_height()); + int max_h = MAX(texture->get_height(), font->get_height(font_size)); max_h = MAX(max_h, get_key_height()); return Vector2(1, max_h + separation); @@ -2730,7 +2720,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { add_child(path_popup); path = memnew(LineEdit); path_popup->add_child(path); - path->set_anchors_and_margins_preset(PRESET_WIDE); + path->set_anchors_and_offsets_preset(PRESET_WIDE); path->connect("text_entered", callable_mp(this, &AnimationTrackEdit::_path_entered)); } @@ -2923,7 +2913,7 @@ void AnimationTrackEdit::append_to_selection(const Rect2 &p_box, bool p_deselect // Left Border including space occupied by keyframes on t=0. int limit_start_hitbox = timeline->get_name_limit() - type_icon->get_width(); Rect2 select_rect(limit_start_hitbox, 0, get_size().width - timeline->get_name_limit() - timeline->get_buttons_width(), get_size().height); - select_rect = select_rect.clip(p_box); + select_rect = select_rect.intersection(p_box); // Select should happen in the opposite order of drawing for more accurate overlap select. for (int i = animation->track_get_key_count(track) - 1; i >= 0; i--) { @@ -2983,7 +2973,7 @@ AnimationTrackEdit::AnimationTrackEdit() { play_position = memnew(Control); play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); - play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->set_anchors_and_offsets_preset(PRESET_WIDE); play_position->connect("draw", callable_mp(this, &AnimationTrackEdit::_play_position_draw)); set_focus_mode(FOCUS_CLICK); set_mouse_filter(MOUSE_FILTER_PASS); //scroll has to work too for selection @@ -3036,6 +3026,7 @@ AnimationTrackEdit *AnimationTrackEditPlugin::create_animation_track_edit(Object void AnimationTrackEditGroup::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("hseparation", "ItemList"); Color color = get_theme_color("font_color", "Label"); @@ -3059,7 +3050,7 @@ void AnimationTrackEditGroup::_notification(int p_what) { int ofs = 0; draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2)); ofs += separation + icon->get_width(); - draw_string(font, Point2(ofs, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), node_name, color, timeline->get_name_limit() - ofs); + draw_string(font, Point2(ofs, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), node_name, HALIGN_LEFT, timeline->get_name_limit() - ofs, font_size, color); int px = (-timeline->get_value() + timeline->get_play_position()) * timeline->get_zoom_scale() + timeline->get_name_limit(); @@ -3080,9 +3071,10 @@ void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture2D> &p_type, co Size2 AnimationTrackEditGroup::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("vseparation", "ItemList"); - return Vector2(0, MAX(font->get_height(), icon->get_height()) + separation); + return Vector2(0, MAX(font->get_height(font_size), icon->get_height()) + separation); } void AnimationTrackEditGroup::set_timeline(AnimationTimelineEdit *p_timeline) { @@ -3308,6 +3300,19 @@ void AnimationTrackEditor::set_anim_pos(float p_pos) { bezier_edit->set_play_position(p_pos); } +static bool track_type_is_resettable(Animation::TrackType p_type) { + switch (p_type) { + case Animation::TYPE_VALUE: + [[fallthrough]]; + case Animation::TYPE_BEZIER: + [[fallthrough]]; + case Animation::TYPE_TRANSFORM: + return true; + default: + return false; + } +} + void AnimationTrackEditor::_query_insert(const InsertData &p_id) { if (insert_frame != Engine::get_singleton()->get_frames_drawn()) { //clear insert list for the frame if frame changed @@ -3328,40 +3333,58 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { insert_data.push_back(p_id); + bool reset_allowed = true; + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + if (player->has_animation("RESET") && player->get_animation("RESET") == animation) { + // Avoid messing with the reset animation itself + reset_allowed = false; + } else { + bool some_resettable = false; + for (int i = 0; i < insert_data.size(); i++) { + if (track_type_is_resettable(insert_data[i].type)) { + some_resettable = true; + break; + } + } + if (!some_resettable) { + reset_allowed = false; + } + } + if (p_id.track_idx == -1) { - if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { - //potential new key, does not exist - int num_tracks = 0; - bool all_bezier = true; - for (int i = 0; i < insert_data.size(); i++) { - if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { - all_bezier = false; - } + int num_tracks = 0; + bool all_bezier = true; + for (int i = 0; i < insert_data.size(); i++) { + if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { + all_bezier = false; + } - if (insert_data[i].track_idx == -1) { - ++num_tracks; - } + if (insert_data[i].track_idx == -1) { + ++num_tracks; + } - if (insert_data[i].type != Animation::TYPE_VALUE) { - continue; - } + if (insert_data[i].type != Animation::TYPE_VALUE) { + continue; + } - switch (insert_data[i].value.get_type()) { - case Variant::INT: - case Variant::FLOAT: - case Variant::VECTOR2: - case Variant::VECTOR3: - case Variant::QUAT: - case Variant::PLANE: - case Variant::COLOR: { - // Valid. - } break; - default: { - all_bezier = false; - } + switch (insert_data[i].value.get_type()) { + case Variant::INT: + case Variant::FLOAT: + case Variant::VECTOR2: + case Variant::VECTOR3: + case Variant::QUAT: + case Variant::PLANE: + case Variant::COLOR: { + // Valid. + } break; + default: { + all_bezier = false; } } + } + if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { + //potential new key, does not exist if (num_tracks == 1) { insert_confirm_text->set_text(vformat(TTR("Create new track for %s and insert key?"), p_id.query)); } else { @@ -3369,23 +3392,26 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { } insert_confirm_bezier->set_visible(all_bezier); - insert_confirm->get_ok()->set_text(TTR("Create")); + insert_confirm_reset->set_visible(reset_allowed); + + insert_confirm->get_ok_button()->set_text(TTR("Create")); insert_confirm->popup_centered(); insert_query = true; } else { - call_deferred("_insert_delay"); + call_deferred("_insert_delay", reset_allowed && EDITOR_GET("editors/animation/default_create_reset_tracks"), all_bezier && EDITOR_GET("editors/animation/default_create_bezier_tracks")); insert_queue = true; } } else { if (!insert_query && !insert_queue) { - call_deferred("_insert_delay"); + // Create Beziers wouldn't make sense in this case, where no tracks are being created + call_deferred("_insert_delay", reset_allowed && EDITOR_GET("editors/animation/default_create_reset_tracks"), false); insert_queue = true; } } } -void AnimationTrackEditor::_insert_delay() { +void AnimationTrackEditor::_insert_delay(bool p_create_reset, bool p_create_beziers) { if (insert_query) { //discard since it's entered into query mode insert_queue = false; @@ -3394,13 +3420,18 @@ void AnimationTrackEditor::_insert_delay() { undo_redo->create_action(TTR("Anim Insert")); - int last_track = animation->get_track_count(); + Ref<Animation> reset_anim; + if (p_create_reset) { + reset_anim = _create_and_get_reset_animation(); + } + + TrackIndices next_tracks(animation.ptr(), reset_anim.ptr()); bool advance = false; while (insert_data.size()) { if (insert_data.front()->get().advance) { advance = true; } - last_track = _confirm_insert(insert_data.front()->get(), last_track); + next_tracks = _confirm_insert(insert_data.front()->get(), next_tracks, p_create_reset, reset_anim, p_create_beziers); insert_data.pop_front(); } @@ -3414,7 +3445,7 @@ void AnimationTrackEditor::_insert_delay() { float pos = timeline->get_play_position(); - pos = Math::stepify(pos + step, step); + pos = Math::snapped(pos + step, step); if (pos > animation->get_length()) { pos = animation->get_length(); } @@ -3691,12 +3722,34 @@ void AnimationTrackEditor::insert_value_key(const String &p_property, const Vari } } +Ref<Animation> AnimationTrackEditor::_create_and_get_reset_animation() { + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + if (player->has_animation("RESET")) { + return player->get_animation("RESET"); + } else { + Ref<Animation> reset_anim; + reset_anim.instance(); + reset_anim->set_length(ANIM_MIN_LENGTH); + undo_redo->add_do_method(player, "add_animation", "RESET", reset_anim); + undo_redo->add_do_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player); + undo_redo->add_undo_method(player, "remove_animation", "RESET"); + undo_redo->add_undo_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player); + return reset_anim; + } +} + void AnimationTrackEditor::_confirm_insert_list() { undo_redo->create_action(TTR("Anim Create & Insert")); - int last_track = animation->get_track_count(); + bool create_reset = insert_confirm_reset->is_visible() && insert_confirm_reset->is_pressed(); + Ref<Animation> reset_anim; + if (create_reset) { + reset_anim = _create_and_get_reset_animation(); + } + + TrackIndices next_tracks(animation.ptr(), reset_anim.ptr()); while (insert_data.size()) { - last_track = _confirm_insert(insert_data.front()->get(), last_track, insert_confirm_bezier->is_pressed()); + next_tracks = _confirm_insert(insert_data.front()->get(), next_tracks, create_reset, reset_anim, insert_confirm_bezier->is_pressed()); insert_data.pop_front(); } @@ -3726,7 +3779,7 @@ PropertyInfo AnimationTrackEditor::_find_hint_for_track(int p_idx, NodePath &r_b r_base_path = node->get_path(); } - if (leftover_path.empty()) { + if (leftover_path.is_empty()) { if (r_current_val) { if (res.is_valid()) { *r_current_val = res; @@ -3816,11 +3869,7 @@ static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool return subindices; } -int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers) { - if (p_last_track == -1) { - p_last_track = animation->get_track_count(); - } - +AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertData p_id, TrackIndices p_next_tracks, bool p_create_reset, Ref<Animation> p_reset_anim, bool p_create_beziers) { bool created = false; if (p_id.track_idx < 0) { if (p_create_beziers) { @@ -3832,10 +3881,10 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo id.type = Animation::TYPE_BEZIER; id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); id.path = String(p_id.path) + subindices[i]; - _confirm_insert(id, p_last_track + i); + p_next_tracks = _confirm_insert(id, p_next_tracks, p_create_reset, p_reset_anim, false); } - return p_last_track + subindices.size(); + return p_next_tracks; } } created = true; @@ -3872,7 +3921,7 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo } } - p_id.track_idx = p_last_track; + p_id.track_idx = p_next_tracks.normal; undo_redo->add_do_method(animation.ptr(), "add_track", p_id.type); undo_redo->add_do_method(animation.ptr(), "track_set_path", p_id.track_idx, p_id.path); @@ -3924,7 +3973,7 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo // Just remove the track. undo_redo->add_undo_method(this, "_clear_selection", false); undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); - p_last_track++; + p_next_tracks.normal++; } else { undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_id.track_idx, time); int existing = animation->track_find_key(p_id.track_idx, time, true); @@ -3935,9 +3984,27 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo } } + if (p_create_reset && track_type_is_resettable(p_id.type)) { + bool create_reset_track = true; + Animation *reset_anim = p_reset_anim.ptr(); + for (int i = 0; i < reset_anim->get_track_count(); i++) { + if (reset_anim->track_get_path(i) == p_id.path) { + create_reset_track = false; + break; + } + } + if (create_reset_track) { + undo_redo->add_do_method(reset_anim, "add_track", p_id.type); + undo_redo->add_do_method(reset_anim, "track_set_path", p_next_tracks.reset, p_id.path); + undo_redo->add_do_method(reset_anim, "track_insert_key", p_next_tracks.reset, 0.0f, value); + undo_redo->add_undo_method(reset_anim, "remove_track", reset_anim->get_track_count()); + p_next_tracks.reset++; + } + } + undo_redo->commit_action(); - return p_last_track; + return p_next_tracks; } void AnimationTrackEditor::show_select_node_warning(bool p_show) { @@ -4013,8 +4080,8 @@ void AnimationTrackEditor::_update_tracks() { object = res.ptr(); } - if (object && !leftover_path.empty()) { - if (pinfo.name.empty()) { + if (object && !leftover_path.is_empty()) { + if (pinfo.name.is_empty()) { pinfo.name = leftover_path[leftover_path.size() - 1]; } @@ -4233,6 +4300,7 @@ void AnimationTrackEditor::_notification(int p_what) { selected_filter->set_icon(get_theme_icon("AnimationFilter", "EditorIcons")); imported_anim_warning->set_icon(get_theme_icon("NodeWarning", "EditorIcons")); main_panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); + edit->get_popup()->set_item_icon(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), get_theme_icon("Reload", "EditorIcons")); } if (p_what == NOTIFICATION_READY) { @@ -4660,10 +4728,10 @@ void AnimationTrackEditor::_move_selection(float p_offset) { } struct _AnimMoveRestore { - int track; - float time; + int track = 0; + float time = 0; Variant key; - float transition; + float transition = 0; }; //used for undo/redo @@ -4956,7 +5024,7 @@ void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) { Rect2 rect(from, to - from); Rect2 scroll_rect = Rect2(scroll->get_global_position(), scroll->get_size()); - rect = scroll_rect.clip(rect); + rect = scroll_rect.intersection(rect); box_selection->set_position(rect.position); box_selection->set_size(rect.size); @@ -5065,6 +5133,11 @@ void AnimationTrackEditor::_anim_duplicate_keys(bool transpose) { } } +void AnimationTrackEditor::_edit_menu_about_to_popup() { + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + edit->get_popup()->set_item_disabled(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), !player->can_apply_reset()); +} + void AnimationTrackEditor::_edit_menu_pressed(int p_option) { last_menu_track_opt = p_option; switch (p_option) { @@ -5212,7 +5285,7 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { scale_dialog->popup_centered(Size2(200, 100) * EDSCALE); } break; case EDIT_SCALE_CONFIRM: { - if (selection.empty()) { + if (selection.is_empty()) { return; } @@ -5360,7 +5433,7 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { float pos = timeline->get_play_position(); - pos = Math::stepify(pos + step, step); + pos = Math::snapped(pos + step, step); if (pos > animation->get_length()) { pos = animation->get_length(); } @@ -5379,7 +5452,7 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { } float pos = timeline->get_play_position(); - pos = Math::stepify(pos - step, step); + pos = Math::snapped(pos - step, step); if (pos < 0) { pos = 0; } @@ -5387,6 +5460,10 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { emit_signal("timeline_changed", pos, true); } break; + case EDIT_APPLY_RESET: { + AnimationPlayerEditor::singleton->get_player()->apply_reset(true); + + } break; case EDIT_OPTIMIZE_ANIMATION: { optimize_dialog->popup_centered(Size2(250, 180) * EDSCALE); @@ -5504,9 +5581,9 @@ float AnimationTrackEditor::snap_time(float p_value, bool p_relative) { if (p_relative) { double rel = Math::fmod(timeline->get_value(), snap_increment); - p_value = Math::stepify(p_value + rel, snap_increment) - rel; + p_value = Math::snapped(p_value + rel, snap_increment) - rel; } else { - p_value = Math::stepify(p_value, snap_increment); + p_value = Math::snapped(p_value, snap_increment); } } @@ -5565,6 +5642,7 @@ AnimationTrackEditor::AnimationTrackEditor() { undo_redo = EditorNode::get_singleton()->get_undo_redo(); main_panel = memnew(PanelContainer); + main_panel->set_focus_mode(FOCUS_ALL); // allow panel to have focus so that shortcuts work as expected. add_child(main_panel); main_panel->set_v_size_flags(SIZE_EXPAND_FILL); HBoxContainer *timeline_scroll = memnew(HBoxContainer); @@ -5583,7 +5661,7 @@ AnimationTrackEditor::AnimationTrackEditor() { 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); + info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); main_panel->add_child(info_message); timeline = memnew(AnimationTimelineEdit); @@ -5698,6 +5776,7 @@ AnimationTrackEditor::AnimationTrackEditor() { timeline->set_zoom(zoom); edit = memnew(MenuButton); + edit->set_shortcut_context(this); edit->set_text(TTR("Edit")); edit->set_flat(false); edit->set_disabled(true); @@ -5710,21 +5789,20 @@ AnimationTrackEditor::AnimationTrackEditor() { edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_SELECTION); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection_transposed", TTR("Duplicate Transposed"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_TRANSPOSED); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_SELECTION), true); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_TRANSPOSED), true); edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/delete_selection", TTR("Delete Selection"), KEY_DELETE), EDIT_DELETE_SELECTION); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DELETE_SELECTION), true); - //this shortcut will be checked from the track itself. so no need to enable it here (will conflict with scenetree dock) edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_next_step", TTR("Go to Next Step"), KEY_MASK_CMD | KEY_RIGHT), EDIT_GOTO_NEXT_STEP); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_prev_step", TTR("Go to Previous Step"), KEY_MASK_CMD | KEY_LEFT), EDIT_GOTO_PREV_STEP); edit->get_popup()->add_separator(); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/apply_reset", TTR("Apply Reset")), EDIT_APPLY_RESET); + edit->get_popup()->add_separator(); 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", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed)); + edit->get_popup()->connect("about_to_popup", callable_mp(this, &AnimationTrackEditor::_edit_menu_about_to_popup)); pick_track = memnew(SceneTreeDialog); add_child(pick_track); @@ -5750,9 +5828,16 @@ AnimationTrackEditor::AnimationTrackEditor() { insert_confirm->add_child(icvb); insert_confirm_text = memnew(Label); icvb->add_child(insert_confirm_text); + HBoxContainer *ichb = memnew(HBoxContainer); + icvb->add_child(ichb); insert_confirm_bezier = memnew(CheckBox); insert_confirm_bezier->set_text(TTR("Use Bezier Curves")); - icvb->add_child(insert_confirm_bezier); + insert_confirm_bezier->set_pressed(EDITOR_GET("editors/animation/default_create_bezier_tracks")); + ichb->add_child(insert_confirm_bezier); + insert_confirm_reset = memnew(CheckBox); + insert_confirm_reset->set_text(TTR("Create RESET Track(s)", "")); + insert_confirm_reset->set_pressed(EDITOR_GET("editors/animation/default_create_reset_tracks")); + ichb->add_child(insert_confirm_reset); keying = false; moving_selection = false; key_edit = nullptr; @@ -5800,7 +5885,7 @@ AnimationTrackEditor::AnimationTrackEditor() { optimize_max_angle->set_step(0.1); optimize_max_angle->set_value(22); - optimize_dialog->get_ok()->set_text(TTR("Optimize")); + optimize_dialog->get_ok_button()->set_text(TTR("Optimize")); optimize_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed), varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); // @@ -5825,7 +5910,7 @@ AnimationTrackEditor::AnimationTrackEditor() { cleanup_vb->add_child(cleanup_all); cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); - cleanup_dialog->get_ok()->set_text(TTR("Clean-Up")); + cleanup_dialog->get_ok_button()->set_text(TTR("Clean-Up")); cleanup_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed), varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); @@ -5845,7 +5930,7 @@ AnimationTrackEditor::AnimationTrackEditor() { track_copy_dialog = memnew(ConfirmationDialog); add_child(track_copy_dialog); track_copy_dialog->set_title(TTR("Select Tracks to Copy")); - track_copy_dialog->get_ok()->set_text(TTR("Copy")); + track_copy_dialog->get_ok_button()->set_text(TTR("Copy")); VBoxContainer *track_vbox = memnew(VBoxContainer); track_copy_dialog->add_child(track_vbox); diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index a31ca892ef..e8e4f915fa 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -47,6 +47,8 @@ #include "scene/resources/animation.h" #include "scene_tree_editor.h" +class AnimationPlayer; + class AnimationTimelineEdit : public Range { GDCLASS(AnimationTimelineEdit, Range); @@ -207,7 +209,6 @@ public: virtual void draw_fg(int p_clip_left, int p_clip_right); //helper - 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); @@ -253,8 +254,8 @@ class AnimationTrackEditGroup : public Control { Ref<Texture2D> icon; String node_name; NodePath node; - Node *root; - AnimationTimelineEdit *timeline; + Node *root = nullptr; + AnimationTimelineEdit *timeline = nullptr; void _zoom_changed(); @@ -286,6 +287,7 @@ class AnimationTrackEditor : public VBoxContainer { EDIT_DELETE_SELECTION, EDIT_GOTO_NEXT_STEP, EDIT_GOTO_PREV_STEP, + EDIT_APPLY_RESET, EDIT_OPTIMIZE_ANIMATION, EDIT_OPTIMIZE_ANIMATION_CONFIRM, EDIT_CLEAN_UP_ANIMATION, @@ -354,14 +356,15 @@ class AnimationTrackEditor : public VBoxContainer { struct InsertData { Animation::TrackType type; NodePath path; - int track_idx; + int track_idx = 0; Variant value; String query; - bool advance; + bool advance = false; }; /* insert_data;*/ Label *insert_confirm_text; CheckBox *insert_confirm_bezier; + CheckBox *insert_confirm_reset; ConfirmationDialog *insert_confirm; bool insert_queue; bool inserting; @@ -370,9 +373,19 @@ class AnimationTrackEditor : public VBoxContainer { uint64_t insert_frame; void _query_insert(const InsertData &p_id); + Ref<Animation> _create_and_get_reset_animation(); void _confirm_insert_list(); - int _confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers = false); - void _insert_delay(); + struct TrackIndices { + int normal; + int reset; + + TrackIndices(const Animation *p_anim = nullptr, const Animation *p_reset_anim = nullptr) { + normal = p_anim ? p_anim->get_track_count() : 0; + reset = p_reset_anim ? p_reset_anim->get_track_count() : 0; + } + }; + TrackIndices _confirm_insert(InsertData p_id, TrackIndices p_next_tracks, bool p_create_reset, Ref<Animation> p_reset_anim, bool p_create_beziers); + void _insert_delay(bool p_create_reset, bool p_create_beziers); void _root_removed(Node *p_root); @@ -392,13 +405,13 @@ class AnimationTrackEditor : public VBoxContainer { //selection struct SelectedKey { - int track; - int key; + int track = 0; + int key = 0; bool operator<(const SelectedKey &p_key) const { return track == p_key.track ? key < p_key.key : track < p_key.track; }; }; struct KeyInfo { - float pos; + float pos = 0; }; Map<SelectedKey, KeyInfo> selection; @@ -448,6 +461,7 @@ class AnimationTrackEditor : public VBoxContainer { void _select_all_tracks_for_copy(); + void _edit_menu_about_to_popup(); void _edit_menu_pressed(int p_option); int last_menu_track_opt; @@ -467,15 +481,15 @@ class AnimationTrackEditor : public VBoxContainer { struct TrackClipboard { NodePath full_path; NodePath base_path; - Animation::TrackType track_type; - Animation::InterpolationType interp_type; - Animation::UpdateMode update_mode; - bool loop_wrap; - bool enabled; + Animation::TrackType track_type = Animation::TrackType::TYPE_ANIMATION; + Animation::InterpolationType interp_type = Animation::InterpolationType::INTERPOLATION_CUBIC; + Animation::UpdateMode update_mode = Animation::UpdateMode::UPDATE_CAPTURE; + bool loop_wrap = false; + bool enabled = false; struct Key { - float time; - float transition; + float time = 0; + float transition = 0; Variant value; }; Vector<Key> keys; diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index 9fc67000f9..0c0ee2856e 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -37,6 +37,7 @@ #include "scene/2d/sprite_2d.h" #include "scene/3d/sprite_3d.h" #include "scene/animation/animation_player.h" +#include "scene/resources/text_line.h" #include "servers/audio/audio_stream.h" /// BOOL /// @@ -80,12 +81,14 @@ void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x, int AnimationTrackEditColor::get_key_height() const { Ref<Font> font = get_theme_font("font", "Label"); - return font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + return font->get_height(font_size) * 0.8; } Rect2 AnimationTrackEditColor::get_key_rect(int p_index, float p_pixels_sec) { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(-fh / 2, 0, fh, get_size().height); } @@ -95,7 +98,8 @@ bool AnimationTrackEditColor::is_key_selectable_by_distance() const { void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { Ref<Font> font = get_theme_font("font", "Label"); - int fh = (font->get_height() * 0.8); + int font_size = get_theme_font_size("font_size", "Label"); + int fh = (font->get_height(font_size) * 0.8); int x_from = p_x + fh / 2 - 1; int x_to = p_next_x - fh / 2 + 1; @@ -144,7 +148,8 @@ void AnimationTrackEditColor::draw_key(int p_index, float p_pixels_sec, int p_x, Color color = get_animation()->track_get_key_value(get_track(), p_index); Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x - fh / 2, int(get_size().height - fh) / 2), Size2(fh, fh)); @@ -182,7 +187,8 @@ int AnimationTrackEditAudio::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { @@ -214,7 +220,8 @@ Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -277,7 +284,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, } Ref<Font> font = get_theme_font("font", "Label"); - float fh = int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + float fh = int(font->get_height(font_size) * 1.5); Rect2 rect = Rect2(from_x, (get_size().height - fh) / 2, to_x - from_x, fh); draw_rect(rect, Color(0.25, 0.25, 0.25)); @@ -307,7 +315,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); @@ -339,7 +348,8 @@ int AnimationTrackEditSpriteFrame::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 2); } Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_sec) { @@ -406,7 +416,8 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se size = size.floor(); Ref<Font> font = get_theme_font("font", "Label"); - int height = int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + int height = int(font->get_height(font_size) * 2); int width = height * size.width / size.height; return Rect2(0, 0, width, get_size().height); @@ -496,7 +507,8 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in } Ref<Font> font = get_theme_font("font", "Label"); - int height = int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + int height = int(font->get_height(font_size) * 2); int width = height * region.size.width / region.size.height; @@ -539,7 +551,8 @@ int AnimationTrackEditSubAnim::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { @@ -567,7 +580,8 @@ Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -621,7 +635,8 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ } Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 1.5; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); @@ -664,7 +679,7 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ int limit = to_x - from_x - 4; if (limit > 0) { - draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), anim, HALIGN_LEFT, -1, font_size, color); } if (p_selected) { @@ -673,7 +688,8 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); @@ -771,7 +787,8 @@ void AnimationTrackEditTypeAudio::_preview_changed(ObjectID p_which) { int AnimationTrackEditTypeAudio::get_key_height() const { Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditTypeAudio::get_key_rect(int p_index, float p_pixels_sec) { @@ -835,7 +852,8 @@ void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int } Ref<Font> font = get_theme_font("font", "Label"); - float fh = int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + float fh = int(font->get_height(font_size) * 1.5); float len = stream->get_length(); @@ -1104,7 +1122,8 @@ int AnimationTrackEditTypeAnimation::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_sec) { @@ -1132,7 +1151,8 @@ Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_ return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -1186,7 +1206,8 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, } Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 1.5; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); @@ -1229,7 +1250,7 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, int limit = to_x - from_x - 4; if (limit > 0) { - draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), anim, HALIGN_LEFT, -1, font_size, color); } if (p_selected) { @@ -1238,7 +1259,8 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); diff --git a/editor/animation_track_editor_plugins.h b/editor/animation_track_editor_plugins.h index 7c5d7ae04f..66229c3012 100644 --- a/editor/animation_track_editor_plugins.h +++ b/editor/animation_track_editor_plugins.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/array_property_edit.cpp b/editor/array_property_edit.cpp index 0b6b1ef6a7..3daee4587c 100644 --- a/editor/array_property_edit.cpp +++ b/editor/array_property_edit.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -259,7 +259,7 @@ void ArrayPropertyEdit::edit(Object *p_obj, const StringName &p_prop, const Stri obj = p_obj->get_instance_id(); default_type = p_deftype; - if (!p_hint_string.empty()) { + if (!p_hint_string.is_empty()) { int hint_subtype_separator = p_hint_string.find(":"); if (hint_subtype_separator >= 0) { String subtype_string = p_hint_string.substr(0, hint_subtype_separator); diff --git a/editor/array_property_edit.h b/editor/array_property_edit.h index d91701ccaf..dd495b57f4 100644 --- a/editor/array_property_edit.h +++ b/editor/array_property_edit.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/audio_stream_preview.cpp b/editor/audio_stream_preview.cpp index 9e4e157c96..2e0c3491f7 100644 --- a/editor/audio_stream_preview.cpp +++ b/editor/audio_stream_preview.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/audio_stream_preview.h b/editor/audio_stream_preview.h index 97a582836c..21c9ea203e 100644 --- a/editor/audio_stream_preview.h +++ b/editor/audio_stream_preview.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -60,9 +60,9 @@ class AudioStreamPreviewGenerator : public Node { Ref<AudioStreamPreview> preview; Ref<AudioStream> base_stream; Ref<AudioStreamPlayback> playback; - volatile bool generating; + volatile bool generating = false; ObjectID id; - Thread *thread; + Thread *thread = nullptr; }; Map<ObjectID, Preview> previews; diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 3182bca0eb..f4717830bc 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -38,7 +38,7 @@ #include "editor_settings.h" #include "scene/gui/margin_container.h" #include "scene/gui/separator.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" void GotoLineDialog::popup_find_line(CodeEdit *p_edit) { text_editor = p_edit; @@ -66,10 +66,10 @@ GotoLineDialog::GotoLineDialog() { set_title(TTR("Go to Line")); VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); add_child(vbc); Label *l = memnew(Label); @@ -81,6 +81,8 @@ GotoLineDialog::GotoLineDialog() { register_text_enter(line); text_editor = nullptr; + line_label = nullptr; + set_hide_on_ok(false); } @@ -323,7 +325,7 @@ void FindReplaceBar::_update_results_count() { results_count = 0; String searched = get_search_text(); - if (searched.empty()) { + if (searched.is_empty()) { return; } @@ -354,7 +356,7 @@ void FindReplaceBar::_update_results_count() { } void FindReplaceBar::_update_matches_label() { - if (search_text->get_text().empty() || results_count == -1) { + if (search_text->get_text().is_empty() || results_count == -1) { matches_label->hide(); } else { matches_label->show(); @@ -481,7 +483,7 @@ void FindReplaceBar::_show_search(bool p_focus_replace, bool p_show_only) { search_text->set_text(text_editor->get_selection_text()); } - if (!get_search_text().empty()) { + if (!get_search_text().is_empty()) { if (p_focus_replace) { replace_text->select_all(); replace_text->set_cursor_position(replace_text->get_text().length()); @@ -731,17 +733,10 @@ void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMagnifyGesture> magnify_gesture = p_event; if (magnify_gesture.is_valid()) { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); - - if (font.is_valid()) { - if (font->get_size() != (int)font_size) { - font_size = font->get_size(); - } - - font_size *= powf(magnify_gesture->get_factor(), 0.25); + font_size = text_editor->get_theme_font_size("font_size"); + font_size *= powf(magnify_gesture->get_factor(), 0.25); - _add_font_size((int)font_size - font->get_size()); - } + _add_font_size((int)font_size - text_editor->get_theme_font_size("font_size")); return; } @@ -779,12 +774,8 @@ void CodeTextEditor::_zoom_changed() { } void CodeTextEditor::_reset_zoom() { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); // Reset source font size to default. - - if (font.is_valid()) { - EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); - font->set_size(14); - } + EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); + text_editor->add_theme_font_size_override("font_size", 14 * EDSCALE); } void CodeTextEditor::_line_col_changed() { @@ -884,7 +875,7 @@ Ref<Texture2D> CodeTextEditor::_get_completion_icon(const ScriptCodeCompletionOp tex = get_theme_icon("MemberMethod", "EditorIcons"); break; case ScriptCodeCompletionOption::KIND_PLAIN_TEXT: - tex = get_theme_icon("CubeMesh", "EditorIcons"); + tex = get_theme_icon("BoxMesh", "EditorIcons"); break; default: tex = get_theme_icon("String", "EditorIcons"); @@ -900,20 +891,15 @@ void CodeTextEditor::_font_resize_timeout() { } bool CodeTextEditor::_add_font_size(int p_delta) { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); - - if (font.is_valid()) { - int new_size = CLAMP(font->get_size() + p_delta, 8 * EDSCALE, 96 * EDSCALE); + int old_size = text_editor->get_theme_font_size("font_size"); + int new_size = CLAMP(old_size + p_delta, 8 * EDSCALE, 96 * EDSCALE); - if (new_size != font->get_size()) { - EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); - font->set_size(new_size); - } - - return true; - } else { - return false; + if (new_size != old_size) { + EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); + text_editor->add_theme_font_size_override("font_size", new_size); } + + return true; } void CodeTextEditor::update_editor_settings() { @@ -1323,7 +1309,7 @@ void CodeTextEditor::toggle_inline_comment(const String &delimiter) { for (int i = begin; i <= end; i++) { String line_text = text_editor->get_line(i); - if (line_text.strip_edges().empty()) { + if (line_text.strip_edges().is_empty()) { line_text = delimiter; } else { if (is_commented) { @@ -1486,17 +1472,22 @@ void CodeTextEditor::goto_error() { void CodeTextEditor::_update_font() { text_editor->add_theme_font_override("font", get_theme_font("source", "EditorFonts")); + text_editor->add_theme_font_size_override("font_size", get_theme_font_size("source_size", "EditorFonts")); error->add_theme_font_override("font", get_theme_font("status_source", "EditorFonts")); + error->add_theme_font_size_override("font_size", get_theme_font_size("status_source_size", "EditorFonts")); error->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); Ref<Font> status_bar_font = get_theme_font("status_source", "EditorFonts"); + int status_bar_font_size = get_theme_font_size("status_source_size", "EditorFonts"); error->add_theme_font_override("font", status_bar_font); + error->add_theme_font_size_override("font_size", status_bar_font_size); int count = status_bar->get_child_count(); for (int i = 0; i < count; i++) { Control *n = Object::cast_to<Control>(status_bar->get_child(i)); if (n) { n->add_theme_font_override("font", status_bar_font); + n->add_theme_font_size_override("font_size", status_bar_font_size); } } } @@ -1506,6 +1497,31 @@ void CodeTextEditor::_on_settings_change() { font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); + int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures"); + switch (ot_mode) { + case 1: { // Disable ligatures. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 0); + } break; + case 2: { // Custom. + text_editor->clear_opentype_features(); + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + } else if (subtag_a.size() == 1) { + text_editor->set_opentype_feature(subtag_a[0], 1); + } + } + } break; + default: { // Default. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 1); + } break; + } + // Auto brace completion. text_editor->set_auto_brace_completion( EDITOR_GET("text_editor/completion/auto_brace_complete")); @@ -1547,7 +1563,11 @@ void CodeTextEditor::_set_show_warnings_panel(bool p_show) { } void CodeTextEditor::_toggle_scripts_pressed() { - toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Forward", "EditorIcons") : get_theme_icon("Back", "EditorIcons")); + } else { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + } } void CodeTextEditor::_error_pressed(const Ref<InputEvent> &p_event) { @@ -1668,7 +1688,11 @@ void CodeTextEditor::show_toggle_scripts_button() { } void CodeTextEditor::update_toggle_scripts_button() { - toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Forward", "EditorIcons") : get_theme_icon("Back", "EditorIcons")); + } else { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + } toggle_scripts_button->set_tooltip(TTR("Toggle Scripts Panel") + " (" + ED_GET_SHORTCUT("script_editor/toggle_scripts_panel")->get_as_text() + ")"); } @@ -1682,6 +1706,31 @@ CodeTextEditor::CodeTextEditor() { add_child(text_editor); text_editor->set_v_size_flags(SIZE_EXPAND_FILL); + int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures"); + switch (ot_mode) { + case 1: { // Disable ligatures. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 0); + } break; + case 2: { // Custom. + text_editor->clear_opentype_features(); + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + } else if (subtag_a.size() == 1) { + text_editor->set_opentype_feature(subtag_a[0], 1); + } + } + } break; + default: { // Default. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 1); + } break; + } + // Added second so it opens at the bottom, so it won't shift the entire text editor when opening. find_replace_bar = memnew(FindReplaceBar); add_child(find_replace_bar); @@ -1750,6 +1799,7 @@ CodeTextEditor::CodeTextEditor() { warning_count_label->set_tooltip(TTR("Warnings")); warning_count_label->add_theme_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_theme_color("warning_color", "Editor")); warning_count_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + warning_count_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); warning_count_label->connect("gui_input", callable_mp(this, &CodeTextEditor::_warning_label_gui_input)); is_warnings_panel_opened = false; @@ -1760,6 +1810,7 @@ CodeTextEditor::CodeTextEditor() { status_bar->add_child(line_and_col_txt); line_and_col_txt->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER); line_and_col_txt->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + line_and_col_txt->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); line_and_col_txt->set_tooltip(TTR("Line and column numbers.")); line_and_col_txt->set_mouse_filter(MOUSE_FILTER_STOP); diff --git a/editor/code_editor.h b/editor/code_editor.h index b38170cbf5..e201da446e 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 320e5d8510..01fa094d38 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -31,6 +31,7 @@ #include "connections_dialog.h" #include "core/string/print_string.h" +#include "editor/doc_tools.h" #include "editor_node.h" #include "editor_scale.h" #include "editor_settings.h" @@ -251,16 +252,16 @@ void ConnectDialog::_update_ok_enabled() { Node *target = tree->get_selected(); if (target == nullptr) { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } if (!advanced->is_pressed() && target->get_script().is_null()) { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } void ConnectDialog::_notification(int p_what) { @@ -410,6 +411,7 @@ ConnectDialog::ConnectDialog() { tree = memnew(SceneTreeEditor(false)); tree->set_connecting_signal(true); + tree->set_show_enabled_subscene(true); tree->get_scene_tree()->connect("item_activated", callable_mp(this, &ConnectDialog::_item_activated)); tree->connect("node_selected", callable_mp(this, &ConnectDialog::_tree_node_selected)); tree->set_connect_to_script_mode(true); @@ -494,8 +496,8 @@ ConnectDialog::ConnectDialog() { error = memnew(AcceptDialog); add_child(error); error->set_title(TTR("Cannot connect signal")); - error->get_ok()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Connect")); + error->get_ok_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Connect")); } ConnectDialog::~ConnectDialog() { @@ -997,7 +999,7 @@ void ConnectionsDock::update_tree() { } if (!found) { - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *F = dd->class_list.find(base); while (F && descr == String()) { for (int i = 0; i < F->get().signals.size(); i++) { @@ -1006,7 +1008,7 @@ void ConnectionsDock::update_tree() { break; } } - if (!F->get().inherits.empty()) { + if (!F->get().inherits.is_empty()) { F = dd->class_list.find(F->get().inherits); } else { break; diff --git a/editor/connections_dialog.h b/editor/connections_dialog.h index 826c25895c..18feba0a61 100644 --- a/editor/connections_dialog.h +++ b/editor/connections_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 0f9c9bde7b..3a63100012 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -57,10 +57,10 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const St if (p_replace_mode) { set_title(vformat(TTR("Change %s Type"), base_type)); - get_ok()->set_text(TTR("Change")); + get_ok_button()->set_text(TTR("Change")); } else { set_title(vformat(TTR("Create New %s"), base_type)); - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); } _load_favorites_and_history(); @@ -195,7 +195,7 @@ void CreateDialog::_update_search() { } else { favorite->set_disabled(true); help_bit->set_text(""); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); search_options->deselect_all(); } } @@ -396,7 +396,7 @@ void CreateDialog::select_type(const String &p_type) { favorite->set_disabled(false); favorite->set_pressed(favorite_list.find(p_type) != -1); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } String CreateDialog::get_selected_type() { @@ -408,15 +408,15 @@ String CreateDialog::get_selected_type() { return selected->get_text(0); } -Object *CreateDialog::instance_selected() { +Variant CreateDialog::instance_selected() { TreeItem *selected = search_options->get_selected(); if (!selected) { - return nullptr; + return Variant(); } Variant md = selected->get_metadata(0); - Object *obj = nullptr; + Variant obj; if (md.get_type() != Variant::NIL) { String custom = md; if (ScriptServer::is_global_class(custom)) { @@ -434,13 +434,13 @@ Object *CreateDialog::instance_selected() { // Check if any Object-type property should be instantiated. List<PropertyInfo> pinfo; - obj->get_property_list(&pinfo); + ((Object *)obj)->get_property_list(&pinfo); for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { PropertyInfo pi = E->get(); if (pi.type == Variant::OBJECT && pi.usage & PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT) { Object *prop = ClassDB::instance(pi.class_name); - obj->set(pi.name, prop); + ((Object *)obj)->set(pi.name, prop); } } @@ -492,7 +492,7 @@ void CreateDialog::_favorite_selected() { } search_box->set_text(item->get_text(0).get_slicec(' ', 0)); - recent->unselect_all(); + recent->deselect_all(); _update_search(); } diff --git a/editor/create_dialog.h b/editor/create_dialog.h index 75a317275a..b08cb72f14 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -102,7 +102,7 @@ protected: void _save_and_update_favorite_list(); public: - Object *instance_selected(); + Variant instance_selected(); String get_selected_type(); void set_base_type(const String &p_base) { base_type = p_base; } diff --git a/editor/debugger/editor_debugger_inspector.cpp b/editor/debugger/editor_debugger_inspector.cpp index dcd7220ed0..6035cc072e 100644 --- a/editor/debugger/editor_debugger_inspector.cpp +++ b/editor/debugger/editor_debugger_inspector.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_debugger_inspector.h b/editor/debugger/editor_debugger_inspector.h index 7d13a4c362..cf2d81cbf1 100644 --- a/editor/debugger/editor_debugger_inspector.h +++ b/editor/debugger/editor_debugger_inspector.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index b461ac4f35..3ef9548727 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -55,8 +55,8 @@ EditorDebuggerNode::EditorDebuggerNode() { singleton = this; } - add_theme_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); - add_theme_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); + add_theme_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(SIDE_LEFT)); + add_theme_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(SIDE_RIGHT)); tabs = memnew(TabContainer); tabs->set_tab_align(TabContainer::ALIGN_LEFT); @@ -115,7 +115,7 @@ ScriptEditorDebugger *EditorDebuggerNode::_add_debugger() { tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("DebuggerPanel", "EditorStyles")); } - if (!debugger_plugins.empty()) { + if (!debugger_plugins.is_empty()) { for (Set<Ref<Script>>::Element *i = debugger_plugins.front(); i; i = i->next()) { node->add_debugger_plugin(i->get()); } @@ -140,7 +140,7 @@ void EditorDebuggerNode::_error_selected(const String &p_file, int p_line, int p void EditorDebuggerNode::_text_editor_stack_goto(const ScriptEditorDebugger *p_debugger) { const String file = p_debugger->get_stack_script_file(); - if (file.empty()) { + if (file.is_empty()) { return; } stack_script = ResourceLoader::load(file); @@ -226,12 +226,15 @@ void EditorDebuggerNode::_notification(int p_what) { switch (p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { if (tabs->get_tab_count() > 1) { - add_theme_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); - add_theme_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); + add_theme_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(SIDE_LEFT)); + add_theme_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(SIDE_RIGHT)); tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("DebuggerPanel", "EditorStyles")); } } break; + case NOTIFICATION_READY: { + _update_debug_options(); + } break; default: break; } @@ -385,7 +388,7 @@ void EditorDebuggerNode::set_script_debug_button(MenuButton *p_button) { 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/keep_debugger_open"), DEBUG_KEEP_DEBUGGER_OPEN); p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR); p->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option)); @@ -425,20 +428,33 @@ void EditorDebuggerNode::_menu_option(int p_id) { 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); + case DEBUG_KEEP_DEBUGGER_OPEN: { + bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN)); + hide_on_stop = ischecked; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN), !ischecked); + EditorSettings::get_singleton()->set_project_metadata("debug_options", "keep_debugger_open", !ischecked); } 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); + bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR)); + debug_with_external_editor = !ischecked; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), !ischecked); + EditorSettings::get_singleton()->set_project_metadata("debug_options", "debug_with_external_editor", !ischecked); } break; } } +void EditorDebuggerNode::_update_debug_options() { + bool keep_debugger_open = EditorSettings::get_singleton()->get_project_metadata("debug_options", "keep_debugger_open", false); + bool debug_with_external_editor = EditorSettings::get_singleton()->get_project_metadata("debug_options", "debug_with_external_editor", false); + + if (keep_debugger_open) { + _menu_option(DEBUG_KEEP_DEBUGGER_OPEN); + } + if (debug_with_external_editor) { + _menu_option(DEBUG_WITH_EXTERNAL_EDITOR); + } +} + void EditorDebuggerNode::_paused() { const bool paused = EditorNode::get_singleton()->get_pause_button()->is_pressed(); _for_all(tabs, [&](ScriptEditorDebugger *dbg) { diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h index 8d70a7f961..3510ac0726 100644 --- a/editor/debugger/editor_debugger_node.h +++ b/editor/debugger/editor_debugger_node.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -60,7 +60,7 @@ private: DEBUG_STEP, DEBUG_BREAK, DEBUG_CONTINUE, - DEBUG_SHOW_KEEP_OPEN, + DEBUG_KEEP_DEBUGGER_OPEN, DEBUG_WITH_EXTERNAL_EDITOR, }; @@ -133,6 +133,7 @@ protected: void _paused(); void _break_state_changed(); void _menu_option(int p_id); + void _update_debug_options(); protected: void _notification(int p_what); diff --git a/editor/debugger/editor_debugger_server.cpp b/editor/debugger/editor_debugger_server.cpp index 0b655044a8..4add891bcb 100644 --- a/editor/debugger/editor_debugger_server.cpp +++ b/editor/debugger/editor_debugger_server.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_debugger_server.h b/editor/debugger/editor_debugger_server.h index 3ad9d3a9a9..6458421e7a 100644 --- a/editor/debugger/editor_debugger_server.h +++ b/editor/debugger/editor_debugger_server.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp index ebac9b3482..6db3b94aee 100644 --- a/editor/debugger/editor_debugger_tree.cpp +++ b/editor/debugger/editor_debugger_tree.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -242,7 +242,7 @@ void EditorDebuggerTree::_item_menu_id_pressed(int p_option) { } break; case ITEM_MENU_COPY_NODE_PATH: { String text = get_selected_path(); - if (text.empty()) { + if (text.is_empty()) { return; } else if (text == "/root") { text = "."; diff --git a/editor/debugger/editor_debugger_tree.h b/editor/debugger/editor_debugger_tree.h index 5ec1423c07..8c966dffd5 100644 --- a/editor/debugger/editor_debugger_tree.h +++ b/editor/debugger/editor_debugger_tree.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_network_profiler.cpp b/editor/debugger/editor_network_profiler.cpp index baa88bcdbc..d541fdd249 100644 --- a/editor/debugger/editor_network_profiler.cpp +++ b/editor/debugger/editor_network_profiler.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_network_profiler.h b/editor/debugger/editor_network_profiler.h index cf65fb5316..8c1da1cb2d 100644 --- a/editor/debugger/editor_network_profiler.h +++ b/editor/debugger/editor_network_profiler.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp index 47fe282758..33d08a2f6b 100644 --- a/editor/debugger/editor_performance_profiler.cpp +++ b/editor/debugger/editor_performance_profiler.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -82,10 +82,10 @@ String EditorPerformanceProfiler::_create_label(float p_value, Performance::Moni return String::humanize_size(p_value); } case Performance::MONITOR_TYPE_TIME: { - return rtos(p_value * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos(p_value * 1000).pad_decimals(2)) + " " + RTR("ms"); } default: { - return rtos(p_value); + return TS->format_number(rtos(p_value)); } } } @@ -102,7 +102,7 @@ void EditorPerformanceProfiler::_monitor_draw() { } } - if (active.empty()) { + if (active.is_empty()) { info_message->show(); return; } @@ -111,6 +111,7 @@ void EditorPerformanceProfiler::_monitor_draw() { Ref<StyleBox> graph_style_box = get_theme_stylebox("normal", "TextEdit"); Ref<Font> graph_font = get_theme_font("font", "TextEdit"); + int font_size = get_theme_font_size("font_size", "TextEdit"); int columns = int(Math::ceil(Math::sqrt(float(active.size())))); int rows = int(Math::ceil(float(active.size()) / float(columns))); @@ -131,19 +132,19 @@ void EditorPerformanceProfiler::_monitor_draw() { rect.size -= graph_style_box->get_minimum_size(); Color draw_color = get_theme_color("accent_color", "Editor"); draw_color.set_hsv(Math::fmod(hue_shift * float(current.frame_index), 0.9f), draw_color.get_s() * 0.9f, draw_color.get_v() * value_multiplier, 0.6f); - monitor_draw->draw_string(graph_font, rect.position + Point2(0, graph_font->get_ascent()), current.item->get_text(0), draw_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + Point2(0, graph_font->get_ascent(font_size)), current.item->get_text(0), HALIGN_LEFT, rect.size.x, font_size, draw_color); draw_color.a = 0.9f; - float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1)).width; + float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1), font_size).width; if (value_position < 0) { value_position = 0; } - monitor_draw->draw_string(graph_font, rect.position + Point2(value_position, graph_font->get_ascent()), current.item->get_text(1), draw_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + Point2(value_position, graph_font->get_ascent(font_size)), current.item->get_text(1), HALIGN_LEFT, rect.size.x, font_size, draw_color); - rect.position.y += graph_font->get_height(); - rect.size.height -= graph_font->get_height(); + rect.position.y += graph_font->get_height(font_size); + rect.size.height -= graph_font->get_height(font_size); - int line_count = rect.size.height / (graph_font->get_height() * 2); + int line_count = rect.size.height / (graph_font->get_height(font_size) * 2); if (line_count > 5) { line_count = 5; } @@ -151,12 +152,12 @@ void EditorPerformanceProfiler::_monitor_draw() { Color horizontal_line_color; horizontal_line_color.set_hsv(draw_color.get_h(), draw_color.get_s() * 0.5f, draw_color.get_v() * 0.5f, 0.3f); monitor_draw->draw_line(rect.position, rect.position + Vector2(rect.size.width, 0), horizontal_line_color, Math::round(EDSCALE)); - monitor_draw->draw_string(graph_font, rect.position + Vector2(0, graph_font->get_ascent()), _create_label(current.max, current.type), horizontal_line_color, rect.size.width); + monitor_draw->draw_string(graph_font, rect.position + Vector2(0, graph_font->get_ascent(font_size)), _create_label(current.max, current.type), HALIGN_LEFT, rect.size.width, font_size, horizontal_line_color); for (int j = 0; j < line_count; j++) { Vector2 y_offset = Vector2(0, rect.size.height * (1.0f - float(j) / float(line_count))); monitor_draw->draw_line(rect.position + y_offset, rect.position + Vector2(rect.size.width, 0) + y_offset, horizontal_line_color, Math::round(EDSCALE)); - monitor_draw->draw_string(graph_font, rect.position - Vector2(0, graph_font->get_descent()) + y_offset, _create_label(current.max * float(j) / float(line_count), current.type), horizontal_line_color, rect.size.width); + monitor_draw->draw_string(graph_font, rect.position - Vector2(0, graph_font->get_descent(font_size)) + y_offset, _create_label(current.max * float(j) / float(line_count), current.type), HALIGN_LEFT, rect.size.width, font_size, horizontal_line_color); } } @@ -182,7 +183,7 @@ void EditorPerformanceProfiler::_monitor_draw() { monitor_draw->draw_line(rect.position + Point2(from, 0), rect.position + Point2(from, rect.size.y), line_color, Math::round(EDSCALE)); String label = _create_label(e->get(), current.type); - Size2 size = graph_font->get_string_size(label); + Size2 size = graph_font->get_string_size(label, font_size); Vector2 text_top_left_position = Vector2(from, h2) - (size + Vector2(MARKER_MARGIN, MARKER_MARGIN)); if (text_top_left_position.x < 0) { text_top_left_position.x = from + MARKER_MARGIN; @@ -190,7 +191,7 @@ void EditorPerformanceProfiler::_monitor_draw() { if (text_top_left_position.y < 0) { text_top_left_position.y = h2 + MARKER_MARGIN; } - monitor_draw->draw_string(graph_font, rect.position + text_top_left_position + Point2(0, graph_font->get_ascent()), label, line_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + text_top_left_position + Point2(0, graph_font->get_ascent(font_size)), label, HALIGN_LEFT, rect.size.x, font_size, line_color); } prev = h2; e = e->next(); @@ -216,7 +217,7 @@ void EditorPerformanceProfiler::_build_monitor_tree() { TreeItem *item = _create_monitor_item(i.value().name, base); item->set_checked(0, monitor_checked.has(i.key())); i.value().item = item; - if (!i.value().history.empty()) { + if (!i.value().history.is_empty()) { i.value().update_value(i.value().history.front()->get()); } } @@ -381,7 +382,7 @@ EditorPerformanceProfiler::EditorPerformanceProfiler() { 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); + info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); monitor_draw->add_child(info_message); for (int i = 0; i < Performance::MONITOR_MAX; i++) { diff --git a/editor/debugger/editor_performance_profiler.h b/editor/debugger/editor_performance_profiler.h index 554a0650b8..ea3404b208 100644 --- a/editor/debugger/editor_performance_profiler.h +++ b/editor/debugger/editor_performance_profiler.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp index 8bd21fff5c..9304b116d0 100644 --- a/editor/debugger/editor_profiler.cpp +++ b/editor/debugger/editor_profiler.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -103,19 +103,19 @@ static String _get_percent_txt(float p_value, float p_total) { p_total = 0.00001; } - return String::num((p_value / p_total) * 100, 1) + "%"; + return TS->format_number(String::num((p_value / p_total) * 100, 1)) + TS->percent_sign(); } String EditorProfiler::_get_time_as_text(const Metric &m, float p_time, int p_calls) { const int dmode = display_mode->get_selected(); if (dmode == DISPLAY_FRAME_TIME) { - return rtos(p_time * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos(p_time * 1000).pad_decimals(2)) + " " + RTR("ms"); } else if (dmode == DISPLAY_AVERAGE_TIME) { if (p_calls == 0) { - return "0.00 ms"; + return TS->format_number("0.00") + " " + RTR("ms"); } else { - return rtos((p_time / p_calls) * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos((p_time / p_calls) * 1000).pad_decimals(2)) + " " + RTR("ms"); } } else if (dmode == DISPLAY_FRAME_PERCENT) { return _get_percent_txt(p_time, m.frame_time); @@ -423,7 +423,7 @@ void EditorProfiler::_clear_pressed() { } void EditorProfiler::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { activate->set_icon(get_theme_icon("Play", "EditorIcons")); clear_button->set_icon(get_theme_icon("Clear", "EditorIcons")); } @@ -596,7 +596,7 @@ bool EditorProfiler::is_profiling() { Vector<Vector<String>> EditorProfiler::get_data_as_csv() const { Vector<Vector<String>> res; - if (frame_metrics.empty()) { + if (frame_metrics.is_empty()) { return res; } diff --git a/editor/debugger/editor_profiler.h b/editor/debugger/editor_profiler.h index aa2ef58db4..e16bde41f6 100644 --- a/editor/debugger/editor_profiler.h +++ b/editor/debugger/editor_profiler.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -45,27 +45,27 @@ class EditorProfiler : public VBoxContainer { public: struct Metric { - bool valid; + bool valid = false; - int frame_number; - float frame_time; - float idle_time; - float physics_time; - float physics_frame_time; + int frame_number = 0; + float frame_time = 0; + float idle_time = 0; + float physics_time = 0; + float physics_frame_time = 0; struct Category { StringName signature; String name; - float total_time; //total for category + float total_time = 0; //total for category struct Item { StringName signature; String name; String script; - int line; - float self; - float total; - int calls; + int line = 0; + float self = 0; + float total = 0; + int calls = 0; }; Vector<Item> items; @@ -75,11 +75,6 @@ public: Map<StringName, Category *> category_ptrs; Map<StringName, Category::Item *> item_ptrs; - - Metric() { - valid = false; - frame_number = 0; - } }; enum DisplayMode { diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp index 81b42da08e..d825a980c7 100644 --- a/editor/debugger/editor_visual_profiler.cpp +++ b/editor/debugger/editor_visual_profiler.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -114,9 +114,9 @@ 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"; + return TS->format_number(rtos(p_time)) + " " + RTR("ms"); } else if (dmode == DISPLAY_FRAME_PERCENT) { - return String::num(p_time * 100 / graph_limit, 2) + "%"; + return TS->format_number(String::num(p_time * 100 / graph_limit, 2)) + " " + TS->percent_sign(); } return "err"; @@ -423,8 +423,12 @@ void EditorVisualProfiler::_clear_pressed() { } void EditorVisualProfiler::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { - activate->set_icon(get_theme_icon("Play", "EditorIcons")); + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { + if (is_layout_rtl()) { + activate->set_icon(get_theme_icon("PlayBackwards", "EditorIcons")); + } else { + activate->set_icon(get_theme_icon("Play", "EditorIcons")); + } clear_button->set_icon(get_theme_icon("Clear", "EditorIcons")); } } @@ -434,6 +438,7 @@ void EditorVisualProfiler::_graph_tex_draw() { return; } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "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); @@ -457,7 +462,7 @@ void EditorVisualProfiler::_graph_tex_draw() { 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)); + graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.6)); } if (graph_height_gpu > 0) { @@ -468,15 +473,14 @@ void EditorVisualProfiler::_graph_tex_draw() { 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(half_width * 2 - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HALIGN_LEFT, -1, font_size, 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)); + graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x, font->get_ascent(font_size) + 2), "CPU:", HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.8)); + graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x + graph->get_size().width / 2, font->get_ascent(font_size) + 2), "GPU:", HALIGN_LEFT, -1, font_size, 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) @@ -662,7 +666,7 @@ bool EditorVisualProfiler::is_profiling() { Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { Vector<Vector<String>> res; #if 0 - if (frame_metrics.empty()) { + if (frame_metrics.is_empty()) { return res; } @@ -671,7 +675,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { 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); @@ -688,7 +691,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { int index = last_metric; for (int i = 0; i < frame_metrics.size(); i++) { - ++index; if (index >= frame_metrics.size()) { @@ -702,7 +704,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { 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); diff --git a/editor/debugger/editor_visual_profiler.h b/editor/debugger/editor_visual_profiler.h index 3c1a55dc38..6b04fdbafc 100644 --- a/editor/debugger/editor_visual_profiler.h +++ b/editor/debugger/editor_visual_profiler.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -46,9 +46,9 @@ class EditorVisualProfiler : public VBoxContainer { public: struct Metric { - bool valid; + bool valid = false; - uint64_t frame_number; + uint64_t frame_number = 0; struct Area { String name; @@ -59,10 +59,6 @@ public: }; Vector<Area> areas; - - Metric() { - valid = false; - } }; enum DisplayTimeMode { diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index fd33115cda..be2b98bf1a 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -490,17 +490,17 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da if (oe.callstack.size() > 0) { // If available, use the script's stack in the error title. error_title = oe.callstack[oe.callstack.size() - 1].func + ": "; - } else if (!oe.source_func.empty()) { + } else if (!oe.source_func.is_empty()) { // Otherwise try to use the C++ source function. 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_title += oe.error_descr.is_empty() ? oe.error : oe.error_descr; error->set_text(1, error_title); tooltip += " " + error_title + "\n"; - if (!oe.error_descr.empty()) { + if (!oe.error_descr.is_empty()) { // Add item for C++ error condition. TreeItem *cpp_cond = error_tree->create_item(error); cpp_cond->set_text(0, "<" + TTR("C++ Error") + ">"); @@ -516,7 +516,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da // 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()) { + if (!oe.source_func.is_empty()) { source_txt += " @ " + oe.source_func + "()"; } @@ -802,8 +802,8 @@ void ScriptEditorDebugger::_notification(int p_what) { msg.push_back(true); msg.push_back(cam->get_fov()); } - msg.push_back(cam->get_znear()); - msg.push_back(cam->get_zfar()); + msg.push_back(cam->get_near()); + msg.push_back(cam->get_far()); _put_msg("scene:override_camera_3D:transform", msg); } } diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h index 56b34e8e8c..e5fb3c35a9 100644 --- a/editor/debugger/script_editor_debugger.h +++ b/editor/debugger/script_editor_debugger.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 5e87f866d8..2780b74469 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -448,15 +448,15 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector< Vector<RemovedDependency> removed_deps; _find_all_removed_dependencies(EditorFileSystem::get_singleton()->get_filesystem(), removed_deps); removed_deps.sort(); - if (removed_deps.empty()) { + if (removed_deps.is_empty()) { owners->hide(); - text->set_text(TTR("Remove selected files from the project? (Can't be restored)")); + text->set_text(TTR("Remove selected files from the project? (no undo)\nYou can find the removed files in the system trash to restore them.")); set_size(Size2()); popup_centered(); } else { _build_removed_dependency_tree(removed_deps); owners->show(); - text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)")); + text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)\nYou can find the removed files in the system trash to restore them.")); popup_centered(Size2(500, 350)); } EditorFileSystem::get_singleton()->scan_changes(); @@ -553,7 +553,7 @@ void DependencyRemoveDialog::_bind_methods() { } DependencyRemoveDialog::DependencyRemoveDialog() { - get_ok()->set_text(TTR("Remove")); + get_ok_button()->set_text(TTR("Remove")); VBoxContainer *vb = memnew(VBoxContainer); add_child(vb); @@ -619,13 +619,15 @@ DependencyErrorDialog::DependencyErrorDialog() { files->set_v_size_flags(Control::SIZE_EXPAND_FILL); set_min_size(Size2(500, 220) * EDSCALE); - get_ok()->set_text(TTR("Open Anyway")); - get_cancel()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Open Anyway")); + get_cancel_button()->set_text(TTR("Close")); text = memnew(Label); vb->add_child(text); text->set_text(TTR("Which action should be taken?")); + mode = Mode::MODE_RESOURCE; + fdep = add_button(TTR("Fix Dependencies"), true, "fixdeps"); set_title(TTR("Errors loading!")); @@ -637,7 +639,7 @@ void OrphanResourcesDialog::ok_pressed() { paths.clear(); _find_to_delete(files->get_root(), paths); - if (paths.empty()) { + if (paths.is_empty()) { return; } @@ -754,7 +756,7 @@ void OrphanResourcesDialog::_bind_methods() { OrphanResourcesDialog::OrphanResourcesDialog() { set_title(TTR("Orphan Resource Explorer")); delete_confirm = memnew(ConfirmationDialog); - get_ok()->set_text(TTR("Delete")); + get_ok_button()->set_text(TTR("Delete")); add_child(delete_confirm); dep_edit = memnew(DependencyEditor); add_child(dep_edit); diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h index 5d2ae582e6..b17a685df8 100644 --- a/editor/dependency_editor.h +++ b/editor/dependency_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -111,8 +111,8 @@ class DependencyRemoveDialog : public ConfirmationDialog { String dependency_folder; bool operator<(const RemovedDependency &p_other) const { - if (dependency_folder.empty() != p_other.dependency_folder.empty()) { - return p_other.dependency_folder.empty(); + if (dependency_folder.is_empty() != p_other.dependency_folder.is_empty()) { + return p_other.dependency_folder.is_empty(); } else { return dependency < p_other.dependency; } diff --git a/editor/dictionary_property_edit.cpp b/editor/dictionary_property_edit.cpp index 276cd12ded..9683003d89 100644 --- a/editor/dictionary_property_edit.cpp +++ b/editor/dictionary_property_edit.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/dictionary_property_edit.h b/editor/dictionary_property_edit.h index 5c97b94d9f..564bbf205b 100644 --- a/editor/dictionary_property_edit.h +++ b/editor/dictionary_property_edit.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/doc_data.h b/editor/doc_data.h deleted file mode 100644 index 2cb475d137..0000000000 --- a/editor/doc_data.h +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************/ -/* doc_data.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 DOC_DATA_H -#define DOC_DATA_H - -#include "core/io/xml_parser.h" -#include "core/templates/map.h" -#include "core/variant/variant.h" - -class DocData { -public: - struct ArgumentDoc { - String name; - String type; - String enumeration; - String default_value; - bool operator<(const ArgumentDoc &p_arg) const { - if (name == p_arg.name) { - return type < p_arg.type; - } - return name < p_arg.name; - } - }; - - struct MethodDoc { - String name; - String return_type; - String return_enum; - String qualifiers; - String description; - Vector<ArgumentDoc> arguments; - bool operator<(const MethodDoc &p_method) const { - if (name == p_method.name) { - // Must be a constructor since there is no overloading. - // We want this arbitrary order for a class "Foo": - // - 1. Default constructor: Foo() - // - 2. Copy constructor: Foo(Foo) - // - 3+. Other constructors Foo(Bar, ...) based on first argument's name - if (arguments.size() == 0 || p_method.arguments.size() == 0) { // 1. - return arguments.size() < p_method.arguments.size(); - } - if (arguments[0].type == return_type || p_method.arguments[0].type == p_method.return_type) { // 2. - return (arguments[0].type == return_type) || (p_method.arguments[0].type != p_method.return_type); - } - return arguments[0] < p_method.arguments[0]; - } - return name < p_method.name; - } - }; - - struct ConstantDoc { - String name; - String value; - bool is_value_valid; - String enumeration; - String description; - bool operator<(const ConstantDoc &p_const) const { - return name < p_const.name; - } - }; - - struct PropertyDoc { - String name; - String type; - String enumeration; - String description; - String setter, getter; - String default_value; - bool overridden = false; - bool operator<(const PropertyDoc &p_prop) const { - return name < p_prop.name; - } - }; - - struct TutorialDoc { - String link; - String title; - }; - - struct ClassDoc { - String name; - String inherits; - String category; - String brief_description; - String description; - Vector<TutorialDoc> tutorials; - Vector<MethodDoc> methods; - Vector<MethodDoc> signals; - Vector<ConstantDoc> constants; - Vector<PropertyDoc> properties; - Vector<PropertyDoc> theme_properties; - bool operator<(const ClassDoc &p_class) const { - return name < p_class.name; - } - }; - - String version; - - Map<String, ClassDoc> class_list; - Error _load(Ref<XMLParser> parser); - -public: - void merge_from(const DocData &p_data); - void remove_from(const DocData &p_data); - void generate(bool p_basic_types = false); - Error load_classes(const String &p_dir); - static Error erase_classes(const String &p_dir); - Error save_classes(const String &p_default_path, const Map<String, String> &p_class_path); - - Error load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size); -}; - -#endif // DOC_DATA_H diff --git a/editor/doc_data.cpp b/editor/doc_tools.cpp index 8504d61d2f..47ea8cbe2a 100644 --- a/editor/doc_data.cpp +++ b/editor/doc_tools.cpp @@ -1,12 +1,12 @@ /*************************************************************************/ -/* doc_data.cpp */ +/* doc_tools.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). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -28,7 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "doc_data.h" +#include "doc_tools.h" #include "core/config/engine.h" #include "core/config/project_settings.h" @@ -43,22 +43,22 @@ // Used for a hack preserving Mono properties on non-Mono builds. #include "modules/modules_enabled.gen.h" -void DocData::merge_from(const DocData &p_data) { - for (Map<String, ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { - ClassDoc &c = E->get(); +void DocTools::merge_from(const DocTools &p_data) { + for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { + DocData::ClassDoc &c = E->get(); if (!p_data.class_list.has(c.name)) { continue; } - const ClassDoc &cf = p_data.class_list[c.name]; + const DocData::ClassDoc &cf = p_data.class_list[c.name]; c.description = cf.description; c.brief_description = cf.brief_description; c.tutorials = cf.tutorials; for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods.write[i]; + DocData::MethodDoc &m = c.methods.write[i]; for (int j = 0; j < cf.methods.size(); j++) { if (cf.methods[j].name != m.name) { @@ -95,7 +95,7 @@ void DocData::merge_from(const DocData &p_data) { continue; } - const MethodDoc &mf = cf.methods[j]; + const DocData::MethodDoc &mf = cf.methods[j]; m.description = mf.description; break; @@ -103,13 +103,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals.write[i]; + DocData::MethodDoc &m = c.signals.write[i]; for (int j = 0; j < cf.signals.size(); j++) { if (cf.signals[j].name != m.name) { continue; } - const MethodDoc &mf = cf.signals[j]; + const DocData::MethodDoc &mf = cf.signals[j]; m.description = mf.description; break; @@ -117,13 +117,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &m = c.constants.write[i]; + DocData::ConstantDoc &m = c.constants.write[i]; for (int j = 0; j < cf.constants.size(); j++) { if (cf.constants[j].name != m.name) { continue; } - const ConstantDoc &mf = cf.constants[j]; + const DocData::ConstantDoc &mf = cf.constants[j]; m.description = mf.description; break; @@ -131,13 +131,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.properties.size(); i++) { - PropertyDoc &p = c.properties.write[i]; + DocData::PropertyDoc &p = c.properties.write[i]; for (int j = 0; j < cf.properties.size(); j++) { if (cf.properties[j].name != p.name) { continue; } - const PropertyDoc &pf = cf.properties[j]; + const DocData::PropertyDoc &pf = cf.properties[j]; p.description = pf.description; break; @@ -145,13 +145,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties.write[i]; + DocData::PropertyDoc &p = c.theme_properties.write[i]; for (int j = 0; j < cf.theme_properties.size(); j++) { if (cf.theme_properties[j].name != p.name) { continue; } - const PropertyDoc &pf = cf.theme_properties[j]; + const DocData::PropertyDoc &pf = cf.theme_properties[j]; p.description = pf.description; break; @@ -177,57 +177,29 @@ void DocData::merge_from(const DocData &p_data) { } } -void DocData::remove_from(const DocData &p_data) { - for (Map<String, ClassDoc>::Element *E = p_data.class_list.front(); E; E = E->next()) { +void DocTools::remove_from(const DocTools &p_data) { + for (Map<String, DocData::ClassDoc>::Element *E = p_data.class_list.front(); E; E = E->next()) { if (class_list.has(E->key())) { class_list.erase(E->key()); } } } -static void return_doc_from_retinfo(DocData::MethodDoc &p_method, const PropertyInfo &p_retinfo) { - if (p_retinfo.type == Variant::INT && p_retinfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { - p_method.return_enum = p_retinfo.class_name; - if (p_method.return_enum.begins_with("_")) { //proxy class - p_method.return_enum = p_method.return_enum.substr(1, p_method.return_enum.length()); - } - p_method.return_type = "int"; - } else if (p_retinfo.class_name != StringName()) { - p_method.return_type = p_retinfo.class_name; - } else if (p_retinfo.type == Variant::ARRAY && p_retinfo.hint == PROPERTY_HINT_ARRAY_TYPE) { - p_method.return_type = p_retinfo.hint_string + "[]"; - } else if (p_retinfo.hint == PROPERTY_HINT_RESOURCE_TYPE) { - p_method.return_type = p_retinfo.hint_string; - } else if (p_retinfo.type == Variant::NIL && p_retinfo.usage & PROPERTY_USAGE_NIL_IS_VARIANT) { - p_method.return_type = "Variant"; - } else if (p_retinfo.type == Variant::NIL) { - p_method.return_type = "void"; - } else { - p_method.return_type = Variant::get_type_name(p_retinfo.type); - } +void DocTools::add_doc(const DocData::ClassDoc &p_class_doc) { + ERR_FAIL_COND(p_class_doc.name == ""); + class_list[p_class_doc.name] = p_class_doc; } -static void argument_doc_from_arginfo(DocData::ArgumentDoc &p_argument, const PropertyInfo &p_arginfo) { - p_argument.name = p_arginfo.name; +void DocTools::remove_doc(const String &p_class_name) { + ERR_FAIL_COND(p_class_name == "" || !class_list.has(p_class_name)); + class_list.erase(p_class_name); +} - if (p_arginfo.type == Variant::INT && p_arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { - p_argument.enumeration = p_arginfo.class_name; - if (p_argument.enumeration.begins_with("_")) { //proxy class - p_argument.enumeration = p_argument.enumeration.substr(1, p_argument.enumeration.length()); - } - p_argument.type = "int"; - } else if (p_arginfo.class_name != StringName()) { - p_argument.type = p_arginfo.class_name; - } else if (p_arginfo.type == Variant::ARRAY && p_arginfo.hint == PROPERTY_HINT_ARRAY_TYPE) { - p_argument.type = p_arginfo.hint_string + "[]"; - } else if (p_arginfo.hint == PROPERTY_HINT_RESOURCE_TYPE) { - p_argument.type = p_arginfo.hint_string; - } else if (p_arginfo.type == Variant::NIL) { - // Parameters cannot be void, so PROPERTY_USAGE_NIL_IS_VARIANT is not necessary - p_argument.type = "Variant"; - } else { - p_argument.type = Variant::get_type_name(p_arginfo.type); +bool DocTools::has_doc(const String &p_class_name) { + if (p_class_name == "") { + return false; } + return class_list.has(p_class_name); } static Variant get_documentation_default_value(const StringName &p_class_name, const StringName &p_property_name, bool &r_default_value_valid) { @@ -253,7 +225,7 @@ static Variant get_documentation_default_value(const StringName &p_class_name, c return default_value; } -void DocData::generate(bool p_basic_types) { +void DocTools::generate(bool p_basic_types) { List<StringName> classes; ClassDB::get_class_list(&classes); classes.sort_custom<StringName::AlphCompare>(); @@ -277,8 +249,8 @@ void DocData::generate(bool p_basic_types) { cname = cname.substr(1, name.length()); } - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; c.inherits = ClassDB::get_parent_class(name); @@ -305,7 +277,7 @@ void DocData::generate(bool p_basic_types) { continue; } - PropertyDoc prop; + DocData::PropertyDoc prop; prop.name = E->get().name; @@ -409,7 +381,7 @@ void DocData::generate(bool p_basic_types) { } } - MethodDoc method; + DocData::MethodDoc method; method.name = E->get().name; @@ -432,12 +404,12 @@ void DocData::generate(bool p_basic_types) { for (int i = -1; i < E->get().arguments.size(); i++) { if (i == -1) { #ifdef DEBUG_METHODS_ENABLED - return_doc_from_retinfo(method, E->get().return_val); + DocData::return_doc_from_retinfo(method, E->get().return_val); #endif } else { const PropertyInfo &arginfo = E->get().arguments[i]; - ArgumentDoc argument; - argument_doc_from_arginfo(argument, arginfo); + DocData::ArgumentDoc argument; + DocData::argument_doc_from_arginfo(argument, arginfo); int darg_idx = i - (E->get().arguments.size() - E->get().default_arguments.size()); if (darg_idx >= 0) { @@ -457,12 +429,12 @@ void DocData::generate(bool p_basic_types) { if (signal_list.size()) { for (List<MethodInfo>::Element *EV = signal_list.front(); EV; EV = EV->next()) { - MethodDoc signal; + DocData::MethodDoc signal; signal.name = EV->get().name; for (int i = 0; i < EV->get().arguments.size(); i++) { const PropertyInfo &arginfo = EV->get().arguments[i]; - ArgumentDoc argument; - argument_doc_from_arginfo(argument, arginfo); + DocData::ArgumentDoc argument; + DocData::argument_doc_from_arginfo(argument, arginfo); signal.arguments.push_back(argument); } @@ -475,7 +447,7 @@ void DocData::generate(bool p_basic_types) { ClassDB::get_integer_constant_list(name, &constant_list, true); for (List<String>::Element *E = constant_list.front(); E; E = E->next()) { - ConstantDoc constant; + DocData::ConstantDoc constant; constant.name = E->get(); constant.value = itos(ClassDB::get_integer_constant(name, E->get())); constant.is_value_valid = true; @@ -489,7 +461,7 @@ void DocData::generate(bool p_basic_types) { List<StringName> l; Theme::get_default()->get_constant_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "int"; pd.default_value = itos(Theme::get_default()->get_constant(E->get(), cname)); @@ -499,7 +471,7 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_color_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Color"; pd.default_value = Variant(Theme::get_default()->get_color(E->get(), cname)).get_construct_string(); @@ -509,7 +481,7 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_icon_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Texture2D"; c.theme_properties.push_back(pd); @@ -517,15 +489,23 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_font_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Font"; c.theme_properties.push_back(pd); } l.clear(); + Theme::get_default()->get_font_size_list(cname, &l); + for (List<StringName>::Element *E = l.front(); E; E = E->next()) { + DocData::PropertyDoc pd; + pd.name = E->get(); + pd.type = "int"; + c.theme_properties.push_back(pd); + } + l.clear(); Theme::get_default()->get_stylebox_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "StyleBox"; c.theme_properties.push_back(pd); @@ -537,7 +517,7 @@ void DocData::generate(bool p_basic_types) { { // So we can document the concept of Variant even if it's not a usable class per se. - class_list["Variant"] = ClassDoc(); + class_list["Variant"] = DocData::ClassDoc(); class_list["Variant"].name = "Variant"; } @@ -556,8 +536,8 @@ void DocData::generate(bool p_basic_types) { String cname = Variant::get_type_name(Variant::Type(i)); - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; Callable::CallError cerror; @@ -634,7 +614,7 @@ void DocData::generate(bool p_basic_types) { for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) { MethodInfo &mi = E->get(); - MethodDoc method; + DocData::MethodDoc method; method.name = mi.name; if (method.name == cname) { @@ -645,8 +625,8 @@ void DocData::generate(bool p_basic_types) { for (int j = 0; j < mi.arguments.size(); j++) { PropertyInfo arginfo = mi.arguments[j]; - ArgumentDoc ad; - argument_doc_from_arginfo(ad, mi.arguments[j]); + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, mi.arguments[j]); ad.name = arginfo.name; int darg_idx = mi.default_arguments.size() - mi.arguments.size() + j; @@ -658,7 +638,7 @@ void DocData::generate(bool p_basic_types) { method.arguments.push_back(ad); } - return_doc_from_retinfo(method, mi.return_val); + DocData::return_doc_from_retinfo(method, mi.return_val); if (mi.flags & METHOD_FLAG_VARARG) { if (method.qualifiers != "") { @@ -674,7 +654,7 @@ void DocData::generate(bool p_basic_types) { v.get_property_list(&properties); for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { PropertyInfo pi = E->get(); - PropertyDoc property; + DocData::PropertyDoc property; property.name = pi.name; property.type = Variant::get_type_name(pi.type); property.default_value = v.get(pi.name).get_construct_string(); @@ -686,7 +666,7 @@ void DocData::generate(bool p_basic_types) { Variant::get_constants_for_type(Variant::Type(i), &constants); for (List<StringName>::Element *E = constants.front(); E; E = E->next()) { - ConstantDoc constant; + DocData::ConstantDoc constant; constant.name = E->get(); Variant value = Variant::get_constant_value(Variant::Type(i), E->get()); constant.value = value.get_type() == Variant::INT ? itos(value) : value.get_construct_string(); @@ -699,12 +679,12 @@ void DocData::generate(bool p_basic_types) { { String cname = "@GlobalScope"; - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; for (int i = 0; i < CoreConstants::get_global_constant_count(); i++) { - ConstantDoc cd; + DocData::ConstantDoc cd; cd.name = CoreConstants::get_global_constant_name(i); if (!CoreConstants::get_ignore_value_in_docs(i)) { cd.value = itos(CoreConstants::get_global_constant_value(i)); @@ -721,7 +701,7 @@ void DocData::generate(bool p_basic_types) { //servers (this is kind of hackish) for (List<Engine::Singleton>::Element *E = singletons.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; Engine::Singleton &s = E->get(); if (!s.ptr) { continue; @@ -741,7 +721,7 @@ void DocData::generate(bool p_basic_types) { Variant::get_utility_function_list(&utility_functions); utility_functions.sort_custom<StringName::AlphCompare>(); for (List<StringName>::Element *E = utility_functions.front(); E; E = E->next()) { - MethodDoc md; + DocData::MethodDoc md; md.name = E->get(); //return if (Variant::has_utility_function_return_value(E->get())) { @@ -751,7 +731,7 @@ void DocData::generate(bool p_basic_types) { pi.usage = PROPERTY_USAGE_NIL_IS_VARIANT; } DocData::ArgumentDoc ad; - argument_doc_from_arginfo(ad, pi); + DocData::argument_doc_from_arginfo(ad, pi); md.return_type = ad.type; } @@ -766,7 +746,7 @@ void DocData::generate(bool p_basic_types) { pi.usage = PROPERTY_USAGE_NIL_IS_VARIANT; } DocData::ArgumentDoc ad; - argument_doc_from_arginfo(ad, pi); + DocData::argument_doc_from_arginfo(ad, pi); md.arguments.push_back(ad); } } @@ -783,7 +763,7 @@ void DocData::generate(bool p_basic_types) { for (int i = 0; i < ScriptServer::get_language_count(); i++) { ScriptLanguage *lang = ScriptServer::get_language(i); String cname = "@" + lang->get_name(); - ClassDoc c; + DocData::ClassDoc c; c.name = cname; // Get functions. @@ -792,7 +772,7 @@ void DocData::generate(bool p_basic_types) { for (List<MethodInfo>::Element *E = minfo.front(); E; E = E->next()) { MethodInfo &mi = E->get(); - MethodDoc md; + DocData::MethodDoc md; md.name = mi.name; if (mi.flags & METHOD_FLAG_VARARG) { @@ -802,11 +782,11 @@ void DocData::generate(bool p_basic_types) { md.qualifiers += "vararg"; } - return_doc_from_retinfo(md, mi.return_val); + DocData::return_doc_from_retinfo(md, mi.return_val); for (int j = 0; j < mi.arguments.size(); j++) { - ArgumentDoc ad; - argument_doc_from_arginfo(ad, mi.arguments[j]); + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, mi.arguments[j]); int darg_idx = j - (mi.arguments.size() - mi.default_arguments.size()); if (darg_idx >= 0) { @@ -825,7 +805,7 @@ void DocData::generate(bool p_basic_types) { lang->get_public_constants(&cinfo); for (List<Pair<String, Variant>>::Element *E = cinfo.front(); E; E = E->next()) { - ConstantDoc cd; + DocData::ConstantDoc cd; cd.name = E->get().first; cd.value = E->get().second; cd.is_value_valid = true; @@ -833,7 +813,7 @@ void DocData::generate(bool p_basic_types) { } // Skip adding the lang if it doesn't expose anything (e.g. C#). - if (c.methods.empty() && c.constants.empty()) { + if (c.methods.is_empty() && c.constants.is_empty()) { continue; } @@ -903,7 +883,7 @@ static Error _parse_methods(Ref<XMLParser> &parser, Vector<DocData::MethodDoc> & return OK; } -Error DocData::load_classes(const String &p_dir) { +Error DocTools::load_classes(const String &p_dir) { Error err; DirAccessRef da = DirAccess::open(p_dir, &err); if (!da) { @@ -931,7 +911,7 @@ Error DocData::load_classes(const String &p_dir) { return OK; } -Error DocData::erase_classes(const String &p_dir) { +Error DocTools::erase_classes(const String &p_dir) { Error err; DirAccessRef da = DirAccess::open(p_dir, &err); if (!da) { @@ -959,7 +939,7 @@ Error DocData::erase_classes(const String &p_dir) { return OK; } -Error DocData::_load(Ref<XMLParser> parser) { +Error DocTools::_load(Ref<XMLParser> parser) { Error err = OK; while ((err = parser->read()) == OK) { @@ -975,8 +955,8 @@ Error DocData::_load(Ref<XMLParser> parser) { ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); String name = parser->get_attribute_value("name"); - class_list[name] = ClassDoc(); - ClassDoc &c = class_list[name]; + class_list[name] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[name]; c.name = name; if (parser->has_attribute("inherits")) { @@ -1004,7 +984,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "link") { - TutorialDoc tutorial; + DocData::TutorialDoc tutorial; if (parser->has_attribute("title")) { tutorial.title = parser->get_attribute_value("title"); } @@ -1033,7 +1013,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "member") { - PropertyDoc prop2; + DocData::PropertyDoc prop2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); prop2.name = parser->get_attribute_value("name"); @@ -1070,7 +1050,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "theme_item") { - PropertyDoc prop2; + DocData::PropertyDoc prop2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); prop2.name = parser->get_attribute_value("name"); @@ -1098,7 +1078,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "constant") { - ConstantDoc constant2; + DocData::ConstantDoc constant2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); constant2.name = parser->get_attribute_value("name"); ERR_FAIL_COND_V(!parser->has_attribute("value"), ERR_FILE_CORRUPT); @@ -1147,9 +1127,9 @@ static void _write_string(FileAccess *f, int p_tablevel, const String &p_string) f->store_string(tab + p_string + "\n"); } -Error DocData::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) { - for (Map<String, ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { - ClassDoc &c = E->get(); +Error DocTools::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) { + for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { + DocData::ClassDoc &c = E->get(); String save_path; if (p_class_path.has(c.name)) { @@ -1184,8 +1164,8 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<tutorials>"); for (int i = 0; i < c.tutorials.size(); i++) { - TutorialDoc tutorial = c.tutorials.get(i); - String title_attribute = (!tutorial.title.empty()) ? " title=\"" + tutorial.title.xml_escape() + "\"" : ""; + DocData::TutorialDoc tutorial = c.tutorials.get(i); + String title_attribute = (!tutorial.title.is_empty()) ? " title=\"" + tutorial.title.xml_escape() + "\"" : ""; _write_string(f, 2, "<link" + title_attribute + ">" + tutorial.link.xml_escape() + "</link>"); } _write_string(f, 1, "</tutorials>"); @@ -1195,7 +1175,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri c.methods.sort(); for (int i = 0; i < c.methods.size(); i++) { - const MethodDoc &m = c.methods[i]; + const DocData::MethodDoc &m = c.methods[i]; String qualifiers; if (m.qualifiers != "") { @@ -1214,7 +1194,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri } for (int j = 0; j < m.arguments.size(); j++) { - const ArgumentDoc &a = m.arguments[j]; + const DocData::ArgumentDoc &a = m.arguments[j]; String enum_text; if (a.enumeration != String()) { @@ -1253,7 +1233,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri additional_attributes += " default=\"" + c.properties[i].default_value.xml_escape(true) + "\""; } - const PropertyDoc &p = c.properties[i]; + const DocData::PropertyDoc &p = c.properties[i]; if (c.properties[i].overridden) { _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\" override=\"true\"" + additional_attributes + " />"); @@ -1271,10 +1251,10 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<signals>"); for (int i = 0; i < c.signals.size(); i++) { - const MethodDoc &m = c.signals[i]; + const DocData::MethodDoc &m = c.signals[i]; _write_string(f, 2, "<signal name=\"" + m.name + "\">"); for (int j = 0; j < m.arguments.size(); j++) { - const ArgumentDoc &a = m.arguments[j]; + const DocData::ArgumentDoc &a = m.arguments[j]; _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\">"); _write_string(f, 3, "</argument>"); } @@ -1292,7 +1272,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<constants>"); for (int i = 0; i < c.constants.size(); i++) { - const ConstantDoc &k = c.constants[i]; + const DocData::ConstantDoc &k = c.constants[i]; if (k.is_value_valid) { if (k.enumeration != String()) { _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); @@ -1317,7 +1297,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<theme_items>"); for (int i = 0; i < c.theme_properties.size(); i++) { - const PropertyDoc &p = c.theme_properties[i]; + const DocData::PropertyDoc &p = c.theme_properties[i]; if (p.default_value != "") { _write_string(f, 2, "<theme_item name=\"" + p.name + "\" type=\"" + p.type + "\" default=\"" + p.default_value.xml_escape(true) + "\">"); @@ -1338,7 +1318,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri return OK; } -Error DocData::load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size) { +Error DocTools::load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size) { Vector<uint8_t> data; data.resize(p_uncompressed_size); Compression::decompress(data.ptrw(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE); diff --git a/editor/run_settings_dialog.h b/editor/doc_tools.h index 4d6d842de0..809eedff2a 100644 --- a/editor/run_settings_dialog.h +++ b/editor/doc_tools.h @@ -1,12 +1,12 @@ /*************************************************************************/ -/* run_settings_dialog.h */ +/* doc_tools.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). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -28,42 +28,29 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RUN_SETTINGS_DIALOG_H -#define RUN_SETTINGS_DIALOG_H +#ifndef DOC_TOOLS_H +#define DOC_TOOLS_H -#include "scene/gui/check_button.h" -#include "scene/gui/dialogs.h" -#include "scene/gui/file_dialog.h" -#include "scene/gui/line_edit.h" - -class RunSettingsDialog : public AcceptDialog { - GDCLASS(RunSettingsDialog, AcceptDialog); +#include "core/doc_data.h" +class DocTools { public: - enum RunMode { - RUN_LOCAL_SCENE, - RUN_MAIN_SCENE, - }; - -private: - OptionButton *run_mode; - LineEdit *arguments; - - void _run_mode_changed(int idx); - -protected: - static void _bind_methods(); - -public: - int get_run_mode() const; - void set_run_mode(int p_run_mode); - - void set_custom_arguments(const String &p_arguments); - String get_custom_arguments() const; - - void popup_run_settings(); - - RunSettingsDialog(); + String version; + Map<String, DocData::ClassDoc> class_list; + + static Error erase_classes(const String &p_dir); + + void merge_from(const DocTools &p_data); + void remove_from(const DocTools &p_data); + void add_doc(const DocData::ClassDoc &p_class_doc); + void remove_doc(const String &p_class_name); + bool has_doc(const String &p_class_name); + void generate(bool p_basic_types = false); + Error load_classes(const String &p_dir); + Error save_classes(const String &p_default_path, const Map<String, String> &p_class_path); + + Error _load(Ref<XMLParser> parser); + Error load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size); }; -#endif // RUN_SETTINGS_DIALOG_H +#endif // DOC_DATA_H diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index cbde7d593a..2ed937b6ff 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -40,9 +40,12 @@ void EditorAbout::_theme_changed() { Control *base = EditorNode::get_singleton()->get_gui_base(); Ref<Font> font = base->get_theme_font("source", "EditorFonts"); + int font_size = base->get_theme_font_size("source_size", "EditorFonts"); _tpl_text->add_theme_font_override("normal_font", font); + _tpl_text->add_theme_font_size_override("normal_font_size", font_size); _tpl_text->add_theme_constant_override("line_separation", 6 * EDSCALE); _license_text->add_theme_font_override("normal_font", font); + _license_text->add_theme_font_size_override("normal_font_size", font_size); _license_text->add_theme_constant_override("line_separation", 6 * EDSCALE); _logo->set_texture(base->get_theme_icon("Logo", "EditorIcons")); } @@ -130,7 +133,7 @@ EditorAbout::EditorAbout() { Label *about_text = memnew(Label); about_text->set_v_size_flags(Control::SIZE_SHRINK_CENTER); about_text->set_text(VERSION_FULL_NAME + hash + - String::utf8("\n\xc2\xa9 2007-2020 Juan Linietsky, Ariel Manzur.\n\xc2\xa9 2014-2020 ") + + String::utf8("\n\xc2\xa9 2007-2021 Juan Linietsky, Ariel Manzur.\n\xc2\xa9 2014-2021 ") + TTR("Godot Engine contributors") + "\n"); hbc->add_child(about_text); @@ -213,7 +216,7 @@ EditorAbout::EditorAbout() { for (int component_index = 0; component_index < COPYRIGHT_INFO_COUNT; component_index++) { const ComponentCopyright &component = COPYRIGHT_INFO[component_index]; TreeItem *ti = _tpl_tree->create_item(tpl_ti_tp); - String component_name = component.name; + String component_name = String::utf8(component.name); ti->set_text(0, component_name); String text = component_name + "\n"; long_text += "- " + component_name + "\n"; @@ -221,7 +224,7 @@ EditorAbout::EditorAbout() { const ComponentCopyrightPart &part = component.parts[part_index]; text += "\n Files:"; for (int file_num = 0; file_num < part.file_count; file_num++) { - text += "\n " + String(part.files[file_num]); + text += "\n " + String::utf8(part.files[file_num]); } String copyright; for (int copyright_index = 0; copyright_index < part.copyright_count; copyright_index++) { @@ -229,7 +232,7 @@ EditorAbout::EditorAbout() { } text += copyright; long_text += copyright; - String license = "\n License: " + String(part.license) + "\n"; + String license = "\n License: " + String::utf8(part.license) + "\n"; text += license; long_text += license + "\n"; } @@ -237,10 +240,10 @@ EditorAbout::EditorAbout() { } for (int i = 0; i < LICENSE_COUNT; i++) { TreeItem *ti = _tpl_tree->create_item(tpl_ti_lc); - String licensename = String(LICENSE_NAMES[i]); + String licensename = String::utf8(LICENSE_NAMES[i]); ti->set_text(0, licensename); long_text += "- " + licensename + "\n\n"; - String licensebody = String(LICENSE_BODIES[i]); + String licensebody = String::utf8(LICENSE_BODIES[i]); ti->set_metadata(0, licensebody); long_text += " " + licensebody.replace("\n", "\n ") + "\n\n"; } diff --git a/editor/editor_about.h b/editor/editor_about.h index ae4d9c73bf..efb7245e78 100644 --- a/editor/editor_about.h +++ b/editor/editor_about.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index 8aeeba52ed..2d29076476 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -335,7 +335,7 @@ EditorAssetInstaller::EditorAssetInstaller() { error = memnew(AcceptDialog); add_child(error); - get_ok()->set_text(TTR("Install")); + get_ok_button()->set_text(TTR("Install")); set_title(TTR("Package Installer")); updating = false; diff --git a/editor/editor_asset_installer.h b/editor/editor_asset_installer.h index e31cff8845..d9233a5ce8 100644 --- a/editor/editor_asset_installer.h +++ b/editor/editor_asset_installer.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_atlas_packer.cpp b/editor/editor_atlas_packer.cpp index 68abeb2cda..1b4a505edb 100644 --- a/editor/editor_atlas_packer.cpp +++ b/editor/editor_atlas_packer.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_atlas_packer.h b/editor/editor_atlas_packer.h index 52ac9524ae..89824dff1c 100644 --- a/editor/editor_atlas_packer.h +++ b/editor/editor_atlas_packer.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -41,23 +41,23 @@ public: struct Chart { Vector<Vector2> vertices; struct Face { - int vertex[3]; + int vertex[3] = { 0 }; }; Vector<Face> faces; - bool can_transpose; + bool can_transpose = false; Vector2 final_offset; - bool transposed; + bool transposed = false; }; private: struct PlottedBitmap { - int chart_index; + int chart_index = 0; Vector2i offset; - int area; + int area = 0; Vector<int> top_heights; Vector<int> bottom_heights; - bool transposed; + bool transposed = false; Vector2 final_pos; diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index a3deb95130..7569800a7e 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -531,21 +531,15 @@ void EditorAudioBus::_effect_add(int p_which) { } void EditorAudioBus::_gui_input(const Ref<InputEvent> &p_event) { - Ref<InputEventKey> k = p_event; - if (k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && !k->is_echo()) { - accept_event(); - emit_signal("delete_request"); - } - Ref<InputEventMouseButton> mb = p_event; - if (mb.is_valid() && mb->get_button_index() == 2 && mb->is_pressed()) { + if (mb.is_valid() && mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { Vector2 pos = Vector2(mb->get_position().x, mb->get_position().y); bus_popup->set_position(get_global_position() + pos); bus_popup->popup(); } } -void EditorAudioBus::_unhandled_key_input(Ref<InputEvent> p_event) { +void EditorAudioBus::_effects_gui_input(Ref<InputEvent> p_event) { Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == KEY_DELETE) { TreeItem *current_effect = effects->get_selected(); @@ -749,7 +743,6 @@ void EditorAudioBus::_bind_methods() { ClassDB::bind_method("update_bus", &EditorAudioBus::update_bus); ClassDB::bind_method("update_send", &EditorAudioBus::update_send); ClassDB::bind_method("_gui_input", &EditorAudioBus::_gui_input); - ClassDB::bind_method("_unhandled_key_input", &EditorAudioBus::_unhandled_key_input); ClassDB::bind_method("get_drag_data_fw", &EditorAudioBus::get_drag_data_fw); ClassDB::bind_method("can_drop_data_fw", &EditorAudioBus::can_drop_data_fw); ClassDB::bind_method("drop_data_fw", &EditorAudioBus::drop_data_fw); @@ -773,7 +766,6 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { add_child(vb); set_v_size_flags(SIZE_EXPAND_FILL); - set_process_unhandled_key_input(true); track_name = memnew(LineEdit); track_name->connect("text_entered", callable_mp(this, &EditorAudioBus::_name_changed)); @@ -805,12 +797,6 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { hbc->add_child(bypass); hbc->add_spacer(); - bus_options = memnew(MenuButton); - bus_options->set_h_size_flags(SIZE_SHRINK_END); - bus_options->set_anchor(MARGIN_RIGHT, 0.0); - bus_options->set_tooltip(TTR("Bus options")); - hbc->add_child(bus_options); - Ref<StyleBoxEmpty> sbempty = memnew(StyleBoxEmpty); for (int i = 0; i < hbc->get_child_count(); i++) { Control *child = Object::cast_to<Control>(hbc->get_child(i)); @@ -865,15 +851,15 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { cc = 0; for (int i = 0; i < CHANNELS_MAX; i++) { - channel[i].vu_l = memnew(TextureProgress); - channel[i].vu_l->set_fill_mode(TextureProgress::FILL_BOTTOM_TO_TOP); + channel[i].vu_l = memnew(TextureProgressBar); + channel[i].vu_l->set_fill_mode(TextureProgressBar::FILL_BOTTOM_TO_TOP); hb->add_child(channel[i].vu_l); channel[i].vu_l->set_min(-80); channel[i].vu_l->set_max(24); channel[i].vu_l->set_step(0.1); - channel[i].vu_r = memnew(TextureProgress); - channel[i].vu_r->set_fill_mode(TextureProgress::FILL_BOTTOM_TO_TOP); + channel[i].vu_r = memnew(TextureProgressBar); + channel[i].vu_r->set_fill_mode(TextureProgressBar::FILL_BOTTOM_TO_TOP); hb->add_child(channel[i].vu_r); channel[i].vu_r->set_min(-80); channel[i].vu_r->set_max(24); @@ -906,6 +892,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effects->set_allow_rmb_select(true); effects->set_focus_mode(FOCUS_CLICK); effects->set_allow_reselect(true); + effects->connect("gui_input", callable_mp(this, &EditorAudioBus::_effects_gui_input)); send = memnew(OptionButton); send->set_clip_text(true); @@ -932,9 +919,16 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effect_options->set_item_icon(effect_options->get_item_count() - 1, icon); } + bus_options = memnew(MenuButton); + bus_options->set_shortcut_context(this); + bus_options->set_h_size_flags(SIZE_SHRINK_END); + bus_options->set_anchor(SIDE_RIGHT, 0.0); + bus_options->set_tooltip(TTR("Bus options")); + hbc->add_child(bus_options); + bus_popup = bus_options->get_popup(); - bus_popup->add_item(TTR("Duplicate")); - bus_popup->add_item(TTR("Delete")); + bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/duplicate_selected_bus", TTR("Duplicate Bus"), KEY_MASK_CMD | KEY_D)); + bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/delete_selected_bus", TTR("Delete Bus"), KEY_DELETE)); bus_popup->set_item_disabled(1, is_master); bus_popup->add_item(TTR("Reset Volume")); bus_popup->connect("index_pressed", callable_mp(this, &EditorAudioBus::_bus_popup_pressed)); @@ -1379,14 +1373,15 @@ void EditorAudioMeterNotches::add_notch(float p_normalized_offset, float p_db_va Size2 EditorAudioMeterNotches::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); float width = 0; float height = top_padding + btm_padding; for (int i = 0; i < notches.size(); i++) { if (notches[i].render_db_value) { - width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB").x); + width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB", font_size).x); height += font_height; } } @@ -1413,7 +1408,8 @@ void EditorAudioMeterNotches::_notification(int p_what) { void EditorAudioMeterNotches::_draw_audio_notches() { Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); for (int i = 0; i < notches.size(); i++) { AudioNotch n = notches[i]; @@ -1427,6 +1423,7 @@ void EditorAudioMeterNotches::_draw_audio_notches() { Vector2(line_length + label_space, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + (font_height / 4) + top_padding), String::num(Math::abs(n.db_value)) + "dB", + HALIGN_LEFT, -1, font_size, notch_color); } } diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h index b6cf1183b5..8dfc2137ef 100644 --- a/editor/editor_audio_buses.h +++ b/editor/editor_audio_buses.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -43,7 +43,7 @@ #include "scene/gui/panel_container.h" #include "scene/gui/scroll_container.h" #include "scene/gui/slider.h" -#include "scene/gui/texture_progress.h" +#include "scene/gui/texture_progress_bar.h" #include "scene/gui/texture_rect.h" #include "scene/gui/tree.h" @@ -61,13 +61,13 @@ class EditorAudioBus : public PanelContainer { static const int CHANNELS_MAX = 4; struct { - bool prev_active; + bool prev_active = false; - float peak_l; - float peak_r; + float peak_l = 0; + float peak_r = 0; - TextureProgress *vu_l; - TextureProgress *vu_r; + TextureProgressBar *vu_l = nullptr; + TextureProgressBar *vu_r = nullptr; } channel[CHANNELS_MAX]; OptionButton *send; @@ -91,7 +91,7 @@ class EditorAudioBus : public PanelContainer { mutable bool hovering_drop; void _gui_input(const Ref<InputEvent> &p_event); - void _unhandled_key_input(Ref<InputEvent> p_event); + void _effects_gui_input(Ref<InputEvent> p_event); void _bus_popup_pressed(int p_option); void _name_changed(const String &p_new_name); @@ -214,9 +214,9 @@ class EditorAudioMeterNotches : public Control { private: struct AudioNotch { - float relative_position; - float db_value; - bool render_db_value; + float relative_position = 0; + float db_value = 0; + bool render_db_value = false; _FORCE_INLINE_ AudioNotch(float r_pos, float db_v, bool rndr_val) { relative_position = r_pos; diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 2251440544..d46df05f6e 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -402,7 +402,7 @@ void EditorAutoloadSettings::update_autoload() { String name = pi.name.get_slice("/", 1); String path = ProjectSettings::get_singleton()->get(pi.name); - if (name.empty()) { + if (name.is_empty()) { continue; } @@ -774,7 +774,7 @@ EditorAutoloadSettings::EditorAutoloadSettings() { String name = pi.name.get_slice("/", 1); String path = ProjectSettings::get_singleton()->get(pi.name); - if (name.empty()) { + if (name.is_empty()) { continue; } diff --git a/editor/editor_autoload_settings.h b/editor/editor_autoload_settings.h index 646fe3992c..762457463c 100644 --- a/editor/editor_autoload_settings.h +++ b/editor/editor_autoload_settings.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -50,20 +50,14 @@ class EditorAutoloadSettings : public VBoxContainer { struct AutoLoadInfo { String name; String path; - bool is_singleton; - bool in_editor; - int order; - Node *node; + bool is_singleton = false; + bool in_editor = false; + int order = 0; + Node *node = nullptr; bool operator==(const AutoLoadInfo &p_info) const { return order == p_info.order; } - - AutoLoadInfo() { - is_singleton = false; - in_editor = false; - node = nullptr; - } }; List<AutoLoadInfo> autoload_cache; diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 975405aec4..1d3bd55ed3 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -331,7 +331,7 @@ Dictionary EditorData::get_editor_states() const { Dictionary metadata; for (int i = 0; i < editor_plugins.size(); i++) { Dictionary state = editor_plugins[i]->get_state(); - if (state.empty()) { + if (state.is_empty()) { continue; } metadata[editor_plugins[i]->get_name()] = state; @@ -468,24 +468,25 @@ void EditorData::add_custom_type(const String &p_type, const String &p_inherits, custom_types[p_inherits].push_back(ct); } -Object *EditorData::instance_custom_type(const String &p_type, const String &p_inherits) { +Variant EditorData::instance_custom_type(const String &p_type, const String &p_inherits) { if (get_custom_types().has(p_inherits)) { for (int i = 0; i < get_custom_types()[p_inherits].size(); i++) { if (get_custom_types()[p_inherits][i].name == p_type) { Ref<Script> script = get_custom_types()[p_inherits][i].script; - Object *ob = ClassDB::instance(p_inherits); - ERR_FAIL_COND_V(!ob, nullptr); - if (ob->is_class("Node")) { - ob->call("set_name", p_type); + Variant ob = ClassDB::instance(p_inherits); + ERR_FAIL_COND_V(!ob, Variant()); + Node *n = Object::cast_to<Node>(ob); + if (n) { + n->set_name(p_type); } - ob->set_script(script); + ((Object *)ob)->set_script(script); return ob; } } } - return nullptr; + return Variant(); } void EditorData::remove_custom_type(const String &p_type) { @@ -493,7 +494,7 @@ void EditorData::remove_custom_type(const String &p_type) { for (int i = 0; i < E->get().size(); i++) { if (E->get()[i].name == p_type) { E->get().remove(i); - if (E->get().empty()) { + if (E->get().is_empty()) { custom_types.erase(E->key()); } return; @@ -691,11 +692,6 @@ void EditorData::set_edited_scene_version(uint64_t version, int p_scene_idx) { } } -uint64_t EditorData::get_edited_scene_version() const { - ERR_FAIL_INDEX_V(current_edited_scene, edited_scene.size(), 0); - return edited_scene[current_edited_scene].version; -} - uint64_t EditorData::get_scene_version(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), 0); return edited_scene[p_idx].version; @@ -872,18 +868,18 @@ StringName EditorData::script_class_get_base(const String &p_class) const { return script->get_language()->get_global_class_name(base_script->get_path()); } -Object *EditorData::script_class_instance(const String &p_class) { +Variant EditorData::script_class_instance(const String &p_class) { if (ScriptServer::is_global_class(p_class)) { - Object *obj = ClassDB::instance(ScriptServer::get_global_class_native_base(p_class)); + Variant obj = ClassDB::instance(ScriptServer::get_global_class_native_base(p_class)); if (obj) { Ref<Script> script = script_class_load_script(p_class); if (script.is_valid()) { - obj->set_script(script); + ((Object *)obj)->set_script(script); } return obj; } } - return nullptr; + return Variant(); } Ref<Script> EditorData::script_class_load_script(const String &p_class) const { @@ -906,7 +902,7 @@ String EditorData::script_class_get_icon_path(const String &p_class) const { String current = p_class; String ret = _script_class_icon_paths[current]; - while (ret.empty()) { + while (ret.is_empty()) { current = script_class_get_base(current); if (!ScriptServer::is_global_class(current)) { return String(); @@ -936,7 +932,7 @@ void EditorData::script_class_save_icon_paths() { } } - if (d.empty()) { + if (d.is_empty()) { if (ProjectSettings::get_singleton()->has_setting("_global_script_class_icons")) { ProjectSettings::get_singleton()->clear("_global_script_class_icons"); } @@ -1130,7 +1126,7 @@ List<Node *> EditorSelection::get_full_selected_node_list() { } void EditorSelection::clear() { - while (!selection.empty()) { + while (!selection.is_empty()) { remove_node(selection.front()->key()); } diff --git a/editor/editor_data.h b/editor/editor_data.h index 5037a6acb4..d5c8c2a713 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -40,7 +40,6 @@ class EditorHistory { enum { - HISTORY_MAX = 64 }; @@ -48,12 +47,12 @@ class EditorHistory { REF ref; ObjectID object; String property; - bool inspector_only; + bool inspector_only = false; }; struct History { Vector<Obj> path; - int level; + int level = 0; }; friend class EditorData; @@ -110,14 +109,14 @@ public: }; struct EditedScene { - Node *root; + Node *root = nullptr; String path; Dictionary editor_states; List<Node *> selection; Vector<EditorHistory::History> history_stored; - int history_current; + int history_current = 0; Dictionary custom_state; - uint64_t version; + uint64_t version = 0; NodePath live_edit_root; }; @@ -172,7 +171,7 @@ public: void restore_editor_global_states(); 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); + Variant 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; } @@ -191,7 +190,6 @@ public: void set_scene_path(int p_idx, const String &p_path); Ref<Script> get_scene_root_script(int p_idx) const; void set_edited_scene_version(uint64_t version, int p_scene_idx = -1); - uint64_t get_edited_scene_version() const; uint64_t get_scene_version(int p_idx) const; void clear_edited_scenes(); void set_edited_scene_live_edit_root(const NodePath &p_root); @@ -210,7 +208,7 @@ public: bool script_class_is_parent(const String &p_class, const String &p_inherits); StringName script_class_get_base(const String &p_class) const; - Object *script_class_instance(const String &p_class); + Variant script_class_instance(const String &p_class); Ref<Script> script_class_load_script(const String &p_class) const; diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp index 206fdef7c9..4366d83fe2 100644 --- a/editor/editor_dir_dialog.cpp +++ b/editor/editor_dir_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -202,7 +202,7 @@ EditorDirDialog::EditorDirDialog() { mkdirerr->set_text(TTR("Could not create folder.")); add_child(mkdirerr); - get_ok()->set_text(TTR("Choose")); + get_ok_button()->set_text(TTR("Choose")); must_reload = false; } diff --git a/editor/editor_dir_dialog.h b/editor/editor_dir_dialog.h index b688e9dc06..05451b7bda 100644 --- a/editor/editor_dir_dialog.h +++ b/editor/editor_dir_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 3aeffede82..fd4423646f 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -398,7 +398,11 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_pat Ref<ImageTexture> EditorExportPlatform::get_option_icon(int p_index) const { Ref<Theme> theme = EditorNode::get_singleton()->get_editor_theme(); ERR_FAIL_COND_V(theme.is_null(), Ref<ImageTexture>()); - return theme->get_icon("Play", "EditorIcons"); + if (EditorNode::get_singleton()->get_main_control()->is_layout_rtl()) { + return theme->get_icon("PlayBackwards", "EditorIcons"); + } else { + return theme->get_icon("Play", "EditorIcons"); + } } String EditorExportPlatform::find_export_template(String template_file_name, String *err) const { @@ -517,7 +521,7 @@ void EditorExportPlatform::_edit_filter_list(Set<String> &r_list, const String & Vector<String> filters; for (int i = 0; i < split.size(); i++) { String f = split[i].strip_edges(); - if (f.empty()) { + if (f.is_empty()) { continue; } filters.push_back(f); @@ -750,7 +754,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & Vector<String> enc_in_split = p_preset->get_enc_in_filter().split(","); for (int i = 0; i < enc_in_split.size(); i++) { String f = enc_in_split[i].strip_edges(); - if (f.empty()) { + if (f.is_empty()) { continue; } enc_in_filters.push_back(f); @@ -759,7 +763,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & Vector<String> enc_ex_split = p_preset->get_enc_ex_filter().split(","); for (int i = 0; i < enc_ex_split.size(); i++) { String f = enc_ex_split[i].strip_edges(); - if (f.empty()) { + if (f.is_empty()) { continue; } enc_ex_filters.push_back(f); @@ -972,6 +976,15 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & p_func(p_udata, splash, array, idx, total, enc_in_filters, enc_ex_filters, key); } + // Store text server data if exists. + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + String ts_data = "res://" + TS->get_support_data_filename(); + if (FileAccess::exists(ts_data)) { + Vector<uint8_t> array = FileAccess::get_file_as_array(ts_data); + p_func(p_udata, ts_data, array, idx, total, enc_in_filters, enc_ex_filters, key); + } + } + String config_file = "project.binary"; String engine_cfb = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp" + config_file); ProjectSettings::get_singleton()->save_custom(engine_cfb, custom_map, custom_list); @@ -1632,15 +1645,17 @@ void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset> & } void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) { + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE), "")); + + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/bptc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), true)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/no_bptc_fallbacks"), true)); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true)); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false)); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE), "")); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE), "")); } String EditorExportPlatformPC::get_name() const { @@ -1681,7 +1696,7 @@ bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, valid = dvalid || rvalid; r_missing_templates = !valid; - if (!err.empty()) { + if (!err.is_empty()) { r_error = err; } return valid; @@ -1768,7 +1783,7 @@ Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_pr } } - if (err == OK && !so_files.empty()) { + if (err == OK && !so_files.is_empty()) { //if shared object files, copy them da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); for (int i = 0; i < so_files.size() && err == OK; i++) { @@ -1820,17 +1835,10 @@ void EditorExportPlatformPC::set_debug_32(const String &p_file) { debug_file_32 = p_file; } -void EditorExportPlatformPC::add_platform_feature(const String &p_feature) { - extra_features.insert(p_feature); -} - void EditorExportPlatformPC::get_platform_features(List<String> *r_features) { r_features->push_back("pc"); //all pcs support "pc" r_features->push_back("s3tc"); //all pcs support "s3tc" compression r_features->push_back(get_os_name()); //OS name is a feature - for (Set<String>::Element *E = extra_features.front(); E; E = E->next()) { - r_features->push_back(E->get()); - } } void EditorExportPlatformPC::resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, Set<String> &p_features) { diff --git a/editor/editor_export.h b/editor/editor_export.h index 09feaad255..e6026e7aae 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -169,9 +169,9 @@ public: private: struct SavedData { - uint64_t ofs; - uint64_t size; - bool encrypted; + uint64_t ofs = 0; + uint64_t size = 0; + bool encrypted = false; Vector<uint8_t> md5; CharString path_utf8; @@ -181,15 +181,15 @@ private: }; struct PackData { - FileAccess *f; + FileAccess *f = nullptr; Vector<SavedData> file_ofs; - EditorProgress *ep; - Vector<SharedObject> *so_files; + EditorProgress *ep = nullptr; + Vector<SharedObject> *so_files = nullptr; }; struct ZipData { - void *zip; - EditorProgress *ep; + void *zip = nullptr; + EditorProgress *ep = nullptr; }; struct FeatureContainers { @@ -294,7 +294,7 @@ class EditorExportPlugin : public Reference { struct ExtraFile { String path; Vector<uint8_t> data; - bool remap; + bool remap = false; }; Vector<ExtraFile> extra_files; bool skipped; @@ -424,8 +424,6 @@ private: String debug_file_32; String debug_file_64; - Set<String> extra_features; - int chmod_flags; FixUpEmbeddedPckFunc fixup_embedded_pck_func; diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index 7335563dd9..af02fcaf3c 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -96,7 +96,7 @@ void EditorFeatureProfile::set_disable_class_property(const StringName &p_class, } else { ERR_FAIL_COND(!disabled_properties.has(p_class)); disabled_properties[p_class].erase(p_property); - if (disabled_properties[p_class].empty()) { + if (disabled_properties[p_class].is_empty()) { disabled_properties.erase(p_class); } } @@ -876,7 +876,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { no_profile_selected_help = memnew(Label(TTR("Create or import a profile to edit available classes and properties."))); // Add some spacing above the help label. Ref<StyleBoxEmpty> sb = memnew(StyleBoxEmpty); - sb->set_default_margin(MARGIN_TOP, 20 * EDSCALE); + sb->set_default_margin(SIDE_TOP, 20 * EDSCALE); no_profile_selected_help->add_theme_style_override("normal", sb); no_profile_selected_help->set_align(Label::ALIGN_CENTER); no_profile_selected_help->set_v_size_flags(Control::SIZE_EXPAND_FILL); @@ -890,7 +890,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { add_child(new_profile_dialog); new_profile_dialog->connect("confirmed", callable_mp(this, &EditorFeatureProfileManager::_create_new_profile)); new_profile_dialog->register_text_enter(new_profile_name); - new_profile_dialog->get_ok()->set_text(TTR("Create")); + new_profile_dialog->get_ok_button()->set_text(TTR("Create")); erase_profile_dialog = memnew(ConfirmationDialog); add_child(erase_profile_dialog); diff --git a/editor/editor_feature_profile.h b/editor/editor_feature_profile.h index 0f066b8f4a..01e6a6a142 100644 --- a/editor/editor_feature_profile.h +++ b/editor/editor_feature_profile.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index e3923a48c5..01aad0c41b 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -59,12 +59,17 @@ VBoxContainer *EditorFileDialog::get_vbox() { } void EditorFileDialog::_notification(int p_what) { - if (p_what == NOTIFICATION_READY || p_what == NOTIFICATION_THEME_CHANGED) { + if (p_what == NOTIFICATION_READY || p_what == NOTIFICATION_THEME_CHANGED || p_what == Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { // Update icons. mode_thumbnails->set_icon(item_list->get_theme_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(item_list->get_theme_icon("FileList", "EditorIcons")); - dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); - dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + dir_prev->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + } else { + dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + } dir_up->set_icon(item_list->get_theme_icon("ArrowUp", "EditorIcons")); refresh->set_icon(item_list->get_theme_icon("Reload", "EditorIcons")); favorite->set_icon(item_list->get_theme_icon("Favorites", "EditorIcons")); @@ -97,8 +102,13 @@ void EditorFileDialog::_notification(int p_what) { // Update icons. mode_thumbnails->set_icon(item_list->get_theme_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(item_list->get_theme_icon("FileList", "EditorIcons")); - dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); - dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + dir_prev->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + } else { + dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + } dir_up->set_icon(item_list->get_theme_icon("ArrowUp", "EditorIcons")); refresh->set_icon(item_list->get_theme_icon("Reload", "EditorIcons")); favorite->set_icon(item_list->get_theme_icon("Favorites", "EditorIcons")); @@ -202,14 +212,14 @@ void EditorFileDialog::update_dir() { dir->set_text(dir_access->get_current_dir(false)); // Disable "Open" button only when selecting file(s) mode. - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); switch (mode) { case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); break; case FILE_MODE_OPEN_DIR: - get_ok()->set_text(TTR("Select Current Folder")); + get_ok_button()->set_text(TTR("Select Current Folder")); break; case FILE_MODE_OPEN_ANY: case FILE_MODE_SAVE_FILE: @@ -220,7 +230,6 @@ void EditorFileDialog::update_dir() { void EditorFileDialog::_dir_entered(String p_dir) { dir_access->change_dir(p_dir); - file->set_text(""); invalidate(); update_dir(); _push_history(); @@ -239,6 +248,14 @@ void EditorFileDialog::_save_confirm_pressed() { void EditorFileDialog::_post_popup() { ConfirmationDialog::_post_popup(); + + // Check if the current path doesn't exist and correct it. + String current = dir_access->get_current_dir(); + while (!dir_access->dir_exists(current)) { + current = current.get_base_dir(); + } + set_current_dir(current); + if (invalidated) { update_file_list(); invalidated = false; @@ -277,11 +294,17 @@ void EditorFileDialog::_post_popup() { } else { name = name.get_file() + "/"; } - - recent->add_item(name, folder); - recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]); - recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color); + bool exists = dir_access->dir_exists(recentd[i]); + if (!exists) { + // Remove invalid directory from the list of Recent directories. + recentd.remove(i--); + } else { + recent->add_item(name, folder); + recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]); + recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color); + } } + EditorSettings::get_singleton()->set_recent_dirs(recentd); local_history.clear(); local_history_pos = -1; @@ -432,9 +455,12 @@ void EditorFileDialog::_action_pressed() { } } + // Add first extension of filter if no valid extension is found. if (!valid) { - exterr->popup_centered(Size2(250, 80) * EDSCALE); - return; + int idx = filter->get_selected(); + String flt = filters[idx].get_slice(";", 0); + String ext = flt.get_slice(",", 0).strip_edges().get_extension(); + f += "." + ext; } if (dir_access->file_exists(f) && !disable_overwrite_warning) { @@ -466,10 +492,10 @@ void EditorFileDialog::_item_selected(int p_item) { file->set_text(d["name"]); _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); } else if (mode == FILE_MODE_OPEN_DIR) { - get_ok()->set_text(TTR("Select This Folder")); + get_ok_button()->set_text(TTR("Select This Folder")); } - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); } void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { @@ -485,23 +511,23 @@ void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); } - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); } void EditorFileDialog::_items_clear_selection() { - item_list->unselect_all(); + item_list->deselect_all(); // If nothing is selected, then block Open button. switch (mode) { case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(!item_list->is_anything_selected()); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(!item_list->is_anything_selected()); break; case FILE_MODE_OPEN_DIR: - get_ok()->set_disabled(false); - get_ok()->set_text(TTR("Select Current Folder")); + get_ok_button()->set_disabled(false); + get_ok_button()->set_text(TTR("Select Current Folder")); break; case FILE_MODE_OPEN_ANY: @@ -585,7 +611,7 @@ void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) { // Right click on folder background. Deselect all files so that actions are applied on the current folder. for (int i = 0; i < item_list->get_item_count(); i++) { - item_list->unselect(i); + item_list->deselect(i); } item_menu->clear(); @@ -748,7 +774,7 @@ void EditorFileDialog::update_file_list() { dirs.sort_custom<NaturalNoCaseComparator>(); files.sort_custom<NaturalNoCaseComparator>(); - while (!dirs.empty()) { + while (!dirs.is_empty()) { const String &dir_name = dirs.front()->get(); item_list->add_item(dir_name); @@ -796,8 +822,8 @@ void EditorFileDialog::update_file_list() { } } - while (!files.empty()) { - bool match = patterns.empty(); + while (!files.is_empty()) { + bool match = patterns.is_empty(); for (List<String>::Element *E = patterns.front(); E; E = E->next()) { if (files.front()->get().matchn(E->get())) { @@ -839,13 +865,13 @@ void EditorFileDialog::update_file_list() { } if (favorites->get_current() >= 0) { - favorites->unselect(favorites->get_current()); + favorites->deselect(favorites->get_current()); } favorite->set_pressed(false); fav_up->set_disabled(true); fav_down->set_disabled(true); - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); for (int i = 0; i < favorites->get_item_count(); i++) { if (favorites->get_item_metadata(i) == cdir || favorites->get_item_metadata(i) == cdir + "/") { favorites->select(i); @@ -968,27 +994,27 @@ void EditorFileDialog::set_file_mode(FileMode p_mode) { mode = p_mode; switch (mode) { case FILE_MODE_OPEN_FILE: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a File")); can_create_dir = false; break; case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open File(s)")); can_create_dir = false; break; case FILE_MODE_OPEN_DIR: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a Directory")); can_create_dir = true; break; case FILE_MODE_OPEN_ANY: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a File or Directory")); can_create_dir = true; break; case FILE_MODE_SAVE_FILE: - get_ok()->set_text(TTR("Save")); + get_ok_button()->set_text(TTR("Save")); set_title(TTR("Save a File")); can_create_dir = true; break; @@ -1216,7 +1242,7 @@ void EditorFileDialog::_update_favorites() { if (setthis) { favorite->set_pressed(true); favorites->set_current(favorites->get_item_count() - 1); - recent->unselect_all(); + recent->deselect_all(); } } } @@ -1486,6 +1512,7 @@ EditorFileDialog::EditorFileDialog() { pathhb->add_child(drives_container); dir = memnew(LineEdit); + dir->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); pathhb->add_child(dir); dir->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -1624,6 +1651,7 @@ EditorFileDialog::EditorFileDialog() { file_box = memnew(HBoxContainer); file_box->add_child(memnew(Label(TTR("File:")))); file = memnew(LineEdit); + file->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); file->set_stretch_ratio(4); file->set_h_size_flags(Control::SIZE_EXPAND_FILL); file_box->add_child(file); @@ -1662,6 +1690,7 @@ EditorFileDialog::EditorFileDialog() { makedialog->add_child(makevb); makedirname = memnew(LineEdit); + makedirname->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); makevb->add_margin_child(TTR("Name:"), makedirname); add_child(makedialog); makedialog->register_text_enter(makedirname); @@ -1670,10 +1699,6 @@ EditorFileDialog::EditorFileDialog() { mkdirerr->set_text(TTR("Could not create folder.")); add_child(mkdirerr); - exterr = memnew(AcceptDialog); - exterr->set_text(TTR("Must use a valid extension.")); - add_child(exterr); - update_filters(); update_dir(); diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h index df5b41ae1d..5a5e3a8807 100644 --- a/editor/editor_file_dialog.h +++ b/editor/editor_file_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -110,7 +110,6 @@ private: LineEdit *file; OptionButton *filter; AcceptDialog *mkdirerr; - AcceptDialog *exterr; DirAccess *dir_access; ConfirmationDialog *confirm_save; DependencyRemoveDialog *remove_dialog; diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index c66bc9b3fa..208f678947 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -357,10 +357,12 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo List<String> to_check; + String importer_name; String source_file = ""; String source_md5 = ""; Vector<String> dest_files; String dest_md5 = ""; + int version = 0; while (true) { assign = Variant(); @@ -384,6 +386,10 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo for (int i = 0; i < fa.size(); i++) { to_check.push_back(fa[i]); } + } else if (assign == "importer_version") { + version = value; + } else if (assign == "importer") { + importer_name = value; } else if (!p_only_imported_files) { if (assign == "source_file") { source_file = value; @@ -399,6 +405,12 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo memdelete(f); + Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(importer_name); + + if (importer->get_format_version() > version) { + return true; // version changed, reimport + } + // Read the md5's from a separate file (so the import parameters aren't dependent on the file version String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(p_path); FileAccess *md5s = FileAccess::open(base_path + ".md5", FileAccess::READ, &err); @@ -799,6 +811,20 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } } + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptLanguage *lang = ScriptServer::get_language(i); + if (lang->supports_documentation() && fi->type == lang->get_type()) { + Ref<Script> script = ResourceLoader::load(path); + if (script == nullptr) { + continue; + } + const Vector<DocData::ClassDoc> &docs = script->get_documentation(); + for (int j = 0; j < docs.size(); j++) { + EditorHelp::get_doc_data()->add_doc(docs[j]); + } + } + } + p_dir->files.push_back(fi); p_progress.update(idx, total); } @@ -1018,10 +1044,6 @@ void EditorFileSystem::_thread_func_sources(void *_userdata) { efs->scanning_changes_done = true; } -void EditorFileSystem::get_changed_sources(List<String> *r_changed) { - *r_changed = sources_changed; -} - void EditorFileSystem::scan_changes() { if (first_scan || // Prevent a premature changes scan from inhibiting the first full scan scanning || scanning_changes || thread) { @@ -1562,6 +1584,10 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector f->store_line("[remap]"); f->store_line(""); f->store_line("importer=\"" + importer->get_importer_name() + "\""); + int version = importer->get_format_version(); + if (version > 0) { + f->store_line("importer_version=" + itos(version)); + } if (importer->get_resource_type() != "") { f->store_line("type=\"" + importer->get_resource_type() + "\""); } @@ -1699,7 +1725,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { importer = ResourceFormatImporter::get_singleton()->get_importer_by_extension(p_file.get_extension()); load_default = true; if (importer.is_null()) { - ERR_PRINT("BUG: File queued for import, but can't be imported!"); + ERR_PRINT("BUG: File queued for import, but can't be imported, importer for type '" + importer_name + "' not found."); ERR_FAIL(); } } @@ -1746,6 +1772,10 @@ void EditorFileSystem::_reimport_file(const String &p_file) { f->store_line("[remap]"); f->store_line(""); f->store_line("importer=\"" + importer->get_importer_name() + "\""); + int version = importer->get_format_version(); + if (version > 0) { + f->store_line("importer_version=" + itos(version)); + } if (importer->get_resource_type() != "") { f->store_line("type=\"" + importer->get_resource_type() + "\""); } diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index d5ae046c36..c0e11a0402 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -52,12 +52,12 @@ class EditorFileSystemDirectory : public Object { struct FileInfo { String file; StringName type; - uint64_t modified_time; - uint64_t import_modified_time; - bool import_valid; + uint64_t modified_time = 0; + uint64_t import_modified_time = 0; + bool import_valid = false; String import_group_file; Vector<String> deps; - bool verified; //used for checking changes + bool verified = false; //used for checking changes String script_class_name; String script_class_extends; String script_class_icon_path; @@ -119,18 +119,11 @@ class EditorFileSystem : public Node { ACTION_FILE_RELOAD }; - Action action; - EditorFileSystemDirectory *dir; + Action action = ACTION_NONE; + EditorFileSystemDirectory *dir = nullptr; String file; - EditorFileSystemDirectory *new_dir; - EditorFileSystemDirectory::FileInfo *new_file; - - ItemAction() { - action = ACTION_NONE; - dir = nullptr; - new_dir = nullptr; - new_file = nullptr; - } + EditorFileSystemDirectory *new_dir = nullptr; + EditorFileSystemDirectory::FileInfo *new_file = nullptr; }; bool use_threads; @@ -162,10 +155,10 @@ class EditorFileSystem : public Node { /* Used for reading the filesystem cache file */ struct FileCache { String type; - uint64_t modification_time; - uint64_t import_modification_time; + uint64_t modification_time = 0; + uint64_t import_modification_time = 0; Vector<String> deps; - bool import_valid; + bool import_valid = false; String import_group_file; String script_class_name; String script_class_extends; @@ -175,9 +168,9 @@ class EditorFileSystem : public Node { HashMap<String, FileCache> file_cache; struct ScanProgress { - float low; - float hi; - mutable EditorProgressBG *progress; + float low = 0; + float hi = 0; + mutable EditorProgressBG *progress = nullptr; void update(int p_current, int p_total) const; ScanProgress get_sub(int p_current, int p_total) const; }; @@ -220,7 +213,7 @@ class EditorFileSystem : public Node { struct ImportFile { String path; - int order; + int order = 0; bool operator<(const ImportFile &p_if) const { return order < p_if.order; } @@ -255,7 +248,6 @@ public: float get_scanning_progress() const; void scan(); void scan_changes(); - void get_changed_sources(List<String> *r_changed); void update_file(const String &p_file); EditorFileSystemDirectory *get_filesystem_path(const String &p_path); diff --git a/editor/editor_folding.cpp b/editor/editor_folding.cpp index a7e76e9b2b..9f98795e16 100644 --- a/editor/editor_folding.cpp +++ b/editor/editor_folding.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_folding.h b/editor/editor_folding.h index 13f07b99b0..90deb7c0e8 100644 --- a/editor/editor_folding.h +++ b/editor/editor_folding.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index 100c76c32b..96869ae6fd 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -35,57 +35,61 @@ #include "editor_scale.h" #include "editor_settings.h" #include "scene/resources/default_theme/default_theme.h" -#include "scene/resources/dynamic_font.h" - -#define MAKE_FALLBACKS(m_name) \ - m_name->add_fallback(FontArabic); \ - m_name->add_fallback(FontHebrew); \ - m_name->add_fallback(FontThai); \ - m_name->add_fallback(FontHindi); \ - m_name->add_fallback(FontJapanese); \ - m_name->add_fallback(FontFallback); +#include "scene/resources/font.h" + +#define MAKE_FALLBACKS(m_name) \ + m_name->add_data(FontArabic); \ + m_name->add_data(FontBengali); \ + m_name->add_data(FontGeorgian); \ + m_name->add_data(FontMalayalam); \ + m_name->add_data(FontOriya); \ + m_name->add_data(FontSinhala); \ + m_name->add_data(FontTamil); \ + m_name->add_data(FontTelugu); \ + m_name->add_data(FontHebrew); \ + m_name->add_data(FontThai); \ + m_name->add_data(FontHindi); \ + m_name->add_data(FontJapanese); \ + m_name->add_data(FontFallback); // the custom spacings might only work with Noto Sans -#define MAKE_DEFAULT_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFont.is_valid()) { \ - m_name->set_font_data(CustomFont); \ - m_name->add_fallback(DefaultFont); \ - } else { \ - m_name->set_font_data(DefaultFont); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_DEFAULT_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFont.is_valid()) { \ + m_name->add_data(CustomFont); \ + m_name->add_data(DefaultFont); \ + } else { \ + m_name->add_data(DefaultFont); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); -#define MAKE_BOLD_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFontBold.is_valid()) { \ - m_name->set_font_data(CustomFontBold); \ - m_name->add_fallback(DefaultFontBold); \ - } else { \ - m_name->set_font_data(DefaultFontBold); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_BOLD_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFontBold.is_valid()) { \ + m_name->add_data(CustomFontBold); \ + m_name->add_data(DefaultFontBold); \ + } else { \ + m_name->add_data(DefaultFontBold); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); -#define MAKE_SOURCE_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFontSource.is_valid()) { \ - m_name->set_font_data(CustomFontSource); \ - m_name->add_fallback(dfmono); \ - } else { \ - m_name->set_font_data(dfmono); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_SOURCE_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFontSource.is_valid()) { \ + m_name->add_data(CustomFontSource); \ + m_name->add_data(dfmono); \ + } else { \ + m_name->add_data(dfmono); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); void editor_register_fonts(Ref<Theme> p_theme) { @@ -96,7 +100,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { bool font_antialiased = (bool)EditorSettings::get_singleton()->get("interface/editor/font_antialiased"); int font_hinting_setting = (int)EditorSettings::get_singleton()->get("interface/editor/font_hinting"); - DynamicFontData::Hinting font_hinting; + TextServer::Hinting font_hinting; switch (font_hinting_setting) { case 0: // The "Auto" setting uses the setting that best matches the OS' font rendering: @@ -104,29 +108,31 @@ void editor_register_fonts(Ref<Theme> p_theme) { // - Windows uses ClearType, which is in between "Light" and "Normal" hinting. // - Linux has configurable font hinting, but most distributions including Ubuntu default to "Light". #ifdef OSX_ENABLED - font_hinting = DynamicFontData::HINTING_NONE; + font_hinting = TextServer::HINTING_NONE; #else - font_hinting = DynamicFontData::HINTING_LIGHT; + font_hinting = TextServer::HINTING_LIGHT; #endif break; case 1: - font_hinting = DynamicFontData::HINTING_NONE; + font_hinting = TextServer::HINTING_NONE; break; case 2: - font_hinting = DynamicFontData::HINTING_LIGHT; + font_hinting = TextServer::HINTING_LIGHT; break; default: - font_hinting = DynamicFontData::HINTING_NORMAL; + font_hinting = TextServer::HINTING_NORMAL; break; } + int default_font_size = int(EDITOR_GET("interface/editor/main_font_size")) * EDSCALE; + String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font"); - Ref<DynamicFontData> CustomFont; + Ref<FontData> CustomFont; if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) { CustomFont.instance(); + CustomFont->load_resource(custom_font_path, default_font_size); CustomFont->set_antialiased(font_antialiased); CustomFont->set_hinting(font_hinting); - CustomFont->set_font_path(custom_font_path); CustomFont->set_force_autohinter(true); //just looks better..i think? } else { EditorSettings::get_singleton()->set_manually("interface/editor/main_font", ""); @@ -135,12 +141,12 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom Bold font */ String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold"); - Ref<DynamicFontData> CustomFontBold; + Ref<FontData> CustomFontBold; if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) { CustomFontBold.instance(); + CustomFontBold->load_resource(custom_font_path_bold, default_font_size); CustomFontBold->set_antialiased(font_antialiased); CustomFontBold->set_hinting(font_hinting); - CustomFontBold->set_font_path(custom_font_path_bold); CustomFontBold->set_force_autohinter(true); //just looks better..i think? } else { EditorSettings::get_singleton()->set_manually("interface/editor/main_font_bold", ""); @@ -149,12 +155,20 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom source code font */ String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); - Ref<DynamicFontData> CustomFontSource; + Ref<FontData> CustomFontSource; if (custom_font_path_source.length() > 0 && dir->file_exists(custom_font_path_source)) { CustomFontSource.instance(); + CustomFontSource->load_resource(custom_font_path_source, default_font_size); CustomFontSource->set_antialiased(font_antialiased); CustomFontSource->set_hinting(font_hinting); - CustomFontSource->set_font_path(custom_font_path_source); + + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations")).split(","); + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + CustomFontSource->set_variation(subtag_a[0], subtag_a[1].to_float()); + } + } } else { EditorSettings::get_singleton()->set_manually("interface/editor/code_font", ""); } @@ -163,115 +177,176 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Droid Sans */ - Ref<DynamicFontData> DefaultFont; + Ref<FontData> DefaultFont; DefaultFont.instance(); + DefaultFont->load_memory(_font_NotoSansUI_Regular, _font_NotoSansUI_Regular_size, "ttf", default_font_size); DefaultFont->set_antialiased(font_antialiased); DefaultFont->set_hinting(font_hinting); - DefaultFont->set_font_ptr(_font_NotoSansUI_Regular, _font_NotoSansUI_Regular_size); DefaultFont->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> DefaultFontBold; + Ref<FontData> DefaultFontBold; DefaultFontBold.instance(); + DefaultFontBold->load_memory(_font_NotoSansUI_Bold, _font_NotoSansUI_Bold_size, "ttf", default_font_size); DefaultFontBold->set_antialiased(font_antialiased); DefaultFontBold->set_hinting(font_hinting); - DefaultFontBold->set_font_ptr(_font_NotoSansUI_Bold, _font_NotoSansUI_Bold_size); DefaultFontBold->set_force_autohinter(true); // just looks better..i think? - Ref<DynamicFontData> FontFallback; + Ref<FontData> FontFallback; FontFallback.instance(); + FontFallback->load_memory(_font_DroidSansFallback, _font_DroidSansFallback_size, "ttf", default_font_size); FontFallback->set_antialiased(font_antialiased); FontFallback->set_hinting(font_hinting); - FontFallback->set_font_ptr(_font_DroidSansFallback, _font_DroidSansFallback_size); FontFallback->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontJapanese; + Ref<FontData> FontJapanese; FontJapanese.instance(); + FontJapanese->load_memory(_font_DroidSansJapanese, _font_DroidSansJapanese_size, "ttf", default_font_size); FontJapanese->set_antialiased(font_antialiased); FontJapanese->set_hinting(font_hinting); - FontJapanese->set_font_ptr(_font_DroidSansJapanese, _font_DroidSansJapanese_size); FontJapanese->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontArabic; + Ref<FontData> FontArabic; FontArabic.instance(); + FontArabic->load_memory(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size, "ttf", default_font_size); FontArabic->set_antialiased(font_antialiased); FontArabic->set_hinting(font_hinting); - FontArabic->set_font_ptr(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size); FontArabic->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontHebrew; + Ref<FontData> FontBengali; + FontBengali.instance(); + FontBengali->load_memory(_font_NotoSansBengali_Regular, _font_NotoSansBengali_Regular_size, "ttf", default_font_size); + FontBengali->set_antialiased(font_antialiased); + FontBengali->set_hinting(font_hinting); + FontBengali->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontGeorgian; + FontGeorgian.instance(); + FontGeorgian->load_memory(_font_NotoSansGeorgian_Regular, _font_NotoSansGeorgian_Regular_size, "ttf", default_font_size); + FontGeorgian->set_antialiased(font_antialiased); + FontGeorgian->set_hinting(font_hinting); + FontGeorgian->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontHebrew; FontHebrew.instance(); + FontHebrew->load_memory(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size, "ttf", default_font_size); FontHebrew->set_antialiased(font_antialiased); FontHebrew->set_hinting(font_hinting); - FontHebrew->set_font_ptr(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size); FontHebrew->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontThai; + Ref<FontData> FontMalayalam; + FontMalayalam.instance(); + FontMalayalam->load_memory(_font_NotoSansMalayalamUI_Regular, _font_NotoSansMalayalamUI_Regular_size, "ttf", default_font_size); + FontMalayalam->set_antialiased(font_antialiased); + FontMalayalam->set_hinting(font_hinting); + FontMalayalam->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontOriya; + FontOriya.instance(); + FontOriya->load_memory(_font_NotoSansOriyaUI_Regular, _font_NotoSansOriyaUI_Regular_size, "ttf", default_font_size); + FontOriya->set_antialiased(font_antialiased); + FontOriya->set_hinting(font_hinting); + FontOriya->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontSinhala; + FontSinhala.instance(); + FontSinhala->load_memory(_font_NotoSansSinhalaUI_Regular, _font_NotoSansSinhalaUI_Regular_size, "ttf", default_font_size); + FontSinhala->set_antialiased(font_antialiased); + FontSinhala->set_hinting(font_hinting); + FontSinhala->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontTamil; + FontTamil.instance(); + FontTamil->load_memory(_font_NotoSansTamilUI_Regular, _font_NotoSansTamilUI_Regular_size, "ttf", default_font_size); + FontTamil->set_antialiased(font_antialiased); + FontTamil->set_hinting(font_hinting); + FontTamil->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontTelugu; + FontTelugu.instance(); + FontTelugu->load_memory(_font_NotoSansTeluguUI_Regular, _font_NotoSansTeluguUI_Regular_size, "ttf", default_font_size); + FontTelugu->set_antialiased(font_antialiased); + FontTelugu->set_hinting(font_hinting); + FontTelugu->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontThai; FontThai.instance(); + FontThai->load_memory(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size, "ttf", default_font_size); FontThai->set_antialiased(font_antialiased); FontThai->set_hinting(font_hinting); - FontThai->set_font_ptr(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size); FontThai->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontHindi; + Ref<FontData> FontHindi; FontHindi.instance(); + FontHindi->load_memory(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size, "ttf", default_font_size); FontHindi->set_antialiased(font_antialiased); FontHindi->set_hinting(font_hinting); - FontHindi->set_font_ptr(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size); FontHindi->set_force_autohinter(true); //just looks better..i think? /* Hack */ - Ref<DynamicFontData> dfmono; + Ref<FontData> dfmono; dfmono.instance(); + dfmono->load_memory(_font_Hack_Regular, _font_Hack_Regular_size, "ttf", default_font_size); dfmono->set_antialiased(font_antialiased); dfmono->set_hinting(font_hinting); - dfmono->set_font_ptr(_font_Hack_Regular, _font_Hack_Regular_size); - int default_font_size = int(EDITOR_GET("interface/editor/main_font_size")) * EDSCALE; + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + dfmono->set_variation(subtag_a[0], subtag_a[1].to_float()); + } + } // Default font - MAKE_DEFAULT_FONT(df, default_font_size); - p_theme->set_default_font(df); // Default theme font + MAKE_DEFAULT_FONT(df); + p_theme->set_default_theme_font(df); // Default theme font + p_theme->set_default_theme_font_size(default_font_size); + + p_theme->set_font_size("main_size", "EditorFonts", default_font_size); p_theme->set_font("main", "EditorFonts", df); // Bold font - MAKE_BOLD_FONT(df_bold, default_font_size); + MAKE_BOLD_FONT(df_bold); + p_theme->set_font_size("bold_size", "EditorFonts", default_font_size); p_theme->set_font("bold", "EditorFonts", df_bold); // Title font - MAKE_BOLD_FONT(df_title, default_font_size + 2 * EDSCALE); - p_theme->set_font("title", "EditorFonts", df_title); + p_theme->set_font_size("title_size", "EditorFonts", default_font_size + 2 * EDSCALE); + p_theme->set_font("title", "EditorFonts", df_bold); // Documentation fonts - MAKE_DEFAULT_FONT(df_doc, int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); - MAKE_BOLD_FONT(df_doc_bold, int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); - MAKE_BOLD_FONT(df_doc_title, int(EDITOR_GET("text_editor/help/help_title_font_size")) * EDSCALE); - MAKE_SOURCE_FONT(df_doc_code, int(EDITOR_GET("text_editor/help/help_source_font_size")) * EDSCALE); - MAKE_SOURCE_FONT(df_doc_kbd, (int(EDITOR_GET("text_editor/help/help_source_font_size")) - 1) * EDSCALE); - p_theme->set_font("doc", "EditorFonts", df_doc); - p_theme->set_font("doc_bold", "EditorFonts", df_doc_bold); - p_theme->set_font("doc_title", "EditorFonts", df_doc_title); - p_theme->set_font("doc_source", "EditorFonts", df_doc_code); - p_theme->set_font("doc_keyboard", "EditorFonts", df_doc_kbd); + MAKE_SOURCE_FONT(df_code); + p_theme->set_font_size("doc_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); + p_theme->set_font("doc", "EditorFonts", df); + p_theme->set_font_size("doc_bold_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); + p_theme->set_font("doc_bold", "EditorFonts", df_bold); + p_theme->set_font_size("doc_title_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_title_font_size")) * EDSCALE); + p_theme->set_font("doc_title", "EditorFonts", df_bold); + p_theme->set_font_size("doc_source_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_source_font_size")) * EDSCALE); + p_theme->set_font("doc_source", "EditorFonts", df_code); + p_theme->set_font_size("doc_keyboard_size", "EditorFonts", (int(EDITOR_GET("text_editor/help/help_source_font_size")) - 1) * EDSCALE); + p_theme->set_font("doc_keyboard", "EditorFonts", df_code); // Ruler font - MAKE_DEFAULT_FONT(df_rulers, 8 * EDSCALE); - p_theme->set_font("rulers", "EditorFonts", df_rulers); + p_theme->set_font_size("rulers_size", "EditorFonts", 8 * EDSCALE); + p_theme->set_font("rulers", "EditorFonts", df); // Rotation widget font - MAKE_DEFAULT_FONT(df_rotation_control, 14 * EDSCALE); - p_theme->set_font("rotation_control", "EditorFonts", df_rotation_control); + p_theme->set_font_size("rotation_control_size", "EditorFonts", 14 * EDSCALE); + p_theme->set_font("rotation_control", "EditorFonts", df); // Code font - MAKE_SOURCE_FONT(df_code, int(EDITOR_GET("interface/editor/code_font_size")) * EDSCALE); + p_theme->set_font_size("source_size", "EditorFonts", int(EDITOR_GET("interface/editor/code_font_size")) * EDSCALE); p_theme->set_font("source", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_expression, (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE); - p_theme->set_font("expression", "EditorFonts", df_expression); + p_theme->set_font_size("expression_size", "EditorFonts", (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE); + p_theme->set_font("expression", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_output_code, int(EDITOR_GET("run/output/font_size")) * EDSCALE); - p_theme->set_font("output_source", "EditorFonts", df_output_code); + p_theme->set_font_size("output_source_size", "EditorFonts", int(EDITOR_GET("run/output/font_size")) * EDSCALE); + p_theme->set_font("output_source", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_text_editor_status_code, default_font_size); - p_theme->set_font("status_source", "EditorFonts", df_text_editor_status_code); + p_theme->set_font_size("status_source_size", "EditorFonts", default_font_size); + p_theme->set_font("status_source", "EditorFonts", df_code); } diff --git a/editor/editor_fonts.h b/editor/editor_fonts.h index 3ad7cf067b..59ee482b53 100644 --- a/editor/editor_fonts.h +++ b/editor/editor_fonts.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index e8485f9f14..135c40a851 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -40,7 +40,7 @@ #define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" -DocData *EditorHelp::doc = nullptr; +DocTools *EditorHelp::doc = nullptr; void EditorHelp::_init_colors() { title_color = get_theme_color("accent_color", "Editor"); @@ -56,19 +56,6 @@ void EditorHelp::_init_colors() { class_desc->add_theme_constant_override("line_separation", Math::round(5 * EDSCALE)); } -void EditorHelp::_unhandled_key_input(const Ref<InputEvent> &p_ev) { - if (!is_visible_in_tree()) { - return; - } - - Ref<InputEventKey> k = p_ev; - - if (k.is_valid() && k->get_control() && k->get_keycode() == KEY_F) { - search->grab_focus(); - search->select_all(); - } -} - void EditorHelp::_search(bool p_search_previous) { if (p_search_previous) { find_bar->search_prev(); @@ -168,23 +155,24 @@ void EditorHelp::_class_desc_resized() { // Add extra horizontal margins for better readability. // The margins increase as the width of the editor help container increases. Ref<Font> doc_code_font = get_theme_font("doc_source", "EditorFonts"); - real_t char_width = doc_code_font->get_char_size('x').width; + int font_size = get_theme_font_size("doc_source_size", "EditorFonts"); + real_t char_width = doc_code_font->get_char_size('x', 0, font_size).width; const int display_margin = MAX(30 * EDSCALE, get_parent_anchorable_rect().size.width - char_width * 120 * EDSCALE) * 0.5; Ref<StyleBox> class_desc_stylebox = EditorNode::get_singleton()->get_theme_base()->get_theme_stylebox("normal", "RichTextLabel")->duplicate(); - class_desc_stylebox->set_default_margin(MARGIN_LEFT, display_margin); - class_desc_stylebox->set_default_margin(MARGIN_RIGHT, display_margin); + class_desc_stylebox->set_default_margin(SIDE_LEFT, display_margin); + class_desc_stylebox->set_default_margin(SIDE_RIGHT, display_margin); class_desc->add_theme_style_override("normal", class_desc_stylebox); } void EditorHelp::_add_type(const String &p_type, const String &p_enum) { String t = p_type; - if (t.empty()) { + if (t.is_empty()) { t = "void"; } - bool can_ref = (t != "void") || !p_enum.empty(); + bool can_ref = (t != "void") || !p_enum.is_empty(); - if (!p_enum.empty()) { + if (!p_enum.is_empty()) { if (p_enum.get_slice_count(".") > 1) { t = p_enum.get_slice(".", 1); } else { @@ -200,7 +188,7 @@ void EditorHelp::_add_type(const String &p_type, const String &p_enum) { add_array = true; t = t.replace("[]", ""); } - if (p_enum.empty()) { + if (p_enum.is_empty()) { class_desc->push_meta("#" + t); //class } else { class_desc->push_meta("$" + p_enum); //class @@ -242,7 +230,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview if (p_overview) { class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); } else { static const char32_t prefix[3] = { 0x25CF /* filled circle */, ' ', 0 }; class_desc->add_text(String(prefix)); @@ -400,7 +388,7 @@ void EditorHelp::_update_doc() { } // Descendents - if (ClassDB::class_exists(cd.name)) { + if (cd.is_script_doc || ClassDB::class_exists(cd.name)) { bool found = false; bool prev = false; @@ -484,7 +472,7 @@ void EditorHelp::_update_doc() { for (int i = 0; i < cd.tutorials.size(); i++) { const String link = DTR(cd.tutorials[i].link); - String linktxt = (cd.tutorials[i].title.empty()) ? link : DTR(cd.tutorials[i].title); + String linktxt = (cd.tutorials[i].title.is_empty()) ? link : DTR(cd.tutorials[i].title); const int seppos = linktxt.find("//"); if (seppos != -1) { linktxt = link.right(seppos + 2); @@ -506,7 +494,19 @@ void EditorHelp::_update_doc() { Set<String> skip_methods; bool property_descr = false; - if (cd.properties.size()) { + bool has_properties = cd.properties.size() != 0; + if (cd.is_script_doc) { + has_properties = false; + for (int i = 0; i < cd.properties.size(); i++) { + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.is_empty()) { + continue; + } + has_properties = true; + break; + } + } + + if (has_properties) { section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); @@ -521,10 +521,14 @@ void EditorHelp::_update_doc() { class_desc->set_table_column_expand(1, true); for (int i = 0; i < cd.properties.size(); i++) { + // Ignore undocumented private. + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.is_empty()) { + continue; + } property_line[cd.properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); class_desc->push_font(doc_code_font); _add_type(cd.properties[i].type, cd.properties[i].enumeration); class_desc->pop(); @@ -577,6 +581,32 @@ void EditorHelp::_update_doc() { class_desc->pop(); } + if (cd.is_script_doc && (cd.properties[i].setter != "" || cd.properties[i].getter != "")) { + class_desc->push_color(symbol_color); + class_desc->add_text(" [" + TTR("property:") + " "); + class_desc->pop(); // color + + if (cd.properties[i].setter != "") { + class_desc->push_color(value_color); + class_desc->add_text("setter"); + class_desc->pop(); // color + } + if (cd.properties[i].getter != "") { + if (cd.properties[i].setter != "") { + class_desc->push_color(symbol_color); + class_desc->add_text(", "); + class_desc->pop(); // color + } + class_desc->push_color(value_color); + class_desc->add_text("getter"); + class_desc->pop(); // color + } + + class_desc->push_color(symbol_color); + class_desc->add_text("]"); + class_desc->pop(); // color + } + class_desc->pop(); class_desc->pop(); @@ -602,6 +632,10 @@ void EditorHelp::_update_doc() { continue; } } + // Ignore undocumented private. + if (cd.methods[i].name.begins_with("_") && cd.methods[i].description.is_empty()) { + continue; + } methods.push_back(cd.methods[i]); } @@ -634,7 +668,7 @@ void EditorHelp::_update_doc() { } } - if (any_previous && !m.empty()) { + if (any_previous && !m.is_empty()) { class_desc->push_cell(); class_desc->pop(); //cell class_desc->push_cell(); @@ -668,7 +702,7 @@ void EditorHelp::_update_doc() { _add_method(m[i], true); } - any_previous = !m.empty(); + any_previous = !m.is_empty(); } class_desc->pop(); //table @@ -695,7 +729,7 @@ void EditorHelp::_update_doc() { theme_property_line[cd.theme_properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); class_desc->push_font(doc_code_font); _add_type(cd.theme_properties[i].type); class_desc->pop(); @@ -814,13 +848,17 @@ void EditorHelp::_update_doc() { Vector<DocData::ConstantDoc> constants; for (int i = 0; i < cd.constants.size(); i++) { - if (cd.constants[i].enumeration != String()) { + if (!cd.constants[i].enumeration.is_empty()) { if (!enums.has(cd.constants[i].enumeration)) { enums[cd.constants[i].enumeration] = Vector<DocData::ConstantDoc>(); } enums[cd.constants[i].enumeration].push_back(cd.constants[i]); } else { + // Ignore undocumented private. + if (cd.constants[i].name.begins_with("_") && cd.constants[i].description.is_empty()) { + continue; + } constants.push_back(cd.constants[i]); } } @@ -860,6 +898,19 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); class_desc->add_newline(); + // Enum description. + if (e != "@unnamed_enums" && cd.enums.has(e)) { + class_desc->push_color(text_color); + class_desc->push_font(doc_font); + class_desc->push_indent(1); + _add_text(cd.enums[e]); + class_desc->pop(); + class_desc->pop(); + class_desc->pop(); + class_desc->add_newline(); + class_desc->add_newline(); + } + class_desc->push_indent(1); Vector<DocData::ConstantDoc> enum_list = E->get(); @@ -1030,60 +1081,89 @@ void EditorHelp::_update_doc() { class_desc->pop(); // color } + if (cd.is_script_doc && (cd.properties[i].setter != "" || cd.properties[i].getter != "")) { + class_desc->push_color(symbol_color); + class_desc->add_text(" [" + TTR("property:") + " "); + class_desc->pop(); // color + + if (cd.properties[i].setter != "") { + class_desc->push_color(value_color); + class_desc->add_text("setter"); + class_desc->pop(); // color + } + if (cd.properties[i].getter != "") { + if (cd.properties[i].setter != "") { + class_desc->push_color(symbol_color); + class_desc->add_text(", "); + class_desc->pop(); // color + } + class_desc->push_color(value_color); + class_desc->add_text("getter"); + class_desc->pop(); // color + } + + class_desc->push_color(symbol_color); + class_desc->add_text("]"); + class_desc->pop(); // color + } + class_desc->pop(); // font class_desc->pop(); // cell - Map<String, DocData::MethodDoc> method_map; - for (int j = 0; j < methods.size(); j++) { - method_map[methods[j].name] = methods[j]; - } + // Script doc doesn't have setter, getter. + if (!cd.is_script_doc) { + Map<String, DocData::MethodDoc> method_map; + for (int j = 0; j < methods.size(); j++) { + method_map[methods[j].name] = methods[j]; + } - if (cd.properties[i].setter != "") { - class_desc->push_cell(); - class_desc->pop(); // cell + if (cd.properties[i].setter != "") { + class_desc->push_cell(); + class_desc->pop(); // cell - class_desc->push_cell(); - class_desc->push_font(doc_code_font); - class_desc->push_color(text_color); - if (method_map[cd.properties[i].setter].arguments.size() > 1) { - // Setters with additional arguments are exposed in the method list, so we link them here for quick access. - class_desc->push_meta("@method " + cd.properties[i].setter); - class_desc->add_text(cd.properties[i].setter + TTR("(value)")); - class_desc->pop(); - } else { - class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + class_desc->push_cell(); + class_desc->push_font(doc_code_font); + class_desc->push_color(text_color); + if (method_map[cd.properties[i].setter].arguments.size() > 1) { + // Setters with additional arguments are exposed in the method list, so we link them here for quick access. + class_desc->push_meta("@method " + cd.properties[i].setter); + class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + class_desc->pop(); + } else { + class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + } + class_desc->pop(); // color + class_desc->push_color(comment_color); + class_desc->add_text(" setter"); + class_desc->pop(); // color + class_desc->pop(); // font + class_desc->pop(); // cell + method_line[cd.properties[i].setter] = property_line[cd.properties[i].name]; } - class_desc->pop(); // color - class_desc->push_color(comment_color); - class_desc->add_text(" setter"); - class_desc->pop(); // color - class_desc->pop(); // font - class_desc->pop(); // cell - method_line[cd.properties[i].setter] = property_line[cd.properties[i].name]; - } - if (cd.properties[i].getter != "") { - class_desc->push_cell(); - class_desc->pop(); // cell + if (cd.properties[i].getter != "") { + class_desc->push_cell(); + class_desc->pop(); // cell - class_desc->push_cell(); - class_desc->push_font(doc_code_font); - class_desc->push_color(text_color); - if (method_map[cd.properties[i].getter].arguments.size() > 0) { - // Getters with additional arguments are exposed in the method list, so we link them here for quick access. - class_desc->push_meta("@method " + cd.properties[i].getter); - class_desc->add_text(cd.properties[i].getter + "()"); - class_desc->pop(); - } else { - class_desc->add_text(cd.properties[i].getter + "()"); + class_desc->push_cell(); + class_desc->push_font(doc_code_font); + class_desc->push_color(text_color); + if (method_map[cd.properties[i].getter].arguments.size() > 0) { + // Getters with additional arguments are exposed in the method list, so we link them here for quick access. + class_desc->push_meta("@method " + cd.properties[i].getter); + class_desc->add_text(cd.properties[i].getter + "()"); + class_desc->pop(); + } else { + class_desc->add_text(cd.properties[i].getter + "()"); + } + class_desc->pop(); //color + class_desc->push_color(comment_color); + class_desc->add_text(" getter"); + class_desc->pop(); //color + class_desc->pop(); //font + class_desc->pop(); //cell + method_line[cd.properties[i].getter] = property_line[cd.properties[i].name]; } - class_desc->pop(); //color - class_desc->push_color(comment_color); - class_desc->add_text(" getter"); - class_desc->pop(); //color - class_desc->pop(); //font - class_desc->pop(); //cell - method_line[cd.properties[i].getter] = property_line[cd.properties[i].name]; } class_desc->pop(); // table @@ -1094,13 +1174,17 @@ void EditorHelp::_update_doc() { class_desc->push_color(text_color); class_desc->push_font(doc_font); class_desc->push_indent(1); - if (cd.properties[i].description.strip_edges() != String()) { + if (!cd.properties[i].description.strip_edges().is_empty()) { _add_text(DTR(cd.properties[i].description)); } else { class_desc->add_image(get_theme_icon("Error", "EditorIcons")); class_desc->add_text(" "); class_desc->push_color(comment_color); - class_desc->append_bbcode(TTR("There is currently no description for this property. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + if (cd.is_script_doc) { + class_desc->append_bbcode(TTR("There is currently no description for this property.")); + } else { + class_desc->append_bbcode(TTR("There is currently no description for this property. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + } class_desc->pop(); } class_desc->pop(); @@ -1145,13 +1229,17 @@ void EditorHelp::_update_doc() { class_desc->push_color(text_color); class_desc->push_font(doc_font); class_desc->push_indent(1); - if (methods_filtered[i].description.strip_edges() != String()) { + if (!methods_filtered[i].description.strip_edges().is_empty()) { _add_text(DTR(methods_filtered[i].description)); } else { class_desc->add_image(get_theme_icon("Error", "EditorIcons")); class_desc->add_text(" "); class_desc->push_color(comment_color); - class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + if (cd.is_script_doc) { + class_desc->append_bbcode(TTR("There is currently no description for this method.")); + } else { + class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + } class_desc->pop(); } @@ -1235,7 +1323,7 @@ void EditorHelp::_help_callback(const String &p_topic) { } static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { - DocData *doc = EditorHelp::get_doc_data(); + DocTools *doc = EditorHelp::get_doc_data(); String base_path; Ref<Font> doc_font = p_rt->get_theme_font("doc", "EditorFonts"); @@ -1412,7 +1500,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { tag_stack.push_front(tag); } else if (tag == "center") { //align to center - p_rt->push_align(RichTextLabel::ALIGN_CENTER); + p_rt->push_paragraph(RichTextLabel::ALIGN_CENTER, Control::TEXT_DIRECTION_AUTO, ""); pos = brk_end + 1; tag_stack.push_front(tag); } else if (tag == "br") { @@ -1491,9 +1579,9 @@ void EditorHelp::_add_text(const String &p_bbcode) { } void EditorHelp::generate_doc() { - doc = memnew(DocData); + doc = memnew(DocTools); doc->generate(true); - DocData compdoc; + DocTools compdoc; compdoc.load_compressed(_doc_data_compressed, _doc_data_compressed_size, _doc_data_uncompressed_size); doc->merge_from(compdoc); //ensure all is up to date } @@ -1522,6 +1610,12 @@ void EditorHelp::go_to_class(const String &p_class, int p_scroll) { _goto_desc(p_class, p_scroll); } +void EditorHelp::update_doc() { + ERR_FAIL_COND(!doc->class_list.has(edited_class)); + ERR_FAIL_COND(!doc->class_list[edited_class].is_script_doc); + _update_doc(); +} + Vector<Pair<String, int>> EditorHelp::get_sections() { Vector<Pair<String, int>> sections; @@ -1559,7 +1653,6 @@ void EditorHelp::set_scroll(int p_scroll) { void EditorHelp::_bind_methods() { ClassDB::bind_method("_class_list_select", &EditorHelp::_class_list_select); ClassDB::bind_method("_request_help", &EditorHelp::_request_help); - ClassDB::bind_method("_unhandled_key_input", &EditorHelp::_unhandled_key_input); ClassDB::bind_method("_search", &EditorHelp::_search); ClassDB::bind_method("_help_callback", &EditorHelp::_help_callback); @@ -1706,7 +1799,7 @@ void FindBar::popup_search() { grabbed_focus = true; } - if (!search_text->get_text().empty()) { + if (!search_text->get_text().is_empty()) { search_text->select_all(); search_text->set_cursor_position(search_text->get_text().length()); if (grabbed_focus) { @@ -1776,7 +1869,7 @@ void FindBar::_update_results_count() { results_count = 0; String searched = search_text->get_text(); - if (searched.empty()) { + if (searched.is_empty()) { return; } @@ -1796,7 +1889,7 @@ void FindBar::_update_results_count() { } void FindBar::_update_matches_label() { - if (search_text->get_text().empty() || results_count == -1) { + if (search_text->get_text().is_empty() || results_count == -1) { matches_label->hide(); } else { matches_label->show(); diff --git a/editor/editor_help.h b/editor/editor_help.h index 7c3edeb299..65e20f060c 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,7 +32,7 @@ #define EDITOR_HELP_H #include "editor/code_editor.h" -#include "editor/doc_data.h" +#include "editor/doc_tools.h" #include "editor/editor_plugin.h" #include "scene/gui/margin_container.h" #include "scene/gui/menu_button.h" @@ -91,7 +91,6 @@ class EditorHelp : public VBoxContainer { GDCLASS(EditorHelp, VBoxContainer); enum Page { - PAGE_CLASS_LIST, PAGE_CLASS_DESC, PAGE_CLASS_PREV, @@ -119,7 +118,7 @@ class EditorHelp : public VBoxContainer { RichTextLabel *class_desc; HSplitContainer *h_split; - static DocData *doc; + static DocTools *doc; ConfirmationDialog *search_dialog; LineEdit *search; @@ -159,8 +158,6 @@ class EditorHelp : public VBoxContainer { void _request_help(const String &p_string); void _search(bool p_search_previous = false); - void _unhandled_key_input(const Ref<InputEvent> &p_ev); - String _fix_constant(const String &p_constant) const; protected: @@ -169,10 +166,11 @@ protected: public: static void generate_doc(); - static DocData *get_doc_data() { return doc; } + static DocTools *get_doc_data() { return doc; } void go_to_help(const String &p_help); void go_to_class(const String &p_class, int p_scroll = 0); + void update_doc(); Vector<Pair<String, int>> get_sections(); void scroll_to_section(int p_section_index); diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index 4392538737..a1ff87fe2e 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -105,7 +105,7 @@ void EditorHelpSearch::_notification(int p_what) { case NOTIFICATION_VISIBILITY_CHANGED: { if (!is_visible()) { results_tree->call_deferred("clear"); // Wait for the Tree's mouse event propagation. - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "search_help", Rect2(get_position(), get_size())); } } break; @@ -130,7 +130,7 @@ void EditorHelpSearch::_notification(int p_what) { old_search = false; } - get_ok()->set_disabled(!results_tree->get_selected()); + get_ok_button()->set_disabled(!results_tree->get_selected()); search = Ref<Runner>(); set_process(false); @@ -182,8 +182,8 @@ EditorHelpSearch::EditorHelpSearch() { set_title(TTR("Search Help")); - get_ok()->set_disabled(true); - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); + get_ok_button()->set_text(TTR("Open")); // Split search and results area. VBoxContainer *vbox = memnew(VBoxContainer); @@ -244,7 +244,7 @@ EditorHelpSearch::EditorHelpSearch() { results_tree->set_hide_root(true); results_tree->set_select_mode(Tree::SELECT_ROW); results_tree->connect("item_activated", callable_mp(this, &EditorHelpSearch::_confirmed)); - results_tree->connect("item_selected", callable_mp((BaseButton *)get_ok(), &BaseButton::set_disabled), varray(false)); + results_tree->connect("item_selected", callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled), varray(false)); vbox->add_child(results_tree, true); } @@ -412,8 +412,20 @@ bool EditorHelpSearch::Runner::_phase_member_items() { ClassMatch &match = iterator_match->value(); TreeItem *parent = (search_flags & SEARCH_SHOW_HIERARCHY) ? class_items[match.doc->name] : root_item; + bool constructor_created = false; for (int i = 0; i < match.methods.size(); i++) { - _create_method_item(parent, match.doc, match.methods[i]); + String text = match.methods[i]->name; + if (!constructor_created) { + if (match.doc->name == match.methods[i]->name) { + text += " " + TTR("(constructors)"); + constructor_created = true; + } + } else { + if (match.doc->name == match.methods[i]->name) { + continue; + } + } + _create_method_item(parent, match.doc, text, match.methods[i]); } for (int i = 0; i < match.signals.size(); i++) { _create_signal_item(parent, match.doc, match.signals[i]); @@ -508,7 +520,7 @@ TreeItem *EditorHelpSearch::Runner::_create_class_item(TreeItem *p_parent, const return item; } -TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { +TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const String &p_text, const DocData::MethodDoc *p_doc) { String tooltip = p_doc->return_type + " " + p_class_doc->name + "." + p_doc->name + "("; for (int i = 0; i < p_doc->arguments.size(); i++) { const DocData::ArgumentDoc &arg = p_doc->arguments[i]; @@ -521,7 +533,7 @@ TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, cons } } tooltip += ")"; - return _create_member_item(p_parent, p_class_doc->name, "MemberMethod", p_doc->name, TTRC("Method"), "method", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberMethod", p_doc->name, p_text, TTRC("Method"), "method", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { @@ -537,32 +549,32 @@ TreeItem *EditorHelpSearch::Runner::_create_signal_item(TreeItem *p_parent, cons } } tooltip += ")"; - return _create_member_item(p_parent, p_class_doc->name, "MemberSignal", p_doc->name, TTRC("Signal"), "signal", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberSignal", p_doc->name, p_doc->name, TTRC("Signal"), "signal", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc) { String tooltip = p_class_doc->name + "." + p_doc->name; - return _create_member_item(p_parent, p_class_doc->name, "MemberConstant", p_doc->name, TTRC("Constant"), "constant", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberConstant", p_doc->name, p_doc->name, TTRC("Constant"), "constant", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; tooltip += "\n " + p_class_doc->name + "." + p_doc->setter + "(value) setter"; tooltip += "\n " + p_class_doc->name + "." + p_doc->getter + "() getter"; - return _create_member_item(p_parent, p_class_doc->name, "MemberProperty", p_doc->name, TTRC("Property"), "property", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberProperty", p_doc->name, p_doc->name, TTRC("Property"), "property", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; - return _create_member_item(p_parent, p_class_doc->name, "MemberTheme", p_doc->name, TTRC("Theme Property"), "theme_item", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberTheme", p_doc->name, p_doc->name, TTRC("Theme Property"), "theme_item", tooltip); } -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) { +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_text, const String &p_type, const String &p_metatype, const String &p_tooltip) { Ref<Texture2D> icon; String text; if (search_flags & SEARCH_SHOW_HIERARCHY) { icon = ui_service->get_theme_icon(p_icon, "EditorIcons"); - text = p_name; + text = p_text; } else { icon = ui_service->get_theme_icon(p_icon, "EditorIcons"); /*// In flat mode, show the class icon. @@ -570,7 +582,7 @@ if (ui_service->has_icon(p_class_name, "EditorIcons")) icon = ui_service->get_icon(p_class_name, "EditorIcons"); else if (ClassDB::is_parent_class(p_class_name, "Object")) icon = ui_service->get_icon("Object", "EditorIcons");*/ - text = p_class_name + "." + p_name; + text = p_class_name + "." + p_text; } TreeItem *item = results_tree->create_item(p_parent); diff --git a/editor/editor_help_search.h b/editor/editor_help_search.h index f1aab6cc81..0e236d523d 100644 --- a/editor/editor_help_search.h +++ b/editor/editor_help_search.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -98,7 +98,7 @@ class EditorHelpSearch::Runner : public Reference { struct ClassMatch { DocData::ClassDoc *doc; - bool name; + bool name = false; Vector<DocData::MethodDoc *> methods; Vector<DocData::MethodDoc *> signals; Vector<DocData::ConstantDoc *> constants; @@ -118,12 +118,12 @@ class EditorHelpSearch::Runner : public Reference { Ref<Texture2D> empty_icon; Color disabled_color; - Map<String, DocData::ClassDoc>::Element *iterator_doc; + Map<String, DocData::ClassDoc>::Element *iterator_doc = nullptr; Map<String, ClassMatch> matches; - Map<String, ClassMatch>::Element *iterator_match; - TreeItem *root_item; + Map<String, ClassMatch>::Element *iterator_match = nullptr; + TreeItem *root_item = nullptr; Map<String, TreeItem *> class_items; - TreeItem *matched_item; + TreeItem *matched_item = nullptr; bool _is_class_disabled_by_feature_profile(const StringName &p_class); @@ -140,12 +140,12 @@ class EditorHelpSearch::Runner : public Reference { void _match_item(TreeItem *p_item, const String &p_text); TreeItem *_create_class_hierarchy(const ClassMatch &p_match); TreeItem *_create_class_item(TreeItem *p_parent, const DocData::ClassDoc *p_doc, bool p_gray); - TreeItem *_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); + TreeItem *_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const String &p_text, const DocData::MethodDoc *p_doc); TreeItem *_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); TreeItem *_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc); TreeItem *_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); TreeItem *_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); - TreeItem *_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); + TreeItem *_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_text, const String &p_type, const String &p_metatype, const String &p_tooltip); public: bool work(uint64_t slot = 100000); diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 371100652f..df330d8685 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,6 +32,7 @@ #include "array_property_edit.h" #include "dictionary_property_edit.h" +#include "editor/doc_tools.h" #include "editor_feature_profile.h" #include "editor_node.h" #include "editor_scale.h" @@ -41,7 +42,8 @@ Size2 EditorProperty::get_minimum_size() const { Size2 ms; Ref<Font> font = get_theme_font("font", "Tree"); - ms.height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Tree"); + ms.height = font->get_height(font_size); for (int i = 0; i < get_child_count(); i++) { Control *c = Object::cast_to<Control>(get_child(i)); @@ -108,7 +110,8 @@ void EditorProperty::_notification(int p_what) { { int child_room = size.width * (1.0 - split_ratio); Ref<Font> font = get_theme_font("font", "Tree"); - int height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Tree"); + int height = font->get_height(font_size); bool no_children = true; //compute room needed @@ -135,7 +138,11 @@ void EditorProperty::_notification(int p_what) { rect = Rect2(size.width - 1, 0, 1, height); } else { text_size = MAX(0, size.width - (child_room + 4 * EDSCALE)); - rect = Rect2(size.width - child_room, 0, child_room, height); + if (is_layout_rtl()) { + rect = Rect2(1, 0, child_room, height); + } else { + rect = Rect2(size.width - child_room, 0, child_room, height); + } } if (bottom_editor) { @@ -154,6 +161,9 @@ void EditorProperty::_notification(int p_what) { } rect.size.x -= key->get_width() + get_theme_constant("hseparator", "Tree"); + if (is_layout_rtl()) { + rect.position.x += key->get_width() + get_theme_constant("hseparator", "Tree"); + } if (no_children) { text_size -= key->get_width() + 4 * EDSCALE; @@ -167,6 +177,10 @@ void EditorProperty::_notification(int p_what) { rect.size.x -= close->get_width() + get_theme_constant("hseparator", "Tree"); + if (is_layout_rtl()) { + rect.position.x += close->get_width() + get_theme_constant("hseparator", "Tree"); + } + if (no_children) { text_size -= close->get_width() + 4 * EDSCALE; } @@ -200,11 +214,13 @@ void EditorProperty::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Color dark_color = get_theme_color("dark_color_2", "Editor"); + bool rtl = is_layout_rtl(); Size2 size = get_size(); if (bottom_editor) { - size.height = bottom_editor->get_margin(MARGIN_TOP); + size.height = bottom_editor->get_offset(SIDE_TOP); } else if (label_reference) { size.height = label_reference->get_size().height; } @@ -249,7 +265,11 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } check_rect = Rect2(ofs, ((size.height - checkbox->get_height()) / 2), checkbox->get_width(), checkbox->get_height()); - draw_texture(checkbox, check_rect.position, color2); + if (rtl) { + draw_texture(checkbox, Vector2(size.width - check_rect.position.x - checkbox->get_width(), check_rect.position.y), color2); + } else { + draw_texture(checkbox, check_rect.position, color2); + } ofs += get_theme_constant("hseparator", "Tree") + checkbox->get_width() + get_theme_constant("hseparation", "CheckBox"); text_limit -= ofs; } else { @@ -267,14 +287,21 @@ void EditorProperty::_notification(int p_what) { color2.g *= 1.2; color2.b *= 1.2; } - - draw_texture(reload_icon, revert_rect.position, color2); + if (rtl) { + draw_texture(reload_icon, Vector2(size.width - revert_rect.position.x - reload_icon->get_width(), revert_rect.position.y), color2); + } else { + draw_texture(reload_icon, revert_rect.position, color2); + } } else { revert_rect = Rect2(); } - int v_ofs = (size.height - font->get_height()) / 2; - draw_string(font, Point2(ofs, v_ofs + font->get_ascent()), label, color, text_limit); + int v_ofs = (size.height - font->get_height(font_size)) / 2; + if (rtl) { + draw_string(font, Point2(size.width - ofs - text_limit, v_ofs + font->get_ascent(font_size)), label, HALIGN_RIGHT, text_limit, font_size, color); + } else { + draw_string(font, Point2(ofs, v_ofs + font->get_ascent(font_size)), label, HALIGN_LEFT, text_limit, font_size, color); + } if (keying) { Ref<Texture2D> key; @@ -294,7 +321,12 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } keying_rect = Rect2(ofs, ((size.height - key->get_height()) / 2), key->get_width(), key->get_height()); - draw_texture(key, keying_rect.position, color2); + if (rtl) { + draw_texture(key, Vector2(size.width - keying_rect.position.x - key->get_width(), keying_rect.position.y), color2); + } else { + draw_texture(key, keying_rect.position, color2); + } + } else { keying_rect = Rect2(); } @@ -313,7 +345,11 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } delete_rect = Rect2(ofs, ((size.height - close->get_height()) / 2), close->get_width(), close->get_height()); - draw_texture(close, delete_rect.position, color2); + if (rtl) { + draw_texture(close, Vector2(size.width - delete_rect.position.x - close->get_width(), delete_rect.position.y), color2); + } else { + draw_texture(close, delete_rect.position, color2); + } } else { delete_rect = Rect2(); } @@ -648,27 +684,31 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouse> me = p_event; if (me.is_valid()) { + Vector2 mpos = me->get_position(); + if (is_layout_rtl()) { + mpos.x = get_size().x - mpos.x; + } bool button_left = me->get_button_mask() & BUTTON_MASK_LEFT; - bool new_keying_hover = keying_rect.has_point(me->get_position()) && !button_left; + bool new_keying_hover = keying_rect.has_point(mpos) && !button_left; if (new_keying_hover != keying_hover) { keying_hover = new_keying_hover; update(); } - bool new_delete_hover = delete_rect.has_point(me->get_position()) && !button_left; + bool new_delete_hover = delete_rect.has_point(mpos) && !button_left; if (new_delete_hover != delete_hover) { delete_hover = new_delete_hover; update(); } - bool new_revert_hover = revert_rect.has_point(me->get_position()) && !button_left; + bool new_revert_hover = revert_rect.has_point(mpos) && !button_left; if (new_revert_hover != revert_hover) { revert_hover = new_revert_hover; update(); } - bool new_check_hover = check_rect.has_point(me->get_position()) && !button_left; + bool new_check_hover = check_rect.has_point(mpos) && !button_left; if (new_check_hover != check_hover) { check_hover = new_check_hover; update(); @@ -678,13 +718,18 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + Vector2 mpos = mb->get_position(); + if (is_layout_rtl()) { + mpos.x = get_size().x - mpos.x; + } + if (!selected && selectable) { selected = true; emit_signal("selected", property, -1); update(); } - if (keying_rect.has_point(mb->get_position())) { + if (keying_rect.has_point(mpos)) { emit_signal("property_keyed", property, use_keying_next()); if (use_keying_next()) { @@ -704,11 +749,11 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { call_deferred("update_property"); } } - if (delete_rect.has_point(mb->get_position())) { + if (delete_rect.has_point(mpos)) { emit_signal("property_deleted", property); } - if (revert_rect.has_point(mb->get_position())) { + if (revert_rect.has_point(mpos)) { Variant vorig; Node *node = Object::cast_to<Node>(object); @@ -744,7 +789,7 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { return; } } - if (check_rect.has_point(mb->get_position())) { + if (check_rect.has_point(mpos)) { checked = !checked; update(); emit_signal("property_checked", property, checked); @@ -820,7 +865,7 @@ Control *EditorProperty::make_custom_tooltip(const String &p_text) const { String text; PackedStringArray slices = p_text.split("::", false); - if (!slices.empty()) { + if (!slices.is_empty()) { String property_name = slices[0].strip_edges(); text = TTR("Property:") + " [u][b]" + property_name + "[/b][/u]"; @@ -918,6 +963,7 @@ EditorProperty::EditorProperty() { selected_focusable = -1; label_reference = nullptr; bottom_editor = nullptr; + delete_hover = false; } //////////////////////////////////////////////// @@ -1024,10 +1070,11 @@ void EditorInspectorCategory::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { draw_rect(Rect2(Vector2(), get_size()), bg_color); Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); int hs = get_theme_constant("hseparation", "Tree"); - int w = font->get_string_size(label).width; + int w = font->get_string_size(label, font_size).width; if (icon.is_valid()) { w += hs + icon->get_width(); } @@ -1040,7 +1087,7 @@ void EditorInspectorCategory::_notification(int p_what) { } Color color = get_theme_color("font_color", "Tree"); - draw_string(font, Point2(ofs, font->get_ascent() + (get_size().height - font->get_height()) / 2).floor(), label, color, get_size().width); + draw_string(font, Point2(ofs, font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2).floor(), label, HALIGN_LEFT, get_size().width, font_size, color); } } @@ -1051,7 +1098,7 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons help_bit->get_rich_text()->set_fixed_size_to_width(360 * EDSCALE); PackedStringArray slices = p_text.split("::", false); - if (!slices.empty()) { + if (!slices.is_empty()) { String property_name = slices[0].strip_edges(); String text = "[u][b]" + property_name + "[/b][/u]"; @@ -1069,10 +1116,11 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons Size2 EditorInspectorCategory::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Size2 ms; ms.width = 1; - ms.height = font->get_height(); + ms.height = font->get_height(font_size); if (icon.is_valid()) { ms.height = MAX(icon->get_height(), ms.height); } @@ -1105,19 +1153,24 @@ void EditorInspectorSection::_test_unfold() { void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_SORT_CHILDREN) { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Ref<Texture2D> arrow; if (foldable) { if (object->editor_is_section_unfolded(section)) { arrow = get_theme_icon("arrow", "Tree"); } else { - arrow = get_theme_icon("arrow_collapsed", "Tree"); + if (is_layout_rtl()) { + arrow = get_theme_icon("arrow_collapsed_mirrored", "Tree"); + } else { + arrow = get_theme_icon("arrow_collapsed", "Tree"); + } } } Size2 size = get_size(); Point2 offset; - offset.y = font->get_height(); + offset.y = font->get_height(font_size); if (arrow.is_valid()) { offset.y = MAX(offset.y, arrow->get_height()); } @@ -1148,18 +1201,20 @@ void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Texture2D> arrow; + bool rtl = is_layout_rtl(); if (foldable) { - if (object->editor_is_section_unfolded(section)) { - arrow = get_theme_icon("arrow", "Tree"); + if (rtl) { + arrow = get_theme_icon("arrow_collapsed_mirrored", "Tree"); } else { arrow = get_theme_icon("arrow_collapsed", "Tree"); } } Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); - int h = font->get_height(); + int h = font->get_height(font_size); if (arrow.is_valid()) { h = MAX(h, arrow->get_height()); } @@ -1169,10 +1224,15 @@ void EditorInspectorSection::_notification(int p_what) { const int arrow_margin = 3; Color color = get_theme_color("font_color", "Tree"); - draw_string(font, Point2(Math::round((16 + arrow_margin) * EDSCALE), font->get_ascent() + (h - font->get_height()) / 2).floor(), label, color, get_size().width); + float text_width = get_size().width - Math::round((16 + arrow_margin) * EDSCALE); + draw_string(font, Point2(rtl ? 0 : Math::round((16 + arrow_margin) * EDSCALE), font->get_ascent(font_size) + (h - font->get_height(font_size)) / 2).floor(), label, rtl ? HALIGN_RIGHT : HALIGN_LEFT, text_width, font_size, color); if (arrow.is_valid()) { - draw_texture(arrow, Point2(Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + if (rtl) { + draw_texture(arrow, Point2(get_size().width - arrow->get_width() - Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + } else { + draw_texture(arrow, Point2(Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + } } if (dropping && !vbox->is_visible_in_tree()) { @@ -1237,7 +1297,8 @@ Size2 EditorInspectorSection::get_minimum_size() const { } Ref<Font> font = get_theme_font("font", "Tree"); - ms.height += font->get_height() + get_theme_constant("vseparation", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); + ms.height += font->get_height(font_size) + get_theme_constant("vseparation", "Tree"); ms.width += get_theme_constant("inspector_margin", "Editor"); return ms; @@ -1273,7 +1334,8 @@ void EditorInspectorSection::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { Ref<Font> font = get_theme_font("font", "Tree"); - if (mb->get_position().y > font->get_height()) { //clicked outside + int font_size = get_theme_font_size("font_size", "Tree"); + if (mb->get_position().y > font->get_height(font_size)) { //clicked outside return; } @@ -1648,7 +1710,7 @@ void EditorInspector::update_tree() { StringName type2 = p.name; if (!class_descr_cache.has(type2)) { String descr; - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(type2); if (E) { descr = DTR(E->get().brief_description); @@ -1818,7 +1880,7 @@ void EditorInspector::update_tree() { } if (!found) { - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *F = dd->class_list.find(classname); while (F && descr == String()) { for (int i = 0; i < F->get().properties.size(); i++) { @@ -1839,7 +1901,7 @@ void EditorInspector::update_tree() { } } - if (!F->get().inherits.empty()) { + if (!F->get().inherits.is_empty()) { F = dd->class_list.find(F->get().inherits); } else { break; @@ -2463,7 +2525,7 @@ void EditorInspector::_update_script_class_properties(const Object &p_object, Li script = script->get_base_script(); } - if (classes.empty()) { + if (classes.is_empty()) { return; } diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index 36b80a7dd4..81a22d4ff1 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -69,13 +69,13 @@ private: Rect2 bottom_child_rect; Rect2 keying_rect; - bool keying_hover; + bool keying_hover = false; Rect2 revert_rect; - bool revert_hover; + bool revert_hover = false; Rect2 check_rect; - bool check_hover; + bool check_hover = false; Rect2 delete_rect; - bool delete_hover; + bool delete_hover = false; bool can_revert; @@ -176,7 +176,7 @@ class EditorInspectorPlugin : public Reference { friend class EditorInspector; struct AddedEditor { - Control *property_editor; + Control *property_editor = nullptr; Vector<String> properties; String label; }; diff --git a/editor/editor_layouts_dialog.cpp b/editor/editor_layouts_dialog.cpp index c50fe81217..0bf1863459 100644 --- a/editor/editor_layouts_dialog.cpp +++ b/editor/editor_layouts_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -100,26 +100,26 @@ void EditorLayoutsDialog::_post_popup() { EditorLayoutsDialog::EditorLayoutsDialog() { makevb = memnew(VBoxContainer); add_child(makevb); - makevb->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 5); - makevb->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -5); + makevb->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 5); + makevb->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -5); layout_names = memnew(ItemList); makevb->add_child(layout_names); layout_names->set_visible(true); - layout_names->set_margin(MARGIN_TOP, 5); - layout_names->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 5); - layout_names->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -5); + layout_names->set_offset(SIDE_TOP, 5); + layout_names->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 5); + layout_names->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -5); layout_names->set_v_size_flags(Control::SIZE_EXPAND_FILL); layout_names->set_select_mode(ItemList::SELECT_MULTI); layout_names->set_allow_rmb_select(true); name = memnew(LineEdit); makevb->add_child(name); - name->set_margin(MARGIN_TOP, 5); - name->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 5); - name->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -5); + name->set_offset(SIDE_TOP, 5); + name->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 5); + name->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -5); name->connect("gui_input", callable_mp(this, &EditorLayoutsDialog::_line_gui_input)); - name->connect("focus_entered", callable_mp(layout_names, &ItemList::unselect_all)); + name->connect("focus_entered", callable_mp(layout_names, &ItemList::deselect_all)); } void EditorLayoutsDialog::set_name_line_enabled(bool p_enabled) { diff --git a/editor/editor_layouts_dialog.h b/editor/editor_layouts_dialog.h index ebb523829f..8687660832 100644 --- a/editor/editor_layouts_dialog.h +++ b/editor/editor_layouts_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 6fbafc7ff3..7b94016fb6 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -35,7 +35,7 @@ #include "editor_node.h" #include "editor_scale.h" #include "scene/gui/center_container.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_file, int p_line, const char *p_error, const char *p_errorexp, ErrorHandlerType p_type) { EditorLog *self = (EditorLog *)p_self; @@ -61,12 +61,14 @@ void EditorLog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { //button->set_icon(get_icon("Console","EditorIcons")); log->add_theme_font_override("normal_font", get_theme_font("output_source", "EditorFonts")); + log->add_theme_font_size_override("normal_font_size", get_theme_font_size("output_source_size", "EditorFonts")); log->add_theme_color_override("selection_color", get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); } else if (p_what == NOTIFICATION_THEME_CHANGED) { - Ref<DynamicFont> df_output_code = get_theme_font("output_source", "EditorFonts"); + Ref<Font> df_output_code = get_theme_font("output_source", "EditorFonts"); if (df_output_code.is_valid()) { if (log != nullptr) { log->add_theme_font_override("normal_font", get_theme_font("output_source", "EditorFonts")); + log->add_theme_font_size_override("normal_font_size", get_theme_font_size("output_source_size", "EditorFonts")); log->add_theme_color_override("selection_color", get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); } } @@ -99,8 +101,6 @@ void EditorLog::copy() { } void EditorLog::add_message(const String &p_msg, MessageType p_type) { - log->add_newline(); - bool restore = p_type != MSG_TYPE_STD; switch (p_type) { case MSG_TYPE_STD: { @@ -126,6 +126,7 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) { } log->add_text(p_msg); + log->add_newline(); if (restore) { log->pop(); @@ -160,12 +161,14 @@ 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->set_shortcut_context(this); copybutton->connect("pressed", callable_mp(this, &EditorLog::_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->set_shortcut_context(this); clearbutton->connect("pressed", callable_mp(this, &EditorLog::_clear_request)); log = memnew(RichTextLabel); @@ -176,7 +179,7 @@ EditorLog::EditorLog() { log->set_v_size_flags(SIZE_EXPAND_FILL); log->set_h_size_flags(SIZE_EXPAND_FILL); vb->add_child(log); - add_message(VERSION_FULL_NAME " (c) 2007-2020 Juan Linietsky, Ariel Manzur & Godot Contributors."); + add_message(VERSION_FULL_NAME " (c) 2007-2021 Juan Linietsky, Ariel Manzur & Godot Contributors."); eh.errfunc = _error_handler; eh.userdata = this; diff --git a/editor/editor_log.h b/editor/editor_log.h index 73a8c3f0c5..79dfb3ffaa 100644 --- a/editor/editor_log.h +++ b/editor/editor_log.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_native_shader_source_visualizer.cpp b/editor/editor_native_shader_source_visualizer.cpp new file mode 100644 index 0000000000..ed2692190c --- /dev/null +++ b/editor/editor_native_shader_source_visualizer.cpp @@ -0,0 +1,72 @@ +/*************************************************************************/ +/* editor_native_shader_source_visualizer.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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_native_shader_source_visualizer.h" + +#include "scene/gui/text_edit.h" + +void EditorNativeShaderSourceVisualizer::_inspect_shader(RID p_shader) { + if (versions) { + memdelete(versions); + versions = nullptr; + } + + RS::ShaderNativeSourceCode nsc = RS::get_singleton()->shader_get_native_source_code(p_shader); + + versions = memnew(TabContainer); + versions->set_v_size_flags(Control::SIZE_EXPAND_FILL); + versions->set_h_size_flags(Control::SIZE_EXPAND_FILL); + for (int i = 0; i < nsc.versions.size(); i++) { + TabContainer *vtab = memnew(TabContainer); + vtab->set_name("Version " + itos(i)); + vtab->set_v_size_flags(Control::SIZE_EXPAND_FILL); + vtab->set_h_size_flags(Control::SIZE_EXPAND_FILL); + versions->add_child(vtab); + for (int j = 0; j < nsc.versions[i].stages.size(); j++) { + TextEdit *vtext = memnew(TextEdit); + vtext->set_readonly(true); + vtext->set_name(nsc.versions[i].stages[j].name); + vtext->set_text(nsc.versions[i].stages[j].code); + vtext->set_v_size_flags(Control::SIZE_EXPAND_FILL); + vtext->set_h_size_flags(Control::SIZE_EXPAND_FILL); + vtab->add_child(vtext); + } + } + add_child(versions); + popup_centered_ratio(); +} + +void EditorNativeShaderSourceVisualizer::_bind_methods() { + ClassDB::bind_method("_inspect_shader", &EditorNativeShaderSourceVisualizer::_inspect_shader); +} +EditorNativeShaderSourceVisualizer::EditorNativeShaderSourceVisualizer() { + add_to_group("_native_shader_source_visualizer"); + set_title(TTR("Native Shader Source Inspector")); +} diff --git a/editor/pvrtc_compress.h b/editor/editor_native_shader_source_visualizer.h index 7b6c17d3c4..72a2f8baae 100644 --- a/editor/pvrtc_compress.h +++ b/editor/editor_native_shader_source_visualizer.h @@ -1,12 +1,12 @@ /*************************************************************************/ -/* pvrtc_compress.h */ +/* editor_native_shader_source_visualizer.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). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -28,11 +28,23 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef PVRTC_COMPRESS_H -#define PVRTC_COMPRESS_H +#ifndef EDITOR_NATIVE_SHADER_SOURCE_VISUALIZER_H +#define EDITOR_NATIVE_SHADER_SOURCE_VISUALIZER_H -#include "core/io/image.h" +#include "scene/gui/dialogs.h" +#include "scene/gui/tab_container.h" -void _pvrtc_register_compressors(); +class EditorNativeShaderSourceVisualizer : public AcceptDialog { + GDCLASS(EditorNativeShaderSourceVisualizer, AcceptDialog) + TabContainer *versions = nullptr; -#endif // PVRTC_COMPRESS_H + void _inspect_shader(RID p_shader); + +protected: + static void _bind_methods(); + +public: + EditorNativeShaderSourceVisualizer(); +}; + +#endif // EDITOR_NATIVE_SHADER_SOURCE_VISUALIZER_H diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index b33555f260..6f03518029 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -57,8 +57,10 @@ #include "scene/gui/split_container.h" #include "scene/gui/tab_container.h" #include "scene/gui/tabs.h" -#include "scene/gui/texture_progress.h" +#include "scene/gui/texture_progress_bar.h" +#include "scene/main/window.h" #include "scene/resources/packed_scene.h" +#include "servers/display_server.h" #include "servers/navigation_server_2d.h" #include "servers/navigation_server_3d.h" #include "servers/physics_server_2d.h" @@ -89,7 +91,6 @@ #include "editor/export_template_manager.h" #include "editor/filesystem_dock.h" #include "editor/import/editor_import_collada.h" -#include "editor/import/editor_scene_importer_gltf.h" #include "editor/import/resource_importer_bitmask.h" #include "editor/import/resource_importer_csv.h" #include "editor/import/resource_importer_csv_translation.h" @@ -101,6 +102,7 @@ #include "editor/import/resource_importer_texture.h" #include "editor/import/resource_importer_texture_atlas.h" #include "editor/import/resource_importer_wav.h" +#include "editor/import/scene_importer_mesh_node_3d.h" #include "editor/import_dock.h" #include "editor/multi_node_edit.h" #include "editor/node_dock.h" @@ -125,6 +127,7 @@ #include "editor/plugins/debugger_editor_plugin.h" #include "editor/plugins/editor_debugger_plugin.h" #include "editor/plugins/editor_preview_plugins.h" +#include "editor/plugins/font_editor_plugin.h" #include "editor/plugins/gi_probe_editor_plugin.h" #include "editor/plugins/gpu_particles_2d_editor_plugin.h" #include "editor/plugins/gpu_particles_3d_editor_plugin.h" @@ -140,6 +143,7 @@ #include "editor/plugins/multimesh_editor_plugin.h" #include "editor/plugins/navigation_polygon_editor_plugin.h" #include "editor/plugins/node_3d_editor_plugin.h" +#include "editor/plugins/ot_features_plugin.h" #include "editor/plugins/packed_scene_translation_parser_plugin.h" #include "editor/plugins/path_2d_editor_plugin.h" #include "editor/plugins/path_3d_editor_plugin.h" @@ -170,13 +174,10 @@ #include "editor/progress_dialog.h" #include "editor/project_export.h" #include "editor/project_settings_editor.h" -#include "editor/pvrtc_compress.h" #include "editor/quick_open.h" #include "editor/register_exporters.h" -#include "editor/run_settings_dialog.h" #include "editor/settings_config_dialog.h" -#include "scene/main/window.h" -#include "servers/display_server.h" + #include <stdio.h> #include <stdlib.h> @@ -336,7 +337,11 @@ void EditorNode::_update_scene_tabs() { if (scene_tabs->get_offset_buttons_visible()) { // move add button to fixed position on the tabbar if (scene_tab_add->get_parent() == scene_tabs) { - scene_tab_add->set_position(Point2(0, 0)); + if (scene_tabs->is_layout_rtl()) { + scene_tab_add->set_position(Point2(tabbar_container->get_size().x - scene_tab_add->get_size().x, 0)); + } else { + scene_tab_add->set_position(Point2(0, 0)); + } scene_tabs->remove_child(scene_tab_add); tabbar_container->add_child(scene_tab_add); tabbar_container->move_child(scene_tab_add, 1); @@ -351,7 +356,11 @@ void EditorNode::_update_scene_tabs() { if (scene_tabs->get_tab_count() != 0) { last_tab = scene_tabs->get_tab_rect(scene_tabs->get_tab_count() - 1); } - scene_tab_add->set_position(Point2(last_tab.get_position().x + last_tab.get_size().x + 3, last_tab.get_position().y)); + if (scene_tabs->is_layout_rtl()) { + scene_tab_add->set_position(Point2(last_tab.get_position().x - scene_tab_add->get_size().x - 3, last_tab.get_position().y)); + } else { + scene_tab_add->set_position(Point2(last_tab.get_position().x + last_tab.get_size().x + 3, last_tab.get_position().y)); + } } } @@ -368,9 +377,9 @@ void EditorNode::_version_control_menu_option(int p_idx) { void EditorNode::_update_title() { String appname = ProjectSettings::get_singleton()->get("application/config/name"); - String title = appname.empty() ? String(VERSION_FULL_NAME) : String(VERSION_NAME + String(" - ") + appname); + String title = appname.is_empty() ? String(VERSION_FULL_NAME) : String(VERSION_NAME + String(" - ") + appname); String edited = editor_data.get_edited_scene_root() ? editor_data.get_edited_scene_root()->get_filename() : String(); - if (!edited.empty()) { + if (!edited.is_empty()) { title += " - " + String(edited.get_file()); } if (unsaved_cache) { @@ -476,7 +485,7 @@ void EditorNode::_notification(int p_what) { RS::DOFBlurQuality dof_quality = RS::DOFBlurQuality(int(GLOBAL_GET("rendering/quality/depth_of_field/depth_of_field_bokeh_quality"))); bool dof_jitter = GLOBAL_GET("rendering/quality/depth_of_field/depth_of_field_use_jitter"); RS::get_singleton()->camera_effects_set_dof_blur_quality(dof_quality, dof_jitter); - RS::get_singleton()->environment_set_ssao_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/quality/ssao/quality"))), GLOBAL_GET("rendering/quality/ssao/half_size")); + RS::get_singleton()->environment_set_ssao_quality(RS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/quality/ssao/quality"))), GLOBAL_GET("rendering/quality/ssao/half_size"), GLOBAL_GET("rendering/quality/ssao/adaptive_target"), GLOBAL_GET("rendering/quality/ssao/blur_passes"), GLOBAL_GET("rendering/quality/ssao/fadeout_from"), GLOBAL_GET("rendering/quality/ssao/fadeout_to")); RS::get_singleton()->screen_space_roughness_limiter_set_active(GLOBAL_GET("rendering/quality/screen_filters/screen_space_roughness_limiter_enabled"), GLOBAL_GET("rendering/quality/screen_filters/screen_space_roughness_limiter_amount"), GLOBAL_GET("rendering/quality/screen_filters/screen_space_roughness_limiter_limit")); bool glow_bicubic = int(GLOBAL_GET("rendering/quality/glow/upscale_mode")) > 0; RS::get_singleton()->environment_glow_set_use_bicubic_upscale(glow_bicubic); @@ -511,6 +520,14 @@ void EditorNode::_notification(int p_what) { scene_root->set_snap_2d_transforms_to_pixel(snap_2d_transforms); bool snap_2d_vertices = GLOBAL_GET("rendering/quality/2d/snap_2d_vertices_to_pixel"); scene_root->set_snap_2d_vertices_to_pixel(snap_2d_vertices); + + Viewport::SDFOversize sdf_oversize = Viewport::SDFOversize(int(GLOBAL_GET("rendering/quality/2d_sdf/oversize"))); + scene_root->set_sdf_oversize(sdf_oversize); + Viewport::SDFScale sdf_scale = Viewport::SDFScale(int(GLOBAL_GET("rendering/quality/2d_sdf/scale"))); + scene_root->set_sdf_scale(sdf_scale); + + float lod_threshold = GLOBAL_GET("rendering/quality/mesh_lod/threshold_pixels"); + scene_root->set_lod_threshold(lod_threshold); } ResourceImporterTexture::get_singleton()->update_imports(); @@ -647,8 +664,13 @@ void EditorNode::_notification(int p_what) { bottom_panel_raise->set_icon(gui_base->get_theme_icon("ExpandBottomDock", "EditorIcons")); // clear_button->set_icon(gui_base->get_icon("Close", "EditorIcons")); don't have access to that node. needs to become a class property - dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); - dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_left->set_icon(theme->get_icon("Forward", "EditorIcons")); + dock_tab_move_right->set_icon(theme->get_icon("Back", "EditorIcons")); + } else { + dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); + dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + } PopupMenu *p = help_menu->get_popup(); p->set_item_icon(p->get_item_index(HELP_SEARCH), gui_base->get_theme_icon("HelpSearch", "EditorIcons")); @@ -760,15 +782,18 @@ void EditorNode::_fs_changed() { preset_name); } else { Ref<EditorExportPlatform> platform = preset->get_platform(); - if (platform.is_null()) { + const String export_path = export_defer.path.is_empty() ? preset->get_export_path() : export_defer.path; + if (export_path.is_empty()) { + export_error = vformat("Export preset '%s' doesn't have a default export path, and none was specified.", preset_name); + } else if (platform.is_null()) { export_error = vformat("Export preset '%s' doesn't have a matching platform.", preset_name); } else { Error err = OK; if (export_defer.pack_only) { // Only export .pck or .zip data pack. - if (export_defer.path.ends_with(".zip")) { - err = platform->export_zip(preset, export_defer.debug, export_defer.path); - } else if (export_defer.path.ends_with(".pck")) { - err = platform->export_pack(preset, export_defer.debug, export_defer.path); + if (export_path.ends_with(".zip")) { + err = platform->export_zip(preset, export_defer.debug, export_path); + } else if (export_path.ends_with(".pck")) { + err = platform->export_pack(preset, export_defer.debug, export_path); } } else { // Normal project export. String config_error; @@ -777,7 +802,7 @@ void EditorNode::_fs_changed() { ERR_PRINT(vformat("Cannot export project with preset '%s' due to configuration errors:\n%s", preset_name, config_error)); err = missing_templates ? ERR_FILE_NOT_FOUND : ERR_UNCONFIGURED; } else { - err = platform->export_project(preset, export_defer.debug, export_defer.path); + err = platform->export_project(preset, export_defer.debug, export_path); } } switch (err) { @@ -787,7 +812,7 @@ void EditorNode::_fs_changed() { export_error = vformat("Project export failed for preset '%s', the export template appears to be missing.", preset_name); break; case ERR_FILE_BAD_PATH: - export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_defer.path); + export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_path); break; default: export_error = vformat("Project export failed with error code %d for preset '%s'.", (int)err, preset_name); @@ -796,7 +821,7 @@ void EditorNode::_fs_changed() { } } - if (!export_error.empty()) { + if (!export_error.is_empty()) { ERR_PRINT(export_error); OS::get_singleton()->set_exit_code(EXIT_FAILURE); } @@ -1394,6 +1419,17 @@ int EditorNode::_save_external_resources() { return saved; } +static void _reset_animation_players(Node *p_node, List<Ref<AnimatedValuesBackup>> *r_anim_backups) { + for (int i = 0; i < p_node->get_child_count(); i++) { + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(p_node->get_child(i)); + if (player && player->is_reset_on_save_enabled() && player->can_apply_reset()) { + Ref<AnimatedValuesBackup> old_values = player->apply_reset(); + r_anim_backups->push_back(old_values); + } + _reset_animation_players(p_node->get_child(i), r_anim_backups); + } +} + void EditorNode::_save_scene(String p_file, int idx) { Node *scene = editor_data.get_edited_scene_root(idx); @@ -1408,6 +1444,8 @@ void EditorNode::_save_scene(String p_file, int idx) { } editor_data.apply_changes_in_editors(); + List<Ref<AnimatedValuesBackup>> anim_backups; + _reset_animation_players(scene, &anim_backups); _save_default_environment(); _set_scene_metadata(p_file, idx); @@ -1455,6 +1493,11 @@ void EditorNode::_save_scene(String p_file, int idx) { _save_external_resources(); editor_data.save_editor_external_data(); + + for (List<Ref<AnimatedValuesBackup>>::Element *E = anim_backups.front(); E; E = E->next()) { + E->get()->restore(); + } + if (err == OK) { scene->set_filename(ProjectSettings::get_singleton()->localize_path(p_file)); if (idx < 0 || idx == editor_data.get_edited_scene()) { @@ -1668,7 +1711,7 @@ void EditorNode::_dialog_action(String p_file) { current_obj->_change_notify(); } break; case SETTINGS_LAYOUT_SAVE: { - if (p_file.empty()) { + if (p_file.is_empty()) { return; } @@ -1696,7 +1739,7 @@ void EditorNode::_dialog_action(String p_file) { } break; case SETTINGS_LAYOUT_DELETE: { - if (p_file.empty()) { + if (p_file.is_empty()) { return; } @@ -1779,7 +1822,7 @@ void EditorNode::edit_item(Object *p_object) { sub_plugins = editor_data.get_subeditors(p_object); } - if (!sub_plugins.empty()) { + if (!sub_plugins.is_empty()) { bool same = true; if (sub_plugins.size() == editor_plugins_over->get_plugins_list().size()) { for (int i = 0; i < sub_plugins.size(); i++) { @@ -1955,7 +1998,7 @@ void EditorNode::_edit_current() { multi_nodes.push_back(node); } } - if (!multi_nodes.empty()) { + if (!multi_nodes.is_empty()) { // Pick the top-most node multi_nodes.sort_custom<Node::Comparator>(); selected_node = multi_nodes.front()->get(); @@ -2037,13 +2080,13 @@ void EditorNode::_edit_current() { sub_plugins = editor_data.get_subeditors(current_obj); } - if (!sub_plugins.empty()) { + if (!sub_plugins.is_empty()) { _display_top_editors(false); _set_top_editors(sub_plugins); _set_editing_top_editors(current_obj); _display_top_editors(true); - } else if (!editor_plugins_over->get_plugins_list().empty()) { + } else if (!editor_plugins_over->get_plugins_list().is_empty()) { hide_top_editors(); } } @@ -2080,7 +2123,10 @@ void EditorNode::_run(bool p_current, const String &p_custom) { if (scene->get_filename() == "") { current_option = -1; - _menu_option_confirm(FILE_SAVE_BEFORE_RUN, false); + _menu_option(FILE_SAVE_AS_SCENE); + // Set the option to save and run so when the dialog is accepted, the scene runs. + current_option = FILE_SAVE_AND_RUN; + file->set_title(TTR("Save scene before running...")); return; } @@ -2213,7 +2259,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } break; case FILE_OPEN_PREV: { - if (previous_scenes.empty()) { + if (previous_scenes.is_empty()) { break; } opening_prev = true; @@ -2249,7 +2295,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (unsaved_cache || p_option == FILE_CLOSE_ALL_AND_QUIT || p_option == FILE_CLOSE_ALL_AND_RUN_PROJECT_MANAGER) { String scene_filename = editor_data.get_edited_scene_root(tab_closing)->get_filename(); - save_confirmation->get_ok()->set_text(TTR("Save & Close")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Close")); save_confirmation->set_text(vformat(TTR("Save changes to '%s' before closing?"), scene_filename != "" ? scene_filename : "unsaved scene")); save_confirmation->popup_centered(); break; @@ -2270,7 +2316,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing; Node *scene = editor_data.get_edited_scene_root(scene_idx); - if (scene && scene->get_filename() != "") { + if (scene && scene->get_filename() != "" && FileAccess::exists(scene->get_filename())) { if (scene_idx != editor_data.get_edited_scene()) { _save_scene_with_preview(scene->get_filename(), scene_idx); } else { @@ -2315,11 +2361,12 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } if (scene->get_filename() != "") { - file->set_current_path(scene->get_filename()); + String path = scene->get_filename(); + file->set_current_path(path); if (extensions.size()) { - String ext = scene->get_filename().get_extension().to_lower(); + String ext = path.get_extension().to_lower(); if (extensions.find(ext) == nullptr) { - file->set_current_path(scene->get_filename().replacen("." + ext, "." + extensions.front()->get())); + file->set_current_path(path.replacen("." + ext, "." + extensions.front()->get())); } } } else { @@ -2338,18 +2385,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case FILE_SAVE_ALL_SCENES: { _save_all_scenes(); } break; - case FILE_SAVE_BEFORE_RUN: { - if (!p_confirmed) { - confirmation->get_cancel()->set_text(TTR("No")); - confirmation->get_ok()->set_text(TTR("Yes")); - confirmation->set_text(TTR("This scene has never been saved. Save before running?")); - confirmation->popup_centered(); - break; - } - - _menu_option(FILE_SAVE_AS_SCENE); - _menu_option_confirm(FILE_SAVE_AND_RUN, false); - } break; case FILE_EXPORT_PROJECT: { project_export->popup_export(); @@ -2405,7 +2440,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case FILE_EXTERNAL_OPEN_SCENE: { if (unsaved_cache && !p_confirmed) { - confirmation->get_ok()->set_text(TTR("Open")); + confirmation->get_ok_button()->set_text(TTR("Open")); confirmation->set_text(TTR("Current scene not saved. Open anyway?")); confirmation->popup_centered(); break; @@ -2461,7 +2496,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } if (unsaved_cache && !p_confirmed) { - confirmation->get_ok()->set_text(TTR("Reload Saved Scene")); + confirmation->get_ok_button()->set_text(TTR("Reload Saved Scene")); confirmation->set_text( TTR("The current scene has unsaved changes.\nReload the saved scene anyway? This action cannot be undone.")); confirmation->popup_centered(); @@ -2484,7 +2519,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } break; case RUN_PLAY_CUSTOM_SCENE: { - if (run_custom_filename.empty() || editor_run.get_status() == EditorRun::STATUS_STOP) { + if (run_custom_filename.is_empty() || editor_run.get_status() == EditorRun::STATUS_STOP) { _menu_option_confirm(RUN_STOP, true); quick_run->popup_dialog("PackedScene", true); quick_run->set_title(TTR("Quick Run Scene...")); @@ -2534,9 +2569,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { run_play_current(); } break; - case RUN_SCENE_SETTINGS: { - run_settings_dialog->popup_run_settings(); - } break; case RUN_SETTINGS: { project_settings->popup_project_settings(); } break; @@ -2568,7 +2600,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (_next_unsaved_scene(!save_each) == -1) { bool confirm = EDITOR_GET("interface/editor/quit_confirmation"); if (confirm) { - confirmation->get_ok()->set_text(p_option == FILE_QUIT ? TTR("Quit") : TTR("Yes")); + confirmation->get_ok_button()->set_text(p_option == FILE_QUIT ? TTR("Quit") : TTR("Yes")); confirmation->set_text(p_option == FILE_QUIT ? TTR("Exit the editor?") : TTR("Open Project Manager?")); confirmation->popup_centered(); } else { @@ -2586,7 +2618,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { i = _next_unsaved_scene(true, ++i); } - save_confirmation->get_ok()->set_text(TTR("Save & Quit")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Quit")); save_confirmation->set_text((p_option == FILE_QUIT ? TTR("Save changes to the following scene(s) before quitting?") : TTR("Save changes the following scene(s) before opening Project Manager?")) + unsaved_scenes); save_confirmation->popup_centered(); } @@ -2705,14 +2737,14 @@ void EditorNode::_screenshot(bool p_use_utc) { } void EditorNode::_save_screenshot(NodePath p_path) { - Control *editor_viewport = EditorInterface::get_singleton()->get_editor_viewport(); - ERR_FAIL_COND_MSG(!editor_viewport, "Cannot get editor viewport."); - Viewport *viewport = editor_viewport->get_viewport(); - ERR_FAIL_COND_MSG(!viewport, "Cannot get editor viewport."); + Control *editor_main_control = EditorInterface::get_singleton()->get_editor_main_control(); + ERR_FAIL_COND_MSG(!editor_main_control, "Cannot get editor main control."); + Viewport *viewport = editor_main_control->get_viewport(); + ERR_FAIL_COND_MSG(!viewport, "Cannot get editor main control viewport."); Ref<ViewportTexture> texture = viewport->get_texture(); - ERR_FAIL_COND_MSG(texture.is_null(), "Cannot get editor viewport texture."); + ERR_FAIL_COND_MSG(texture.is_null(), "Cannot get editor main control viewport texture."); Ref<Image> img = texture->get_data(); - ERR_FAIL_COND_MSG(img.is_null(), "Cannot get editor viewport texture image."); + ERR_FAIL_COND_MSG(img.is_null(), "Cannot get editor main control viewport texture image."); Error error = img->save_png(p_path); ERR_FAIL_COND_MSG(error != OK, "Cannot save screenshot to file '" + p_path + "'."); } @@ -2724,16 +2756,13 @@ void EditorNode::_tool_menu_option(int p_idx) { } break; case TOOLS_CUSTOM: { if (tool_menu->get_item_submenu(p_idx) == "") { - Array params = tool_menu->get_item_metadata(p_idx); - - Object *handler = ObjectDB::get_instance(params[0]); - String callback = params[1]; - Variant *ud = ¶ms[2]; + Callable callback = tool_menu->get_item_metadata(p_idx); Callable::CallError ce; + Variant result; + callback.call(nullptr, 0, result, ce); - handler->call(callback, (const Variant **)&ud, 1, ce); if (ce.error != Callable::CallError::CALL_OK) { - String err = Variant::get_call_error_text(handler, callback, (const Variant **)&ud, 1, ce); + String err = Variant::get_callable_error_text(callback, nullptr, 0, ce); ERR_PRINT("Error calling function from tool menu: " + err); } } // else it's a submenu so don't do anything. @@ -2839,7 +2868,7 @@ void EditorNode::_update_file_menu_opened() { Ref<Shortcut> reopen_closed_scene_sc = ED_GET_SHORTCUT("editor/reopen_closed_scene"); reopen_closed_scene_sc->set_name(TTR("Reopen Closed Scene")); PopupMenu *pop = file_menu->get_popup(); - pop->set_item_disabled(pop->get_item_index(FILE_OPEN_PREV), previous_scenes.empty()); + pop->set_item_disabled(pop->get_item_index(FILE_OPEN_PREV), previous_scenes.is_empty()); } void EditorNode::_update_file_menu_closed() { @@ -2847,8 +2876,8 @@ void EditorNode::_update_file_menu_closed() { pop->set_item_disabled(pop->get_item_index(FILE_OPEN_PREV), false); } -Control *EditorNode::get_viewport() { - return viewport; +Control *EditorNode::get_main_control() { + return main_control; } void EditorNode::_editor_select(int p_which) { @@ -3635,6 +3664,9 @@ void EditorNode::register_editor_types() { ClassDB::register_class<ScriptCreateDialog>(); ClassDB::register_class<EditorFeatureProfile>(); ClassDB::register_class<EditorSpinSlider>(); + ClassDB::register_class<EditorSceneImporterMesh>(); + ClassDB::register_class<EditorSceneImporterMeshNode3D>(); + ClassDB::register_virtual_class<FileSystemDock>(); // FIXME: Is this stuff obsolete, or should it be ported to new APIs? @@ -3783,7 +3815,7 @@ Ref<Texture2D> EditorNode::get_object_icon(const Object *p_object, const String } Ref<Texture2D> EditorNode::get_class_icon(const String &p_class, const String &p_fallback) const { - ERR_FAIL_COND_V_MSG(p_class.empty(), nullptr, "Class name cannot be empty."); + ERR_FAIL_COND_V_MSG(p_class.is_empty(), nullptr, "Class name cannot be empty."); if (ScriptServer::is_global_class(p_class)) { Ref<ImageTexture> icon; @@ -3926,7 +3958,7 @@ Error EditorNode::export_preset(const String &p_preset, const String &p_path, bo void EditorNode::show_accept(const String &p_text, const String &p_title) { current_option = -1; - accept->get_ok()->set_text(p_title); + accept->get_ok_button()->set_text(p_title); accept->set_text(p_text); accept->popup_centered(); } @@ -3978,16 +4010,16 @@ void EditorNode::_dock_make_float() { window->set_title(dock->get_name()); Panel *p = memnew(Panel); p->set_mode(Panel::MODE_FOREGROUND); - p->set_anchors_and_margins_preset(Control::PRESET_WIDE); + p->set_anchors_and_offsets_preset(Control::PRESET_WIDE); window->add_child(p); MarginContainer *margin = memnew(MarginContainer); - margin->set_anchors_and_margins_preset(Control::PRESET_WIDE); + margin->set_anchors_and_offsets_preset(Control::PRESET_WIDE); margin->add_theme_constant_override("margin_right", borders.width); margin->add_theme_constant_override("margin_top", borders.height); margin->add_theme_constant_override("margin_left", borders.width); margin->add_theme_constant_override("margin_bottom", borders.height); window->add_child(margin); - dock->set_anchors_and_margins_preset(Control::PRESET_WIDE); + dock->set_anchors_and_offsets_preset(Control::PRESET_WIDE); margin->add_child(dock); window->set_wrap_controls(true); window->set_size(dock_size); @@ -4515,7 +4547,7 @@ bool EditorNode::has_scenes_in_session() { return false; } Array scenes = config->get_value("EditorNode", "open_scenes"); - return !scenes.empty(); + return !scenes.is_empty(); } bool EditorNode::ensure_main_scene(bool p_from_native) { @@ -4625,14 +4657,14 @@ void EditorNode::_layout_menu_option(int p_id) { case SETTINGS_LAYOUT_SAVE: { current_option = p_id; layout_dialog->set_title(TTR("Save Layout")); - layout_dialog->get_ok()->set_text(TTR("Save")); + layout_dialog->get_ok_button()->set_text(TTR("Save")); layout_dialog->popup_centered(); layout_dialog->set_name_line_enabled(true); } break; case SETTINGS_LAYOUT_DELETE: { current_option = p_id; layout_dialog->set_title(TTR("Delete Layout")); - layout_dialog->get_ok()->set_text(TTR("Delete")); + layout_dialog->get_ok_button()->set_text(TTR("Delete")); layout_dialog->popup_centered(); layout_dialog->set_name_line_enabled(false); } break; @@ -4674,7 +4706,7 @@ void EditorNode::_scene_tab_closed(int p_tab, int option) { saved_version != editor_data.get_undo_redo().get_version() : editor_data.get_scene_version(p_tab) != 0; if (unsaved) { - save_confirmation->get_ok()->set_text(TTR("Save & Close")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Close")); save_confirmation->set_text(vformat(TTR("Save changes to '%s' before closing?"), scene->get_filename() != "" ? scene->get_filename() : "unsaved scene")); save_confirmation->popup_centered(); } else { @@ -4685,7 +4717,7 @@ void EditorNode::_scene_tab_closed(int p_tab, int option) { _update_scene_tabs(); } -void EditorNode::_scene_tab_hover(int p_tab) { +void EditorNode::_scene_tab_hovered(int p_tab) { if (!bool(EDITOR_GET("interface/scene_tabs/show_thumbnail_on_hover"))) { return; } @@ -4741,7 +4773,7 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) { Ref<Shortcut> undo_close_tab_sc = ED_GET_SHORTCUT("editor/reopen_closed_scene"); undo_close_tab_sc->set_name(TTR("Undo Close Tab")); scene_tabs_context_menu->add_shortcut(undo_close_tab_sc, FILE_OPEN_PREV); - if (previous_scenes.empty()) { + if (previous_scenes.is_empty()) { scene_tabs_context_menu->set_item_disabled(scene_tabs_context_menu->get_item_index(FILE_OPEN_PREV), true); } scene_tabs_context_menu->add_item(TTR("Close Other Tabs"), FILE_CLOSE_OTHERS); @@ -4813,16 +4845,6 @@ Button *EditorNode::add_bottom_panel_item(String p_text, Control *p_item) { return tb; } -bool EditorNode::are_bottom_panels_hidden() const { - for (int i = 0; i < bottom_panel_items.size(); i++) { - if (bottom_panel_items[i].button->is_pressed()) { - return false; - } - } - - return true; -} - void EditorNode::hide_bottom_panel() { for (int i = 0; i < bottom_panel_items.size(); i++) { if (bottom_panel_items[i].control->is_visible()) { @@ -5074,17 +5096,10 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String> &p_paths, Control * return drag_data; } -void EditorNode::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) { - ERR_FAIL_NULL(p_handler); +void EditorNode::add_tool_menu_item(const String &p_name, const Callable &p_callback) { int idx = tool_menu->get_item_count(); tool_menu->add_item(p_name, TOOLS_CUSTOM); - - Array parameters; - parameters.push_back(p_handler->get_instance_id()); - parameters.push_back(p_callback); - parameters.push_back(p_ud); - - tool_menu->set_item_metadata(idx, parameters); + tool_menu->set_item_metadata(idx, p_callback); } void EditorNode::add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu) { @@ -5162,7 +5177,7 @@ void EditorNode::_add_dropped_files_recursive(const Vector<String> &p_files, Str next_file = sub_dir->get_next(); } - if (!sub_files.empty()) { + if (!sub_files.is_empty()) { dir->make_dir(to); _add_dropped_files_recursive(sub_files, to); } @@ -5463,7 +5478,7 @@ static void _execute_thread(void *p_ud) { int EditorNode::execute_and_show_output(const String &p_title, const String &p_path, const List<String> &p_arguments, bool p_close_on_ok, bool p_close_on_errors) { execute_output_dialog->set_title(p_title); - execute_output_dialog->get_ok()->set_disabled(true); + execute_output_dialog->get_ok_button()->set_disabled(true); execute_outputs->clear(); execute_outputs->set_scroll_follow(true); execute_output_dialog->popup_centered_ratio(); @@ -5504,7 +5519,7 @@ int EditorNode::execute_and_show_output(const String &p_title, const String &p_p execute_output_dialog->hide(); } - execute_output_dialog->get_ok()->set_disabled(false); + execute_output_dialog->get_ok_button()->set_disabled(false); return eta.exitcode; } @@ -5565,46 +5580,51 @@ EditorNode::EditorNode() { { int display_scale = EditorSettings::get_singleton()->get("interface/editor/display_scale"); - float custom_display_scale = EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"); switch (display_scale) { case 0: { - // Try applying a suitable display scale automatically + // Try applying a suitable display scale automatically. #ifdef OSX_ENABLED editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); - editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); + float scale; + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + // hiDPI display. + scale = 2.0; + } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. + // Icons won't look great, but this is better than having editor elements overflow from its window. + scale = 0.75; + } else { + scale = 1.0; + } + + editor_set_scale(scale); #endif } break; - case 1: { + case 1: editor_set_scale(0.75); - } break; - - case 2: { + break; + case 2: editor_set_scale(1.0); - } break; - - case 3: { + break; + case 3: editor_set_scale(1.25); - } break; - - case 4: { + break; + case 4: editor_set_scale(1.5); - } break; - - case 5: { + break; + case 5: editor_set_scale(1.75); - } break; - - case 6: { + break; + case 6: editor_set_scale(2.0); - } break; - - default: { - editor_set_scale(custom_display_scale); - } break; + break; + default: + editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale")); + break; } } @@ -5684,10 +5704,6 @@ EditorNode::EditorNode() { import_obj2.instance(); import_scene->add_importer(import_obj2); - Ref<EditorSceneImporterGLTF> import_gltf; - import_gltf.instance(); - import_scene->add_importer(import_gltf); - Ref<EditorSceneImporterESCN> import_escn; import_escn.instance(); import_scene->add_importer(import_escn); @@ -5712,8 +5728,6 @@ EditorNode::EditorNode() { EditorInspector::add_inspector_plugin(smp); } - _pvrtc_register_compressors(); - editor_selection = memnew(EditorSelection); EditorFileSystem *efs = memnew(EditorFileSystem); @@ -5769,11 +5783,11 @@ EditorNode::EditorNode() { theme_base = memnew(Control); add_child(theme_base); - theme_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); + theme_base->set_anchors_and_offsets_preset(Control::PRESET_WIDE); gui_base = memnew(Panel); theme_base->add_child(gui_base); - gui_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); + gui_base->set_anchors_and_offsets_preset(Control::PRESET_WIDE); theme_base->set_theme(theme); gui_base->set_theme(theme); @@ -5785,13 +5799,13 @@ EditorNode::EditorNode() { gui_base->add_child(progress_dialog); // take up all screen - gui_base->set_anchor(MARGIN_RIGHT, Control::ANCHOR_END); - gui_base->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_END); + gui_base->set_anchor(SIDE_RIGHT, Control::ANCHOR_END); + gui_base->set_anchor(SIDE_BOTTOM, Control::ANCHOR_END); gui_base->set_end(Point2(0, 0)); main_vbox = memnew(VBoxContainer); gui_base->add_child(main_vbox); - main_vbox->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 8); + main_vbox->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 8); main_vbox->add_theme_constant_override("separation", 8 * EDSCALE); menu_hb = memnew(HBoxContainer); @@ -5870,7 +5884,11 @@ EditorNode::EditorNode() { HBoxContainer *dock_hb = memnew(HBoxContainer); dock_tab_move_left = memnew(Button); dock_tab_move_left->set_flat(true); - dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_left->set_icon(theme->get_icon("Forward", "EditorIcons")); + } else { + 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", callable_mp(this, &EditorNode::_dock_move_left)); dock_hb->add_child(dock_tab_move_left); @@ -5883,7 +5901,11 @@ EditorNode::EditorNode() { dock_tab_move_right = memnew(Button); dock_tab_move_right->set_flat(true); - dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + } else { + dock_tab_move_right->set_icon(theme->get_icon("Back", "EditorIcons")); + } dock_tab_move_right->set_focus_mode(Control::FOCUS_NONE); dock_tab_move_right->connect("pressed", callable_mp(this, &EditorNode::_dock_move_right)); @@ -5960,8 +5982,8 @@ EditorNode::EditorNode() { scene_tabs->set_drag_to_rearrange_enabled(true); scene_tabs->connect("tab_changed", callable_mp(this, &EditorNode::_scene_tab_changed)); scene_tabs->connect("right_button_pressed", callable_mp(this, &EditorNode::_scene_tab_script_edited)); - scene_tabs->connect("tab_close", callable_mp(this, &EditorNode::_scene_tab_closed), varray(SCENE_TAB_CLOSE)); - scene_tabs->connect("tab_hover", callable_mp(this, &EditorNode::_scene_tab_hover)); + scene_tabs->connect("tab_closed", callable_mp(this, &EditorNode::_scene_tab_closed), varray(SCENE_TAB_CLOSE)); + scene_tabs->connect("tab_hovered", callable_mp(this, &EditorNode::_scene_tab_hovered)); scene_tabs->connect("mouse_exited", callable_mp(this, &EditorNode::_scene_tab_exit)); scene_tabs->connect("gui_input", callable_mp(this, &EditorNode::_scene_tab_input)); scene_tabs->connect("reposition_active_tab_request", callable_mp(this, &EditorNode::_reposition_active_tab)); @@ -6011,10 +6033,10 @@ EditorNode::EditorNode() { scene_root->set_disable_input(true); scene_root->set_as_audio_listener_2d(true); - viewport = memnew(VBoxContainer); - viewport->set_v_size_flags(Control::SIZE_EXPAND_FILL); - viewport->add_theme_constant_override("separation", 0); - scene_root_parent->add_child(viewport); + main_control = memnew(VBoxContainer); + main_control->set_v_size_flags(Control::SIZE_EXPAND_FILL); + main_control->add_theme_constant_override("separation", 0); + scene_root_parent->add_child(main_control); HBoxContainer *left_menu_hb = memnew(HBoxContainer); menu_hb->add_child(left_menu_hb); @@ -6055,9 +6077,6 @@ EditorNode::EditorNode() { project_settings = memnew(ProjectSettingsEditor(&editor_data)); gui_base->add_child(project_settings); - run_settings_dialog = memnew(RunSettingsDialog); - gui_base->add_child(run_settings_dialog); - export_template_manager = memnew(ExportTemplateManager); gui_base->add_child(export_template_manager); @@ -6341,6 +6360,7 @@ EditorNode::EditorNode() { video_driver->set_focus_mode(Control::FOCUS_NONE); video_driver->connect("item_selected", callable_mp(this, &EditorNode::_video_driver_selected)); video_driver->add_theme_font_override("font", gui_base->get_theme_font("bold", "EditorFonts")); + video_driver->add_theme_font_size_override("font_size", gui_base->get_theme_font_size("bold_size", "EditorFonts")); // TODO re-enable when GLES2 is ported video_driver->set_disabled(true); right_menu_hb->add_child(video_driver); @@ -6367,7 +6387,7 @@ EditorNode::EditorNode() { #endif 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->get_ok_button()->set_text(TTR("Save & Restart")); video_restart_dialog->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(SET_VIDEO_DRIVER_SAVE_AND_RESTART)); gui_base->add_child(video_restart_dialog); @@ -6499,6 +6519,9 @@ EditorNode::EditorNode() { center_split->connect("resized", callable_mp(this, &EditorNode::_vp_resized)); + native_shader_source_visualizer = memnew(EditorNativeShaderSourceVisualizer); + gui_base->add_child(native_shader_source_visualizer); + orphan_resources = memnew(OrphanResourcesDialog); gui_base->add_child(orphan_resources); @@ -6514,19 +6537,19 @@ EditorNode::EditorNode() { 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->get_ok_button()->set_text(TTR("Manage Templates")); custom_build_manage_templates->connect("confirmed", callable_mp(this, &EditorNode::_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->get_ok_button()->set_text(TTR("Install")); install_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_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->get_ok_button()->set_text(TTR("Show in File Manager")); remove_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); gui_base->add_child(remove_android_build_template); @@ -6640,6 +6663,8 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(GradientEditorPlugin(this))); add_editor_plugin(memnew(CollisionShape2DEditorPlugin(this))); add_editor_plugin(memnew(CurveEditorPlugin(this))); + add_editor_plugin(memnew(FontEditorPlugin(this))); + add_editor_plugin(memnew(OpenTypeFeaturesEditorPlugin(this))); add_editor_plugin(memnew(TextureEditorPlugin(this))); add_editor_plugin(memnew(TextureLayeredEditorPlugin(this))); add_editor_plugin(memnew(Texture3DEditorPlugin(this))); @@ -6727,7 +6752,7 @@ EditorNode::EditorNode() { set_process(true); open_imported = memnew(ConfirmationDialog); - open_imported->get_ok()->set_text(TTR("Open Anyway")); + open_imported->get_ok_button()->set_text(TTR("Open Anyway")); new_inherited_button = open_imported->add_button(TTR("New Inherited"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "inherit"); open_imported->connect("confirmed", callable_mp(this, &EditorNode::_open_imported)); open_imported->connect("custom_action", callable_mp(this, &EditorNode::_inherit_imported)); @@ -6777,7 +6802,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->get_ok_button()->set_text(TTR("Select")); pick_main_scene->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(SETTINGS_PICK_MAIN_SCENE)); for (int i = 0; i < _init_callbacks.size(); i++) { @@ -6805,14 +6830,16 @@ EditorNode::EditorNode() { ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1); ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2); ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3); + ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_ALT | KEY_4); ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE); #else - ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_F1); - ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_F2); - ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_F3); //hack needed for script editor F3 search to work :) Assign like this or don't use F3 - ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_SHIFT | KEY_F1); + // Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock. + ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1); + ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2); + ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3); + ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4); + ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_F1); #endif - ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library")); ED_SHORTCUT("editor/editor_next", TTR("Open the next Editor")); ED_SHORTCUT("editor/editor_prev", TTR("Open the previous Editor")); @@ -6918,8 +6945,8 @@ void EditorPluginList::remove_plugin(EditorPlugin *p_plugin) { plugins_list.erase(p_plugin); } -bool EditorPluginList::empty() { - return plugins_list.empty(); +bool EditorPluginList::is_empty() { + return plugins_list.is_empty(); } void EditorPluginList::clear() { diff --git a/editor/editor_node.h b/editor/editor_node.h index dec28b0d2b..1da162dc9c 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -34,6 +34,7 @@ #include "editor/editor_data.h" #include "editor/editor_export.h" #include "editor/editor_folding.h" +#include "editor/editor_native_shader_source_visualizer.h" #include "editor/editor_run.h" #include "editor/inspector_dock.h" #include "editor/property_editor.h" @@ -81,7 +82,7 @@ class RunSettingsDialog; class ScriptCreateDialog; class TabContainer; class Tabs; -class TextureProgress; +class TextureProgressBar; class Button; class VSplitContainer; class Window; @@ -107,10 +108,10 @@ public: String path; List<String> args; String output; - Thread *execute_output_thread; + Thread *execute_output_thread = nullptr; Mutex execute_output_mutex; - int exitcode; - volatile bool done; + int exitcode = 0; + volatile bool done = false; }; private: @@ -125,7 +126,6 @@ private: FILE_SAVE_SCENE, FILE_SAVE_AS_SCENE, FILE_SAVE_ALL_SCENES, - FILE_SAVE_BEFORE_RUN, FILE_SAVE_AND_RUN, FILE_SHOW_IN_FILESYSTEM, FILE_IMPORT_SUBSCENE, @@ -161,7 +161,6 @@ private: RUN_STOP, RUN_PLAY_SCENE, RUN_PLAY_CUSTOM_SCENE, - RUN_SCENE_SETTINGS, RUN_SETTINGS, RUN_PROJECT_DATA_FOLDER, RUN_PROJECT_MANAGER, @@ -256,7 +255,7 @@ private: Control *vp_base; HBoxContainer *menu_hb; - Control *viewport; + Control *main_control; MenuButton *file_menu; MenuButton *project_menu; MenuButton *debug_menu; @@ -272,7 +271,7 @@ private: Button *play_scene_button; Button *play_custom_scene_button; Button *search_button; - TextureProgress *audio_vu; + TextureProgressBar *audio_vu; Timer *screenshot_timer; @@ -312,7 +311,6 @@ private: ConfirmationDialog *remove_android_build_template; EditorSettingsDialog *settings_config_dialog; - RunSettingsDialog *run_settings_dialog; ProjectSettingsEditor *project_settings; PopupMenu *vcs_actions_menu; EditorFileDialog *file; @@ -325,6 +323,8 @@ private: String current_path; MenuButton *update_spinner; + EditorNativeShaderSourceVisualizer *native_shader_source_visualizer; + String defer_load_scene; Node *_last_instanced_scene; @@ -409,8 +409,8 @@ private: struct BottomPanelItem { String name; - Control *control; - Button *button; + Control *control = nullptr; + Button *button = nullptr; }; Vector<BottomPanelItem> bottom_panel_items; @@ -554,8 +554,8 @@ private: struct ExportDefer { String preset; String path; - bool debug; - bool pack_only; + bool debug = false; + bool pack_only = false; } export_defer; bool cmdline_export_mode; @@ -579,7 +579,7 @@ private: void _dock_make_float(); void _scene_tab_changed(int p_tab); void _scene_tab_closed(int p_tab, int option = SCENE_TAB_CLOSE); - void _scene_tab_hover(int p_tab); + void _scene_tab_hovered(int p_tab); void _scene_tab_exit(); void _scene_tab_input(const Ref<InputEvent> &p_input); void _reposition_active_tab(int idx_to); @@ -730,7 +730,7 @@ public: bool is_changing_scene() const; static EditorLog *get_log() { return singleton->log; } - Control *get_viewport(); + Control *get_main_control(); void set_edited_scene(Node *p_scene); @@ -824,7 +824,6 @@ public: Button *get_pause_button() { return pause_button; } Button *add_bottom_panel_item(String p_text, Control *p_item); - bool are_bottom_panels_hidden() const; void make_bottom_panel_item_visible(Control *p_item); void raise_bottom_panel_item(Control *p_item); void hide_bottom_panel(); @@ -833,7 +832,7 @@ public: Variant drag_resource(const Ref<Resource> &p_res, Control *p_from); Variant drag_files_and_dirs(const Vector<String> &p_paths, Control *p_from); - void add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud = Variant()); + void add_tool_menu_item(const String &p_name, const Callable &p_callback); void add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu); void remove_tool_menu_item(const String &p_name); @@ -906,7 +905,7 @@ public: void add_plugin(EditorPlugin *p_plugin); void remove_plugin(EditorPlugin *p_plugin); void clear(); - bool empty(); + bool is_empty(); EditorPluginList(); ~EditorPluginList(); diff --git a/editor/editor_path.cpp b/editor/editor_path.cpp index c249974f99..d1c52b4310 100644 --- a/editor/editor_path.cpp +++ b/editor/editor_path.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_path.h b/editor/editor_path.h index 01ba25ab69..d1090947f9 100644 --- a/editor/editor_path.h +++ b/editor/editor_path.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index 49d8e58955..840bae35bf 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -128,7 +128,7 @@ Vector<Ref<Texture2D>> EditorInterface::make_mesh_previews(const Vector<Ref<Mesh Main::iteration(); Main::iteration(); Ref<Image> img = RS::get_singleton()->texture_2d_get(viewport_texture); - ERR_CONTINUE(!img.is_valid() || img->empty()); + ERR_CONTINUE(!img.is_valid() || img->is_empty()); Ref<ImageTexture> it(memnew(ImageTexture)); it->create_from_image(img); @@ -152,8 +152,8 @@ void EditorInterface::set_main_screen_editor(const String &p_name) { EditorNode::get_singleton()->select_editor_by_name(p_name); } -Control *EditorInterface::get_editor_viewport() { - return EditorNode::get_singleton()->get_viewport(); +Control *EditorInterface::get_editor_main_control() { + return EditorNode::get_singleton()->get_main_control(); } void EditorInterface::edit_resource(const Ref<Resource> &p_resource) { @@ -319,7 +319,7 @@ void EditorInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("get_edited_scene_root"), &EditorInterface::get_edited_scene_root); ClassDB::bind_method(D_METHOD("get_resource_previewer"), &EditorInterface::get_resource_previewer); ClassDB::bind_method(D_METHOD("get_resource_filesystem"), &EditorInterface::get_resource_file_system); - ClassDB::bind_method(D_METHOD("get_editor_viewport"), &EditorInterface::get_editor_viewport); + ClassDB::bind_method(D_METHOD("get_editor_main_control"), &EditorInterface::get_editor_main_control); ClassDB::bind_method(D_METHOD("make_mesh_previews", "meshes", "preview_size"), &EditorInterface::_make_mesh_previews); ClassDB::bind_method(D_METHOD("select_file", "file"), &EditorInterface::select_file); ClassDB::bind_method(D_METHOD("get_selected_path"), &EditorInterface::get_selected_path); @@ -489,8 +489,8 @@ void EditorPlugin::remove_control_from_container(CustomControlContainer p_locati } } -void EditorPlugin::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) { - EditorNode::get_singleton()->add_tool_menu_item(p_name, p_handler, p_callback, p_ud); +void EditorPlugin::add_tool_menu_item(const String &p_name, const Callable &p_callable) { + EditorNode::get_singleton()->add_tool_menu_item(p_name, p_callable); } void EditorPlugin::add_tool_submenu_item(const String &p_name, Object *p_submenu) { @@ -826,7 +826,7 @@ void EditorPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("remove_control_from_docks", "control"), &EditorPlugin::remove_control_from_docks); ClassDB::bind_method(D_METHOD("remove_control_from_bottom_panel", "control"), &EditorPlugin::remove_control_from_bottom_panel); ClassDB::bind_method(D_METHOD("remove_control_from_container", "container", "control"), &EditorPlugin::remove_control_from_container); - ClassDB::bind_method(D_METHOD("add_tool_menu_item", "name", "handler", "callback", "ud"), &EditorPlugin::add_tool_menu_item, DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("add_tool_menu_item", "name", "callable"), &EditorPlugin::add_tool_menu_item); ClassDB::bind_method(D_METHOD("add_tool_submenu_item", "name", "submenu"), &EditorPlugin::add_tool_submenu_item); ClassDB::bind_method(D_METHOD("remove_tool_menu_item", "name"), &EditorPlugin::remove_tool_menu_item); ClassDB::bind_method(D_METHOD("add_custom_type", "type", "base", "script", "icon"), &EditorPlugin::add_custom_type); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 11063066d6..3b741a2f22 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -69,7 +69,7 @@ protected: public: static EditorInterface *get_singleton() { return singleton; } - Control *get_editor_viewport(); + Control *get_editor_main_control(); void edit_resource(const Ref<Resource> &p_resource); void open_scene_from_path(const String &scene_path); void reload_scene_from_path(const String &scene_path); @@ -174,7 +174,7 @@ public: void remove_control_from_docks(Control *p_control); void remove_control_from_bottom_panel(Control *p_control); - void add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud = Variant()); + void add_tool_menu_item(const String &p_name, const Callable &p_callable); void add_tool_submenu_item(const String &p_name, Object *p_submenu); void remove_tool_menu_item(const String &p_name); diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp index f984f48c1c..aa3b75097e 100644 --- a/editor/editor_plugin_settings.cpp +++ b/editor/editor_plugin_settings.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -42,7 +42,7 @@ void EditorPluginSettings::_notification(int p_what) { if (p_what == NOTIFICATION_WM_WINDOW_FOCUS_IN) { update_plugins(); } else if (p_what == Node::NOTIFICATION_READY) { - plugin_config_dialog->connect_compat("plugin_ready", EditorNode::get_singleton(), "_on_plugin_ready"); + plugin_config_dialog->connect("plugin_ready", Callable(EditorNode::get_singleton(), "_on_plugin_ready")); plugin_list->connect("button_pressed", callable_mp(this, &EditorPluginSettings::_cell_button_pressed)); } } diff --git a/editor/editor_plugin_settings.h b/editor/editor_plugin_settings.h index 0b61e28449..4f2b5293ec 100644 --- a/editor/editor_plugin_settings.h +++ b/editor/editor_plugin_settings.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 1443302f3f..3fa183e10c 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -36,7 +36,7 @@ #include "editor_properties_array_dict.h" #include "editor_scale.h" #include "scene/main/window.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" ///////////////////// NULL ///////////////////////// @@ -77,7 +77,9 @@ void EditorPropertyText::_text_changed(const String &p_string) { void EditorPropertyText::update_property() { String s = get_edited_object()->get(get_edited_property()); updating = true; - text->set_text(s); + if (text->get_text() != s) { + text->set_text(s); + } text->set_editable(!is_read_only()); updating = false; } @@ -133,9 +135,11 @@ void EditorPropertyMultilineText::_open_big_text() { void EditorPropertyMultilineText::update_property() { String t = get_edited_object()->get(get_edited_property()); - text->set_text(t); - if (big_text && big_text->is_visible_in_tree()) { - big_text->set_text(t); + if (text->get_text() != t) { + text->set_text(t); + if (big_text && big_text->is_visible_in_tree()) { + big_text->set_text(t); + } } } @@ -146,7 +150,8 @@ void EditorPropertyMultilineText::_notification(int p_what) { Ref<Texture2D> df = get_theme_icon("DistractionFree", "EditorIcons"); open_big_text->set_icon(df); Ref<Font> font = get_theme_font("font", "Label"); - text->set_custom_minimum_size(Vector2(0, font->get_height() * 6)); + int font_size = get_theme_font_size("font_size", "Label"); + text->set_custom_minimum_size(Vector2(0, font->get_height(font_size) * 6)); } break; } @@ -290,6 +295,7 @@ EditorPropertyPath::EditorPropertyPath() { HBoxContainer *path_hb = memnew(HBoxContainer); add_child(path_hb); path = memnew(LineEdit); + path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); path_hb->add_child(path); path->connect("text_entered", callable_mp(this, &EditorPropertyPath::_path_selected)); path->connect("focus_exited", callable_mp(this, &EditorPropertyPath::_path_focus_exited)); @@ -587,7 +593,8 @@ public: virtual Size2 get_minimum_size() const override { Ref<Font> font = get_theme_font("font", "Label"); - return Vector2(0, font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + return Vector2(0, font->get_height(font_size) * 2); } virtual String get_tooltip(const Point2 &p_pos) const override { @@ -722,12 +729,12 @@ void EditorPropertyLayers::setup(LayerType p_layer_type) { for (int i = 0; i < 20; i++) { String name; - if (ProjectSettings::get_singleton()->has_setting(basename + "/layer_" + itos(i + 1))) { - name = ProjectSettings::get_singleton()->get(basename + "/layer_" + itos(i + 1)); + if (ProjectSettings::get_singleton()->has_setting(basename + vformat("/layer_%d", i))) { + name = ProjectSettings::get_singleton()->get(basename + vformat("/layer_%d", i)); } if (name == "") { - name = TTR("Layer") + " " + itos(i + 1); + name = vformat(TTR("Layer %d"), i); } names.push_back(name); @@ -985,6 +992,7 @@ void EditorPropertyEasing::_draw_easing() { const float exp = get_edited_object()->get(get_edited_property()); const Ref<Font> f = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); const Color font_color = get_theme_color("font_color", "Label"); Color line_color; if (dragging) { @@ -1022,7 +1030,7 @@ void EditorPropertyEasing::_draw_easing() { } else { decimals = 1; } - f->draw(ci, Point2(10, 10 + f->get_ascent()), rtos(exp).pad_decimals(decimals), font_color); + f->draw_string(ci, Point2(10, 10 + f->get_ascent(font_size)), TS->format_number(rtos(exp).pad_decimals(decimals)), HALIGN_LEFT, -1, font_size, font_color); } void EditorPropertyEasing::update_property() { @@ -1039,7 +1047,7 @@ void EditorPropertyEasing::_set_preset(int p_preset) { void EditorPropertyEasing::_setup_spin() { setting = true; spin->setup_and_show(); - spin->get_line_edit()->set_text(rtos(get_edited_object()->get(get_edited_property()))); + spin->get_line_edit()->set_text(TS->format_number(rtos(get_edited_object()->get(get_edited_property())))); setting = false; spin->show(); } @@ -1088,7 +1096,7 @@ void EditorPropertyEasing::_notification(int p_what) { preset->add_icon_item(get_theme_icon("CurveInOut", "EditorIcons"), "In-Out", EASING_IN_OUT); preset->add_icon_item(get_theme_icon("CurveOutIn", "EditorIcons"), "Out-In", EASING_OUT_IN); } - easing_draw->set_custom_minimum_size(Size2(0, get_theme_font("font", "Label")->get_height() * 2)); + easing_draw->set_custom_minimum_size(Size2(0, get_theme_font("font", "Label")->get_height(get_theme_font_size("font_size", "Label")) * 2)); } break; } } @@ -2140,10 +2148,6 @@ void EditorPropertyColor::_color_changed(const Color &p_color) { emit_changed(get_edited_property(), p_color, "", true); } -void EditorPropertyColor::_popup_closed() { - emit_changed(get_edited_property(), picker->get_pick_color(), "", false); -} - void EditorPropertyColor::_picker_created() { // get default color picker mode from editor settings int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); @@ -2187,7 +2191,6 @@ EditorPropertyColor::EditorPropertyColor() { add_child(picker); picker->set_flat(true); picker->connect("color_changed", callable_mp(this, &EditorPropertyColor::_color_changed)); - picker->connect("popup_closed", callable_mp(this, &EditorPropertyColor::_popup_closed)); picker->connect("picker_created", callable_mp(this, &EditorPropertyColor::_picker_created)); } @@ -2352,7 +2355,7 @@ void EditorPropertyResource::_file_selected(const String &p_path) { property_types = E->get().hint_string; } } - if (!property_types.empty()) { + if (!property_types.is_empty()) { bool any_type_matches = false; const Vector<String> split_property_types = property_types.split(","); for (int i = 0; i < split_property_types.size(); ++i) { @@ -2510,7 +2513,7 @@ void EditorPropertyResource::_menu_option(int p_which) { update_property(); break; } - ERR_FAIL_COND(inheritors_array.empty()); + ERR_FAIL_COND(inheritors_array.is_empty()); String intype = inheritors_array[p_which - TYPE_BASE_ID]; @@ -2541,14 +2544,14 @@ void EditorPropertyResource::_menu_option(int p_which) { return; } - Object *obj = nullptr; + Variant obj; if (ScriptServer::is_global_class(intype)) { obj = ClassDB::instance(ScriptServer::get_global_class_native_base(intype)); if (obj) { Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(intype)); if (script.is_valid()) { - obj->set_script(Variant(script)); + ((Object *)obj)->set_script(script); } } } else { @@ -2559,7 +2562,6 @@ void EditorPropertyResource::_menu_option(int p_which) { obj = EditorNode::get_editor_data().instance_custom_type(intype, "Resource"); } - ERR_BREAK(!obj); Resource *resp = Object::cast_to<Resource>(obj); ERR_BREAK(!resp); if (get_edited_object() && base_type != String() && base_type == "Script") { @@ -2567,7 +2569,7 @@ void EditorPropertyResource::_menu_option(int p_which) { resp->call("set_instance_base_type", get_edited_object()->get_class()); } - res = Ref<Resource>(resp); + res = RES(resp); emit_changed(get_edited_property(), res); update_property(); @@ -2586,7 +2588,7 @@ void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<T } if (p_preview.is_valid()) { - preview->set_margin(MARGIN_LEFT, assign->get_icon()->get_width() + assign->get_theme_stylebox("normal")->get_default_margin(MARGIN_LEFT) + get_theme_constant("hseparation", "Button")); + preview->set_offset(SIDE_LEFT, assign->get_icon()->get_width() + assign->get_theme_stylebox("normal")->get_default_margin(SIDE_LEFT) + get_theme_constant("hseparation", "Button")); if (type == "GradientTexture") { preview->set_stretch_mode(TextureRect::STRETCH_SCALE); assign->set_custom_minimum_size(Size2(1, 1)); @@ -2654,7 +2656,7 @@ void EditorPropertyResource::_update_menu_items() { bool is_custom_resource = false; Ref<Texture2D> icon; - if (!custom_resources.empty()) { + if (!custom_resources.is_empty()) { for (int j = 0; j < custom_resources.size(); j++) { if (custom_resources[j].name == t) { is_custom_resource = true; @@ -3016,7 +3018,7 @@ bool EditorPropertyResource::_is_drop_valid(const Dictionary &p_drag_data) const } else if (at == "ShaderMaterial") { allowed_types.append("Shader"); } else if (at == "Font") { - allowed_types.append("DynamicFontData"); + allowed_types.append("FontData"); } } @@ -3115,9 +3117,9 @@ void EditorPropertyResource::drop_data_fw(const Point2 &p_point, const Variant & break; } - if (at == "Font" && ClassDB::is_parent_class(res->get_class(), "DynamicFontData")) { - Ref<DynamicFont> font = memnew(DynamicFont); - font->set_font_data(res); + if (at == "Font" && ClassDB::is_parent_class(res->get_class(), "FontData")) { + Ref<Font> font = memnew(Font); + font->add_data(res); res = font; break; } @@ -3163,10 +3165,10 @@ EditorPropertyResource::EditorPropertyResource() { preview = memnew(TextureRect); preview->set_expand(true); - preview->set_anchors_and_margins_preset(PRESET_WIDE); - preview->set_margin(MARGIN_TOP, 1); - preview->set_margin(MARGIN_BOTTOM, -1); - preview->set_margin(MARGIN_RIGHT, -1); + preview->set_anchors_and_offsets_preset(PRESET_WIDE); + preview->set_offset(SIDE_TOP, 1); + preview->set_offset(SIDE_BOTTOM, -1); + preview->set_offset(SIDE_RIGHT, -1); assign->add_child(preview); assign->connect("gui_input", callable_mp(this, &EditorPropertyResource::_button_input)); diff --git a/editor/editor_properties.h b/editor/editor_properties.h index be3e9db8ed..856a406e62 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -41,7 +41,7 @@ class EditorPropertyNil : public EditorProperty { GDCLASS(EditorPropertyNil, EditorProperty); - LineEdit *text; + LineEdit *text = nullptr; public: virtual void update_property() override; @@ -547,7 +547,6 @@ class EditorPropertyColor : public EditorProperty { GDCLASS(EditorPropertyColor, EditorProperty); ColorPickerButton *picker; void _color_changed(const Color &p_color); - void _popup_closed(); void _picker_created(); protected: @@ -595,7 +594,6 @@ class EditorPropertyResource : public EditorProperty { GDCLASS(EditorPropertyResource, EditorProperty); enum MenuOption { - OBJ_MENU_LOAD = 0, OBJ_MENU_EDIT = 1, OBJ_MENU_CLEAR = 2, diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 56fbfbd0c2..a798344973 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -550,7 +550,7 @@ void EditorPropertyArray::_length_changed(double p_page) { void EditorPropertyArray::setup(Variant::Type p_array_type, const String &p_hint_string) { array_type = p_array_type; - if (array_type == Variant::ARRAY && !p_hint_string.empty()) { + if (array_type == Variant::ARRAY && !p_hint_string.is_empty()) { int hint_subtype_separator = p_hint_string.find(":"); if (hint_subtype_separator >= 0) { String subtype_string = p_hint_string.substr(0, hint_subtype_separator); @@ -975,7 +975,7 @@ void EditorPropertyDictionary::update_property() { Ref<StyleBoxFlat> flat; flat.instance(); for (int j = 0; j < 4; j++) { - flat->set_default_margin(Margin(j), 2 * EDSCALE); + flat->set_default_margin(Side(j), 2 * EDSCALE); } flat->set_bg_color(get_theme_color("prop_subsection", "Editor")); diff --git a/editor/editor_properties_array_dict.h b/editor/editor_properties_array_dict.h index c786528d48..0359f3d9bc 100644 --- a/editor/editor_properties_array_dict.h +++ b/editor/editor_properties_array_dict.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index d1ec50d786..29a929d179 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h index 2f4bc65de9..c119ccd99f 100644 --- a/editor/editor_resource_preview.h +++ b/editor/editor_resource_preview.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -77,9 +77,9 @@ class EditorResourcePreview : public Node { struct Item { Ref<Texture2D> preview; Ref<Texture2D> small_preview; - int order; - uint32_t last_hash; - uint64_t modified_time; + int order = 0; + uint32_t last_hash = 0; + uint64_t modified_time = 0; }; int order; diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp index 2bba15c017..6fae56074d 100644 --- a/editor/editor_run.cpp +++ b/editor/editor_run.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_run.h b/editor/editor_run.h index a15d65d91b..d6cf3fed71 100644 --- a/editor/editor_run.h +++ b/editor/editor_run.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -36,7 +36,6 @@ class EditorRun { public: enum Status { - STATUS_PLAY, STATUS_PAUSED, STATUS_STOP diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp index 639da371bd..9b92134368 100644 --- a/editor/editor_run_native.cpp +++ b/editor/editor_run_native.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -46,7 +46,7 @@ void EditorRunNative::_notification(int p_what) { Ref<Image> im = icon->get_data(); im = im->duplicate(); im->clear_mipmaps(); - if (!im->empty()) { + if (!im->is_empty()) { im->resize(16 * EDSCALE, 16 * EDSCALE); Ref<ImageTexture> small_icon; small_icon.instance(); diff --git a/editor/editor_run_native.h b/editor/editor_run_native.h index df6714cb53..3516f668c6 100644 --- a/editor/editor_run_native.h +++ b/editor/editor_run_native.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_run_script.cpp b/editor/editor_run_script.cpp index e2446e92be..83ce50a9f9 100644 --- a/editor/editor_run_script.cpp +++ b/editor/editor_run_script.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_run_script.h b/editor/editor_run_script.h index 3cb751ecc8..83987ecba1 100644 --- a/editor/editor_run_script.h +++ b/editor/editor_run_script.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_scale.cpp b/editor/editor_scale.cpp index 450de75328..85304a9cbc 100644 --- a/editor/editor_scale.cpp +++ b/editor/editor_scale.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_scale.h b/editor/editor_scale.h index 91e5df15d4..b20c18706a 100644 --- a/editor/editor_scale.h +++ b/editor/editor_scale.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_sectioned_inspector.cpp b/editor/editor_sectioned_inspector.cpp index cf19b54cff..a2627f51ac 100644 --- a/editor/editor_sectioned_inspector.cpp +++ b/editor/editor_sectioned_inspector.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -35,9 +35,9 @@ class SectionedInspectorFilter : public Object { GDCLASS(SectionedInspectorFilter, Object); - Object *edited; + Object *edited = nullptr; String section; - bool allow_sub; + bool allow_sub = false; bool _set(const StringName &p_name, const Variant &p_value) { if (!edited) { @@ -123,10 +123,6 @@ public: edited = p_edited; _change_notify(); } - - SectionedInspectorFilter() { - edited = nullptr; - } }; void SectionedInspector::_bind_methods() { @@ -238,7 +234,7 @@ void SectionedInspector::update_category_list() { continue; } - if (!filter.empty() && pi.name.findn(filter) == -1 && pi.name.replace("/", " ").capitalize().findn(filter) == -1) { + if (!filter.is_empty() && pi.name.findn(filter) == -1 && pi.name.replace("/", " ").capitalize().findn(filter) == -1) { continue; } diff --git a/editor/editor_sectioned_inspector.h b/editor/editor_sectioned_inspector.h index dfc521302a..55fb94fecc 100644 --- a/editor/editor_sectioned_inspector.h +++ b/editor/editor_sectioned_inspector.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index f5c1de9def..9b9b6bf628 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -158,10 +158,10 @@ void EditorSettings::_initial_set(const StringName &p_name, const Variant &p_val struct _EVCSort { String name; - Variant::Type type; - int order; - bool save; - bool restart_if_changed; + Variant::Type type = Variant::Type::NIL; + int order = 0; + bool save = false; + bool restart_if_changed = false; bool operator<(const _EVCSort &p_vcs) const { return order < p_vcs.order; } }; @@ -262,13 +262,30 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { String host_lang = OS::get_singleton()->get_locale(); host_lang = TranslationServer::standardize_locale(host_lang); - // Some locales are not properly supported currently in Godot due to lack of font shaping - // (e.g. Arabic or Hindi), so even though we have work in progress translations for them, - // we skip them as they don't render properly. (GH-28577) - const Vector<String> locales_to_skip = String("ar,bn,fa,he,hi,ml,si,ta,te,ur").split(","); + // Skip locales if Text server lack required features. + Vector<String> locales_to_skip; + if (!TS->has_feature(TextServer::FEATURE_BIDI_LAYOUT) || !TS->has_feature(TextServer::FEATURE_SHAPING)) { + locales_to_skip.push_back("ar"); // Arabic + locales_to_skip.push_back("fa"); // Persian + locales_to_skip.push_back("ur"); // Urdu + } + if (!TS->has_feature(TextServer::FEATURE_BIDI_LAYOUT)) { + locales_to_skip.push_back("he"); // Hebrew + } + if (!TS->has_feature(TextServer::FEATURE_SHAPING)) { + locales_to_skip.push_back("bn"); // Bengali + locales_to_skip.push_back("hi"); // Hindi + locales_to_skip.push_back("ml"); // Malayalam + locales_to_skip.push_back("si"); // Sinhala + locales_to_skip.push_back("ta"); // Tamil + locales_to_skip.push_back("te"); // Telugu + } - String best; + if (!locales_to_skip.is_empty()) { + WARN_PRINT("Some locales are not properly supported by selected Text Server and are disabled."); + } + String best; EditorTranslationList *etl = _editor_translations; while (etl->data) { @@ -316,6 +333,10 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["interface/editor/main_font_size"] = PropertyInfo(Variant::INT, "interface/editor/main_font_size", PROPERTY_HINT_RANGE, "8,48,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/code_font_size", 14); hints["interface/editor/code_font_size"] = PropertyInfo(Variant::INT, "interface/editor/code_font_size", PROPERTY_HINT_RANGE, "8,48,1", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/code_font_contextual_ligatures", 0); + hints["interface/editor/code_font_contextual_ligatures"] = PropertyInfo(Variant::INT, "interface/editor/code_font_contextual_ligatures", PROPERTY_HINT_ENUM, "Default,Disable contextual alternates (coding ligatures),Use custom OpenType feature set", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/code_font_custom_opentype_features", ""); + _initial_set("interface/editor/code_font_custom_variations", ""); _initial_set("interface/editor/font_antialiased", true); _initial_set("interface/editor/font_hinting", 0); hints["interface/editor/font_hinting"] = PropertyInfo(Variant::INT, "interface/editor/font_hinting", PROPERTY_HINT_ENUM, "Auto,None,Light,Normal", PROPERTY_USAGE_DEFAULT); @@ -387,15 +408,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("filesystem/file_dialog/thumbnail_size", 64); hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16"); - // Import - _initial_set("filesystem/import/pvrtc_texture_tool", ""); -#ifdef WINDOWS_ENABLED - hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe"); -#else - hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, ""); -#endif - _initial_set("filesystem/import/pvrtc_fast_conversion", false); - /* Docks */ // SceneTree @@ -509,8 +521,13 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/3d/secondary_grid_color", Color(0.38, 0.38, 0.38, 0.5)); hints["editors/3d/secondary_grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/secondary_grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); + // Use a similar color to the 2D editor selection. + _initial_set("editors/3d/selection_box_color", Color(1.0, 0.5, 0)); + hints["editors/3d/selection_box_color"] = PropertyInfo(Variant::COLOR, "editors/3d/selection_box_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + // If a line is a multiple of this, it uses the primary grid color. - _initial_set("editors/3d/primary_grid_steps", 10); + // Use a power of 2 value by default as it's more common to use powers of 2 in level design. + _initial_set("editors/3d/primary_grid_steps", 8); hints["editors/3d/primary_grid_steps"] = PropertyInfo(Variant::INT, "editors/3d/primary_grid_steps", PROPERTY_HINT_RANGE, "1,100,1", PROPERTY_USAGE_DEFAULT); // At 1000, the grid mostly looks like it has no edge. @@ -536,9 +553,15 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/3d/grid_xy_plane", false); _initial_set("editors/3d/grid_yz_plane", false); + // Use a lower default FOV for the 3D camera compared to the + // Camera3D node as the 3D viewport doesn't span the whole screen. + // This means it's technically viewed from a further distance, which warrants a narrower FOV. _initial_set("editors/3d/default_fov", 70.0); + hints["editors/3d/default_fov"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_fov", PROPERTY_HINT_RANGE, "1,179,0.1"); _initial_set("editors/3d/default_z_near", 0.05); - _initial_set("editors/3d/default_z_far", 500.0); + hints["editors/3d/default_z_near"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_z_near", PROPERTY_HINT_RANGE, "0.01,10,0.01,or_greater"); + _initial_set("editors/3d/default_z_far", 4000.0); + hints["editors/3d/default_z_far"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_z_far", PROPERTY_HINT_RANGE, "0.1,4000,0.1,or_greater"); // 3D: Navigation _initial_set("editors/3d/navigation/navigation_scheme", 0); @@ -609,6 +632,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // Animation _initial_set("editors/animation/autorename_animation_tracks", true); _initial_set("editors/animation/confirm_insert_track", true); + _initial_set("editors/animation/default_create_bezier_tracks", false); + _initial_set("editors/animation/default_create_reset_tracks", true); _initial_set("editors/animation/onion_layers_past_color", Color(1, 0, 0)); _initial_set("editors/animation/onion_layers_future_color", Color(0, 1, 0)); @@ -1455,7 +1480,7 @@ bool EditorSettings::is_default_text_editor_theme() { Vector<String> EditorSettings::get_script_templates(const String &p_extension, const String &p_custom_path) { Vector<String> templates; String template_dir = get_script_templates_dir(); - if (!p_custom_path.empty()) { + if (!p_custom_path.is_empty()) { template_dir = p_custom_path; } DirAccess *d = DirAccess::open(template_dir); @@ -1518,11 +1543,6 @@ Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path) { return sc; } -struct ShortcutMapping { - const char *path; - uint32_t keycode; -}; - Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, uint32_t p_keycode) { #ifdef OSX_ENABLED // Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 41e6bab4ba..61ec8546aa 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -47,13 +47,13 @@ class EditorSettings : public Resource { public: struct Plugin { - EditorPlugin *instance; + EditorPlugin *instance = nullptr; String path; String name; String author; String version; String description; - bool installs; + bool installs = false; String script; Vector<String> install_files; }; diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index efc966c6c4..618d953c56 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -37,13 +37,13 @@ String EditorSpinSlider::get_tooltip(const Point2 &p_pos) const { if (grabber->is_visible()) { - return rtos(get_value()) + "\n\n" + TTR("Hold Ctrl to round to integers. Hold Shift for more precise changes."); + return TS->format_number(rtos(get_value())) + "\n\n" + TTR("Hold Ctrl to round to integers. Hold Shift for more precise changes."); } - return rtos(get_value()); + return TS->format_number(rtos(get_value())); } String EditorSpinSlider::get_text_value() const { - return String::num(get_value(), Math::range_step_decimals(get_step())); + return TS->format_number(String::num(get_value(), Math::range_step_decimals(get_step()))); } void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { @@ -202,7 +202,7 @@ void EditorSpinSlider::_notification(int p_what) { // 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); + stylebox->set_default_margin(SIDE_LEFT, (get_label() != String() ? 23 : 16) * EDSCALE); value_input->add_theme_style_override("normal", stylebox); } @@ -214,10 +214,11 @@ void EditorSpinSlider::_notification(int p_what) { draw_style_box(sb, Rect2(Vector2(), get_size())); } Ref<Font> font = get_theme_font("font", "LineEdit"); + int font_size = get_theme_font_size("font_size", "LineEdit"); int sep_base = 4 * EDSCALE; int sep = sep_base + sb->get_offset().x; //make it have the same margin on both sides, looks better - int string_width = font->get_string_size(label).width; + int string_width = font->get_string_size(label, font_size).width; int number_width = get_size().width - sb->get_minimum_size().width - string_width - sep; Ref<Texture2D> updown = get_theme_icon("updown", "SpinBox"); @@ -228,7 +229,7 @@ void EditorSpinSlider::_notification(int p_what) { String numstr = get_text_value(); - int vofs = (get_size().height - font->get_height()) / 2 + font->get_ascent(); + int vofs = (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size); Color fc = get_theme_color("font_color", "LineEdit"); Color lc; @@ -248,14 +249,14 @@ void EditorSpinSlider::_notification(int p_what) { draw_style_box(focus, Rect2(Vector2(), get_size())); } - draw_string(font, Vector2(Math::round(sb->get_offset().x), vofs), label, lc * Color(1, 1, 1, 0.5)); + draw_string(font, Vector2(Math::round(sb->get_offset().x), vofs), label, HALIGN_LEFT, -1, font_size, lc * Color(1, 1, 1, 0.5)); - draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, fc, number_width); + draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, HALIGN_LEFT, number_width, font_size, fc); if (get_step() == 1) { Ref<Texture2D> updown2 = get_theme_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(); + updown_offset = get_size().width - sb->get_margin(SIDE_RIGHT) - updown2->get_width(); Color c(1, 1, 1); if (hover_updown) { c *= Color(1.2, 1.2, 1.2); @@ -330,9 +331,10 @@ void EditorSpinSlider::_notification(int p_what) { Size2 EditorSpinSlider::get_minimum_size() const { Ref<StyleBox> sb = get_theme_stylebox("normal", "LineEdit"); Ref<Font> font = get_theme_font("font", "LineEdit"); + int font_size = get_theme_font_size("font_size", "LineEdit"); Size2 ms = sb->get_minimum_size(); - ms.height += font->get_height(); + ms.height += font->get_height(font_size); return ms; } @@ -360,7 +362,7 @@ void EditorSpinSlider::_evaluate_input_text() { // This prevents using functions like `pow()`, but using functions // in EditorSpinSlider is a barely known (and barely used) feature. // Instead, we'd rather support German/French keyboard layouts out of the box. - const String text = value_input->get_text().replace(",", "."); + const String text = TS->parse_number(value_input->get_text().replace(",", ".")); Ref<Expression> expr; expr.instance(); @@ -498,7 +500,7 @@ EditorSpinSlider::EditorSpinSlider() { value_input = memnew(LineEdit); value_input_popup->add_child(value_input); value_input_popup->set_wrap_controls(true); - value_input->set_anchors_and_margins_preset(PRESET_WIDE); + value_input->set_anchors_and_offsets_preset(PRESET_WIDE); value_input_popup->connect("popup_hide", callable_mp(this, &EditorSpinSlider::_value_input_closed)); value_input->connect("text_entered", callable_mp(this, &EditorSpinSlider::_value_input_entered)); value_input->connect("focus_exited", callable_mp(this, &EditorSpinSlider::_value_focus_exited)); diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index d000ebd151..248a13f7b6 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_sub_scene.cpp b/editor/editor_sub_scene.cpp index f794babc24..e319fbff52 100644 --- a/editor/editor_sub_scene.cpp +++ b/editor/editor_sub_scene.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_sub_scene.h b/editor/editor_sub_scene.h index bdfbbca02f..428bd5a40e 100644 --- a/editor/editor_sub_scene.h +++ b/editor/editor_sub_scene.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 79525ced51..0d24d5013d 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -44,34 +44,34 @@ 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); - style->set_margin_size(MARGIN_RIGHT, p_right * EDSCALE); - style->set_margin_size(MARGIN_BOTTOM, p_botton * EDSCALE); - style->set_margin_size(MARGIN_TOP, p_top * EDSCALE); - style->set_default_margin(MARGIN_LEFT, p_margin_left * EDSCALE); - style->set_default_margin(MARGIN_RIGHT, p_margin_right * EDSCALE); - style->set_default_margin(MARGIN_BOTTOM, p_margin_botton * EDSCALE); - style->set_default_margin(MARGIN_TOP, p_margin_top * EDSCALE); + style->set_margin_size(SIDE_LEFT, p_left * EDSCALE); + style->set_margin_size(SIDE_RIGHT, p_right * EDSCALE); + style->set_margin_size(SIDE_BOTTOM, p_botton * EDSCALE); + style->set_margin_size(SIDE_TOP, p_top * EDSCALE); + style->set_default_margin(SIDE_LEFT, p_margin_left * EDSCALE); + style->set_default_margin(SIDE_RIGHT, p_margin_right * EDSCALE); + style->set_default_margin(SIDE_BOTTOM, p_margin_botton * EDSCALE); + style->set_default_margin(SIDE_TOP, p_margin_top * EDSCALE); style->set_draw_center(p_draw_center); return style; } static Ref<StyleBoxEmpty> make_empty_stylebox(float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) { Ref<StyleBoxEmpty> style(memnew(StyleBoxEmpty)); - style->set_default_margin(MARGIN_LEFT, p_margin_left * EDSCALE); - style->set_default_margin(MARGIN_RIGHT, p_margin_right * EDSCALE); - style->set_default_margin(MARGIN_BOTTOM, p_margin_bottom * EDSCALE); - style->set_default_margin(MARGIN_TOP, p_margin_top * EDSCALE); + style->set_default_margin(SIDE_LEFT, p_margin_left * EDSCALE); + style->set_default_margin(SIDE_RIGHT, p_margin_right * EDSCALE); + style->set_default_margin(SIDE_BOTTOM, p_margin_bottom * EDSCALE); + style->set_default_margin(SIDE_TOP, p_margin_top * EDSCALE); return style; } static Ref<StyleBoxFlat> make_flat_stylebox(Color p_color, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) { Ref<StyleBoxFlat> style(memnew(StyleBoxFlat)); style->set_bg_color(p_color); - style->set_default_margin(MARGIN_LEFT, p_margin_left * EDSCALE); - style->set_default_margin(MARGIN_RIGHT, p_margin_right * EDSCALE); - style->set_default_margin(MARGIN_BOTTOM, p_margin_bottom * EDSCALE); - style->set_default_margin(MARGIN_TOP, p_margin_top * EDSCALE); + style->set_default_margin(SIDE_LEFT, p_margin_left * EDSCALE); + style->set_default_margin(SIDE_RIGHT, p_margin_right * EDSCALE); + style->set_default_margin(SIDE_BOTTOM, p_margin_bottom * EDSCALE); + style->set_default_margin(SIDE_TOP, p_margin_top * EDSCALE); return style; } @@ -85,6 +85,25 @@ static Ref<StyleBoxLine> make_line_stylebox(Color p_color, int p_thickness = 1, return style; } +static Ref<Texture2D> flip_icon(Ref<Texture2D> p_texture, bool p_flip_y = false, bool p_flip_x = false) { + if (!p_flip_y && !p_flip_x) { + return p_texture; + } + + Ref<ImageTexture> texture(memnew(ImageTexture)); + Ref<Image> img = p_texture->get_data(); + + if (p_flip_y) { + img->flip_y(); + } + if (p_flip_x) { + img->flip_x(); + } + + texture->create_from_image(img); + return texture; +} + #ifdef MODULE_SVG_ENABLED static Ref<ImageTexture> editor_generate_icon(int p_index, bool p_convert_color, float p_scale = EDSCALE, bool p_force_filter = false) { Ref<ImageTexture> icon = memnew(ImageTexture); @@ -441,7 +460,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // Highlighted tabs and border width Color tab_color = highlight_tabs ? base_color.lerp(font_color, contrast) : base_color; - const int border_width = CLAMP(border_size, 0, 3) * EDSCALE; + // Ensure borders are visible when using an editor scale below 100%. + const int border_width = CLAMP(border_size, 0, 3) * MAX(1, EDSCALE); const int default_margin_size = 4; const int margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3); @@ -457,10 +477,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const float extra_spacing = EDITOR_GET("interface/theme/additional_spacing"); Ref<StyleBoxFlat> style_widget = style_default->duplicate(); - style_widget->set_default_margin(MARGIN_LEFT, (extra_spacing + 6) * EDSCALE); - style_widget->set_default_margin(MARGIN_TOP, (extra_spacing + default_margin_size) * EDSCALE); - style_widget->set_default_margin(MARGIN_RIGHT, (extra_spacing + 6) * EDSCALE); - style_widget->set_default_margin(MARGIN_BOTTOM, (extra_spacing + default_margin_size) * EDSCALE); + style_widget->set_default_margin(SIDE_LEFT, (extra_spacing + 6) * EDSCALE); + style_widget->set_default_margin(SIDE_TOP, (extra_spacing + default_margin_size) * EDSCALE); + style_widget->set_default_margin(SIDE_RIGHT, (extra_spacing + 6) * EDSCALE); + style_widget->set_default_margin(SIDE_BOTTOM, (extra_spacing + default_margin_size) * EDSCALE); style_widget->set_bg_color(dark_color_1); style_widget->set_border_color(dark_color_2); @@ -480,10 +500,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // style for windows, popups, etc.. Ref<StyleBoxFlat> style_popup = style_default->duplicate(); const int popup_margin_size = default_margin_size * EDSCALE * 2; - style_popup->set_default_margin(MARGIN_LEFT, popup_margin_size); - style_popup->set_default_margin(MARGIN_TOP, popup_margin_size); - style_popup->set_default_margin(MARGIN_RIGHT, popup_margin_size); - style_popup->set_default_margin(MARGIN_BOTTOM, popup_margin_size); + style_popup->set_default_margin(SIDE_LEFT, popup_margin_size); + style_popup->set_default_margin(SIDE_TOP, popup_margin_size); + style_popup->set_default_margin(SIDE_RIGHT, popup_margin_size); + style_popup->set_default_margin(SIDE_BOTTOM, popup_margin_size); style_popup->set_border_color(contrast_color_1); style_popup->set_border_width_all(MAX(EDSCALE, border_width)); const Color shadow_color = Color(0, 0, 0, dark_theme ? 0.3 : 0.1); @@ -516,13 +536,13 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Ref<StyleBoxFlat> style_tab_selected = style_widget->duplicate(); style_tab_selected->set_border_width_all(border_width); - style_tab_selected->set_border_width(MARGIN_BOTTOM, 0); + style_tab_selected->set_border_width(SIDE_BOTTOM, 0); style_tab_selected->set_border_color(dark_color_3); - style_tab_selected->set_expand_margin_size(MARGIN_BOTTOM, border_width); - style_tab_selected->set_default_margin(MARGIN_LEFT, tab_default_margin_side); - style_tab_selected->set_default_margin(MARGIN_RIGHT, tab_default_margin_side); - style_tab_selected->set_default_margin(MARGIN_BOTTOM, tab_default_margin_vertical); - style_tab_selected->set_default_margin(MARGIN_TOP, tab_default_margin_vertical); + style_tab_selected->set_expand_margin_size(SIDE_BOTTOM, border_width); + style_tab_selected->set_default_margin(SIDE_LEFT, tab_default_margin_side); + style_tab_selected->set_default_margin(SIDE_RIGHT, tab_default_margin_side); + style_tab_selected->set_default_margin(SIDE_BOTTOM, tab_default_margin_vertical); + style_tab_selected->set_default_margin(SIDE_TOP, tab_default_margin_vertical); style_tab_selected->set_bg_color(tab_color); Ref<StyleBoxFlat> style_tab_unselected = style_tab_selected->duplicate(); @@ -560,7 +580,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Ref<StyleBoxFlat> style_menu_hover_border = style_widget->duplicate(); style_menu_hover_border->set_draw_center(false); style_menu_hover_border->set_border_width_all(0); - style_menu_hover_border->set_border_width(MARGIN_BOTTOM, border_width); + style_menu_hover_border->set_border_width(SIDE_BOTTOM, border_width); style_menu_hover_border->set_border_color(accent_color); Ref<StyleBoxFlat> style_menu_hover_bg = style_widget->duplicate(); @@ -599,12 +619,18 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("icon_color_pressed", "Button", icon_color_pressed); // OptionButton + theme->set_stylebox("focus", "OptionButton", style_widget_focus); + theme->set_stylebox("normal", "OptionButton", style_widget); theme->set_stylebox("hover", "OptionButton", style_widget_hover); theme->set_stylebox("pressed", "OptionButton", style_widget_pressed); - theme->set_stylebox("focus", "OptionButton", style_widget_focus); theme->set_stylebox("disabled", "OptionButton", style_widget_disabled); + theme->set_stylebox("normal_mirrored", "OptionButton", style_widget); + theme->set_stylebox("hover_mirrored", "OptionButton", style_widget_hover); + theme->set_stylebox("pressed_mirrored", "OptionButton", style_widget_pressed); + theme->set_stylebox("disabled_mirrored", "OptionButton", style_widget_disabled); + theme->set_color("font_color", "OptionButton", font_color); theme->set_color("font_color_hover", "OptionButton", font_color_hl); theme->set_color("font_color_pressed", "OptionButton", accent_color); @@ -626,6 +652,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("off", "CheckButton", theme->get_icon("GuiToggleOff", "EditorIcons")); theme->set_icon("off_disabled", "CheckButton", theme->get_icon("GuiToggleOffDisabled", "EditorIcons")); + theme->set_icon("on_mirrored", "CheckButton", theme->get_icon("GuiToggleOnMirrored", "EditorIcons")); + theme->set_icon("on_disabled_mirrored", "CheckButton", theme->get_icon("GuiToggleOnDisabledMirrored", "EditorIcons")); + theme->set_icon("off_mirrored", "CheckButton", theme->get_icon("GuiToggleOffMirrored", "EditorIcons")); + theme->set_icon("off_disabled_mirrored", "CheckButton", theme->get_icon("GuiToggleOffDisabledMirrored", "EditorIcons")); + theme->set_color("font_color", "CheckButton", font_color); theme->set_color("font_color_hover", "CheckButton", font_color_hl); theme->set_color("font_color_pressed", "CheckButton", accent_color); @@ -637,10 +668,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // Checkbox Ref<StyleBoxFlat> sb_checkbox = style_menu->duplicate(); - sb_checkbox->set_default_margin(MARGIN_LEFT, default_margin_size * EDSCALE); - sb_checkbox->set_default_margin(MARGIN_RIGHT, default_margin_size * EDSCALE); - sb_checkbox->set_default_margin(MARGIN_TOP, default_margin_size * EDSCALE); - sb_checkbox->set_default_margin(MARGIN_BOTTOM, default_margin_size * EDSCALE); + sb_checkbox->set_default_margin(SIDE_LEFT, default_margin_size * EDSCALE); + sb_checkbox->set_default_margin(SIDE_RIGHT, default_margin_size * EDSCALE); + sb_checkbox->set_default_margin(SIDE_TOP, default_margin_size * EDSCALE); + sb_checkbox->set_default_margin(SIDE_BOTTOM, default_margin_size * EDSCALE); theme->set_stylebox("normal", "CheckBox", sb_checkbox); theme->set_stylebox("pressed", "CheckBox", sb_checkbox); @@ -664,7 +695,14 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("panel", "PopupDialog", style_popup); // PopupMenu - theme->set_stylebox("panel", "PopupMenu", style_popup); + const int popup_menu_margin_size = default_margin_size * 1.5 * EDSCALE; + Ref<StyleBoxFlat> style_popup_menu = style_popup->duplicate(); + style_popup_menu->set_default_margin(SIDE_LEFT, popup_menu_margin_size); + style_popup_menu->set_default_margin(SIDE_TOP, popup_menu_margin_size); + style_popup_menu->set_default_margin(SIDE_RIGHT, popup_menu_margin_size); + style_popup_menu->set_default_margin(SIDE_BOTTOM, popup_menu_margin_size); + + theme->set_stylebox("panel", "PopupMenu", style_popup_menu); theme->set_stylebox("separator", "PopupMenu", style_popup_separator); theme->set_stylebox("labeled_separator_left", "PopupMenu", style_popup_labeled_separator_left); theme->set_stylebox("labeled_separator_right", "PopupMenu", style_popup_labeled_separator_right); @@ -673,20 +711,22 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color_hover", "PopupMenu", font_color_hl); theme->set_color("font_color_accel", "PopupMenu", font_color_disabled); theme->set_color("font_color_disabled", "PopupMenu", font_color_disabled); + theme->set_color("font_color_separator", "PopupMenu", font_color_disabled); theme->set_icon("checked", "PopupMenu", theme->get_icon("GuiChecked", "EditorIcons")); theme->set_icon("unchecked", "PopupMenu", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("radio_checked", "PopupMenu", theme->get_icon("GuiRadioChecked", "EditorIcons")); theme->set_icon("radio_unchecked", "PopupMenu", theme->get_icon("GuiRadioUnchecked", "EditorIcons")); theme->set_icon("submenu", "PopupMenu", theme->get_icon("ArrowRight", "EditorIcons")); + theme->set_icon("submenu_mirrored", "PopupMenu", theme->get_icon("ArrowLeft", "EditorIcons")); theme->set_icon("visibility_hidden", "PopupMenu", theme->get_icon("GuiVisibilityHidden", "EditorIcons")); theme->set_icon("visibility_visible", "PopupMenu", theme->get_icon("GuiVisibilityVisible", "EditorIcons")); theme->set_icon("visibility_xray", "PopupMenu", theme->get_icon("GuiVisibilityXray", "EditorIcons")); theme->set_constant("vseparation", "PopupMenu", (extra_spacing + default_margin_size + 1) * EDSCALE); Ref<StyleBoxFlat> sub_inspector_bg = make_flat_stylebox(dark_color_1.lerp(accent_color, 0.08), 2, 0, 2, 2); - sub_inspector_bg->set_border_width(MARGIN_LEFT, 2); - sub_inspector_bg->set_border_width(MARGIN_RIGHT, 2); - sub_inspector_bg->set_border_width(MARGIN_BOTTOM, 2); + sub_inspector_bg->set_border_width(SIDE_LEFT, 2); + sub_inspector_bg->set_border_width(SIDE_RIGHT, 2); + sub_inspector_bg->set_border_width(SIDE_BOTTOM, 2); sub_inspector_bg->set_border_color(accent_color * Color(1, 1, 1, 0.3)); sub_inspector_bg->set_draw_center(true); @@ -706,6 +746,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("unchecked", "Tree", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("arrow", "Tree", theme->get_icon("GuiTreeArrowDown", "EditorIcons")); theme->set_icon("arrow_collapsed", "Tree", theme->get_icon("GuiTreeArrowRight", "EditorIcons")); + theme->set_icon("arrow_collapsed_mirrored", "Tree", theme->get_icon("GuiTreeArrowLeft", "EditorIcons")); theme->set_icon("updown", "Tree", theme->get_icon("GuiTreeUpdown", "EditorIcons")); theme->set_icon("select_arrow", "Tree", theme->get_icon("GuiDropdown", "EditorIcons")); theme->set_stylebox("bg_focus", "Tree", style_focus); @@ -825,17 +866,17 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { style_content_panel->set_border_color(dark_color_3); style_content_panel->set_border_width_all(border_width); // compensate the border - style_content_panel->set_default_margin(MARGIN_TOP, margin_size_extra * EDSCALE); - style_content_panel->set_default_margin(MARGIN_RIGHT, margin_size_extra * EDSCALE); - style_content_panel->set_default_margin(MARGIN_BOTTOM, margin_size_extra * EDSCALE); - style_content_panel->set_default_margin(MARGIN_LEFT, margin_size_extra * EDSCALE); + style_content_panel->set_default_margin(SIDE_TOP, margin_size_extra * EDSCALE); + style_content_panel->set_default_margin(SIDE_RIGHT, margin_size_extra * EDSCALE); + style_content_panel->set_default_margin(SIDE_BOTTOM, margin_size_extra * EDSCALE); + style_content_panel->set_default_margin(SIDE_LEFT, margin_size_extra * EDSCALE); // this is the stylebox used in 3d and 2d viewports (no borders) Ref<StyleBoxFlat> style_content_panel_vp = style_content_panel->duplicate(); - style_content_panel_vp->set_default_margin(MARGIN_LEFT, border_width * 2); - style_content_panel_vp->set_default_margin(MARGIN_TOP, default_margin_size * EDSCALE); - style_content_panel_vp->set_default_margin(MARGIN_RIGHT, border_width * 2); - style_content_panel_vp->set_default_margin(MARGIN_BOTTOM, border_width * 2); + style_content_panel_vp->set_default_margin(SIDE_LEFT, border_width * 2); + style_content_panel_vp->set_default_margin(SIDE_TOP, default_margin_size * EDSCALE); + style_content_panel_vp->set_default_margin(SIDE_RIGHT, border_width * 2); + style_content_panel_vp->set_default_margin(SIDE_BOTTOM, border_width * 2); theme->set_stylebox("panel", "TabContainer", style_content_panel); theme->set_stylebox("Content", "EditorStyles", style_content_panel_vp); @@ -846,13 +887,13 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // Debugger Ref<StyleBoxFlat> style_panel_debugger = style_content_panel->duplicate(); - style_panel_debugger->set_border_width(MARGIN_BOTTOM, 0); + style_panel_debugger->set_border_width(SIDE_BOTTOM, 0); theme->set_stylebox("DebuggerPanel", "EditorStyles", style_panel_debugger); 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); + int stylebox_offset = theme->get_font("tab_fg", "TabContainer")->get_height(theme->get_font_size("tab_fg", "TabContainer")) + theme->get_stylebox("tab_fg", "TabContainer")->get_minimum_size().height + theme->get_stylebox("panel", "TabContainer")->get_default_margin(SIDE_TOP); + style_panel_invisible_top->set_expand_margin_size(SIDE_TOP, -stylebox_offset); + style_panel_invisible_top->set_default_margin(SIDE_TOP, 0); theme->set_stylebox("BottomPanelDebuggerOverride", "EditorStyles", style_panel_invisible_top); // LineEdit @@ -917,8 +958,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // WindowDialog Ref<StyleBoxFlat> style_window = style_popup->duplicate(); style_window->set_border_color(tab_color); - style_window->set_border_width(MARGIN_TOP, 24 * EDSCALE); - style_window->set_expand_margin_size(MARGIN_TOP, 24 * EDSCALE); + style_window->set_border_width(SIDE_TOP, 24 * EDSCALE); + style_window->set_expand_margin_size(SIDE_TOP, 24 * EDSCALE); theme->set_stylebox("panel", "Window", style_default); theme->set_stylebox("panel_window", "Window", style_window); @@ -930,6 +971,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_constant("title_height", "Window", 24 * EDSCALE); theme->set_constant("resize_margin", "Window", 4 * EDSCALE); theme->set_font("title_font", "Window", theme->get_font("title", "EditorFonts")); + theme->set_font_size("title_font_size", "Window", theme->get_font_size("title_size", "EditorFonts")); // complex window, for now only Editor settings and Project settings Ref<StyleBoxFlat> style_complex_window = style_window->duplicate(); @@ -1013,10 +1055,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // TooltipPanel Ref<StyleBoxFlat> style_tooltip = style_popup->duplicate(); float v = MAX(border_size * EDSCALE, 1.0); - style_tooltip->set_default_margin(MARGIN_LEFT, v); - style_tooltip->set_default_margin(MARGIN_TOP, v); - style_tooltip->set_default_margin(MARGIN_RIGHT, v); - style_tooltip->set_default_margin(MARGIN_BOTTOM, v); + style_tooltip->set_default_margin(SIDE_LEFT, v); + style_tooltip->set_default_margin(SIDE_TOP, v); + style_tooltip->set_default_margin(SIDE_RIGHT, v); + style_tooltip->set_default_margin(SIDE_BOTTOM, v); style_tooltip->set_bg_color(Color(mono_color.r, mono_color.g, mono_color.b, 0.9)); style_tooltip->set_border_width_all(border_width); style_tooltip->set_border_color(mono_color); @@ -1051,11 +1093,33 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("more", "GraphEdit", theme->get_icon("ZoomMore", "EditorIcons")); theme->set_icon("reset", "GraphEdit", theme->get_icon("ZoomReset", "EditorIcons")); theme->set_icon("snap", "GraphEdit", theme->get_icon("SnapGrid", "EditorIcons")); + theme->set_icon("minimap", "GraphEdit", theme->get_icon("GridMinimap", "EditorIcons")); theme->set_constant("bezier_len_pos", "GraphEdit", 80 * EDSCALE); theme->set_constant("bezier_len_neg", "GraphEdit", 160 * EDSCALE); - // GraphNode + // GraphEditMinimap + theme->set_stylebox("bg", "GraphEditMinimap", make_flat_stylebox(dark_color_1, 0, 0, 0, 0)); + Ref<StyleBoxFlat> style_minimap_camera; + Ref<StyleBoxFlat> style_minimap_node; + if (dark_theme) { + style_minimap_camera = make_flat_stylebox(Color(0.65, 0.65, 0.65, 0.2), 0, 0, 0, 0); + style_minimap_camera->set_border_color(Color(0.65, 0.65, 0.65, 0.45)); + style_minimap_node = make_flat_stylebox(Color(1, 1, 1), 0, 0, 0, 0); + } else { + style_minimap_camera = make_flat_stylebox(Color(0.38, 0.38, 0.38, 0.2), 0, 0, 0, 0); + style_minimap_camera->set_border_color(Color(0.38, 0.38, 0.38, 0.45)); + style_minimap_node = make_flat_stylebox(Color(0, 0, 0), 0, 0, 0, 0); + } + style_minimap_camera->set_border_width_all(1); + style_minimap_node->set_corner_radius_all(1); + theme->set_stylebox("camera", "GraphEditMinimap", style_minimap_camera); + theme->set_stylebox("node", "GraphEditMinimap", style_minimap_node); + Ref<Texture2D> resizer_icon = theme->get_icon("GuiResizer", "EditorIcons"); + theme->set_icon("resizer", "GraphEditMinimap", flip_icon(resizer_icon, true, true)); + theme->set_color("resizer_color", "GraphEditMinimap", Color(1, 1, 1, 0.65)); + + // GraphNode const float mv = dark_theme ? 0.0 : 1.0; const float mv2 = 1.0 - mv; const int gn_margin_side = 28; @@ -1091,10 +1155,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { smgraphsbselected->set_shadow_color(shadow_color); if (use_gn_headers) { - graphsb->set_border_width(MARGIN_TOP, 24 * EDSCALE); - graphsbselected->set_border_width(MARGIN_TOP, 24 * EDSCALE); - graphsbcomment->set_border_width(MARGIN_TOP, 24 * EDSCALE); - graphsbcommentselected->set_border_width(MARGIN_TOP, 24 * EDSCALE); + graphsb->set_border_width(SIDE_TOP, 24 * EDSCALE); + graphsbselected->set_border_width(SIDE_TOP, 24 * EDSCALE); + graphsbcomment->set_border_width(SIDE_TOP, 24 * EDSCALE); + graphsbcommentselected->set_border_width(SIDE_TOP, 24 * EDSCALE); } theme->set_stylebox("frame", "GraphNode", graphsb); diff --git a/editor/editor_themes.h b/editor/editor_themes.h index 4d9bfc56c8..852edf7669 100644 --- a/editor/editor_themes.h +++ b/editor/editor_themes.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_translation_parser.cpp b/editor/editor_translation_parser.cpp index 4e6a397840..51bd9b3383 100644 --- a/editor/editor_translation_parser.cpp +++ b/editor/editor_translation_parser.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_translation_parser.h b/editor/editor_translation_parser.h index bdebdd10a1..4f8f3537f2 100644 --- a/editor/editor_translation_parser.h +++ b/editor/editor_translation_parser.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_vcs_interface.cpp b/editor/editor_vcs_interface.cpp index 4b13a5dd89..eaa8f891ec 100644 --- a/editor/editor_vcs_interface.cpp +++ b/editor/editor_vcs_interface.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/editor_vcs_interface.h b/editor/editor_vcs_interface.h index 7de1883fd7..af952eaffc 100644 --- a/editor/editor_vcs_interface.h +++ b/editor/editor_vcs_interface.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 84517f36ea..781d21c370 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -661,8 +661,8 @@ ExportTemplateManager::ExportTemplateManager() { installed_scroll->set_enable_h_scroll(false); installed_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL); - get_cancel()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Install From File")); + get_cancel_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Install From File")); remove_confirm = memnew(ConfirmationDialog); remove_confirm->set_title(TTR("Remove Template")); @@ -690,7 +690,7 @@ ExportTemplateManager::ExportTemplateManager() { template_downloader = memnew(AcceptDialog); template_downloader->set_title(TTR("Download Templates")); - template_downloader->get_ok()->set_text(TTR("Close")); + template_downloader->get_ok_button()->set_text(TTR("Close")); template_downloader->set_exclusive(true); add_child(template_downloader); template_downloader->connect("cancelled", callable_mp(this, &ExportTemplateManager::_window_template_downloader_closed)); diff --git a/editor/export_template_manager.h b/editor/export_template_manager.h index 3d527f2338..3de74e17d8 100644 --- a/editor/export_template_manager.h +++ b/editor/export_template_manager.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp index 7e05bc5d88..02bbeb57c7 100644 --- a/editor/fileserver/editor_file_server.cpp +++ b/editor/fileserver/editor_file_server.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/fileserver/editor_file_server.h b/editor/fileserver/editor_file_server.h index ca5a891856..267b129bda 100644 --- a/editor/fileserver/editor_file_server.h +++ b/editor/fileserver/editor_file_server.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -47,11 +47,11 @@ class EditorFileServer : public Object { }; struct ClientData { - Thread *thread; + Thread *thread = nullptr; Ref<StreamPeerTCP> connection; Map<int, FileAccess *> files; - EditorFileServer *efs; - bool quit; + EditorFileServer *efs = nullptr; + bool quit = false; }; Ref<TCP_Server> server; diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index ee0ee91893..e8cf081320 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -68,6 +68,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory } subdirectory_item->set_text(0, dname); + subdirectory_item->set_structured_text_bidi_override(0, STRUCTURED_TEXT_FILE); subdirectory_item->set_icon(0, get_theme_icon("Folder", "EditorIcons")); subdirectory_item->set_icon_modulate(0, get_theme_color("folder_icon_modulate", "FileDialog")); subdirectory_item->set_selectable(0, true); @@ -136,6 +137,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory TreeItem *file_item = tree->create_item(subdirectory_item); file_item->set_text(0, fi.name); + file_item->set_structured_text_bidi_override(0, STRUCTURED_TEXT_FILE); file_item->set_icon(0, _get_tree_item_icon(!fi.import_broken, fi.type)); String file_metadata = lpath.plus_file(fi.name); file_item->set_metadata(0, file_metadata); @@ -320,6 +322,8 @@ void FileSystemDock::_update_display_mode(bool p_force) { void FileSystemDock::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: { if (initialized) { return; @@ -348,8 +352,13 @@ void FileSystemDock::_notification(int p_what) { file_list_search_box->set_clear_button_enabled(true); file_list_button_sort->set_icon(get_theme_icon("Sort", ei)); - button_hist_next->set_icon(get_theme_icon("Forward", ei)); - button_hist_prev->set_icon(get_theme_icon("Back", ei)); + if (is_layout_rtl()) { + button_hist_next->set_icon(get_theme_icon("Back", ei)); + button_hist_prev->set_icon(get_theme_icon("Forward", ei)); + } else { + button_hist_next->set_icon(get_theme_icon("Forward", ei)); + button_hist_prev->set_icon(get_theme_icon("Back", ei)); + } file_list_popup->connect("id_pressed", callable_mp(this, &FileSystemDock::_file_list_rmb_option)); tree_popup->connect("id_pressed", callable_mp(this, &FileSystemDock::_tree_rmb_option)); @@ -402,8 +411,13 @@ void FileSystemDock::_notification(int p_what) { String ei = "EditorIcons"; button_reload->set_icon(get_theme_icon("Reload", ei)); button_toggle_display_mode->set_icon(get_theme_icon("Panels2", ei)); - button_hist_next->set_icon(get_theme_icon("Forward", ei)); - button_hist_prev->set_icon(get_theme_icon("Back", ei)); + if (is_layout_rtl()) { + button_hist_next->set_icon(get_theme_icon("Back", ei)); + button_hist_prev->set_icon(get_theme_icon("Forward", ei)); + } else { + button_hist_next->set_icon(get_theme_icon("Forward", ei)); + button_hist_prev->set_icon(get_theme_icon("Back", ei)); + } if (file_list_display_mode == FILE_LIST_DISPLAY_LIST) { button_file_list_display_mode->set_icon(get_theme_icon("FileThumbnail", "EditorIcons")); } else { @@ -517,7 +531,7 @@ void FileSystemDock::_navigate_to_path(const String &p_path, bool p_select_in_fa } String file_name = p_path.get_file(); - if (!file_name.empty()) { + if (!file_name.is_empty()) { for (int i = 0; i < files->get_item_count(); i++) { if (files->get_item_text(i) == file_name) { files->select(i, true); @@ -1491,7 +1505,8 @@ void FileSystemDock::_move_with_overwrite() { _move_operation_confirm(to_move_path, true); } -bool FileSystemDock::_check_existing() { +Vector<String> FileSystemDock::_check_existing() { + Vector<String> conflicting_items; String &p_to_path = to_move_path; for (int i = 0; i < to_move.size(); i++) { String ol_pth = to_move[i].path.ends_with("/") ? to_move[i].path.substr(0, to_move[i].path.length() - 1) : to_move[i].path; @@ -1501,21 +1516,24 @@ bool FileSystemDock::_check_existing() { String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); - if (p_item.is_file && FileAccess::exists(new_path)) { - return false; - } else if (!p_item.is_file && DirAccess::exists(new_path)) { - return false; + if ((p_item.is_file && FileAccess::exists(new_path)) || + (!p_item.is_file && DirAccess::exists(new_path))) { + conflicting_items.push_back(old_path); } } - return true; + return conflicting_items; } void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool p_overwrite) { if (!p_overwrite) { to_move_path = p_to_path; - bool can_move = _check_existing(); - if (!can_move) { + Vector<String> conflicting_items = _check_existing(); + if (!conflicting_items.is_empty()) { // Ask to do something. + overwrite_dialog->set_text(vformat( + TTR("The following files or folders conflict with items in the target location '%s':\n\n%s\n\nDo you wish to overwrite them?"), + to_move_path, + String("\n").join(conflicting_items))); overwrite_dialog->popup_centered(); return; } @@ -1703,7 +1721,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected paths.push_back(fpath); } } - if (!paths.empty()) { + if (!paths.is_empty()) { emit_signal("instance", paths); } } break; @@ -1735,7 +1753,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected case FILE_DEPENDENCIES: { // Checkout the file dependencies. - if (!p_selected.empty()) { + if (!p_selected.is_empty()) { String fpath = p_selected[0]; deps_editor->edit(fpath); } @@ -1743,7 +1761,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected case FILE_OWNERS: { // Checkout the file owners. - if (!p_selected.empty()) { + if (!p_selected.is_empty()) { String fpath = p_selected[0]; owners_editor->show(fpath); } @@ -1766,7 +1784,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected case FILE_RENAME: { // Rename the active file. - if (!p_selected.empty()) { + if (!p_selected.is_empty()) { to_rename.path = p_selected[0]; if (to_rename.path != "res://") { to_rename.is_file = !to_rename.path.ends_with("/"); @@ -1867,7 +1885,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected } break; case FILE_COPY_PATH: { - if (!p_selected.empty()) { + if (!p_selected.is_empty()) { String fpath = p_selected[0]; DisplayServer::get_singleton()->clipboard_set(fpath); } @@ -1880,7 +1898,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected } void FileSystemDock::_resource_created() { - Object *c = new_resource_dialog->instance_selected(); + Variant c = new_resource_dialog->instance_selected(); ERR_FAIL_COND(!c); Resource *r = Object::cast_to<Resource>(c); @@ -1894,17 +1912,14 @@ void FileSystemDock::_resource_created() { memdelete(node); } - REF res(r); - editor->push_item(c); - - RES current_res = RES(r); + editor->push_item(r); String fpath = path; if (!fpath.ends_with("/")) { fpath = fpath.get_base_dir(); } - editor->save_resource_as(current_res, fpath); + editor->save_resource_as(RES(r), fpath); } void FileSystemDock::_search_changed(const String &p_text, const Control *p_from) { @@ -1995,7 +2010,7 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from) all_not_favorites = true; } - if (paths.empty()) { + if (paths.is_empty()) { return Variant(); } @@ -2043,7 +2058,7 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da String to_dir; bool favorite; _get_drag_target_folder(to_dir, favorite, p_point, p_from); - return !to_dir.empty(); + return !to_dir.is_empty(); } if (drag_data.has("type") && (String(drag_data["type"]) == "files" || String(drag_data["type"]) == "files_and_dirs")) { @@ -2056,7 +2071,7 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da return true; } - if (to_dir.empty()) { + if (to_dir.is_empty()) { return false; } @@ -2151,7 +2166,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, String to_dir; bool favorite; _get_drag_target_folder(to_dir, favorite, p_point, p_from); - if (res.is_valid() && !to_dir.empty()) { + if (res.is_valid() && !to_dir.is_empty()) { EditorNode::get_singleton()->push_item(res.ptr()); EditorNode::get_singleton()->save_resource_as(res, to_dir); } @@ -2162,7 +2177,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, String to_dir; bool favorite; _get_drag_target_folder(to_dir, favorite, p_point, p_from); - if (!to_dir.empty()) { + if (!to_dir.is_empty()) { Vector<String> fnames = drag_data["files"]; to_move.clear(); for (int i = 0; i < fnames.size(); i++) { @@ -2170,7 +2185,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, to_move.push_back(FileOrFolder(fnames[i], !fnames[i].ends_with("/"))); } } - if (!to_move.empty()) { + if (!to_move.is_empty()) { if (Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { for (int i = 0; i < to_move.size(); i++) { String new_path; @@ -2273,7 +2288,7 @@ void FileSystemDock::_get_drag_target_folder(String &target, bool &target_favori void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths, bool p_display_path_dependent_options) { // Add options for files and folders. - ERR_FAIL_COND_MSG(p_paths.empty(), "Path cannot be empty."); + ERR_FAIL_COND_MSG(p_paths.is_empty(), "Path cannot be empty."); Vector<String> filenames; Vector<String> foldernames; @@ -2354,16 +2369,16 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str } if (p_paths.size() == 1) { - p_popup->add_icon_item(get_theme_icon("ActionCopy", "EditorIcons"), TTR("Copy Path"), FILE_COPY_PATH); + p_popup->add_icon_shortcut(get_theme_icon("ActionCopy", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/copy_path"), FILE_COPY_PATH); if (p_paths[0] != "res://") { - p_popup->add_icon_item(get_theme_icon("Rename", "EditorIcons"), TTR("Rename..."), FILE_RENAME); - p_popup->add_icon_item(get_theme_icon("Duplicate", "EditorIcons"), TTR("Duplicate..."), FILE_DUPLICATE); + p_popup->add_icon_shortcut(get_theme_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/rename"), FILE_RENAME); + p_popup->add_icon_shortcut(get_theme_icon("Duplicate", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/duplicate"), FILE_DUPLICATE); } } if (p_paths.size() > 1 || p_paths[0] != "res://") { p_popup->add_icon_item(get_theme_icon("MoveUp", "EditorIcons"), TTR("Move To..."), FILE_MOVE); - p_popup->add_icon_item(get_theme_icon("Remove", "EditorIcons"), TTR("Delete"), FILE_REMOVE); + p_popup->add_icon_shortcut(get_theme_icon("Remove", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/delete"), FILE_REMOVE); } if (p_paths.size() == 1) { @@ -2396,7 +2411,7 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) { } // Popup. - if (!paths.empty()) { + if (!paths.is_empty()) { tree_popup->set_size(Size2(1, 1)); _file_and_folders_fill_popup(tree_popup, paths); tree_popup->set_position(tree->get_screen_position() + p_pos); @@ -2429,14 +2444,14 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) { continue; } if (files->get_item_text(p_item) == "..") { - files->unselect(i); + files->deselect(i); continue; } paths.push_back(files->get_item_metadata(i)); } // Popup. - if (!paths.empty()) { + if (!paths.is_empty()) { file_list_popup->clear(); file_list_popup->set_size(Size2(1, 1)); _file_and_folders_fill_popup(file_list_popup, paths, searched_string.length() == 0); @@ -2497,7 +2512,11 @@ void FileSystemDock::_tree_gui_input(Ref<InputEvent> p_event) { _tree_rmb_option(FILE_REMOVE); } else if (ED_IS_SHORTCUT("filesystem_dock/rename", p_event)) { _tree_rmb_option(FILE_RENAME); + } else { + return; } + + accept_event(); } } @@ -2512,7 +2531,11 @@ void FileSystemDock::_file_list_gui_input(Ref<InputEvent> p_event) { _file_list_rmb_option(FILE_REMOVE); } else if (ED_IS_SHORTCUT("filesystem_dock/rename", p_event)) { _file_list_rmb_option(FILE_RENAME); + } else { + return; } + + accept_event(); } } @@ -2668,8 +2691,8 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { // `KEY_MASK_CMD | KEY_C` conflicts with other editor shortcuts. ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_C); ED_SHORTCUT("filesystem_dock/duplicate", TTR("Duplicate..."), KEY_MASK_CMD | KEY_D); - ED_SHORTCUT("filesystem_dock/delete", TTR("Delete"), KEY_DELETE); - ED_SHORTCUT("filesystem_dock/rename", TTR("Rename")); + ED_SHORTCUT("filesystem_dock/delete", TTR("Move to Trash"), KEY_DELETE); + ED_SHORTCUT("filesystem_dock/rename", TTR("Rename..."), KEY_F2); VBoxContainer *top_vbc = memnew(VBoxContainer); add_child(top_vbc); @@ -2693,6 +2716,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { toolbar_hbc->add_child(button_hist_next); current_path = memnew(LineEdit); + current_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); current_path->set_h_size_flags(SIZE_EXPAND_FILL); _set_current_path_text(path); toolbar_hbc->add_child(current_path); @@ -2810,7 +2834,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(remove_dialog); move_dialog = memnew(EditorDirDialog); - move_dialog->get_ok()->set_text(TTR("Move")); + move_dialog->get_ok_button()->set_text(TTR("Move")); add_child(move_dialog); move_dialog->connect("dir_selected", callable_mp(this, &FileSystemDock::_move_operation_confirm), make_binds(false)); @@ -2820,14 +2844,13 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { rename_dialog_text = memnew(LineEdit); rename_dialog_vb->add_margin_child(TTR("Name:"), rename_dialog_text); - rename_dialog->get_ok()->set_text(TTR("Rename")); + rename_dialog->get_ok_button()->set_text(TTR("Rename")); add_child(rename_dialog); rename_dialog->register_text_enter(rename_dialog_text); rename_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_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")); + overwrite_dialog->get_ok_button()->set_text(TTR("Overwrite")); add_child(overwrite_dialog); overwrite_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_move_with_overwrite)); @@ -2837,7 +2860,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { duplicate_dialog_text = memnew(LineEdit); duplicate_dialog_vb->add_margin_child(TTR("Name:"), duplicate_dialog_text); - duplicate_dialog->get_ok()->set_text(TTR("Duplicate")); + duplicate_dialog->get_ok_button()->set_text(TTR("Duplicate")); add_child(duplicate_dialog); duplicate_dialog->register_text_enter(duplicate_dialog_text); duplicate_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_duplicate_operation_confirm)); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 1db1485426..39dc4784b8 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -236,7 +236,7 @@ private: void _rename_operation_confirm(); void _duplicate_operation_confirm(); void _move_with_overwrite(); - bool _check_existing(); + Vector<String> _check_existing(); void _move_operation_confirm(const String &p_to_path, bool p_overwrite = false); void _tree_rmb_option(int p_option); @@ -270,8 +270,8 @@ private: String path; StringName type; Vector<String> sources; - bool import_broken; - uint64_t modified_time; + bool import_broken = false; + uint64_t modified_time = 0; bool operator<(const FileInfo &fi) const { return NaturalNoCaseComparator()(name, fi.name); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index c2ccbdb08c..c2f2254023 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -86,11 +86,6 @@ static bool find_next(const String &line, String pattern, int from, bool match_c } //-------------------------------------------------------------------------------- -FindInFiles::FindInFiles() { - _searching = false; - _whole_words = true; - _match_case = true; -} void FindInFiles::set_search_text(String p_pattern) { _pattern = p_pattern; @@ -299,10 +294,10 @@ FindInFilesDialog::FindInFilesDialog() { set_title(TTR("Find in Files")); VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); add_child(vbc); GridContainer *gc = memnew(GridContainer); @@ -388,7 +383,7 @@ FindInFilesDialog::FindInFilesDialog() { _replace_button = add_button(TTR("Replace..."), false, "replace"); _replace_button->set_disabled(true); - Button *cancel_button = get_ok(); + Button *cancel_button = get_ok_button(); cancel_button->set_text(TTR("Cancel")); _mode = SEARCH_MODE; @@ -504,8 +499,8 @@ void FindInFilesDialog::_on_search_text_modified(String text) { ERR_FAIL_COND(!_find_button); ERR_FAIL_COND(!_replace_button); - _find_button->set_disabled(get_search_text().empty()); - _replace_button->set_disabled(get_search_text().empty()); + _find_button->set_disabled(get_search_text().is_empty()); + _replace_button->set_disabled(get_search_text().is_empty()); } void FindInFilesDialog::_on_search_text_entered(String text) { @@ -556,10 +551,10 @@ FindInFilesPanel::FindInFilesPanel() { add_child(_finder); VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 0); - vbc->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 0); - vbc->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0); - vbc->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0); + vbc->set_anchor_and_offset(SIDE_LEFT, ANCHOR_BEGIN, 0); + vbc->set_anchor_and_offset(SIDE_TOP, ANCHOR_BEGIN, 0); + vbc->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, 0); + vbc->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, 0); add_child(vbc); { @@ -571,6 +566,7 @@ FindInFilesPanel::FindInFilesPanel() { _search_text_label = memnew(Label); _search_text_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("source", "EditorFonts")); + _search_text_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("source_size", "EditorFonts")); hbc->add_child(_search_text_label); _progress_bar = memnew(ProgressBar); @@ -599,6 +595,7 @@ FindInFilesPanel::FindInFilesPanel() { _results_display = memnew(Tree); _results_display->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("source", "EditorFonts")); + _results_display->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("source_size", "EditorFonts")); _results_display->set_v_size_flags(SIZE_EXPAND_FILL); _results_display->connect("item_selected", callable_mp(this, &FindInFilesPanel::_on_result_selected)); _results_display->connect("item_edited", callable_mp(this, &FindInFilesPanel::_on_item_edited)); @@ -755,10 +752,11 @@ void FindInFilesPanel::draw_result_text(Object *item_obj, Rect2 rect) { Result r = E->value(); String item_text = item->get_text(_with_replace ? 1 : 0); Ref<Font> font = _results_display->get_theme_font("font"); + int font_size = _results_display->get_theme_font_size("font_size"); Rect2 match_rect = rect; - match_rect.position.x += font->get_string_size(item_text.left(r.begin_trimmed)).x; - match_rect.size.x = font->get_string_size(_search_text_label->get_text()).x; + match_rect.position.x += font->get_string_size(item_text.left(r.begin_trimmed), font_size).x; + match_rect.size.x = font->get_string_size(_search_text_label->get_text(), font_size).x; match_rect.position.y += 1 * EDSCALE; match_rect.size.y -= 2 * EDSCALE; @@ -781,7 +779,19 @@ void FindInFilesPanel::_on_item_edited() { } void FindInFilesPanel::_on_finished() { - _status_label->set_text(TTR("Search complete")); + String results_text; + int result_count = _result_items.size(); + int file_count = _file_items.size(); + + if (result_count == 1 && file_count == 1) { + results_text = vformat(TTR("%d match in %d file."), result_count, file_count); + } else if (result_count != 1 && file_count == 1) { + results_text = vformat(TTR("%d matches in %d file."), result_count, file_count); + } else { + results_text = vformat(TTR("%d matches in %d files."), result_count, file_count); + } + + _status_label->set_text(results_text); update_replace_buttons(); set_progress_visible(false); _refresh_button->show(); diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 3b949a35b4..b9d60a8d4f 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -42,8 +42,6 @@ public: static const char *SIGNAL_RESULT_FOUND; static const char *SIGNAL_FINISHED; - FindInFiles(); - void set_search_text(String p_pattern); void set_whole_words(bool p_whole_word); void set_match_case(bool p_match_case); @@ -76,15 +74,15 @@ private: String _pattern; Set<String> _extension_filter; String _root_dir; - bool _whole_words; - bool _match_case; + bool _whole_words = true; + bool _match_case = true; // State - bool _searching; + bool _searching = false; String _current_dir; Vector<PackedStringArray> _folders_stack; Vector<String> _files_to_scan; - int _initial_files_count; + int _initial_files_count = 0; }; class LineEdit; @@ -188,10 +186,10 @@ private: void _on_replace_all_clicked(); struct Result { - int line_number; - int begin; - int end; - int begin_trimmed; + int line_number = 0; + int begin = 0; + int end = 0; + int begin_trimmed = 0; }; void apply_replaces_in_file(String fpath, const Vector<Result> &locations, String new_text); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index 4e6e2d0237..f2a110ca03 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -198,7 +198,7 @@ void GroupDialog::_add_group(String p_name) { } String name = p_name.strip_edges(); - if (name.empty() || groups->get_item_with_text(name)) { + if (name.is_empty() || groups->get_item_with_text(name)) { return; } @@ -361,9 +361,16 @@ void GroupDialog::_delete_group_item(const String &p_name) { void GroupDialog::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: { - add_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); - remove_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + add_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + remove_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); + } else { + add_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); + remove_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + } add_filter->set_right_icon(groups->get_theme_icon("Search", "EditorIcons")); add_filter->set_clear_button_enabled(true); @@ -406,7 +413,7 @@ GroupDialog::GroupDialog() { VBoxContainer *vbc = memnew(VBoxContainer); add_child(vbc); - vbc->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + vbc->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); HBoxContainer *hbc = memnew(HBoxContainer); vbc->add_child(hbc); @@ -527,13 +534,13 @@ GroupDialog::GroupDialog() { group_empty->set_autowrap(true); group_empty->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); nodes_to_remove->add_child(group_empty); - group_empty->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + group_empty->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); set_title(TTR("Group Editor")); error = memnew(ConfirmationDialog); add_child(error); - error->get_ok()->set_text(TTR("Close")); + error->get_ok_button()->set_text(TTR("Close")); } //////////////////////////////////////////////////////////////////////////////// @@ -544,7 +551,7 @@ void GroupsEditor::_add_group(const String &p_group) { } const String name = group_name->get_text().strip_edges(); - if (name.empty()) { + if (name.is_empty()) { return; } diff --git a/editor/groups_editor.h b/editor/groups_editor.h index 6c3489fffb..69f746801f 100644 --- a/editor/groups_editor.h +++ b/editor/groups_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/icons/AspectRatioContainer.svg b/editor/icons/AspectRatioContainer.svg new file mode 100644 index 0000000000..a7aef8e028 --- /dev/null +++ b/editor/icons/AspectRatioContainer.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.1046 0-2 .89543-2 2h2zm2 0v2h2v-2zm4 0v2h2c0-1.1046-.89543-2-2-2zm-8 4v2h2v-2zm8 0v2h2v-2zm-8 4v2h2v-2zm8 0v2h2v-2zm-8 4c0 1.1046.89543 2 2 2v-2zm4 0v2h2v-2zm4 0v2c1.1046 0 2-.89543 2-2z" fill="#a5efac"/></svg> diff --git a/editor/icons/AudioStreamMP3.svg b/editor/icons/AudioStreamMP3.svg new file mode 100644 index 0000000000..900d5873fe --- /dev/null +++ b/editor/icons/AudioStreamMP3.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m11.971 1.002c-.08326.00207-.16593.014541-.24609.037109l-7 2c-.42881.12287-.7244.51487-.72461.96094v5.5508c-.16454-.033679-.33205-.050692-.5-.050781-1.3807 0-2.5 1.1193-2.5 2.5-.00000475 1.3807 1.1193 2.5 2.5 2.5 1.3456-.0013 2.4488-1.0674 2.4961-2.4121.0025906-.029226.003894-.058551.0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5c-.000916-.56314-.4664-1.0145-1.0293-.99805zm-1.4707 6.998c-.277 0-.5.223-.5.5v5c0 .277.223.5.5.5s.5-.223.5-.5v-5c0-.277-.223-.5-.5-.5zm2 1c-.277 0-.5.223-.5.5v3c0 .277.223.5.5.5s.5-.223.5-.5v-3c0-.277-.223-.5-.5-.5zm-4 1c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5zm6 0c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5z" fill="url(#a)"/></svg> diff --git a/editor/icons/AutoEndBackwards.svg b/editor/icons/AutoEndBackwards.svg new file mode 100644 index 0000000000..c6de305069 --- /dev/null +++ b/editor/icons/AutoEndBackwards.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 14c-.552262-.000055-.999945-.447738-1-1v-10c.000055-.5522619.447738-.9999448 1-1h8c.303863-.0001753.591325.1378063.78125.375l4 5c.291397.3649711.291397.8830289 0 1.248l-4 5c-.189538.237924-.477058.376652-.78125.37695h-8zm1-2h6.5195004l3.1991996-4-3.1991996-4h-6.5195004zm6.0000004-2v-4l1.9999996 2z" fill-rule="evenodd"/><path d="m3.8685125 4.9095434h4.1550816v1.1637426h-2.6154217v1.1117544h2.4594562v1.1637428h-2.4594562v1.3676976h2.7034024v1.1637432h-4.2430623z" stroke-width=".204755"/></g></svg> diff --git a/editor/icons/AutoPlayBackwards.svg b/editor/icons/AutoPlayBackwards.svg new file mode 100644 index 0000000000..20602ba348 --- /dev/null +++ b/editor/icons/AutoPlayBackwards.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.999798 2a-1.0001 1.0001 0 0 1 1 1v10a-1.0001 1.0001 0 0 1 -1 1h-8.0000003a-1.0001 1.0001 0 0 1 -.78125-.375l-4-5a-1.0001 1.0001 0 0 1 0-1.248l4-5a-1.0001 1.0001 0 0 1 .78125-.37695h8.0000003zm-1 2h-6.5195003l-3.1992 4 3.1992 4h6.5195003zm-3.0000003 1c1.1046003 0 2.0000003.8954 2.0000003 2v4h-1v-2h-2.0000003v2h-1v-4c0-1.1046.89543-2 2-2zm0 1a-1 1 0 0 0 -1 1v1h2.0000003v-1a-1 1 0 0 0 -1.0000003-1zm-3 0v4l-2-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg> diff --git a/editor/icons/BitmapFont.svg b/editor/icons/BitmapFont.svg deleted file mode 100644 index d3ab5f7dd7..0000000000 --- a/editor/icons/BitmapFont.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1037.4v4h1v-1h1v-1h4v10h-1v1h-1v1h6v-1h-1v-1h-1v-10h4v1h1v1h1v-4z" fill="#84c2ff" transform="translate(0 -1036.4)"/></svg> diff --git a/editor/icons/CubeMesh.svg b/editor/icons/BoxMesh.svg index d540858248..d540858248 100644 --- a/editor/icons/CubeMesh.svg +++ b/editor/icons/BoxMesh.svg diff --git a/editor/icons/DynamicFont.svg b/editor/icons/DynamicFont.svg deleted file mode 100644 index bbaa12ea1b..0000000000 --- a/editor/icons/DynamicFont.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1 1037.4v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#e0e0e0"/><path d="m4 5v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#84c2ff" transform="translate(0 1036.4)"/></g></svg> diff --git a/editor/icons/DynamicFontData.svg b/editor/icons/FontData.svg index 7ee88582a5..7ee88582a5 100644 --- a/editor/icons/DynamicFontData.svg +++ b/editor/icons/FontData.svg diff --git a/editor/icons/GridMinimap.svg b/editor/icons/GridMinimap.svg new file mode 100644 index 0000000000..72f107066d --- /dev/null +++ b/editor/icons/GridMinimap.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 2.1992188v2.6152343l-2.625 1.3125v-2.6152343zm-12 4.0644531 2.625 1.3125v2.5507811l-2.625-1.3124999zm12 0v2.5507812l-2.625 1.3124999v-2.5507811zm-8 1.4550781h4v2.640625h-4zm-4 2.560547 2.625 1.3125v2.521484l-2.625-1.3125zm12 0v2.521484l-2.625 1.3125v-2.521484zm-8 1.455078h4v2.640625h-4zm1.7014535-8.109375h2.2985465v2.734375h-4.15625s-.7487346.647119-.8746377.640625c-.1310411-.0067594-1.5097373-1.4558594-1.5097373-1.4558594l-1.459375-.7296875v-2.6152343l.068419.034223s.026411-.4573464.062111-.6760553c.0346282-.2121439.1970747-.59225724.1970747-.59225724l-1.0483078-.52372301c-.0795772-.04012218-.1668141-.06276382-.2558594-.06640625-.35427845-.01325803-.64865004.27047362-.6484375.625v12c.00021484.236623.13402736.45284.34570312.558594l3.99999998 2c.086686.043505.1823067.06624.2792969.066406h6c.09699-.000166.192611-.0229.279297-.06641l4-2c.211676-.10575.345488-.321967.345703-.55859v-12c-.000468-.46423753-.488958-.76598317-.904297-.55859375l-3.869141 1.93359375h-2.9709527s.033448.4166167.015891.625c-.029188.3464401-.1950466.625-.1950468.625z" fill="#e0e0e0"/><path d="m5 6s-2.21875-2.1616704-2.21875-3.2425057c0-1.0808352 0-2.6072392 2.21875-2.6072392s2.21875 1.526404 2.21875 2.6072392c0 1.0808353-2.21875 3.2425057-2.21875 3.2425057z" fill="#fff" fill-opacity=".68627"/></svg> diff --git a/editor/icons/GuiResizerMirrored.svg b/editor/icons/GuiResizerMirrored.svg new file mode 100644 index 0000000000..8227f5b648 --- /dev/null +++ b/editor/icons/GuiResizerMirrored.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".588" fill="#fff" d="M4 3a1 1 0 0 1 1 1v6h6a1 1 0 0 1 0 2H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/></svg> diff --git a/editor/icons/GuiTabMirrored.svg b/editor/icons/GuiTabMirrored.svg new file mode 100644 index 0000000000..a0011a5b2d --- /dev/null +++ b/editor/icons/GuiTabMirrored.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill-opacity=".196" fill="#fff" d="M2 0v8H0V0zm5.014.002a-1 1 0 0 1 .693.291-1 1 0 0 1 0 1.414L5.414 4l2.293 2.293a-1 1 0 0 1 0 1.414-1 1 0 0 1-1.414 0l-3-3a-1 1 0 0 1 0-1.414l3-3a-1 1 0 0 1 .72-.29z"/></svg> diff --git a/editor/icons/GuiToggleOffMirrored.svg b/editor/icons/GuiToggleOffMirrored.svg new file mode 100644 index 0000000000..d650de9cda --- /dev/null +++ b/editor/icons/GuiToggleOffMirrored.svg @@ -0,0 +1 @@ +<svg height="26" width="42" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="matrix(-1 0 0 1 42 0)"><rect fill-opacity=".188" height="16" rx="9" width="38" x="2" y="5"/><circle cx="10" cy="13" r="5"/></g></svg> diff --git a/editor/icons/GuiToggleOn.svg b/editor/icons/GuiToggleOn.svg index 8ab0998f71..37b47e8de4 100644 --- a/editor/icons/GuiToggleOn.svg +++ b/editor/icons/GuiToggleOn.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 38 15.999999" width="38" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.878 0-7 3.122-7 7s3.122 7 7 7h22c3.878 0 7-3.122 7-7s-3.122-7-7-7zm22 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5z" fill="#e0e0e0" stroke-width="55.8958"/></svg> +<svg height="16" viewBox="0 0 38 15.999999" width="38" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-4 0-7 3.0000002-7 7.0000002 0 3.9999998 3 6.9999998 7 6.9999998h22c4 0 7-3 7-6.9999998 0-4-3-7.0000002-7-7.0000002-7.333334 0-14.55609 0-22 0z" fill="#699ce8"/><circle cx="30" cy="8" fill="#fefefe" r="5"/></svg> diff --git a/editor/icons/GuiToggleOnMirrored.svg b/editor/icons/GuiToggleOnMirrored.svg new file mode 100644 index 0000000000..fa7f602ee7 --- /dev/null +++ b/editor/icons/GuiToggleOnMirrored.svg @@ -0,0 +1 @@ +<svg height="26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m31 5c4.986 0 9 3.568 9 8s-4.014 8-9 8h-20c-4.986 0-9-3.568-9-8s4.014-8 9-8z" fill="#699ce8"/><circle cx="10" cy="13" fill="#fefefe" r="5"/></svg> diff --git a/editor/icons/GuiTreeArrowLeft.svg b/editor/icons/GuiTreeArrowLeft.svg new file mode 100644 index 0000000000..d0f7b36fab --- /dev/null +++ b/editor/icons/GuiTreeArrowLeft.svg @@ -0,0 +1 @@ +<svg height="12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m7 9-3-3 3-3" style="fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.392"/></svg> diff --git a/editor/icons/Texture3D.svg b/editor/icons/Texture3D.svg index 6bdc599f6d..795dd62ba5 100644 --- a/editor/icons/Texture3D.svg +++ b/editor/icons/Texture3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".203212" transform="scale(.9167105 1.0908569)"><path d="m5.8175194 8.9717502q-.2194689 0-.4633233-.032514-.2438544-.0243854-.4714519-.0731562-.2275974-.0487709-.4145524-.1056703-.1869551-.0568993-.2926253-.1056702l.2357259-1.0079315q.2113405.089413.5364797.1950835.3332677.097542.8209765.097542.5608651 0 .8209764-.2113404.2601114-.2113405.2601114-.5689936 0-.219469-.097542-.3657816-.089413-.1544415-.2519826-.2438547-.1625696-.0975418-.3901671-.1300557-.2194689-.0406424-.4714518-.0406424h-.4714519v-.9754176h.5364797q.1788266 0 .3413962-.032514.1706981-.032514.3007537-.1056703.1300557-.081285.203212-.2113404.081285-.1381842.081285-.3413962 0-.1544411-.065028-.2682398-.0650278-.1137987-.1706981-.186955-.0975417-.0731563-.2357259-.1056702-.1300557-.0406424-.2682398-.0406424-.3495247 0-.6502784.1056702-.2926253.1056703-.5364797.2601114l-.4308095-.8860043q.1300557-.0812848.3007538-.1706981.1788266-.0894133.390167-.1625696.2113405-.0731563.4470664-.1219272.2438544-.048771.5120943-.048771.4958373 0 .8534904.1219272.3657816.1137987.6015075.3332677.2357259.2113405.3495246.5039657.1137987.2844968.1137987.625893 0 .3332677-.186955.6502784-.186955.3088822-.5039657.4714518.4389379.1788266.6746638.5364797.2438544.3495246.2438544.8453619 0 .3901671-.1300557.7234347-.1300557.3251393-.406424.5689937-.2763683.235726-.7071777.3739101-.422681.1300557-1.0079316.1300557z"/><path d="m10.502445 7.817506q.08941.00813.203212.016257.121927 0 .284497 0 .951032 0 1.406227-.4795803.463323-.4795803.463323-1.3249422 0-.8860044-.438938-1.3411992-.438938-.4551949-1.38997-.4551949-.130055 0-.26824.00813-.138184 0-.260111.016257zm3.665945-1.7882655q0 .7315631-.227598 1.2761713-.227597.5446082-.650278.9022613-.414553.3576531-1.01606.5364797-.601508.1788265-1.349328.1788265-.341396 0-.796591-.032514-.4551948-.0243853-.8941328-.1137986v-5.486724q.438938-.081285.9103898-.1056702.47958-.032514.820976-.032514.723435 0 1.308686.1625696.593379.1625696 1.01606.5120943.422681.3495246.650278.8941328.227598.5446081.227598 1.3086853z"/></g></g></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-.359546 .287637)"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".203212" transform="scale(.9167105 1.0908569)"><path d="m5.8175194 8.9717502q-.2194689 0-.4633233-.032514-.2438544-.0243854-.4714519-.0731562-.2275974-.0487709-.4145524-.1056703-.1869551-.0568993-.2926253-.1056702l.2357259-1.0079315q.2113405.089413.5364797.1950835.3332677.097542.8209765.097542.5608651 0 .8209764-.2113404.2601114-.2113405.2601114-.5689936 0-.219469-.097542-.3657816-.089413-.1544415-.2519826-.2438547-.1625696-.0975418-.3901671-.1300557-.2194689-.0406424-.4714518-.0406424h-.4714519v-.9754176h.5364797q.1788266 0 .3413962-.032514.1706981-.032514.3007537-.1056703.1300557-.081285.203212-.2113404.081285-.1381842.081285-.3413962 0-.1544411-.065028-.2682398-.0650278-.1137987-.1706981-.186955-.0975417-.0731563-.2357259-.1056702-.1300557-.0406424-.2682398-.0406424-.3495247 0-.6502784.1056702-.2926253.1056703-.5364797.2601114l-.4308095-.8860043q.1300557-.0812848.3007538-.1706981.1788266-.0894133.390167-.1625696.2113405-.0731563.4470664-.1219272.2438544-.048771.5120943-.048771.4958373 0 .8534904.1219272.3657816.1137987.6015075.3332677.2357259.2113405.3495246.5039657.1137987.2844968.1137987.625893 0 .3332677-.186955.6502784-.186955.3088822-.5039657.4714518.4389379.1788266.6746638.5364797.2438544.3495246.2438544.8453619 0 .3901671-.1300557.7234347-.1300557.3251393-.406424.5689937-.2763683.235726-.7071777.3739101-.422681.1300557-1.0079316.1300557z"/><path d="m10.502445 7.817506q.08941.00813.203212.016257.121927 0 .284497 0 .951032 0 1.406227-.4795803.463323-.4795803.463323-1.3249422 0-.8860044-.438938-1.3411992-.438938-.4551949-1.38997-.4551949-.130055 0-.26824.00813-.138184 0-.260111.016257zm3.665945-1.7882655q0 .7315631-.227598 1.2761713-.227597.5446082-.650278.9022613-.414553.3576531-1.01606.5364797-.601508.1788265-1.349328.1788265-.341396 0-.796591-.032514-.4551948-.0243853-.8941328-.1137986v-5.486724q.438938-.081285.9103898-.1056702.47958-.032514.820976-.032514.723435 0 1.308686.1625696.593379.1625696 1.01606.5120943.422681.3495246.650278.8941328.227598.5446081.227598 1.3086853z"/></g></g></svg> diff --git a/editor/icons/TextureArray.svg b/editor/icons/TextureArray.svg index 86d4875e12..a71860023b 100644 --- a/editor/icons/TextureArray.svg +++ b/editor/icons/TextureArray.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".207395" transform="matrix(1.6197742 0 0 .750929 -3.723153 1.832957)"><path d="m4.7302951 2.4553483h2.2481639v.9872012h-1.0701592v6.0559397h1.0701592v.9872008h-2.2481639z"/><path d="m10.138643 10.48569h-2.2481636v-.9872008h1.0701592v-6.0559397h-1.0701592v-.9872012h2.2481636z"/></g></g></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-.359546 .287637)"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".207395" transform="matrix(1.6197742 0 0 .750929 -3.723153 1.832957)"><path d="m4.9900159 2.5027746h1.85211v1.3316838h-.926055v5.3267353h.926055v1.3316833h-1.85211z"/><path d="m9.9289759 10.492877h-1.85211v-1.3316833h.926055v-5.3267353h-.926055v-1.3316838h1.85211z"/></g></g></svg> diff --git a/editor/icons/TextureProgress.svg b/editor/icons/TextureProgressBar.svg index 30d76e33b8..30d76e33b8 100644 --- a/editor/icons/TextureProgress.svg +++ b/editor/icons/TextureProgressBar.svg diff --git a/editor/import/collada.cpp b/editor/import/collada.cpp index 8eb68ecdcf..63b614e436 100644 --- a/editor/import/collada.cpp +++ b/editor/import/collada.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -1365,7 +1365,7 @@ Collada::Node *Collada::_parse_visual_instance_geometry(XMLParser &parser) { } if (geom->controller) { - if (geom->skeletons.empty()) { + if (geom->skeletons.is_empty()) { //XSI style if (state.skin_controller_data_map.has(geom->source)) { @@ -2321,7 +2321,7 @@ void Collada::_optimize() { i--; } - while (!mgeom.empty()) { + while (!mgeom.is_empty()) { Node *n = mgeom.front()->get(); n->parent->children.push_back(n); mgeom.pop_front(); diff --git a/editor/import/collada.h b/editor/import/collada.h index aa0d42035f..2c3f0a3006 100644 --- a/editor/import/collada.h +++ b/editor/import/collada.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -96,8 +96,8 @@ public: }; float aspect = 1; - float z_near = 0.1; - float z_far = 100; + float z_near = 0.05; + float z_far = 4000; CameraData() {} }; @@ -128,7 +128,7 @@ public: String name; struct Source { Vector<float> array; - int stride; + int stride = 0; }; Map<String, Source> sources; @@ -142,15 +142,15 @@ public: struct Primitives { struct SourceRef { String source; - int offset; + int offset = 0; }; String material; Map<String, SourceRef> sources; Vector<float> polygons; Vector<float> indices; - int count; - int vertex_size; + int count = 0; + int vertex_size = 0; }; Vector<Primitives> primitives; @@ -168,7 +168,7 @@ public: struct Source { Vector<String> sarray; Vector<float> array; - int stride; + int stride = 0; }; Map<String, Source> sources; @@ -200,14 +200,14 @@ public: struct Weights { struct SourceRef { String source; - int offset; + int offset = 0; }; String material; Map<String, SourceRef> sources; Vector<float> sets; Vector<float> indices; - int count; + int count = 0; } weights; Map<String, Transform> bone_rest_map; @@ -242,8 +242,8 @@ public: Color color; int uid = 0; struct Weight { - int bone_idx; - float weight; + int bone_idx = 0; + float weight = 0; bool operator<(const Weight w) const { return weight > w.weight; } //heaviest first }; @@ -274,7 +274,7 @@ public: if (normal == p_vert.normal) { if (uv == p_vert.uv) { if (uv2 == p_vert.uv2) { - if (!weights.empty() || !p_vert.weights.empty()) { + if (!weights.is_empty() || !p_vert.weights.is_empty()) { if (weights.size() == p_vert.weights.size()) { for (int i = 0; i < weights.size(); i++) { if (weights[i].bone_idx != p_vert.weights[i].bone_idx) { @@ -313,7 +313,6 @@ public: struct Node { enum Type { - TYPE_NODE, TYPE_JOINT, TYPE_SKELETON, //this bone is not collada, it's added afterwards as optimization @@ -332,7 +331,7 @@ public: }; String id; - Op op; + Op op = OP_ROTATE; Vector<float> data; }; @@ -376,7 +375,7 @@ public: }; struct NodeGeometry : public Node { - bool controller; + bool controller = false; String source; struct Material { @@ -439,7 +438,7 @@ public: TYPE_MATRIX }; - float time; + float time = 0; Vector<float> data; Point2 in_tangent; Point2 out_tangent; @@ -464,10 +463,10 @@ public: float unit_scale = 1.0; Vector3::Axis up_axis = Vector3::AXIS_Y; - bool z_up; + bool z_up = false; struct Version { - int major, minor, rev; + int major = 0, minor = 0, rev = 0; bool operator<(const Version &p_ver) const { return (major == p_ver.major) ? ((minor == p_ver.minor) ? (rev < p_ver.rev) : minor < p_ver.minor) : major < p_ver.major; } Version(int p_major = 0, int p_minor = 0, int p_rev = 0) { diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 12cbaaa885..50b13673fa 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -33,6 +33,7 @@ #include "core/os/os.h" #include "editor/editor_node.h" #include "editor/import/collada.h" +#include "editor/import/scene_importer_mesh_node_3d.h" #include "scene/3d/camera_3d.h" #include "scene/3d/light_3d.h" #include "scene/3d/mesh_instance_3d.h" @@ -46,33 +47,28 @@ struct ColladaImport { Collada collada; - Node3D *scene; + Node3D *scene = nullptr; Vector<Ref<Animation>> animations; struct NodeMap { //String path; - Node3D *node; - int bone; + Node3D *node = nullptr; + int bone = -1; List<int> anim_tracks; - - NodeMap() { - node = nullptr; - bone = -1; - } }; - bool found_ambient; + bool found_ambient = false; Color ambient; - bool found_directional; - bool force_make_tangents; - bool apply_mesh_xform_to_vertices; - bool use_mesh_builtin_materials; - float bake_fps; + bool found_directional = false; + bool force_make_tangents = false; + bool apply_mesh_xform_to_vertices = true; + bool use_mesh_builtin_materials = false; + float bake_fps = 15; Map<String, NodeMap> node_map; //map from collada node to engine node Map<String, String> node_name_map; //map from collada node to engine node - Map<String, Ref<ArrayMesh>> mesh_cache; + Map<String, Ref<EditorSceneImporterMesh>> mesh_cache; Map<String, Ref<Curve3D>> curve_cache; Map<String, Ref<Material>> material_cache; Map<Collada::Node *, Skeleton3D *> skeleton_map; @@ -88,7 +84,7 @@ struct ColladaImport { Error _create_scene(Collada::Node *p_node, Node3D *p_parent); Error _create_resources(Collada::Node *p_node, bool p_use_compression); Error _create_material(const String &p_target); - Error _create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<ArrayMesh>> p_morph_meshes = Vector<Ref<ArrayMesh>>(), bool p_use_compression = false, bool p_use_mesh_material = false); + Error _create_mesh_surfaces(bool p_optimize, Ref<EditorSceneImporterMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<EditorSceneImporterMesh>> p_morph_meshes = Vector<Ref<EditorSceneImporterMesh>>(), bool p_use_compression = false, bool p_use_mesh_material = false); Error load(const String &p_path, int p_flags, bool p_force_make_tangents = false, bool p_use_compression = false); void _fix_param_animation_tracks(); void create_animation(int p_clip, bool p_make_tracks_in_all_bones, bool p_import_value_tracks); @@ -98,14 +94,6 @@ struct ColladaImport { Vector<String> missing_textures; void _pre_process_lights(Collada::Node *p_node); - - ColladaImport() { - found_ambient = false; - found_directional = false; - force_make_tangents = false; - apply_mesh_xform_to_vertices = true; - bake_fps = 15; - } }; Error ColladaImport::_populate_skeleton(Skeleton3D *p_skeleton, Collada::Node *p_node, int &r_bone, int p_parent) { @@ -291,8 +279,8 @@ Error ColladaImport::_create_scene(Collada::Node *p_node, Node3D *p_parent) { node = memnew(Path3D); } else { //mesh since nothing else - node = memnew(MeshInstance3D); - //Object::cast_to<MeshInstance3D>(node)->set_flag(GeometryInstance3D::FLAG_USE_BAKED_LIGHT, true); + node = memnew(EditorSceneImporterMeshNode3D); + //Object::cast_to<EditorSceneImporterMeshNode3D>(node)->set_flag(GeometryInstance3D::FLAG_USE_BAKED_LIGHT, true); } } break; case Collada::Node::TYPE_SKELETON: { @@ -453,7 +441,7 @@ Error ColladaImport::_create_material(const String &p_target) { return OK; } -Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<ArrayMesh>> p_morph_meshes, bool p_use_compression, bool p_use_mesh_material) { +Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<EditorSceneImporterMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<EditorSceneImporterMesh>> p_morph_meshes, bool p_use_compression, bool p_use_mesh_material) { bool local_xform_mirror = p_local_xform.basis.determinant() < 0; if (p_morph_data) { @@ -844,19 +832,19 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me for (int k = 0; k < vertex_array.size(); k++) { if (normal_src) { - surftool->add_normal(vertex_array[k].normal); + surftool->set_normal(vertex_array[k].normal); if (binormal_src && tangent_src) { - surftool->add_tangent(vertex_array[k].tangent); + surftool->set_tangent(vertex_array[k].tangent); } } if (uv_src) { - surftool->add_uv(Vector2(vertex_array[k].uv.x, vertex_array[k].uv.y)); + surftool->set_uv(Vector2(vertex_array[k].uv.x, vertex_array[k].uv.y)); } if (uv2_src) { - surftool->add_uv2(Vector2(vertex_array[k].uv2.x, vertex_array[k].uv2.y)); + surftool->set_uv2(Vector2(vertex_array[k].uv2.x, vertex_array[k].uv2.y)); } if (color_src) { - surftool->add_color(vertex_array[k].color); + surftool->set_color(vertex_array[k].color); } if (has_weights) { @@ -876,8 +864,8 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me } } - surftool->add_bones(bones); - surftool->add_weights(weights); + surftool->set_bones(bones); + surftool->set_weights(weights); } surftool->add_vertex(vertex_array[k].vertex); @@ -910,7 +898,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me //////////////////////////// for (int mi = 0; mi < p_morph_meshes.size(); mi++) { - Array a = p_morph_meshes[mi]->surface_get_arrays(surface); + Array a = p_morph_meshes[mi]->get_surface_arrays(surface); //add valid weight and bone arrays if they exist, TODO check if they are unique to shape (generally not) if (has_weights) { @@ -923,14 +911,15 @@ 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, Dictionary(), p_use_compression ? Mesh::ARRAY_COMPRESS_DEFAULT : 0); - + String surface_name; + Ref<Material> mat; if (material.is_valid()) { if (p_use_mesh_material) { - p_mesh->surface_set_material(surface, material); + mat = material; } - p_mesh->surface_set_name(surface, material->get_name()); + surface_name = material->get_name(); } + p_mesh->add_surface(Mesh::PRIMITIVE_TRIANGLES, d, mr, Dictionary(), mat, surface_name); } /*****************/ @@ -1015,10 +1004,10 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres } } - if (Object::cast_to<MeshInstance3D>(node)) { + if (Object::cast_to<EditorSceneImporterMeshNode3D>(node)) { Collada::NodeGeometry *ng2 = static_cast<Collada::NodeGeometry *>(p_node); - MeshInstance3D *mi = Object::cast_to<MeshInstance3D>(node); + EditorSceneImporterMeshNode3D *mi = Object::cast_to<EditorSceneImporterMeshNode3D>(node); ERR_FAIL_COND_V(!mi, ERR_BUG); @@ -1027,7 +1016,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres String meshid; Transform apply_xform; Vector<int> bone_remap; - Vector<Ref<ArrayMesh>> morphs; + Vector<Ref<EditorSceneImporterMesh>> morphs; if (ng2->controller) { String ngsource = ng2->source; @@ -1038,7 +1027,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres Vector<String> skeletons = ng2->skeletons; - ERR_FAIL_COND_V(skeletons.empty(), ERR_INVALID_DATA); + ERR_FAIL_COND_V(skeletons.is_empty(), ERR_INVALID_DATA); String skname = skeletons[0]; ERR_FAIL_COND_V(!node_map.has(skname), ERR_INVALID_DATA); @@ -1096,10 +1085,10 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres for (int i = 0; i < names.size(); i++) { String meshid2 = names[i]; if (collada.state.mesh_data_map.has(meshid2)) { - Ref<ArrayMesh> mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); + Ref<EditorSceneImporterMesh> mesh = Ref<EditorSceneImporterMesh>(memnew(EditorSceneImporterMesh)); const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid2]; mesh->set_name(meshdata.name); - Error err = _create_mesh_surfaces(false, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, nullptr, Vector<Ref<ArrayMesh>>(), false); + Error err = _create_mesh_surfaces(false, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, nullptr, Vector<Ref<EditorSceneImporterMesh>>(), false); ERR_FAIL_COND_V(err, err); morphs.push_back(mesh); @@ -1122,7 +1111,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres meshid = ng2->source; } - Ref<ArrayMesh> mesh; + Ref<EditorSceneImporterMesh> mesh; if (mesh_cache.has(meshid)) { mesh = mesh_cache[meshid]; } else { @@ -1130,7 +1119,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres //bleh, must ignore invalid ERR_FAIL_COND_V(!collada.state.mesh_data_map.has(meshid), ERR_INVALID_DATA); - mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); + mesh = Ref<EditorSceneImporterMesh>(memnew(EditorSceneImporterMesh)); const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid]; mesh->set_name(meshdata.name); Error err = _create_mesh_surfaces(morphs.size() == 0, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, morph, morphs, p_use_compression, use_mesh_builtin_materials); @@ -1482,7 +1471,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones } Vector<float> data = at.get_value_at_time(snapshots[i]); - ERR_CONTINUE(data.empty()); + ERR_CONTINUE(data.is_empty()); Collada::Node::XForm &xf = cn->xform_list.write[xform_idx]; diff --git a/editor/import/editor_import_collada.h b/editor/import/editor_import_collada.h index 5fa17ebd02..bf45322765 100644 --- a/editor/import/editor_import_collada.h +++ b/editor/import/editor_import_collada.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp index 2658031bd9..44aff874eb 100644 --- a/editor/import/editor_import_plugin.cpp +++ b/editor/import/editor_import_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/editor_import_plugin.h b/editor/import/editor_import_plugin.h index 00a7d9efba..345a40e96d 100644 --- a/editor/import/editor_import_plugin.h +++ b/editor/import/editor_import_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp deleted file mode 100644 index 266df78949..0000000000 --- a/editor/import/editor_scene_importer_gltf.cpp +++ /dev/null @@ -1,3246 +0,0 @@ -/*************************************************************************/ -/* editor_scene_importer_gltf.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_scene_importer_gltf.h" - -#include "core/crypto/crypto_core.h" -#include "core/io/json.h" -#include "core/math/disjoint_set.h" -#include "core/math/math_defs.h" -#include "core/os/file_access.h" -#include "core/os/os.h" -#include "modules/regex/regex.h" -#include "scene/3d/bone_attachment_3d.h" -#include "scene/3d/camera_3d.h" -#include "scene/3d/mesh_instance_3d.h" -#include "scene/animation/animation_player.h" -#include "scene/resources/surface_tool.h" - -uint32_t EditorSceneImporterGLTF::get_import_flags() const { - return IMPORT_SCENE | IMPORT_ANIMATION; -} - -void EditorSceneImporterGLTF::get_extensions(List<String> *r_extensions) const { - r_extensions->push_back("gltf"); - r_extensions->push_back("glb"); -} - -Error EditorSceneImporterGLTF::_parse_json(const String &p_path, GLTFState &state) { - Error err; - FileAccessRef f = FileAccess::open(p_path, FileAccess::READ, &err); - if (!f) { - return err; - } - - Vector<uint8_t> array; - array.resize(f->get_len()); - f->get_buffer(array.ptrw(), array.size()); - String text; - text.parse_utf8((const char *)array.ptr(), array.size()); - - String err_txt; - int err_line; - Variant v; - err = JSON::parse(text, v, err_txt, err_line); - if (err != OK) { - _err_print_error("", p_path.utf8().get_data(), err_line, err_txt.utf8().get_data(), ERR_HANDLER_SCRIPT); - return err; - } - state.json = v; - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_glb(const String &p_path, GLTFState &state) { - Error err; - FileAccessRef f = FileAccess::open(p_path, FileAccess::READ, &err); - if (!f) { - return err; - } - - uint32_t magic = f->get_32(); - ERR_FAIL_COND_V(magic != 0x46546C67, ERR_FILE_UNRECOGNIZED); //glTF - f->get_32(); // version - f->get_32(); // length - - uint32_t chunk_length = f->get_32(); - uint32_t chunk_type = f->get_32(); - - ERR_FAIL_COND_V(chunk_type != 0x4E4F534A, ERR_PARSE_ERROR); //JSON - Vector<uint8_t> json_data; - json_data.resize(chunk_length); - uint32_t len = f->get_buffer(json_data.ptrw(), chunk_length); - ERR_FAIL_COND_V(len != chunk_length, ERR_FILE_CORRUPT); - - String text; - text.parse_utf8((const char *)json_data.ptr(), json_data.size()); - - String err_txt; - int err_line; - Variant v; - err = JSON::parse(text, v, err_txt, err_line); - if (err != OK) { - _err_print_error("", p_path.utf8().get_data(), err_line, err_txt.utf8().get_data(), ERR_HANDLER_SCRIPT); - return err; - } - - state.json = v; - - //data? - - chunk_length = f->get_32(); - chunk_type = f->get_32(); - - if (f->eof_reached()) { - return OK; //all good - } - - ERR_FAIL_COND_V(chunk_type != 0x004E4942, ERR_PARSE_ERROR); //BIN - - state.glb_data.resize(chunk_length); - len = f->get_buffer(state.glb_data.ptrw(), chunk_length); - ERR_FAIL_COND_V(len != chunk_length, ERR_FILE_CORRUPT); - - return OK; -} - -static Vector3 _arr_to_vec3(const Array &p_array) { - ERR_FAIL_COND_V(p_array.size() != 3, Vector3()); - return Vector3(p_array[0], p_array[1], p_array[2]); -} - -static Quat _arr_to_quat(const Array &p_array) { - ERR_FAIL_COND_V(p_array.size() != 4, Quat()); - return Quat(p_array[0], p_array[1], p_array[2], p_array[3]); -} - -static Transform _arr_to_xform(const Array &p_array) { - ERR_FAIL_COND_V(p_array.size() != 16, Transform()); - - Transform xform; - xform.basis.set_axis(Vector3::AXIS_X, Vector3(p_array[0], p_array[1], p_array[2])); - xform.basis.set_axis(Vector3::AXIS_Y, Vector3(p_array[4], p_array[5], p_array[6])); - xform.basis.set_axis(Vector3::AXIS_Z, Vector3(p_array[8], p_array[9], p_array[10])); - xform.set_origin(Vector3(p_array[12], p_array[13], p_array[14])); - - return xform; -} - -String EditorSceneImporterGLTF::_sanitize_scene_name(const String &name) { - RegEx regex("([^a-zA-Z0-9_ -]+)"); - String p_name = regex.sub(name, "", true); - return p_name; -} - -String EditorSceneImporterGLTF::_gen_unique_name(GLTFState &state, const String &p_name) { - const String s_name = _sanitize_scene_name(p_name); - - String name; - int index = 1; - while (true) { - name = s_name; - - if (index > 1) { - name += " " + itos(index); - } - if (!state.unique_names.has(name)) { - break; - } - index++; - } - - state.unique_names.insert(name); - - return name; -} - -String EditorSceneImporterGLTF::_sanitize_bone_name(const String &name) { - String p_name = name.camelcase_to_underscore(true); - - RegEx pattern_nocolon(":"); - p_name = pattern_nocolon.sub(p_name, "_", true); - - RegEx pattern_noslash("/"); - p_name = pattern_noslash.sub(p_name, "_", true); - - RegEx pattern_nospace(" +"); - p_name = pattern_nospace.sub(p_name, "_", true); - - RegEx pattern_multiple("_+"); - p_name = pattern_multiple.sub(p_name, "_", true); - - RegEx pattern_padded("0+(\\d+)"); - p_name = pattern_padded.sub(p_name, "$1", true); - - return p_name; -} - -String EditorSceneImporterGLTF::_gen_unique_bone_name(GLTFState &state, const GLTFSkeletonIndex skel_i, const String &p_name) { - String s_name = _sanitize_bone_name(p_name); - if (s_name.empty()) { - s_name = "bone"; - } - String name; - int index = 1; - while (true) { - name = s_name; - - if (index > 1) { - name += "_" + itos(index); - } - if (!state.skeletons[skel_i].unique_names.has(name)) { - break; - } - index++; - } - - state.skeletons.write[skel_i].unique_names.insert(name); - - return name; -} - -Error EditorSceneImporterGLTF::_parse_scenes(GLTFState &state) { - ERR_FAIL_COND_V(!state.json.has("scenes"), ERR_FILE_CORRUPT); - const Array &scenes = state.json["scenes"]; - int loaded_scene = 0; - if (state.json.has("scene")) { - loaded_scene = state.json["scene"]; - } else { - WARN_PRINT("The load-time scene is not defined in the glTF2 file. Picking the first scene."); - } - - if (scenes.size()) { - ERR_FAIL_COND_V(loaded_scene >= scenes.size(), ERR_FILE_CORRUPT); - const Dictionary &s = scenes[loaded_scene]; - ERR_FAIL_COND_V(!s.has("nodes"), ERR_UNAVAILABLE); - const Array &nodes = s["nodes"]; - for (int j = 0; j < nodes.size(); j++) { - state.root_nodes.push_back(nodes[j]); - } - - if (s.has("name") && s["name"] != "") { - state.scene_name = _gen_unique_name(state, s["name"]); - } else { - state.scene_name = _gen_unique_name(state, "Scene"); - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_nodes(GLTFState &state) { - ERR_FAIL_COND_V(!state.json.has("nodes"), ERR_FILE_CORRUPT); - const Array &nodes = state.json["nodes"]; - for (int i = 0; i < nodes.size(); i++) { - GLTFNode *node = memnew(GLTFNode); - const Dictionary &n = nodes[i]; - - if (n.has("name")) { - node->name = n["name"]; - } - if (n.has("camera")) { - node->camera = n["camera"]; - } - if (n.has("mesh")) { - node->mesh = n["mesh"]; - } - if (n.has("skin")) { - node->skin = n["skin"]; - } - if (n.has("matrix")) { - node->xform = _arr_to_xform(n["matrix"]); - - } else { - if (n.has("translation")) { - node->translation = _arr_to_vec3(n["translation"]); - } - if (n.has("rotation")) { - node->rotation = _arr_to_quat(n["rotation"]); - } - if (n.has("scale")) { - node->scale = _arr_to_vec3(n["scale"]); - } - - node->xform.basis.set_quat_scale(node->rotation, node->scale); - node->xform.origin = node->translation; - } - if (n.has("extensions")) { - Dictionary extensions = n["extensions"]; - if (extensions.has("KHR_lights_punctual")) { - Dictionary lights_punctual = extensions["KHR_lights_punctual"]; - if (lights_punctual.has("light")) { - GLTFLightIndex light = lights_punctual["light"]; - node->light = light; - } - } - } - if (n.has("children")) { - const Array &children = n["children"]; - for (int j = 0; j < children.size(); j++) { - node->children.push_back(children[j]); - } - } - - state.nodes.push_back(node); - } - - // build the hierarchy - for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); node_i++) { - for (int j = 0; j < state.nodes[node_i]->children.size(); j++) { - GLTFNodeIndex child_i = state.nodes[node_i]->children[j]; - - ERR_FAIL_INDEX_V(child_i, state.nodes.size(), ERR_FILE_CORRUPT); - ERR_CONTINUE(state.nodes[child_i]->parent != -1); //node already has a parent, wtf. - - state.nodes[child_i]->parent = node_i; - } - } - - _compute_node_heights(state); - - return OK; -} - -void EditorSceneImporterGLTF::_compute_node_heights(GLTFState &state) { - state.root_nodes.clear(); - for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); ++node_i) { - GLTFNode *node = state.nodes[node_i]; - node->height = 0; - - GLTFNodeIndex current_i = node_i; - while (current_i >= 0) { - const GLTFNodeIndex parent_i = state.nodes[current_i]->parent; - if (parent_i >= 0) { - ++node->height; - } - current_i = parent_i; - } - - if (node->height == 0) { - state.root_nodes.push_back(node_i); - } - } -} - -static Vector<uint8_t> _parse_base64_uri(const String &uri) { - int start = uri.find(","); - ERR_FAIL_COND_V(start == -1, Vector<uint8_t>()); - - CharString substr = uri.right(start + 1).ascii(); - - int strlen = substr.length(); - - Vector<uint8_t> buf; - buf.resize(strlen / 4 * 3 + 1 + 1); - - size_t len = 0; - ERR_FAIL_COND_V(CryptoCore::b64_decode(buf.ptrw(), buf.size(), &len, (unsigned char *)substr.get_data(), strlen) != OK, Vector<uint8_t>()); - - buf.resize(len); - - return buf; -} - -Error EditorSceneImporterGLTF::_parse_buffers(GLTFState &state, const String &p_base_path) { - if (!state.json.has("buffers")) { - return OK; - } - - const Array &buffers = state.json["buffers"]; - for (GLTFBufferIndex i = 0; i < buffers.size(); i++) { - if (i == 0 && state.glb_data.size()) { - state.buffers.push_back(state.glb_data); - - } else { - const Dictionary &buffer = buffers[i]; - if (buffer.has("uri")) { - Vector<uint8_t> buffer_data; - String uri = buffer["uri"]; - - if (uri.begins_with("data:")) { // Embedded data using base64. - // Validate data MIME types and throw an error if it's one we don't know/support. - if (!uri.begins_with("data:application/octet-stream;base64") && - !uri.begins_with("data:application/gltf-buffer;base64")) { - ERR_PRINT("glTF: Got buffer with an unknown URI data type: " + uri); - } - buffer_data = _parse_base64_uri(uri); - } else { // Relative path to an external image file. - uri = p_base_path.plus_file(uri).replace("\\", "/"); // Fix for Windows. - buffer_data = FileAccess::get_file_as_array(uri); - ERR_FAIL_COND_V_MSG(buffer.size() == 0, ERR_PARSE_ERROR, "glTF: Couldn't load binary file as an array: " + uri); - } - - ERR_FAIL_COND_V(!buffer.has("byteLength"), ERR_PARSE_ERROR); - int byteLength = buffer["byteLength"]; - ERR_FAIL_COND_V(byteLength < buffer_data.size(), ERR_PARSE_ERROR); - state.buffers.push_back(buffer_data); - } - } - } - - print_verbose("glTF: Total buffers: " + itos(state.buffers.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_buffer_views(GLTFState &state) { - ERR_FAIL_COND_V(!state.json.has("bufferViews"), ERR_FILE_CORRUPT); - const Array &buffers = state.json["bufferViews"]; - for (GLTFBufferViewIndex i = 0; i < buffers.size(); i++) { - const Dictionary &d = buffers[i]; - - GLTFBufferView buffer_view; - - ERR_FAIL_COND_V(!d.has("buffer"), ERR_PARSE_ERROR); - buffer_view.buffer = d["buffer"]; - ERR_FAIL_COND_V(!d.has("byteLength"), ERR_PARSE_ERROR); - buffer_view.byte_length = d["byteLength"]; - - if (d.has("byteOffset")) { - buffer_view.byte_offset = d["byteOffset"]; - } - - if (d.has("byteStride")) { - buffer_view.byte_stride = d["byteStride"]; - } - - if (d.has("target")) { - const int target = d["target"]; - buffer_view.indices = target == ELEMENT_ARRAY_BUFFER; - } - - state.buffer_views.push_back(buffer_view); - } - - print_verbose("glTF: Total buffer views: " + itos(state.buffer_views.size())); - - return OK; -} - -EditorSceneImporterGLTF::GLTFType EditorSceneImporterGLTF::_get_type_from_str(const String &p_string) { - if (p_string == "SCALAR") { - return TYPE_SCALAR; - } - - if (p_string == "VEC2") { - return TYPE_VEC2; - } - if (p_string == "VEC3") { - return TYPE_VEC3; - } - if (p_string == "VEC4") { - return TYPE_VEC4; - } - - if (p_string == "MAT2") { - return TYPE_MAT2; - } - if (p_string == "MAT3") { - return TYPE_MAT3; - } - if (p_string == "MAT4") { - return TYPE_MAT4; - } - - ERR_FAIL_V(TYPE_SCALAR); -} - -Error EditorSceneImporterGLTF::_parse_accessors(GLTFState &state) { - ERR_FAIL_COND_V(!state.json.has("accessors"), ERR_FILE_CORRUPT); - const Array &accessors = state.json["accessors"]; - for (GLTFAccessorIndex i = 0; i < accessors.size(); i++) { - const Dictionary &d = accessors[i]; - - GLTFAccessor accessor; - - ERR_FAIL_COND_V(!d.has("componentType"), ERR_PARSE_ERROR); - accessor.component_type = d["componentType"]; - ERR_FAIL_COND_V(!d.has("count"), ERR_PARSE_ERROR); - accessor.count = d["count"]; - ERR_FAIL_COND_V(!d.has("type"), ERR_PARSE_ERROR); - accessor.type = _get_type_from_str(d["type"]); - - if (d.has("bufferView")) { - accessor.buffer_view = d["bufferView"]; //optional because it may be sparse... - } - - if (d.has("byteOffset")) { - accessor.byte_offset = d["byteOffset"]; - } - - if (d.has("max")) { - accessor.max = d["max"]; - } - - if (d.has("min")) { - accessor.min = d["min"]; - } - - if (d.has("sparse")) { - //eeh.. - - const Dictionary &s = d["sparse"]; - - ERR_FAIL_COND_V(!s.has("count"), ERR_PARSE_ERROR); - accessor.sparse_count = s["count"]; - ERR_FAIL_COND_V(!s.has("indices"), ERR_PARSE_ERROR); - const Dictionary &si = s["indices"]; - - ERR_FAIL_COND_V(!si.has("bufferView"), ERR_PARSE_ERROR); - accessor.sparse_indices_buffer_view = si["bufferView"]; - ERR_FAIL_COND_V(!si.has("componentType"), ERR_PARSE_ERROR); - accessor.sparse_indices_component_type = si["componentType"]; - - if (si.has("byteOffset")) { - accessor.sparse_indices_byte_offset = si["byteOffset"]; - } - - ERR_FAIL_COND_V(!s.has("values"), ERR_PARSE_ERROR); - const Dictionary &sv = s["values"]; - - ERR_FAIL_COND_V(!sv.has("bufferView"), ERR_PARSE_ERROR); - accessor.sparse_values_buffer_view = sv["bufferView"]; - if (sv.has("byteOffset")) { - accessor.sparse_values_byte_offset = sv["byteOffset"]; - } - } - - state.accessors.push_back(accessor); - } - - print_verbose("glTF: Total accessors: " + itos(state.accessors.size())); - - return OK; -} - -String EditorSceneImporterGLTF::_get_component_type_name(const uint32_t p_component) { - switch (p_component) { - case COMPONENT_TYPE_BYTE: - return "Byte"; - case COMPONENT_TYPE_UNSIGNED_BYTE: - return "UByte"; - case COMPONENT_TYPE_SHORT: - return "Short"; - case COMPONENT_TYPE_UNSIGNED_SHORT: - return "UShort"; - case COMPONENT_TYPE_INT: - return "Int"; - case COMPONENT_TYPE_FLOAT: - return "Float"; - } - - return "<Error>"; -} - -String EditorSceneImporterGLTF::_get_type_name(const GLTFType p_component) { - static const char *names[] = { - "float", - "vec2", - "vec3", - "vec4", - "mat2", - "mat3", - "mat4" - }; - - return names[p_component]; -} - -Error EditorSceneImporterGLTF::_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) { - const GLTFBufferView &bv = state.buffer_views[p_buffer_view]; - - int stride = bv.byte_stride ? bv.byte_stride : element_size; - if (for_vertex && stride % 4) { - stride += 4 - (stride % 4); //according to spec must be multiple of 4 - } - - ERR_FAIL_INDEX_V(bv.buffer, state.buffers.size(), ERR_PARSE_ERROR); - - const uint32_t offset = bv.byte_offset + byte_offset; - Vector<uint8_t> buffer = state.buffers[bv.buffer]; //copy on write, so no performance hit - const uint8_t *bufptr = buffer.ptr(); - - //use to debug - print_verbose("glTF: type " + _get_type_name(type) + " component type: " + _get_component_type_name(component_type) + " stride: " + itos(stride) + " amount " + itos(count)); - print_verbose("glTF: accessor offset" + itos(byte_offset) + " view offset: " + itos(bv.byte_offset) + " total buffer len: " + itos(buffer.size()) + " view len " + itos(bv.byte_length)); - - const int buffer_end = (stride * (count - 1)) + element_size; - ERR_FAIL_COND_V(buffer_end > bv.byte_length, ERR_PARSE_ERROR); - - ERR_FAIL_COND_V((int)(offset + buffer_end) > buffer.size(), ERR_PARSE_ERROR); - - //fill everything as doubles - - for (int i = 0; i < count; i++) { - const uint8_t *src = &bufptr[offset + i * stride]; - - for (int j = 0; j < component_count; j++) { - if (skip_every && j > 0 && (j % skip_every) == 0) { - src += skip_bytes; - } - - double d = 0; - - switch (component_type) { - case COMPONENT_TYPE_BYTE: { - int8_t b = int8_t(*src); - if (normalized) { - d = (double(b) / 128.0); - } else { - d = double(b); - } - } break; - case COMPONENT_TYPE_UNSIGNED_BYTE: { - uint8_t b = *src; - if (normalized) { - d = (double(b) / 255.0); - } else { - d = double(b); - } - } break; - case COMPONENT_TYPE_SHORT: { - int16_t s = *(int16_t *)src; - if (normalized) { - d = (double(s) / 32768.0); - } else { - d = double(s); - } - } break; - case COMPONENT_TYPE_UNSIGNED_SHORT: { - uint16_t s = *(uint16_t *)src; - if (normalized) { - d = (double(s) / 65535.0); - } else { - d = double(s); - } - - } break; - case COMPONENT_TYPE_INT: { - d = *(int *)src; - } break; - case COMPONENT_TYPE_FLOAT: { - d = *(float *)src; - } break; - } - - *dst++ = d; - src += component_size; - } - } - - return OK; -} - -int EditorSceneImporterGLTF::_get_component_type_size(const int component_type) { - switch (component_type) { - case COMPONENT_TYPE_BYTE: - return 1; - break; - case COMPONENT_TYPE_UNSIGNED_BYTE: - return 1; - break; - case COMPONENT_TYPE_SHORT: - return 2; - break; - case COMPONENT_TYPE_UNSIGNED_SHORT: - return 2; - break; - case COMPONENT_TYPE_INT: - return 4; - break; - case COMPONENT_TYPE_FLOAT: - return 4; - break; - default: { - ERR_FAIL_V(0); - } - } - return 0; -} - -Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - //spec, for reference: - //https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment - - ERR_FAIL_INDEX_V(p_accessor, state.accessors.size(), Vector<double>()); - - const GLTFAccessor &a = state.accessors[p_accessor]; - - const int component_count_for_type[7] = { - 1, 2, 3, 4, 4, 9, 16 - }; - - const int component_count = component_count_for_type[a.type]; - const int component_size = _get_component_type_size(a.component_type); - ERR_FAIL_COND_V(component_size == 0, Vector<double>()); - int element_size = component_count * component_size; - - int skip_every = 0; - int skip_bytes = 0; - //special case of alignments, as described in spec - switch (a.component_type) { - case COMPONENT_TYPE_BYTE: - case COMPONENT_TYPE_UNSIGNED_BYTE: { - if (a.type == TYPE_MAT2) { - skip_every = 2; - skip_bytes = 2; - element_size = 8; //override for this case - } - if (a.type == TYPE_MAT3) { - skip_every = 3; - skip_bytes = 1; - element_size = 12; //override for this case - } - - } break; - case COMPONENT_TYPE_SHORT: - case COMPONENT_TYPE_UNSIGNED_SHORT: { - if (a.type == TYPE_MAT3) { - skip_every = 6; - skip_bytes = 4; - element_size = 16; //override for this case - } - } break; - default: { - } - } - - Vector<double> dst_buffer; - dst_buffer.resize(component_count * a.count); - double *dst = dst_buffer.ptrw(); - - if (a.buffer_view >= 0) { - ERR_FAIL_INDEX_V(a.buffer_view, state.buffer_views.size(), Vector<double>()); - - const Error err = _decode_buffer_view(state, dst, a.buffer_view, skip_every, skip_bytes, element_size, a.count, a.type, component_count, a.component_type, component_size, a.normalized, a.byte_offset, p_for_vertex); - if (err != OK) { - return Vector<double>(); - } - - } else { - //fill with zeros, as bufferview is not defined. - for (int i = 0; i < (a.count * component_count); i++) { - dst_buffer.write[i] = 0; - } - } - - if (a.sparse_count > 0) { - // I could not find any file using this, so this code is so far untested - Vector<double> indices; - indices.resize(a.sparse_count); - const int indices_component_size = _get_component_type_size(a.sparse_indices_component_type); - - Error err = _decode_buffer_view(state, indices.ptrw(), a.sparse_indices_buffer_view, 0, 0, indices_component_size, a.sparse_count, TYPE_SCALAR, 1, a.sparse_indices_component_type, indices_component_size, false, a.sparse_indices_byte_offset, false); - if (err != OK) { - return Vector<double>(); - } - - Vector<double> data; - data.resize(component_count * a.sparse_count); - err = _decode_buffer_view(state, data.ptrw(), a.sparse_values_buffer_view, skip_every, skip_bytes, element_size, a.sparse_count, a.type, component_count, a.component_type, component_size, a.normalized, a.sparse_values_byte_offset, p_for_vertex); - if (err != OK) { - return Vector<double>(); - } - - for (int i = 0; i < indices.size(); i++) { - const int write_offset = int(indices[i]) * component_count; - - for (int j = 0; j < component_count; j++) { - dst[write_offset + j] = data[i * component_count + j]; - } - } - } - - return dst_buffer; -} - -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); - Vector<int> ret; - - if (attribs.size() == 0) { - return ret; - } - - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size(); - ret.resize(ret_size); - { - int *w = ret.ptrw(); - for (int i = 0; i < ret_size; i++) { - w[i] = int(attribs_ptr[i]); - } - } - return ret; -} - -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); - Vector<float> ret; - - if (attribs.size() == 0) { - return ret; - } - - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size(); - ret.resize(ret_size); - { - float *w = ret.ptrw(); - for (int i = 0; i < ret_size; i++) { - w[i] = float(attribs_ptr[i]); - } - } - return ret; -} - -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); - Vector<Vector2> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 2 != 0, ret); - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size() / 2; - ret.resize(ret_size); - { - 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]); - } - } - return ret; -} - -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); - Vector<Vector3> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 3 != 0, ret); - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size() / 3; - ret.resize(ret_size); - { - 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]); - } - } - return ret; -} - -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); - Vector<Color> ret; - - if (attribs.size() == 0) { - return ret; - } - - const int type = state.accessors[p_accessor].type; - ERR_FAIL_COND_V(!(type == TYPE_VEC3 || type == TYPE_VEC4), ret); - int vec_len = 3; - if (type == TYPE_VEC4) { - vec_len = 4; - } - - ERR_FAIL_COND_V(attribs.size() % vec_len != 0, ret); - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size() / vec_len; - ret.resize(ret_size); - { - 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); - } - } - return ret; -} - -Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - Vector<Quat> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); - const double *attribs_ptr = attribs.ptr(); - const int ret_size = attribs.size() / 4; - ret.resize(ret_size); - { - for (int i = 0; i < ret_size; i++) { - ret.write[i] = Quat(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]).normalized(); - } - } - return ret; -} - -Vector<Transform2D> EditorSceneImporterGLTF::_decode_accessor_as_xform2d(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - Vector<Transform2D> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); - ret.resize(attribs.size() / 4); - for (int i = 0; i < ret.size(); i++) { - ret.write[i][0] = Vector2(attribs[i * 4 + 0], attribs[i * 4 + 1]); - ret.write[i][1] = Vector2(attribs[i * 4 + 2], attribs[i * 4 + 3]); - } - return ret; -} - -Vector<Basis> EditorSceneImporterGLTF::_decode_accessor_as_basis(GLTFState &state, const GLTFAccessorIndex p_accessor, bool p_for_vertex) { - const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - Vector<Basis> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 9 != 0, ret); - ret.resize(attribs.size() / 9); - for (int i = 0; i < ret.size(); i++) { - ret.write[i].set_axis(0, Vector3(attribs[i * 9 + 0], attribs[i * 9 + 1], attribs[i * 9 + 2])); - ret.write[i].set_axis(1, Vector3(attribs[i * 9 + 3], attribs[i * 9 + 4], attribs[i * 9 + 5])); - ret.write[i].set_axis(2, Vector3(attribs[i * 9 + 6], attribs[i * 9 + 7], attribs[i * 9 + 8])); - } - return ret; -} - -Vector<Transform> EditorSceneImporterGLTF::_decode_accessor_as_xform(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - Vector<Transform> ret; - - if (attribs.size() == 0) { - return ret; - } - - ERR_FAIL_COND_V(attribs.size() % 16 != 0, ret); - ret.resize(attribs.size() / 16); - for (int i = 0; i < ret.size(); i++) { - ret.write[i].basis.set_axis(0, Vector3(attribs[i * 16 + 0], attribs[i * 16 + 1], attribs[i * 16 + 2])); - ret.write[i].basis.set_axis(1, Vector3(attribs[i * 16 + 4], attribs[i * 16 + 5], attribs[i * 16 + 6])); - ret.write[i].basis.set_axis(2, Vector3(attribs[i * 16 + 8], attribs[i * 16 + 9], attribs[i * 16 + 10])); - ret.write[i].set_origin(Vector3(attribs[i * 16 + 12], attribs[i * 16 + 13], attribs[i * 16 + 14])); - } - return ret; -} - -Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { - if (!state.json.has("meshes")) { - return OK; - } - - bool compress_vert_data = state.import_flags & IMPORT_USE_COMPRESSION; - uint32_t mesh_flags = compress_vert_data ? Mesh::ARRAY_COMPRESS_DEFAULT : 0; - - Array meshes = state.json["meshes"]; - for (GLTFMeshIndex i = 0; i < meshes.size(); i++) { - print_verbose("glTF: Parsing mesh: " + itos(i)); - Dictionary d = meshes[i]; - - GLTFMesh mesh; - mesh.mesh.instance(); - - ERR_FAIL_COND_V(!d.has("primitives"), ERR_PARSE_ERROR); - - Array primitives = d["primitives"]; - const Dictionary &extras = d.has("extras") ? (Dictionary)d["extras"] : Dictionary(); - - for (int j = 0; j < primitives.size(); j++) { - Dictionary p = primitives[j]; - - Array array; - array.resize(Mesh::ARRAY_MAX); - - ERR_FAIL_COND_V(!p.has("attributes"), ERR_PARSE_ERROR); - - Dictionary a = p["attributes"]; - - Mesh::PrimitiveType primitive = Mesh::PRIMITIVE_TRIANGLES; - if (p.has("mode")) { - const int mode = p["mode"]; - ERR_FAIL_INDEX_V(mode, 7, ERR_FILE_CORRUPT); - static const Mesh::PrimitiveType primitives2[7] = { - Mesh::PRIMITIVE_POINTS, - Mesh::PRIMITIVE_LINES, - Mesh::PRIMITIVE_LINES, //loop not supported, should ce converted - Mesh::PRIMITIVE_LINES, - Mesh::PRIMITIVE_TRIANGLES, - Mesh::PRIMITIVE_TRIANGLE_STRIP, - 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]; - } - - ERR_FAIL_COND_V(!a.has("POSITION"), ERR_PARSE_ERROR); - if (a.has("POSITION")) { - array[Mesh::ARRAY_VERTEX] = _decode_accessor_as_vec3(state, a["POSITION"], true); - } - if (a.has("NORMAL")) { - array[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, a["NORMAL"], true); - } - if (a.has("TANGENT")) { - array[Mesh::ARRAY_TANGENT] = _decode_accessor_as_floats(state, a["TANGENT"], true); - } - if (a.has("TEXCOORD_0")) { - array[Mesh::ARRAY_TEX_UV] = _decode_accessor_as_vec2(state, a["TEXCOORD_0"], true); - } - if (a.has("TEXCOORD_1")) { - array[Mesh::ARRAY_TEX_UV2] = _decode_accessor_as_vec2(state, a["TEXCOORD_1"], true); - } - if (a.has("COLOR_0")) { - array[Mesh::ARRAY_COLOR] = _decode_accessor_as_color(state, a["COLOR_0"], true); - } - if (a.has("JOINTS_0")) { - array[Mesh::ARRAY_BONES] = _decode_accessor_as_ints(state, a["JOINTS_0"], true); - } - if (a.has("WEIGHTS_0")) { - 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(); - float *w = weights.ptrw(); - - for (int k = 0; k < wc; k += 4) { - float total = 0.0; - total += w[k + 0]; - total += w[k + 1]; - total += w[k + 2]; - total += w[k + 3]; - if (total > 0.0) { - w[k + 0] /= total; - w[k + 1] /= total; - w[k + 2] /= total; - w[k + 3] /= total; - } - } - } - array[Mesh::ARRAY_WEIGHTS] = weights; - } - - if (p.has("indices")) { - 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(); - int *w = indices.ptrw(); - for (int k = 0; k < is; k += 3) { - SWAP(w[k + 1], w[k + 2]); - } - } - array[Mesh::ARRAY_INDEX] = indices; - - } else if (primitive == Mesh::PRIMITIVE_TRIANGLES) { - //generate indices because they need to be swapped for CW/CCW - const Vector<Vector3> &vertices = array[Mesh::ARRAY_VERTEX]; - ERR_FAIL_COND_V(vertices.size() == 0, ERR_PARSE_ERROR); - Vector<int> indices; - const int vs = vertices.size(); - indices.resize(vs); - { - int *w = indices.ptrw(); - for (int k = 0; k < vs; k += 3) { - w[k] = k; - w[k + 1] = k + 2; - w[k + 2] = k + 1; - } - } - array[Mesh::ARRAY_INDEX] = indices; - } - - bool generate_tangents = (primitive == Mesh::PRIMITIVE_TRIANGLES && !a.has("TANGENT") && a.has("TEXCOORD_0") && a.has("NORMAL")); - - if (generate_tangents) { - //must generate mikktspace tangents.. ergh.. - Ref<SurfaceTool> st; - st.instance(); - st->create_from_triangle_arrays(array); - st->generate_tangents(); - array = st->commit_to_arrays(); - } - - Array morphs; - //blend shapes - if (p.has("targets")) { - print_verbose("glTF: Mesh has targets"); - const Array &targets = p["targets"]; - - //ideally BLEND_SHAPE_MODE_RELATIVE since gltf2 stores in displacement - //but it could require a larger refactor? - mesh.mesh->set_blend_shape_mode(Mesh::BLEND_SHAPE_MODE_NORMALIZED); - - if (j == 0) { - const Array &target_names = extras.has("targetNames") ? (Array)extras["targetNames"] : Array(); - for (int k = 0; k < targets.size(); k++) { - const String name = k < target_names.size() ? (String)target_names[k] : String("morph_") + itos(k); - mesh.mesh->add_blend_shape(name); - } - } - - for (int k = 0; k < targets.size(); k++) { - const Dictionary &t = targets[k]; - - Array array_copy; - array_copy.resize(Mesh::ARRAY_MAX); - - for (int l = 0; l < Mesh::ARRAY_MAX; l++) { - array_copy[l] = array[l]; - } - - array_copy[Mesh::ARRAY_INDEX] = Variant(); - - if (t.has("POSITION")) { - 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); - { - const int max_idx = varr.size(); - varr.resize(size); - - 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]; - } else { - w_varr[l] = r_src_varr[l]; - } - } - } - array_copy[Mesh::ARRAY_VERTEX] = varr; - } - if (t.has("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); - - 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]; - } else { - w_narr[l] = r_src_narr[l]; - } - } - } - array_copy[Mesh::ARRAY_NORMAL] = narr; - } - if (t.has("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); - - Vector<float> tangents_v4; - - { - int max_idx = tangents_v3.size(); - - int size4 = src_tangents.size(); - tangents_v4.resize(size4); - float *w4 = tangents_v4.ptrw(); - - const Vector3 *r3 = tangents_v3.ptr(); - const float *r4 = src_tangents.ptr(); - - for (int l = 0; l < size4 / 4; l++) { - if (l < max_idx) { - w4[l * 4 + 0] = r3[l].x + r4[l * 4 + 0]; - w4[l * 4 + 1] = r3[l].y + r4[l * 4 + 1]; - w4[l * 4 + 2] = r3[l].z + r4[l * 4 + 2]; - } else { - w4[l * 4 + 0] = r4[l * 4 + 0]; - w4[l * 4 + 1] = r4[l * 4 + 1]; - w4[l * 4 + 2] = r4[l * 4 + 2]; - } - w4[l * 4 + 3] = r4[l * 4 + 3]; //copy flip value - } - } - - array_copy[Mesh::ARRAY_TANGENT] = tangents_v4; - } - - if (generate_tangents) { - Ref<SurfaceTool> st; - st.instance(); - st->create_from_triangle_arrays(array_copy); - st->deindex(); - st->generate_tangents(); - array_copy = st->commit_to_arrays(); - } - - morphs.push_back(array_copy); - } - } - - //just add it - mesh.mesh->add_surface_from_arrays(primitive, array, morphs, Dictionary(), mesh_flags); - - if (p.has("material")) { - const int material = p["material"]; - ERR_FAIL_INDEX_V(material, state.materials.size(), ERR_FILE_CORRUPT); - const Ref<Material> &mat = state.materials[material]; - - mesh.mesh->surface_set_material(mesh.mesh->get_surface_count() - 1, mat); - } else { - Ref<StandardMaterial3D> mat; - mat.instance(); - mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - - mesh.mesh->surface_set_material(mesh.mesh->get_surface_count() - 1, mat); - } - } - - mesh.blend_weights.resize(mesh.mesh->get_blend_shape_count()); - for (int32_t weight_i = 0; weight_i < mesh.blend_weights.size(); weight_i++) { - mesh.blend_weights.write[weight_i] = 0.0f; - } - - if (d.has("weights")) { - const Array &weights = d["weights"]; - ERR_FAIL_COND_V(mesh.blend_weights.size() != weights.size(), ERR_PARSE_ERROR); - for (int j = 0; j < weights.size(); j++) { - mesh.blend_weights.write[j] = weights[j]; - } - } - - state.meshes.push_back(mesh); - } - - print_verbose("glTF: Total meshes: " + itos(state.meshes.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_base_path) { - if (!state.json.has("images")) { - return OK; - } - - // Ref: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#images - - const Array &images = state.json["images"]; - for (int i = 0; i < images.size(); i++) { - const Dictionary &d = images[i]; - - // glTF 2.0 supports PNG and JPEG types, which can be specified as (from spec): - // "- a URI to an external file in one of the supported images formats, or - // - a URI with embedded base64-encoded data, or - // - a reference to a bufferView; in that case mimeType must be defined." - // Since mimeType is optional for external files and base64 data, we'll have to - // fall back on letting Godot parse the data to figure out if it's PNG or JPEG. - - // We'll assume that we use either URI or bufferView, so let's warn the user - // if their image somehow uses both. And fail if it has neither. - ERR_CONTINUE_MSG(!d.has("uri") && !d.has("bufferView"), "Invalid image definition in glTF file, it should specific an 'uri' or 'bufferView'."); - if (d.has("uri") && d.has("bufferView")) { - WARN_PRINT("Invalid image definition in glTF file using both 'uri' and 'bufferView'. 'bufferView' will take precedence."); - } - - String mimetype; - if (d.has("mimeType")) { // Should be "image/png" or "image/jpeg". - mimetype = d["mimeType"]; - } - - Vector<uint8_t> data; - const uint8_t *data_ptr = nullptr; - int data_size = 0; - - if (d.has("uri")) { - // Handles the first two bullet points from the spec (embedded data, or external file). - String uri = d["uri"]; - - if (uri.begins_with("data:")) { // Embedded data using base64. - // Validate data MIME types and throw an error if it's one we don't know/support. - if (!uri.begins_with("data:application/octet-stream;base64") && - !uri.begins_with("data:application/gltf-buffer;base64") && - !uri.begins_with("data:image/png;base64") && - !uri.begins_with("data:image/jpeg;base64")) { - ERR_PRINT("glTF: Got image data with an unknown URI data type: " + uri); - } - data = _parse_base64_uri(uri); - data_ptr = data.ptr(); - data_size = data.size(); - // mimeType is optional, but if we have it defined in the URI, let's use it. - if (mimetype.empty()) { - if (uri.begins_with("data:image/png;base64")) { - mimetype = "image/png"; - } else if (uri.begins_with("data:image/jpeg;base64")) { - mimetype = "image/jpeg"; - } - } - } else { // Relative path to an external image file. - uri = p_base_path.plus_file(uri).replace("\\", "/"); // Fix for Windows. - // The spec says that if mimeType is defined, we should enforce it. - // So we should only rely on ResourceLoader::load if mimeType is not defined, - // otherwise we should use the same logic as for buffers. - if (mimetype == "image/png" || mimetype == "image/jpeg") { - // Load data buffer and rely on PNG and JPEG-specific logic below to load the image. - // This makes it possible to load a file with a wrong extension but correct MIME type, - // e.g. "foo.jpg" containing PNG data and with MIME type "image/png". ResourceLoader would fail. - data = FileAccess::get_file_as_array(uri); - ERR_FAIL_COND_V_MSG(data.size() == 0, ERR_PARSE_ERROR, "glTF: Couldn't load image file as an array: " + uri); - data_ptr = data.ptr(); - data_size = data.size(); - } else { - // Good old ResourceLoader will rely on file extension. - Ref<Texture2D> texture = ResourceLoader::load(uri); - state.images.push_back(texture); - continue; - } - } - } else if (d.has("bufferView")) { - // Handles the third bullet point from the spec (bufferView). - ERR_FAIL_COND_V_MSG(mimetype.empty(), ERR_FILE_CORRUPT, "glTF: Image specifies 'bufferView' but no 'mimeType', which is invalid."); - - const GLTFBufferViewIndex bvi = d["bufferView"]; - - ERR_FAIL_INDEX_V(bvi, state.buffer_views.size(), ERR_PARAMETER_RANGE_ERROR); - - const GLTFBufferView &bv = state.buffer_views[bvi]; - - const GLTFBufferIndex bi = bv.buffer; - ERR_FAIL_INDEX_V(bi, state.buffers.size(), ERR_PARAMETER_RANGE_ERROR); - - ERR_FAIL_COND_V(bv.byte_offset + bv.byte_length > state.buffers[bi].size(), ERR_FILE_CORRUPT); - - data_ptr = &state.buffers[bi][bv.byte_offset]; - data_size = bv.byte_length; - } - - Ref<Image> img; - - if (mimetype == "image/png") { // Load buffer as PNG. - ERR_FAIL_COND_V(Image::_png_mem_loader_func == nullptr, ERR_UNAVAILABLE); - img = Image::_png_mem_loader_func(data_ptr, data_size); - } else if (mimetype == "image/jpeg") { // Loader buffer as JPEG. - ERR_FAIL_COND_V(Image::_jpg_mem_loader_func == nullptr, ERR_UNAVAILABLE); - img = Image::_jpg_mem_loader_func(data_ptr, data_size); - } else { - // We can land here if we got an URI with base64-encoded data with application/* MIME type, - // and the optional mimeType property was not defined to tell us how to handle this data (or was invalid). - // So let's try PNG first, then JPEG. - ERR_FAIL_COND_V(Image::_png_mem_loader_func == nullptr, ERR_UNAVAILABLE); - img = Image::_png_mem_loader_func(data_ptr, data_size); - if (img.is_null()) { - ERR_FAIL_COND_V(Image::_jpg_mem_loader_func == nullptr, ERR_UNAVAILABLE); - img = Image::_jpg_mem_loader_func(data_ptr, data_size); - } - } - - ERR_FAIL_COND_V_MSG(img.is_null(), ERR_FILE_CORRUPT, "glTF: Couldn't load image with its given mimetype: " + mimetype); - - Ref<ImageTexture> t; - t.instance(); - t->create_from_image(img); - - state.images.push_back(t); - } - - print_verbose("glTF: Total images: " + itos(state.images.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_textures(GLTFState &state) { - if (!state.json.has("textures")) { - return OK; - } - - const Array &textures = state.json["textures"]; - for (GLTFTextureIndex i = 0; i < textures.size(); i++) { - const Dictionary &d = textures[i]; - - ERR_FAIL_COND_V(!d.has("source"), ERR_PARSE_ERROR); - - GLTFTexture t; - t.src_image = d["source"]; - state.textures.push_back(t); - } - - return OK; -} - -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<Texture2D>()); - - return state.images[image]; -} - -Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { - if (!state.json.has("materials")) { - return OK; - } - - const Array &materials = state.json["materials"]; - for (GLTFMaterialIndex i = 0; i < materials.size(); i++) { - const Dictionary &d = materials[i]; - - Ref<StandardMaterial3D> material; - material.instance(); - if (d.has("name")) { - material->set_name(d["name"]); - } - material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - - if (d.has("pbrMetallicRoughness")) { - const Dictionary &mr = d["pbrMetallicRoughness"]; - if (mr.has("baseColorFactor")) { - const Array &arr = mr["baseColorFactor"]; - ERR_FAIL_COND_V(arr.size() != 4, ERR_PARSE_ERROR); - const Color c = Color(arr[0], arr[1], arr[2], arr[3]).to_srgb(); - - material->set_albedo(c); - } - - if (mr.has("baseColorTexture")) { - const Dictionary &bct = mr["baseColorTexture"]; - if (bct.has("index")) { - material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, _get_texture(state, bct["index"])); - } - if (!mr.has("baseColorFactor")) { - material->set_albedo(Color(1, 1, 1)); - } - } - - if (mr.has("metallicFactor")) { - material->set_metallic(mr["metallicFactor"]); - } else { - material->set_metallic(1.0); - } - - if (mr.has("roughnessFactor")) { - material->set_roughness(mr["roughnessFactor"]); - } else { - material->set_roughness(1.0); - } - - if (mr.has("metallicRoughnessTexture")) { - const Dictionary &bct = mr["metallicRoughnessTexture"]; - if (bct.has("index")) { - 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); - } - if (!mr.has("roughnessFactor")) { - material->set_roughness(1); - } - } - } - } - - if (d.has("normalTexture")) { - const Dictionary &bct = d["normalTexture"]; - if (bct.has("index")) { - 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"]); - } - } - if (d.has("occlusionTexture")) { - const Dictionary &bct = d["occlusionTexture"]; - if (bct.has("index")) { - 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); - } - } - - if (d.has("emissiveFactor")) { - 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(StandardMaterial3D::FEATURE_EMISSION, true); - - material->set_emission(c); - } - - if (d.has("emissiveTexture")) { - const Dictionary &bct = d["emissiveTexture"]; - if (bct.has("index")) { - 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)); - } - } - - if (d.has("doubleSided")) { - const bool ds = d["doubleSided"]; - if (ds) { - material->set_cull_mode(StandardMaterial3D::CULL_DISABLED); - } - } - - if (d.has("alphaMode")) { - const String &am = d["alphaMode"]; - if (am == "BLEND") { - material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA_DEPTH_PRE_PASS); - } else if (am == "MASK") { - material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA_SCISSOR); - if (d.has("alphaCutoff")) { - material->set_alpha_scissor_threshold(d["alphaCutoff"]); - } else { - material->set_alpha_scissor_threshold(0.5f); - } - } - } - - state.materials.push_back(material); - } - - print_verbose("glTF: Total materials: " + itos(state.materials.size())); - - return OK; -} - -EditorSceneImporterGLTF::GLTFNodeIndex EditorSceneImporterGLTF::_find_highest_node(GLTFState &state, const Vector<GLTFNodeIndex> &subset) { - int highest = -1; - GLTFNodeIndex best_node = -1; - - for (int i = 0; i < subset.size(); ++i) { - const GLTFNodeIndex node_i = subset[i]; - const GLTFNode *node = state.nodes[node_i]; - - if (highest == -1 || node->height < highest) { - highest = node->height; - best_node = node_i; - } - } - - return best_node; -} - -bool EditorSceneImporterGLTF::_capture_nodes_in_skin(GLTFState &state, GLTFSkin &skin, const GLTFNodeIndex node_index) { - bool found_joint = false; - - for (int i = 0; i < state.nodes[node_index]->children.size(); ++i) { - found_joint |= _capture_nodes_in_skin(state, skin, state.nodes[node_index]->children[i]); - } - - if (found_joint) { - // Mark it if we happen to find another skins joint... - if (state.nodes[node_index]->joint && skin.joints.find(node_index) < 0) { - skin.joints.push_back(node_index); - } else if (skin.non_joints.find(node_index) < 0) { - skin.non_joints.push_back(node_index); - } - } - - if (skin.joints.find(node_index) > 0) { - return true; - } - - return false; -} - -void EditorSceneImporterGLTF::_capture_nodes_for_multirooted_skin(GLTFState &state, GLTFSkin &skin) { - DisjointSet<GLTFNodeIndex> disjoint_set; - - for (int i = 0; i < skin.joints.size(); ++i) { - const GLTFNodeIndex node_index = skin.joints[i]; - const GLTFNodeIndex parent = state.nodes[node_index]->parent; - disjoint_set.insert(node_index); - - if (skin.joints.find(parent) >= 0) { - disjoint_set.create_union(parent, node_index); - } - } - - Vector<GLTFNodeIndex> roots; - disjoint_set.get_representatives(roots); - - if (roots.size() <= 1) { - return; - } - - int maxHeight = -1; - - // Determine the max height rooted tree - for (int i = 0; i < roots.size(); ++i) { - const GLTFNodeIndex root = roots[i]; - - if (maxHeight == -1 || state.nodes[root]->height < maxHeight) { - maxHeight = state.nodes[root]->height; - } - } - - // Go up the tree till all of the multiple roots of the skin are at the same hierarchy level. - // This sucks, but 99% of all game engines (not just Godot) would have this same issue. - for (int i = 0; i < roots.size(); ++i) { - GLTFNodeIndex current_node = roots[i]; - while (state.nodes[current_node]->height > maxHeight) { - GLTFNodeIndex parent = state.nodes[current_node]->parent; - - if (state.nodes[parent]->joint && skin.joints.find(parent) < 0) { - skin.joints.push_back(parent); - } else if (skin.non_joints.find(parent) < 0) { - skin.non_joints.push_back(parent); - } - - current_node = parent; - } - - // replace the roots - roots.write[i] = current_node; - } - - // Climb up the tree until they all have the same parent - bool all_same; - - do { - all_same = true; - const GLTFNodeIndex first_parent = state.nodes[roots[0]]->parent; - - for (int i = 1; i < roots.size(); ++i) { - all_same &= (first_parent == state.nodes[roots[i]]->parent); - } - - if (!all_same) { - for (int i = 0; i < roots.size(); ++i) { - const GLTFNodeIndex current_node = roots[i]; - const GLTFNodeIndex parent = state.nodes[current_node]->parent; - - if (state.nodes[parent]->joint && skin.joints.find(parent) < 0) { - skin.joints.push_back(parent); - } else if (skin.non_joints.find(parent) < 0) { - skin.non_joints.push_back(parent); - } - - roots.write[i] = parent; - } - } - - } while (!all_same); -} - -Error EditorSceneImporterGLTF::_expand_skin(GLTFState &state, GLTFSkin &skin) { - _capture_nodes_for_multirooted_skin(state, skin); - - // Grab all nodes that lay in between skin joints/nodes - DisjointSet<GLTFNodeIndex> disjoint_set; - - Vector<GLTFNodeIndex> all_skin_nodes; - all_skin_nodes.append_array(skin.joints); - all_skin_nodes.append_array(skin.non_joints); - - for (int i = 0; i < all_skin_nodes.size(); ++i) { - const GLTFNodeIndex node_index = all_skin_nodes[i]; - const GLTFNodeIndex parent = state.nodes[node_index]->parent; - disjoint_set.insert(node_index); - - if (all_skin_nodes.find(parent) >= 0) { - disjoint_set.create_union(parent, node_index); - } - } - - Vector<GLTFNodeIndex> out_owners; - disjoint_set.get_representatives(out_owners); - - Vector<GLTFNodeIndex> out_roots; - - for (int i = 0; i < out_owners.size(); ++i) { - Vector<GLTFNodeIndex> set; - disjoint_set.get_members(set, out_owners[i]); - - const GLTFNodeIndex root = _find_highest_node(state, set); - ERR_FAIL_COND_V(root < 0, FAILED); - out_roots.push_back(root); - } - - out_roots.sort(); - - for (int i = 0; i < out_roots.size(); ++i) { - _capture_nodes_in_skin(state, skin, out_roots[i]); - } - - skin.roots = out_roots; - - return OK; -} - -Error EditorSceneImporterGLTF::_verify_skin(GLTFState &state, GLTFSkin &skin) { - // This may seem duplicated from expand_skins, but this is really a sanity check! (so it kinda is) - // In case additional interpolating logic is added to the skins, this will help ensure that you - // do not cause it to self implode into a fiery blaze - - // We are going to re-calculate the root nodes and compare them to the ones saved in the skin, - // then ensure the multiple trees (if they exist) are on the same sublevel - - // Grab all nodes that lay in between skin joints/nodes - DisjointSet<GLTFNodeIndex> disjoint_set; - - Vector<GLTFNodeIndex> all_skin_nodes; - all_skin_nodes.append_array(skin.joints); - all_skin_nodes.append_array(skin.non_joints); - - for (int i = 0; i < all_skin_nodes.size(); ++i) { - const GLTFNodeIndex node_index = all_skin_nodes[i]; - const GLTFNodeIndex parent = state.nodes[node_index]->parent; - disjoint_set.insert(node_index); - - if (all_skin_nodes.find(parent) >= 0) { - disjoint_set.create_union(parent, node_index); - } - } - - Vector<GLTFNodeIndex> out_owners; - disjoint_set.get_representatives(out_owners); - - Vector<GLTFNodeIndex> out_roots; - - for (int i = 0; i < out_owners.size(); ++i) { - Vector<GLTFNodeIndex> set; - disjoint_set.get_members(set, out_owners[i]); - - const GLTFNodeIndex root = _find_highest_node(state, set); - ERR_FAIL_COND_V(root < 0, FAILED); - out_roots.push_back(root); - } - - out_roots.sort(); - - ERR_FAIL_COND_V(out_roots.size() == 0, FAILED); - - // Make sure the roots are the exact same (they better be) - ERR_FAIL_COND_V(out_roots.size() != skin.roots.size(), FAILED); - for (int i = 0; i < out_roots.size(); ++i) { - ERR_FAIL_COND_V(out_roots[i] != skin.roots[i], FAILED); - } - - // Single rooted skin? Perfectly ok! - if (out_roots.size() == 1) { - return OK; - } - - // Make sure all parents of a multi-rooted skin are the SAME - const GLTFNodeIndex parent = state.nodes[out_roots[0]]->parent; - for (int i = 1; i < out_roots.size(); ++i) { - if (state.nodes[out_roots[i]]->parent != parent) { - return FAILED; - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_skins(GLTFState &state) { - if (!state.json.has("skins")) { - return OK; - } - - const Array &skins = state.json["skins"]; - - // Create the base skins, and mark nodes that are joints - for (int i = 0; i < skins.size(); i++) { - const Dictionary &d = skins[i]; - - GLTFSkin skin; - - ERR_FAIL_COND_V(!d.has("joints"), ERR_PARSE_ERROR); - - const Array &joints = d["joints"]; - - if (d.has("inverseBindMatrices")) { - skin.inverse_binds = _decode_accessor_as_xform(state, d["inverseBindMatrices"], false); - ERR_FAIL_COND_V(skin.inverse_binds.size() != joints.size(), ERR_PARSE_ERROR); - } - - for (int j = 0; j < joints.size(); j++) { - const GLTFNodeIndex node = joints[j]; - ERR_FAIL_INDEX_V(node, state.nodes.size(), ERR_PARSE_ERROR); - - skin.joints.push_back(node); - skin.joints_original.push_back(node); - - state.nodes[node]->joint = true; - } - - if (d.has("name")) { - skin.name = d["name"]; - } - - if (d.has("skeleton")) { - skin.skin_root = d["skeleton"]; - } - - state.skins.push_back(skin); - } - - for (GLTFSkinIndex i = 0; i < state.skins.size(); ++i) { - GLTFSkin &skin = state.skins.write[i]; - - // Expand the skin to capture all the extra non-joints that lie in between the actual joints, - // and expand the hierarchy to ensure multi-rooted trees lie on the same height level - ERR_FAIL_COND_V(_expand_skin(state, skin), ERR_PARSE_ERROR); - ERR_FAIL_COND_V(_verify_skin(state, skin), ERR_PARSE_ERROR); - } - - print_verbose("glTF: Total skins: " + itos(state.skins.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_determine_skeletons(GLTFState &state) { - // Using a disjoint set, we are going to potentially combine all skins that are actually branches - // of a main skeleton, or treat skins defining the same set of nodes as ONE skeleton. - // This is another unclear issue caused by the current glTF specification. - - DisjointSet<GLTFNodeIndex> skeleton_sets; - - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - const GLTFSkin &skin = state.skins[skin_i]; - - Vector<GLTFNodeIndex> all_skin_nodes; - all_skin_nodes.append_array(skin.joints); - all_skin_nodes.append_array(skin.non_joints); - - for (int i = 0; i < all_skin_nodes.size(); ++i) { - const GLTFNodeIndex node_index = all_skin_nodes[i]; - const GLTFNodeIndex parent = state.nodes[node_index]->parent; - skeleton_sets.insert(node_index); - - if (all_skin_nodes.find(parent) >= 0) { - skeleton_sets.create_union(parent, node_index); - } - } - - // We are going to connect the separate skin subtrees in each skin together - // so that the final roots are entire sets of valid skin trees - for (int i = 1; i < skin.roots.size(); ++i) { - skeleton_sets.create_union(skin.roots[0], skin.roots[i]); - } - } - - { // attempt to joint all touching subsets (siblings/parent are part of another skin) - Vector<GLTFNodeIndex> groups_representatives; - skeleton_sets.get_representatives(groups_representatives); - - Vector<GLTFNodeIndex> highest_group_members; - Vector<Vector<GLTFNodeIndex>> groups; - for (int i = 0; i < groups_representatives.size(); ++i) { - Vector<GLTFNodeIndex> group; - skeleton_sets.get_members(group, groups_representatives[i]); - highest_group_members.push_back(_find_highest_node(state, group)); - groups.push_back(group); - } - - for (int i = 0; i < highest_group_members.size(); ++i) { - const GLTFNodeIndex node_i = highest_group_members[i]; - - // Attach any siblings together (this needs to be done n^2/2 times) - for (int j = i + 1; j < highest_group_members.size(); ++j) { - const GLTFNodeIndex node_j = highest_group_members[j]; - - // Even if they are siblings under the root! :) - if (state.nodes[node_i]->parent == state.nodes[node_j]->parent) { - skeleton_sets.create_union(node_i, node_j); - } - } - - // Attach any parenting going on together (we need to do this n^2 times) - const GLTFNodeIndex node_i_parent = state.nodes[node_i]->parent; - if (node_i_parent >= 0) { - for (int j = 0; j < groups.size() && i != j; ++j) { - const Vector<GLTFNodeIndex> &group = groups[j]; - - if (group.find(node_i_parent) >= 0) { - const GLTFNodeIndex node_j = highest_group_members[j]; - skeleton_sets.create_union(node_i, node_j); - } - } - } - } - } - - // At this point, the skeleton groups should be finalized - Vector<GLTFNodeIndex> skeleton_owners; - skeleton_sets.get_representatives(skeleton_owners); - - // Mark all the skins actual skeletons, after we have merged them - for (GLTFSkeletonIndex skel_i = 0; skel_i < skeleton_owners.size(); ++skel_i) { - const GLTFNodeIndex skeleton_owner = skeleton_owners[skel_i]; - GLTFSkeleton skeleton; - - Vector<GLTFNodeIndex> skeleton_nodes; - skeleton_sets.get_members(skeleton_nodes, skeleton_owner); - - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - GLTFSkin &skin = state.skins.write[skin_i]; - - // If any of the the skeletons nodes exist in a skin, that skin now maps to the skeleton - for (int i = 0; i < skeleton_nodes.size(); ++i) { - GLTFNodeIndex skel_node_i = skeleton_nodes[i]; - if (skin.joints.find(skel_node_i) >= 0 || skin.non_joints.find(skel_node_i) >= 0) { - skin.skeleton = skel_i; - continue; - } - } - } - - Vector<GLTFNodeIndex> non_joints; - for (int i = 0; i < skeleton_nodes.size(); ++i) { - const GLTFNodeIndex node_i = skeleton_nodes[i]; - - if (state.nodes[node_i]->joint) { - skeleton.joints.push_back(node_i); - } else { - non_joints.push_back(node_i); - } - } - - state.skeletons.push_back(skeleton); - - _reparent_non_joint_skeleton_subtrees(state, state.skeletons.write[skel_i], non_joints); - } - - for (GLTFSkeletonIndex skel_i = 0; skel_i < state.skeletons.size(); ++skel_i) { - GLTFSkeleton &skeleton = state.skeletons.write[skel_i]; - - for (int i = 0; i < skeleton.joints.size(); ++i) { - const GLTFNodeIndex node_i = skeleton.joints[i]; - GLTFNode *node = state.nodes[node_i]; - - ERR_FAIL_COND_V(!node->joint, ERR_PARSE_ERROR); - ERR_FAIL_COND_V(node->skeleton >= 0, ERR_PARSE_ERROR); - node->skeleton = skel_i; - } - - ERR_FAIL_COND_V(_determine_skeleton_roots(state, skel_i), ERR_PARSE_ERROR); - } - - return OK; -} - -Error EditorSceneImporterGLTF::_reparent_non_joint_skeleton_subtrees(GLTFState &state, GLTFSkeleton &skeleton, const Vector<GLTFNodeIndex> &non_joints) { - DisjointSet<GLTFNodeIndex> subtree_set; - - // Populate the disjoint set with ONLY non joints that are in the skeleton hierarchy (non_joints vector) - // This way we can find any joints that lie in between joints, as the current glTF specification - // mentions nothing about non-joints being in between joints of the same skin. Hopefully one day we - // can remove this code. - - // skinD depicted here explains this issue: - // https://github.com/KhronosGroup/glTF-Asset-Generator/blob/master/Output/Positive/Animation_Skin - - for (int i = 0; i < non_joints.size(); ++i) { - const GLTFNodeIndex node_i = non_joints[i]; - - subtree_set.insert(node_i); - - const GLTFNodeIndex parent_i = state.nodes[node_i]->parent; - if (parent_i >= 0 && non_joints.find(parent_i) >= 0 && !state.nodes[parent_i]->joint) { - subtree_set.create_union(parent_i, node_i); - } - } - - // Find all the non joint subtrees and re-parent them to a new "fake" joint - - Vector<GLTFNodeIndex> non_joint_subtree_roots; - subtree_set.get_representatives(non_joint_subtree_roots); - - for (int root_i = 0; root_i < non_joint_subtree_roots.size(); ++root_i) { - const GLTFNodeIndex subtree_root = non_joint_subtree_roots[root_i]; - - Vector<GLTFNodeIndex> subtree_nodes; - subtree_set.get_members(subtree_nodes, subtree_root); - - for (int subtree_i = 0; subtree_i < subtree_nodes.size(); ++subtree_i) { - ERR_FAIL_COND_V(_reparent_to_fake_joint(state, skeleton, subtree_nodes[subtree_i]), FAILED); - - // We modified the tree, recompute all the heights - _compute_node_heights(state); - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_reparent_to_fake_joint(GLTFState &state, GLTFSkeleton &skeleton, const GLTFNodeIndex node_index) { - GLTFNode *node = state.nodes[node_index]; - - // Can we just "steal" this joint if it is just a spatial node? - if (node->skin < 0 && node->mesh < 0 && node->camera < 0) { - node->joint = true; - // Add the joint to the skeletons joints - skeleton.joints.push_back(node_index); - return OK; - } - - GLTFNode *fake_joint = memnew(GLTFNode); - const GLTFNodeIndex fake_joint_index = state.nodes.size(); - state.nodes.push_back(fake_joint); - - // We better not be a joint, or we messed up in our logic - if (node->joint) { - return FAILED; - } - - fake_joint->translation = node->translation; - fake_joint->rotation = node->rotation; - fake_joint->scale = node->scale; - fake_joint->xform = node->xform; - fake_joint->joint = true; - - // We can use the exact same name here, because the joint will be inside a skeleton and not the scene - fake_joint->name = node->name; - - // Clear the nodes transforms, since it will be parented to the fake joint - node->translation = Vector3(0, 0, 0); - node->rotation = Quat(); - node->scale = Vector3(1, 1, 1); - node->xform = Transform(); - - // Transfer the node children to the fake joint - for (int child_i = 0; child_i < node->children.size(); ++child_i) { - GLTFNode *child = state.nodes[node->children[child_i]]; - child->parent = fake_joint_index; - } - - fake_joint->children = node->children; - node->children.clear(); - - // add the fake joint to the parent and remove the original joint - if (node->parent >= 0) { - GLTFNode *parent = state.nodes[node->parent]; - parent->children.erase(node_index); - parent->children.push_back(fake_joint_index); - fake_joint->parent = node->parent; - } - - // Add the node to the fake joint - fake_joint->children.push_back(node_index); - node->parent = fake_joint_index; - node->fake_joint_parent = fake_joint_index; - - // Add the fake joint to the skeletons joints - skeleton.joints.push_back(fake_joint_index); - - // Replace skin_skeletons with fake joints if we must. - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - GLTFSkin &skin = state.skins.write[skin_i]; - if (skin.skin_root == node_index) { - skin.skin_root = fake_joint_index; - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_determine_skeleton_roots(GLTFState &state, const GLTFSkeletonIndex skel_i) { - DisjointSet<GLTFNodeIndex> disjoint_set; - - for (GLTFNodeIndex i = 0; i < state.nodes.size(); ++i) { - const GLTFNode *node = state.nodes[i]; - - if (node->skeleton != skel_i) { - continue; - } - - disjoint_set.insert(i); - - if (node->parent >= 0 && state.nodes[node->parent]->skeleton == skel_i) { - disjoint_set.create_union(node->parent, i); - } - } - - GLTFSkeleton &skeleton = state.skeletons.write[skel_i]; - - Vector<GLTFNodeIndex> owners; - disjoint_set.get_representatives(owners); - - Vector<GLTFNodeIndex> roots; - - for (int i = 0; i < owners.size(); ++i) { - Vector<GLTFNodeIndex> set; - disjoint_set.get_members(set, owners[i]); - const GLTFNodeIndex root = _find_highest_node(state, set); - ERR_FAIL_COND_V(root < 0, FAILED); - roots.push_back(root); - } - - roots.sort(); - - skeleton.roots = roots; - - if (roots.size() == 0) { - return FAILED; - } else if (roots.size() == 1) { - return OK; - } - - // Check that the subtrees have the same parent root - const GLTFNodeIndex parent = state.nodes[roots[0]]->parent; - for (int i = 1; i < roots.size(); ++i) { - if (state.nodes[roots[i]]->parent != parent) { - return FAILED; - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_create_skeletons(GLTFState &state) { - for (GLTFSkeletonIndex skel_i = 0; skel_i < state.skeletons.size(); ++skel_i) { - GLTFSkeleton &gltf_skeleton = state.skeletons.write[skel_i]; - - Skeleton3D *skeleton = memnew(Skeleton3D); - gltf_skeleton.godot_skeleton = skeleton; - - // Make a unique name, no gltf node represents this skeleton - skeleton->set_name(_gen_unique_name(state, "Skeleton")); - - List<GLTFNodeIndex> bones; - - for (int i = 0; i < gltf_skeleton.roots.size(); ++i) { - bones.push_back(gltf_skeleton.roots[i]); - } - - // Make the skeleton creation deterministic by going through the roots in - // a sorted order, and DEPTH FIRST - bones.sort(); - - while (!bones.empty()) { - const GLTFNodeIndex node_i = bones.front()->get(); - bones.pop_front(); - - GLTFNode *node = state.nodes[node_i]; - ERR_FAIL_COND_V(node->skeleton != skel_i, FAILED); - - { // Add all child nodes to the stack (deterministically) - Vector<GLTFNodeIndex> child_nodes; - for (int i = 0; i < node->children.size(); ++i) { - const GLTFNodeIndex child_i = node->children[i]; - if (state.nodes[child_i]->skeleton == skel_i) { - child_nodes.push_back(child_i); - } - } - - // Depth first insertion - child_nodes.sort(); - for (int i = child_nodes.size() - 1; i >= 0; --i) { - bones.push_front(child_nodes[i]); - } - } - - const int bone_index = skeleton->get_bone_count(); - - if (node->name.empty()) { - node->name = "bone"; - } - - node->name = _gen_unique_bone_name(state, skel_i, node->name); - - skeleton->add_bone(node->name); - skeleton->set_bone_rest(bone_index, node->xform); - - if (node->parent >= 0 && state.nodes[node->parent]->skeleton == skel_i) { - const int bone_parent = skeleton->find_bone(state.nodes[node->parent]->name); - ERR_FAIL_COND_V(bone_parent < 0, FAILED); - skeleton->set_bone_parent(bone_index, skeleton->find_bone(state.nodes[node->parent]->name)); - } - - state.scene_nodes.insert(node_i, skeleton); - } - } - - ERR_FAIL_COND_V(_map_skin_joints_indices_to_skeleton_bone_indices(state), ERR_PARSE_ERROR); - - return OK; -} - -Error EditorSceneImporterGLTF::_map_skin_joints_indices_to_skeleton_bone_indices(GLTFState &state) { - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - GLTFSkin &skin = state.skins.write[skin_i]; - - const GLTFSkeleton &skeleton = state.skeletons[skin.skeleton]; - - for (int joint_index = 0; joint_index < skin.joints_original.size(); ++joint_index) { - 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); - - skin.joint_i_to_bone_i.insert(joint_index, bone_index); - } - } - - return OK; -} - -Error EditorSceneImporterGLTF::_create_skins(GLTFState &state) { - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - GLTFSkin &gltf_skin = state.skins.write[skin_i]; - - Ref<Skin> skin; - skin.instance(); - - // Some skins don't have IBM's! What absolute monsters! - const bool has_ibms = !gltf_skin.inverse_binds.empty(); - - for (int joint_i = 0; joint_i < gltf_skin.joints_original.size(); ++joint_i) { - Transform xform; - if (has_ibms) { - 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 { - int bone_i = gltf_skin.joint_i_to_bone_i[joint_i]; - skin->add_bind(bone_i, xform); - } - } - - gltf_skin.godot_skin = skin; - } - - // Purge the duplicates! - _remove_duplicate_skins(state); - - // Create unique names now, after removing duplicates - for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { - Ref<Skin> skin = state.skins[skin_i].godot_skin; - if (skin->get_name().empty()) { - // Make a unique name, no gltf node represents this skin - skin->set_name(_gen_unique_name(state, "Skin")); - } - } - - return OK; -} - -bool EditorSceneImporterGLTF::_skins_are_same(const Ref<Skin> &skin_a, const Ref<Skin> &skin_b) { - if (skin_a->get_bind_count() != skin_b->get_bind_count()) { - return false; - } - - for (int i = 0; i < skin_a->get_bind_count(); ++i) { - if (skin_a->get_bind_bone(i) != skin_b->get_bind_bone(i)) { - return false; - } - - Transform a_xform = skin_a->get_bind_pose(i); - Transform b_xform = skin_b->get_bind_pose(i); - - if (a_xform != b_xform) { - return false; - } - } - - return true; -} - -void EditorSceneImporterGLTF::_remove_duplicate_skins(GLTFState &state) { - for (int i = 0; i < state.skins.size(); ++i) { - for (int j = i + 1; j < state.skins.size(); ++j) { - const Ref<Skin> &skin_i = state.skins[i].godot_skin; - const Ref<Skin> &skin_j = state.skins[j].godot_skin; - - if (_skins_are_same(skin_i, skin_j)) { - // replace it and delete the old - state.skins.write[j].godot_skin = skin_i; - } - } - } -} - -Error EditorSceneImporterGLTF::_parse_lights(GLTFState &state) { - if (!state.json.has("extensions")) { - return OK; - } - Dictionary extensions = state.json["extensions"]; - if (!extensions.has("KHR_lights_punctual")) { - return OK; - } - Dictionary lights_punctual = extensions["KHR_lights_punctual"]; - if (!lights_punctual.has("lights")) { - return OK; - } - - const Array &lights = lights_punctual["lights"]; - - for (GLTFLightIndex light_i = 0; light_i < lights.size(); light_i++) { - const Dictionary &d = lights[light_i]; - - GLTFLight light; - ERR_FAIL_COND_V(!d.has("type"), ERR_PARSE_ERROR); - const String &type = d["type"]; - light.type = type; - - if (d.has("color")) { - const Array &arr = d["color"]; - ERR_FAIL_COND_V(arr.size() != 3, ERR_PARSE_ERROR); - const Color c = Color(arr[0], arr[1], arr[2]).to_srgb(); - light.color = c; - } - if (d.has("intensity")) { - light.intensity = d["intensity"]; - } - if (d.has("range")) { - light.range = d["range"]; - } - if (type == "spot") { - const Dictionary &spot = d["spot"]; - light.inner_cone_angle = spot["innerConeAngle"]; - light.outer_cone_angle = spot["outerConeAngle"]; - ERR_FAIL_COND_V_MSG(light.inner_cone_angle >= light.outer_cone_angle, ERR_PARSE_ERROR, "The inner angle must be smaller than the outer angle."); - } else if (type != "point" && type != "directional") { - ERR_FAIL_V_MSG(ERR_PARSE_ERROR, "Light type is unknown."); - } - - state.lights.push_back(light); - } - - print_verbose("glTF: Total lights: " + itos(state.lights.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_cameras(GLTFState &state) { - if (!state.json.has("cameras")) { - return OK; - } - - const Array &cameras = state.json["cameras"]; - - for (GLTFCameraIndex i = 0; i < cameras.size(); i++) { - const Dictionary &d = cameras[i]; - - GLTFCamera camera; - ERR_FAIL_COND_V(!d.has("type"), ERR_PARSE_ERROR); - const String &type = d["type"]; - if (type == "orthographic") { - camera.perspective = false; - if (d.has("orthographic")) { - const Dictionary &og = d["orthographic"]; - camera.fov_size = og["ymag"]; - camera.zfar = og["zfar"]; - camera.znear = og["znear"]; - } else { - camera.fov_size = 10; - } - - } else if (type == "perspective") { - camera.perspective = true; - if (d.has("perspective")) { - const Dictionary &ppt = d["perspective"]; - // GLTF spec is in radians, Godot's camera is in degrees. - camera.fov_size = (double)ppt["yfov"] * 180.0 / Math_PI; - camera.zfar = ppt["zfar"]; - camera.znear = ppt["znear"]; - } else { - camera.fov_size = 10; - } - } else { - ERR_FAIL_V_MSG(ERR_PARSE_ERROR, "Camera should be in 'orthographic' or 'perspective'"); - } - - state.cameras.push_back(camera); - } - - print_verbose("glTF: Total cameras: " + itos(state.cameras.size())); - - return OK; -} - -Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { - if (!state.json.has("animations")) { - return OK; - } - - const Array &animations = state.json["animations"]; - - for (GLTFAnimationIndex i = 0; i < animations.size(); i++) { - const Dictionary &d = animations[i]; - - GLTFAnimation animation; - - if (!d.has("channels") || !d.has("samplers")) { - continue; - } - - Array channels = d["channels"]; - Array samplers = d["samplers"]; - - if (d.has("name")) { - String name = d["name"]; - if (name.begins_with("loop") || name.ends_with("loop") || name.begins_with("cycle") || name.ends_with("cycle")) { - animation.loop = true; - } - animation.name = _sanitize_scene_name(name); - } - - for (int j = 0; j < channels.size(); j++) { - const Dictionary &c = channels[j]; - if (!c.has("target")) { - continue; - } - - const Dictionary &t = c["target"]; - if (!t.has("node") || !t.has("path")) { - continue; - } - - ERR_FAIL_COND_V(!c.has("sampler"), ERR_PARSE_ERROR); - const int sampler = c["sampler"]; - ERR_FAIL_INDEX_V(sampler, samplers.size(), ERR_PARSE_ERROR); - - GLTFNodeIndex node = t["node"]; - String path = t["path"]; - - ERR_FAIL_INDEX_V(node, state.nodes.size(), ERR_PARSE_ERROR); - - GLTFAnimation::Track *track = nullptr; - - if (!animation.tracks.has(node)) { - animation.tracks[node] = GLTFAnimation::Track(); - } - - track = &animation.tracks[node]; - - const Dictionary &s = samplers[sampler]; - - ERR_FAIL_COND_V(!s.has("input"), ERR_PARSE_ERROR); - ERR_FAIL_COND_V(!s.has("output"), ERR_PARSE_ERROR); - - const int input = s["input"]; - const int output = s["output"]; - - GLTFAnimation::Interpolation interp = GLTFAnimation::INTERP_LINEAR; - int output_count = 1; - if (s.has("interpolation")) { - const String &in = s["interpolation"]; - if (in == "STEP") { - interp = GLTFAnimation::INTERP_STEP; - } else if (in == "LINEAR") { - interp = GLTFAnimation::INTERP_LINEAR; - } else if (in == "CATMULLROMSPLINE") { - interp = GLTFAnimation::INTERP_CATMULLROMSPLINE; - output_count = 3; - } else if (in == "CUBICSPLINE") { - interp = GLTFAnimation::INTERP_CUBIC_SPLINE; - output_count = 3; - } - } - - const Vector<float> times = _decode_accessor_as_floats(state, input, false); - if (path == "translation") { - 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 - } else if (path == "rotation") { - const Vector<Quat> rotations = _decode_accessor_as_quat(state, output, false); - track->rotation_track.interpolation = interp; - track->rotation_track.times = Variant(times); //convert via variant - track->rotation_track.values = rotations; //convert via variant - } else if (path == "scale") { - 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 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]; - ERR_FAIL_COND_V(mesh->blend_weights.size() == 0, ERR_PARSE_ERROR); - const int wc = mesh->blend_weights.size(); - - track->weight_tracks.resize(wc); - - const int expected_value_count = times.size() * output_count * wc; - 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; - 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; - cf.times = Variant(times); - Vector<float> wdata; - wdata.resize(wlen); - for (int l = 0; l < wlen; l++) { - wdata.write[l] = r[l * wc + k]; - } - - cf.values = wdata; - track->weight_tracks.write[k] = cf; - } - } else { - WARN_PRINT("Invalid path '" + path + "'."); - } - } - - state.animations.push_back(animation); - } - - print_verbose("glTF: Total animations '" + itos(state.animations.size()) + "'."); - - return OK; -} - -void EditorSceneImporterGLTF::_assign_scene_names(GLTFState &state) { - for (int i = 0; i < state.nodes.size(); i++) { - GLTFNode *n = state.nodes[i]; - - // Any joints get unique names generated when the skeleton is made, unique to the skeleton - if (n->skeleton >= 0) { - continue; - } - - if (n->name.empty()) { - if (n->mesh >= 0) { - n->name = "Mesh"; - } else if (n->camera >= 0) { - n->name = "Camera"; - } else { - n->name = "Node"; - } - } - - n->name = _gen_unique_name(state, n->name); - } -} - -BoneAttachment3D *EditorSceneImporterGLTF::_generate_bone_attachment(GLTFState &state, Skeleton3D *skeleton, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - const GLTFNode *bone_node = state.nodes[gltf_node->parent]; - - BoneAttachment3D *bone_attachment = memnew(BoneAttachment3D); - print_verbose("glTF: Creating bone attachment for: " + gltf_node->name); - - ERR_FAIL_COND_V(!bone_node->joint, nullptr); - - bone_attachment->set_bone_name(bone_node->name); - - return bone_attachment; -} - -MeshInstance3D *EditorSceneImporterGLTF::_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - - ERR_FAIL_INDEX_V(gltf_node->mesh, state.meshes.size(), nullptr); - - MeshInstance3D *mi = memnew(MeshInstance3D); - print_verbose("glTF: Creating mesh for: " + gltf_node->name); - - GLTFMesh &mesh = state.meshes.write[gltf_node->mesh]; - mi->set_mesh(mesh.mesh); - - if (mesh.mesh->get_name() == "") { - mesh.mesh->set_name(gltf_node->name); - } - - for (int i = 0; i < mesh.blend_weights.size(); i++) { - mi->set("blend_shapes/" + mesh.mesh->get_blend_shape_name(i), mesh.blend_weights[i]); - } - - return mi; -} - -Light3D *EditorSceneImporterGLTF::_generate_light(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - - ERR_FAIL_INDEX_V(gltf_node->light, state.lights.size(), nullptr); - - print_verbose("glTF: Creating light for: " + gltf_node->name); - - const GLTFLight &l = state.lights[gltf_node->light]; - - float intensity = l.intensity; - if (intensity > 10) { - // GLTF spec has the default around 1, but Blender defaults lights to 100. - // The only sane way to handle this is to check where it came from and - // handle it accordingly. If it's over 10, it probably came from Blender. - intensity /= 100; - } - - if (l.type == "directional") { - DirectionalLight3D *light = memnew(DirectionalLight3D); - light->set_param(Light3D::PARAM_ENERGY, intensity); - light->set_color(l.color); - return light; - } - - const float range = CLAMP(l.range, 0, 4096); - // Doubling the range will double the effective brightness, so we need double attenuation (half brightness). - // We want to have double intensity give double brightness, so we need half the attenuation. - const float attenuation = range / intensity; - if (l.type == "point") { - OmniLight3D *light = memnew(OmniLight3D); - light->set_param(OmniLight3D::PARAM_ATTENUATION, attenuation); - light->set_param(OmniLight3D::PARAM_RANGE, range); - light->set_color(l.color); - return light; - } - if (l.type == "spot") { - SpotLight3D *light = memnew(SpotLight3D); - light->set_param(SpotLight3D::PARAM_ATTENUATION, attenuation); - light->set_param(SpotLight3D::PARAM_RANGE, range); - light->set_param(SpotLight3D::PARAM_SPOT_ANGLE, Math::rad2deg(l.outer_cone_angle)); - light->set_color(l.color); - - // Line of best fit derived from guessing, see https://www.desmos.com/calculator/biiflubp8b - // The points in desmos are not exact, except for (1, infinity). - float angle_ratio = l.inner_cone_angle / l.outer_cone_angle; - float angle_attenuation = 0.2 / (1 - angle_ratio) - 0.1; - light->set_param(SpotLight3D::PARAM_SPOT_ATTENUATION, angle_attenuation); - return light; - } - return nullptr; -} - -Camera3D *EditorSceneImporterGLTF::_generate_camera(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - - ERR_FAIL_INDEX_V(gltf_node->camera, state.cameras.size(), nullptr); - - Camera3D *camera = memnew(Camera3D); - print_verbose("glTF: Creating camera for: " + gltf_node->name); - - const GLTFCamera &c = state.cameras[gltf_node->camera]; - if (c.perspective) { - camera->set_perspective(c.fov_size, c.znear, c.zfar); - } else { - camera->set_orthogonal(c.fov_size, c.znear, c.zfar); - } - - return camera; -} - -Node3D *EditorSceneImporterGLTF::_generate_spatial(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - - Node3D *spatial = memnew(Node3D); - print_verbose("glTF: Creating spatial for: " + gltf_node->name); - - return spatial; -} - -void EditorSceneImporterGLTF::_generate_scene_node(GLTFState &state, Node *scene_parent, Node3D *scene_root, const GLTFNodeIndex node_index) { - const GLTFNode *gltf_node = state.nodes[node_index]; - - Node3D *current_node = nullptr; - - // Is our parent a skeleton - Skeleton3D *active_skeleton = Object::cast_to<Skeleton3D>(scene_parent); - - if (gltf_node->skeleton >= 0) { - Skeleton3D *skeleton = state.skeletons[gltf_node->skeleton].godot_skeleton; - - if (active_skeleton != skeleton) { - ERR_FAIL_COND_MSG(active_skeleton != nullptr, "glTF: Generating scene detected direct parented Skeletons"); - - // Add it to the scene if it has not already been added - if (skeleton->get_parent() == nullptr) { - scene_parent->add_child(skeleton); - skeleton->set_owner(scene_root); - } - } - - active_skeleton = skeleton; - current_node = skeleton; - } - - // If we have an active skeleton, and the node is node skinned, we need to create a bone attachment - if (current_node == nullptr && active_skeleton != nullptr && gltf_node->skin < 0) { - BoneAttachment3D *bone_attachment = _generate_bone_attachment(state, active_skeleton, node_index); - - scene_parent->add_child(bone_attachment); - bone_attachment->set_owner(scene_root); - - // There is no gltf_node that represent this, so just directly create a unique name - bone_attachment->set_name(_gen_unique_name(state, "BoneAttachment")); - - // We change the scene_parent to our bone attachment now. We do not set current_node because we want to make the node - // and attach it to the bone_attachment - scene_parent = bone_attachment; - } - - // We still have not managed to make a node - if (current_node == nullptr) { - if (gltf_node->mesh >= 0) { - current_node = _generate_mesh_instance(state, scene_parent, node_index); - } else if (gltf_node->camera >= 0) { - current_node = _generate_camera(state, scene_parent, node_index); - } else if (gltf_node->light >= 0) { - current_node = _generate_light(state, scene_parent, node_index); - } else { - current_node = _generate_spatial(state, scene_parent, node_index); - } - - scene_parent->add_child(current_node); - current_node->set_owner(scene_root); - current_node->set_transform(gltf_node->xform); - current_node->set_name(gltf_node->name); - } - - state.scene_nodes.insert(node_index, current_node); - - for (int i = 0; i < gltf_node->children.size(); ++i) { - _generate_scene_node(state, current_node, scene_root, gltf_node->children[i]); - } -} - -template <class T> -struct EditorSceneImporterGLTFInterpolate { - T lerp(const T &a, const T &b, float c) const { - return a + (b - a) * c; - } - - T catmull_rom(const T &p0, const T &p1, const T &p2, const T &p3, float t) { - 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.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) { - /* Formula from Wikipedia article on Bezier curves. */ - const real_t omt = (1.0 - t); - const real_t omt2 = omt * omt; - const real_t omt3 = omt2 * omt; - const real_t t2 = t * t; - const real_t t3 = t2 * t; - - return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3; - } -}; - -// thank you for existing, partial specialization -template <> -struct EditorSceneImporterGLTFInterpolate<Quat> { - Quat lerp(const Quat &a, const Quat &b, const float c) const { - ERR_FAIL_COND_V_MSG(!a.is_normalized(), Quat(), "The quaternion \"a\" must be normalized."); - ERR_FAIL_COND_V_MSG(!b.is_normalized(), Quat(), "The quaternion \"b\" must be normalized."); - - return a.slerp(b, c).normalized(); - } - - Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, const float c) { - ERR_FAIL_COND_V_MSG(!p1.is_normalized(), Quat(), "The quaternion \"p1\" must be normalized."); - ERR_FAIL_COND_V_MSG(!p2.is_normalized(), Quat(), "The quaternion \"p2\" must be normalized."); - - return p1.slerp(p2, c).normalized(); - } - - Quat bezier(const Quat start, const Quat control_1, const Quat control_2, const Quat end, const float t) { - ERR_FAIL_COND_V_MSG(!start.is_normalized(), Quat(), "The start quaternion must be normalized."); - ERR_FAIL_COND_V_MSG(!end.is_normalized(), Quat(), "The end quaternion must be normalized."); - - return start.slerp(end, t).normalized(); - } -}; - -template <class T> -T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, const float p_time, const GLTFAnimation::Interpolation p_interp) { - //could use binary search, worth it? - int idx = -1; - for (int i = 0; i < p_times.size(); i++) { - if (p_times[i] > p_time) { - break; - } - idx++; - } - - EditorSceneImporterGLTFInterpolate<T> interp; - - switch (p_interp) { - case GLTFAnimation::INTERP_LINEAR: { - if (idx == -1) { - return p_values[0]; - } else if (idx >= p_times.size() - 1) { - return p_values[p_times.size() - 1]; - } - - const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); - - return interp.lerp(p_values[idx], p_values[idx + 1], c); - - } break; - case GLTFAnimation::INTERP_STEP: { - if (idx == -1) { - return p_values[0]; - } else if (idx >= p_times.size() - 1) { - return p_values[p_times.size() - 1]; - } - - return p_values[idx]; - - } break; - case GLTFAnimation::INTERP_CATMULLROMSPLINE: { - if (idx == -1) { - return p_values[1]; - } else if (idx >= p_times.size() - 1) { - return p_values[1 + p_times.size() - 1]; - } - - const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); - - return interp.catmull_rom(p_values[idx - 1], p_values[idx], p_values[idx + 1], p_values[idx + 3], c); - - } break; - case GLTFAnimation::INTERP_CUBIC_SPLINE: { - if (idx == -1) { - return p_values[1]; - } else if (idx >= p_times.size() - 1) { - return p_values[(p_times.size() - 1) * 3 + 1]; - } - - const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); - - const T from = p_values[idx * 3 + 1]; - const T c1 = from + p_values[idx * 3 + 2]; - const T to = p_values[idx * 3 + 4]; - const T c2 = to + p_values[idx * 3 + 3]; - - return interp.bezier(from, c1, c2, to, c); - - } break; - } - - ERR_FAIL_V(p_values[0]); -} - -void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlayer *ap, const GLTFAnimationIndex index, const int bake_fps) { - const GLTFAnimation &anim = state.animations[index]; - - String name = anim.name; - if (name.empty()) { - // No node represent these, and they are not in the hierarchy, so just make a unique name - name = _gen_unique_name(state, "Animation"); - } - - Ref<Animation> animation; - animation.instance(); - animation->set_name(name); - - if (anim.loop) { - animation->set_loop(true); - } - - float length = 0; - - for (Map<int, GLTFAnimation::Track>::Element *E = anim.tracks.front(); E; E = E->next()) { - const GLTFAnimation::Track &track = E->get(); - //need to find the path - NodePath node_path; - - GLTFNodeIndex node_index = E->key(); - if (state.nodes[node_index]->fake_joint_parent >= 0) { - // Should be same as parent - node_index = state.nodes[node_index]->fake_joint_parent; - } - - const GLTFNode *node = state.nodes[E->key()]; - - if (node->skeleton >= 0) { - const Skeleton3D *sk = Object::cast_to<Skeleton3D>(state.scene_nodes.find(node_index)->get()); - ERR_FAIL_COND(sk == nullptr); - - const String path = ap->get_parent()->get_path_to(sk); - const String bone = node->name; - node_path = path + ":" + bone; - } else { - node_path = ap->get_parent()->get_path_to(state.scene_nodes.find(node_index)->get()); - } - - for (int i = 0; i < track.rotation_track.times.size(); i++) { - length = MAX(length, track.rotation_track.times[i]); - } - for (int i = 0; i < track.translation_track.times.size(); i++) { - length = MAX(length, track.translation_track.times[i]); - } - for (int i = 0; i < track.scale_track.times.size(); i++) { - length = MAX(length, track.scale_track.times[i]); - } - - for (int i = 0; i < track.weight_tracks.size(); i++) { - for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { - length = MAX(length, track.weight_tracks[i].times[j]); - } - } - - if (track.rotation_track.values.size() || track.translation_track.values.size() || track.scale_track.values.size()) { - //make transform track - int track_idx = animation->get_track_count(); - animation->add_track(Animation::TYPE_TRANSFORM); - animation->track_set_path(track_idx, node_path); - animation->track_set_imported(track_idx, true); - //first determine animation length - - const float increment = 1.0 / float(bake_fps); - float time = 0.0; - - Vector3 base_pos; - Quat base_rot; - Vector3 base_scale = Vector3(1, 1, 1); - - if (!track.rotation_track.values.size()) { - base_rot = state.nodes[E->key()]->rotation.normalized(); - } - - if (!track.translation_track.values.size()) { - base_pos = state.nodes[E->key()]->translation; - } - - if (!track.scale_track.values.size()) { - base_scale = state.nodes[E->key()]->scale; - } - - bool last = false; - while (true) { - Vector3 pos = base_pos; - Quat rot = base_rot; - Vector3 scale = base_scale; - - if (track.translation_track.times.size()) { - pos = _interpolate_track<Vector3>(track.translation_track.times, track.translation_track.values, time, track.translation_track.interpolation); - } - - if (track.rotation_track.times.size()) { - rot = _interpolate_track<Quat>(track.rotation_track.times, track.rotation_track.values, time, track.rotation_track.interpolation); - } - - if (track.scale_track.times.size()) { - scale = _interpolate_track<Vector3>(track.scale_track.times, track.scale_track.values, time, track.scale_track.interpolation); - } - - if (node->skeleton >= 0) { - Transform xform; - xform.basis.set_quat_scale(rot, scale); - xform.origin = pos; - - const Skeleton3D *skeleton = state.skeletons[node->skeleton].godot_skeleton; - const int bone_idx = skeleton->find_bone(node->name); - xform = skeleton->get_bone_rest(bone_idx).affine_inverse() * xform; - - rot = xform.basis.get_rotation_quat(); - rot.normalize(); - scale = xform.basis.get_scale(); - pos = xform.origin; - } - - animation->transform_track_insert_key(track_idx, time, pos, rot, scale); - - if (last) { - break; - } - time += increment; - if (time >= length) { - last = true; - time = length; - } - } - } - - for (int i = 0; i < track.weight_tracks.size(); i++) { - ERR_CONTINUE(node->mesh < 0 || node->mesh >= state.meshes.size()); - const GLTFMesh &mesh = state.meshes[node->mesh]; - const String prop = "blend_shapes/" + mesh.mesh->get_blend_shape_name(i); - - const String blend_path = String(node_path) + ":" + prop; - - const int track_idx = animation->get_track_count(); - animation->add_track(Animation::TYPE_VALUE); - animation->track_set_path(track_idx, blend_path); - - // Only LINEAR and STEP (NEAREST) can be supported out of the box by Godot's Animation, - // the other modes have to be baked. - GLTFAnimation::Interpolation gltf_interp = track.weight_tracks[i].interpolation; - if (gltf_interp == GLTFAnimation::INTERP_LINEAR || gltf_interp == GLTFAnimation::INTERP_STEP) { - animation->track_set_interpolation_type(track_idx, gltf_interp == GLTFAnimation::INTERP_STEP ? Animation::INTERPOLATION_NEAREST : Animation::INTERPOLATION_LINEAR); - for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { - const float t = track.weight_tracks[i].times[j]; - const float w = track.weight_tracks[i].values[j]; - animation->track_insert_key(track_idx, t, w); - } - } else { - // CATMULLROMSPLINE or CUBIC_SPLINE have to be baked, apologies. - const float increment = 1.0 / float(bake_fps); - float time = 0.0; - bool last = false; - while (true) { - _interpolate_track<float>(track.weight_tracks[i].times, track.weight_tracks[i].values, time, gltf_interp); - if (last) { - break; - } - time += increment; - if (time >= length) { - last = true; - time = length; - } - } - } - } - } - - animation->set_length(length); - - ap->add_animation(name, animation); -} - -void EditorSceneImporterGLTF::_process_mesh_instances(GLTFState &state, Node3D *scene_root) { - for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); ++node_i) { - const GLTFNode *node = state.nodes[node_i]; - - if (node->skin >= 0 && node->mesh >= 0) { - const GLTFSkinIndex skin_i = node->skin; - - Map<GLTFNodeIndex, Node *>::Element *mi_element = state.scene_nodes.find(node_i); - MeshInstance3D *mi = Object::cast_to<MeshInstance3D>(mi_element->get()); - ERR_FAIL_COND(mi == nullptr); - - const GLTFSkeletonIndex skel_i = state.skins[node->skin].skeleton; - const GLTFSkeleton &gltf_skeleton = state.skeletons[skel_i]; - Skeleton3D *skeleton = gltf_skeleton.godot_skeleton; - ERR_FAIL_COND(skeleton == nullptr); - - mi->get_parent()->remove_child(mi); - skeleton->add_child(mi); - mi->set_owner(scene_root); - - mi->set_skin(state.skins[skin_i].godot_skin); - mi->set_skeleton_path(mi->get_path_to(skeleton)); - mi->set_transform(Transform()); - } - } -} - -Node3D *EditorSceneImporterGLTF::_generate_scene(GLTFState &state, const int p_bake_fps) { - Node3D *root = memnew(Node3D); - - // scene_name is already unique - root->set_name(state.scene_name); - - for (int i = 0; i < state.root_nodes.size(); ++i) { - _generate_scene_node(state, root, root, state.root_nodes[i]); - } - - _process_mesh_instances(state, root); - - if (state.animations.size()) { - AnimationPlayer *ap = memnew(AnimationPlayer); - ap->set_name("AnimationPlayer"); - root->add_child(ap); - ap->set_owner(root); - - for (int i = 0; i < state.animations.size(); i++) { - _import_animation(state, ap, i, p_bake_fps); - } - } - - return root; -} - -Node *EditorSceneImporterGLTF::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { - print_verbose(vformat("glTF: Importing file %s as scene.", p_path)); - - GLTFState state; - - if (p_path.to_lower().ends_with("glb")) { - //binary file - //text file - Error err = _parse_glb(p_path, state); - if (err) { - return nullptr; - } - } else { - //text file - Error err = _parse_json(p_path, state); - if (err) { - return nullptr; - } - } - - ERR_FAIL_COND_V(!state.json.has("asset"), nullptr); - - Dictionary asset = state.json["asset"]; - - ERR_FAIL_COND_V(!asset.has("version"), nullptr); - - String version = asset["version"]; - - state.import_flags = p_flags; - 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); - if (err != OK) { - return nullptr; - } - - /* STEP 1 PARSE NODES */ - err = _parse_nodes(state); - if (err != OK) { - return nullptr; - } - - /* STEP 2 PARSE BUFFERS */ - err = _parse_buffers(state, p_path.get_base_dir()); - if (err != OK) { - return nullptr; - } - - /* STEP 3 PARSE BUFFER VIEWS */ - err = _parse_buffer_views(state); - if (err != OK) { - return nullptr; - } - - /* STEP 4 PARSE ACCESSORS */ - err = _parse_accessors(state); - if (err != OK) { - return nullptr; - } - - /* STEP 5 PARSE IMAGES */ - err = _parse_images(state, p_path.get_base_dir()); - if (err != OK) { - return nullptr; - } - - /* STEP 6 PARSE TEXTURES */ - err = _parse_textures(state); - if (err != OK) { - return nullptr; - } - - /* STEP 7 PARSE TEXTURES */ - err = _parse_materials(state); - if (err != OK) { - return nullptr; - } - - /* STEP 9 PARSE SKINS */ - err = _parse_skins(state); - if (err != OK) { - return nullptr; - } - - /* STEP 10 DETERMINE SKELETONS */ - err = _determine_skeletons(state); - if (err != OK) { - return nullptr; - } - - /* STEP 11 CREATE SKELETONS */ - err = _create_skeletons(state); - if (err != OK) { - return nullptr; - } - - /* STEP 12 CREATE SKINS */ - err = _create_skins(state); - if (err != OK) { - return nullptr; - } - - /* STEP 13 PARSE MESHES (we have enough info now) */ - err = _parse_meshes(state); - if (err != OK) { - return nullptr; - } - - /* STEP 14 PARSE LIGHTS */ - err = _parse_lights(state); - if (err != OK) { - return NULL; - } - - /* STEP 15 PARSE CAMERAS */ - err = _parse_cameras(state); - if (err != OK) { - return nullptr; - } - - /* STEP 16 PARSE ANIMATIONS */ - err = _parse_animations(state); - if (err != OK) { - return nullptr; - } - - /* STEP 17 ASSIGN SCENE NAMES */ - _assign_scene_names(state); - - /* STEP 18 MAKE SCENE! */ - Node3D *scene = _generate_scene(state, p_bake_fps); - - return scene; -} - -Ref<Animation> EditorSceneImporterGLTF::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) { - return Ref<Animation>(); -} - -EditorSceneImporterGLTF::EditorSceneImporterGLTF() { -} diff --git a/editor/import/editor_scene_importer_gltf.h b/editor/import/editor_scene_importer_gltf.h deleted file mode 100644 index bd30f8f1dd..0000000000 --- a/editor/import/editor_scene_importer_gltf.h +++ /dev/null @@ -1,398 +0,0 @@ -/*************************************************************************/ -/* editor_scene_importer_gltf.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_SCENE_IMPORTER_GLTF_H -#define EDITOR_SCENE_IMPORTER_GLTF_H - -#include "editor/import/resource_importer_scene.h" -#include "scene/3d/light_3d.h" -#include "scene/3d/node_3d.h" -#include "scene/3d/skeleton_3d.h" - -class AnimationPlayer; -class BoneAttachment3D; -class MeshInstance3D; - -class EditorSceneImporterGLTF : public EditorSceneImporter { - GDCLASS(EditorSceneImporterGLTF, EditorSceneImporter); - - typedef int GLTFAccessorIndex; - typedef int GLTFAnimationIndex; - typedef int GLTFBufferIndex; - typedef int GLTFBufferViewIndex; - typedef int GLTFCameraIndex; - typedef int GLTFImageIndex; - typedef int GLTFMaterialIndex; - typedef int GLTFMeshIndex; - typedef int GLTFLightIndex; - typedef int GLTFNodeIndex; - typedef int GLTFSkeletonIndex; - typedef int GLTFSkinIndex; - typedef int GLTFTextureIndex; - - enum { - ARRAY_BUFFER = 34962, - ELEMENT_ARRAY_BUFFER = 34963, - - TYPE_BYTE = 5120, - TYPE_UNSIGNED_BYTE = 5121, - TYPE_SHORT = 5122, - TYPE_UNSIGNED_SHORT = 5123, - TYPE_UNSIGNED_INT = 5125, - TYPE_FLOAT = 5126, - - COMPONENT_TYPE_BYTE = 5120, - COMPONENT_TYPE_UNSIGNED_BYTE = 5121, - COMPONENT_TYPE_SHORT = 5122, - COMPONENT_TYPE_UNSIGNED_SHORT = 5123, - COMPONENT_TYPE_INT = 5125, - COMPONENT_TYPE_FLOAT = 5126, - - }; - - String _get_component_type_name(const uint32_t p_component); - int _get_component_type_size(const int component_type); - - enum GLTFType { - TYPE_SCALAR, - TYPE_VEC2, - TYPE_VEC3, - TYPE_VEC4, - TYPE_MAT2, - TYPE_MAT3, - TYPE_MAT4, - }; - - String _get_type_name(const GLTFType p_component); - - struct GLTFNode { - //matrices need to be transformed to this - GLTFNodeIndex parent = -1; - int height = -1; - - Transform xform; - String name; - - GLTFMeshIndex mesh = -1; - GLTFCameraIndex camera = -1; - GLTFSkinIndex skin = -1; - - GLTFSkeletonIndex skeleton = -1; - bool joint = false; - - Vector3 translation; - Quat rotation; - Vector3 scale = Vector3(1, 1, 1); - - Vector<int> children; - - GLTFNodeIndex fake_joint_parent = -1; - - GLTFLightIndex light = -1; - - GLTFNode() {} - }; - - struct GLTFBufferView { - GLTFBufferIndex buffer = -1; - int byte_offset = 0; - int byte_length = 0; - int byte_stride = 0; - bool indices = false; - //matrices need to be transformed to this - - GLTFBufferView() {} - }; - - struct GLTFAccessor { - GLTFBufferViewIndex buffer_view = 0; - int byte_offset = 0; - int component_type = 0; - bool normalized = false; - int count = 0; - GLTFType type; - float min = 0; - float max = 0; - int sparse_count = 0; - int sparse_indices_buffer_view = 0; - int sparse_indices_byte_offset = 0; - int sparse_indices_component_type = 0; - int sparse_values_buffer_view = 0; - int sparse_values_byte_offset = 0; - - GLTFAccessor() {} - }; - struct GLTFTexture { - GLTFImageIndex src_image; - }; - - struct GLTFSkeleton { - // The *synthesized* skeletons joints - Vector<GLTFNodeIndex> joints; - - // The roots of the skeleton. If there are multiple, each root must have the same parent - // (ie roots are siblings) - Vector<GLTFNodeIndex> roots; - - // The created Skeleton for the scene - Skeleton3D *godot_skeleton = nullptr; - - // Set of unique bone names for the skeleton - Set<String> unique_names; - - GLTFSkeleton() {} - }; - - struct GLTFSkin { - String name; - - // The "skeleton" property defined in the gltf spec. -1 = Scene Root - GLTFNodeIndex skin_root = -1; - - Vector<GLTFNodeIndex> joints_original; - Vector<Transform> inverse_binds; - - // Note: joints + non_joints should form a complete subtree, or subtrees with a common parent - - // All nodes that are skins that are caught in-between the original joints - // (inclusive of joints_original) - Vector<GLTFNodeIndex> joints; - - // All Nodes that are caught in-between skin joint nodes, and are not defined - // as joints by any skin - Vector<GLTFNodeIndex> non_joints; - - // The roots of the skin. In the case of multiple roots, their parent *must* - // be the same (the roots must be siblings) - Vector<GLTFNodeIndex> roots; - - // The GLTF Skeleton this Skin points to (after we determine skeletons) - GLTFSkeletonIndex skeleton = -1; - - // 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. - Ref<Skin> godot_skin; - - GLTFSkin() {} - }; - - struct GLTFMesh { - Ref<ArrayMesh> mesh; - Vector<float> blend_weights; - }; - - struct GLTFCamera { - bool perspective = true; - float fov_size = 64; - float zfar = 500; - float znear = 0.1; - - GLTFCamera() {} - }; - - struct GLTFLight { - Color color = Color(1.0f, 1.0f, 1.0f); - float intensity = 1.0f; - String type = ""; - float range = Math_INF; - float inner_cone_angle = 0.0f; - float outer_cone_angle = Math_PI / 4.0; - - GLTFLight() {} - }; - - struct GLTFAnimation { - bool loop = false; - - enum Interpolation { - INTERP_LINEAR, - INTERP_STEP, - INTERP_CATMULLROMSPLINE, - INTERP_CUBIC_SPLINE - }; - - template <class T> - struct Channel { - Interpolation interpolation; - Vector<float> times; - Vector<T> values; - }; - - struct Track { - Channel<Vector3> translation_track; - Channel<Quat> rotation_track; - Channel<Vector3> scale_track; - Vector<Channel<float>> weight_tracks; - }; - - String name; - - Map<int, Track> tracks; - }; - - struct GLTFState { - Dictionary json; - int major_version; - 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; - Vector<GLTFAccessor> accessors; - - Vector<GLTFMesh> meshes; //meshes are loaded directly, no reason not to. - Vector<Ref<Material>> materials; - - String scene_name; - Vector<int> root_nodes; - - Vector<GLTFTexture> textures; - Vector<Ref<Texture2D>> images; - - Vector<GLTFSkin> skins; - Vector<GLTFCamera> cameras; - Vector<GLTFLight> lights; - - Set<String> unique_names; - - Vector<GLTFSkeleton> skeletons; - Vector<GLTFAnimation> animations; - - Map<GLTFNodeIndex, Node *> scene_nodes; - - // EditorSceneImporter::ImportFlags - uint32_t import_flags; - - ~GLTFState() { - for (int i = 0; i < nodes.size(); i++) { - memdelete(nodes[i]); - } - } - }; - - String _sanitize_scene_name(const String &name); - String _gen_unique_name(GLTFState &state, const String &p_name); - - String _sanitize_bone_name(const String &name); - String _gen_unique_bone_name(GLTFState &state, const GLTFSkeletonIndex skel_i, const String &p_name); - - 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); - - Error _parse_scenes(GLTFState &state); - Error _parse_nodes(GLTFState &state); - - void _compute_node_heights(GLTFState &state); - - Error _parse_buffers(GLTFState &state, const String &p_base_path); - Error _parse_buffer_views(GLTFState &state); - GLTFType _get_type_from_str(const String &p_string); - Error _parse_accessors(GLTFState &state); - 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); - 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); - Vector<Transform> _decode_accessor_as_xform(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - - Error _parse_meshes(GLTFState &state); - Error _parse_images(GLTFState &state, const String &p_base_path); - Error _parse_textures(GLTFState &state); - - Error _parse_materials(GLTFState &state); - - GLTFNodeIndex _find_highest_node(GLTFState &state, const Vector<GLTFNodeIndex> &subset); - - bool _capture_nodes_in_skin(GLTFState &state, GLTFSkin &skin, const GLTFNodeIndex node_index); - void _capture_nodes_for_multirooted_skin(GLTFState &state, GLTFSkin &skin); - Error _expand_skin(GLTFState &state, GLTFSkin &skin); - Error _verify_skin(GLTFState &state, GLTFSkin &skin); - Error _parse_skins(GLTFState &state); - - Error _determine_skeletons(GLTFState &state); - Error _reparent_non_joint_skeleton_subtrees(GLTFState &state, GLTFSkeleton &skeleton, const Vector<GLTFNodeIndex> &non_joints); - Error _reparent_to_fake_joint(GLTFState &state, GLTFSkeleton &skeleton, const GLTFNodeIndex node_index); - Error _determine_skeleton_roots(GLTFState &state, const GLTFSkeletonIndex skel_i); - - Error _create_skeletons(GLTFState &state); - Error _map_skin_joints_indices_to_skeleton_bone_indices(GLTFState &state); - - Error _create_skins(GLTFState &state); - bool _skins_are_same(const Ref<Skin> &skin_a, const Ref<Skin> &skin_b); - void _remove_duplicate_skins(GLTFState &state); - - Error _parse_cameras(GLTFState &state); - Error _parse_lights(GLTFState &state); - Error _parse_animations(GLTFState &state); - - BoneAttachment3D *_generate_bone_attachment(GLTFState &state, Skeleton3D *skeleton, const GLTFNodeIndex node_index); - MeshInstance3D *_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); - Camera3D *_generate_camera(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); - Light3D *_generate_light(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); - Node3D *_generate_spatial(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); - - void _generate_scene_node(GLTFState &state, Node *scene_parent, Node3D *scene_root, const GLTFNodeIndex node_index); - Node3D *_generate_scene(GLTFState &state, const int p_bake_fps); - - void _process_mesh_instances(GLTFState &state, Node3D *scene_root); - - void _assign_scene_names(GLTFState &state); - - template <class T> - T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, const float p_time, const GLTFAnimation::Interpolation p_interp); - - void _import_animation(GLTFState &state, AnimationPlayer *ap, const GLTFAnimationIndex index, const int bake_fps); - -public: - virtual uint32_t get_import_flags() const override; - virtual void get_extensions(List<String> *r_extensions) const override; - virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps = nullptr, Error *r_err = nullptr) override; - virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) override; - - EditorSceneImporterGLTF(); -}; - -#endif // EDITOR_SCENE_IMPORTER_GLTF_H diff --git a/editor/import/resource_importer_bitmask.cpp b/editor/import/resource_importer_bitmask.cpp index 06b56fd73f..ffef759c07 100644 --- a/editor/import/resource_importer_bitmask.cpp +++ b/editor/import/resource_importer_bitmask.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_bitmask.h b/editor/import/resource_importer_bitmask.h index 83959f87cd..d68693c54a 100644 --- a/editor/import/resource_importer_bitmask.h +++ b/editor/import/resource_importer_bitmask.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_csv.cpp b/editor/import/resource_importer_csv.cpp index d29ba28a96..f621ce7855 100644 --- a/editor/import/resource_importer_csv.cpp +++ b/editor/import/resource_importer_csv.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_csv.h b/editor/import/resource_importer_csv.h index c9fbe75dd2..0f137624b9 100644 --- a/editor/import/resource_importer_csv.h +++ b/editor/import/resource_importer_csv.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp index 4c6200e033..7ea39ab3ef 100644 --- a/editor/import/resource_importer_csv_translation.cpp +++ b/editor/import/resource_importer_csv_translation.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_csv_translation.h b/editor/import/resource_importer_csv_translation.h index 7c7646b640..d53e91e38b 100644 --- a/editor/import/resource_importer_csv_translation.h +++ b/editor/import/resource_importer_csv_translation.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_image.cpp b/editor/import/resource_importer_image.cpp index 885b00865b..26c6a8462b 100644 --- a/editor/import/resource_importer_image.cpp +++ b/editor/import/resource_importer_image.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_image.h b/editor/import/resource_importer_image.h index 703b36b091..7c8d5e228e 100644 --- a/editor/import/resource_importer_image.h +++ b/editor/import/resource_importer_image.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_layered_texture.cpp b/editor/import/resource_importer_layered_texture.cpp index ac068c05cf..3139ef5146 100644 --- a/editor/import/resource_importer_layered_texture.cpp +++ b/editor/import/resource_importer_layered_texture.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -373,7 +373,7 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const int x = slice_w * j; int y = slice_h * i; Ref<Image> slice = image->get_rect(Rect2(x, y, slice_w, slice_h)); - ERR_CONTINUE(slice.is_null() || slice->empty()); + ERR_CONTINUE(slice.is_null() || slice->is_empty()); if (slice->get_width() != slice_w || slice->get_height() != slice_h) { slice->resize(slice_w, slice_h); } diff --git a/editor/import/resource_importer_layered_texture.h b/editor/import/resource_importer_layered_texture.h index 7ac3d55dec..86e9c5bde8 100644 --- a/editor/import/resource_importer_layered_texture.h +++ b/editor/import/resource_importer_layered_texture.h @@ -5,38 +5,8 @@ /* 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. */ -/*************************************************************************/ - -/*************************************************************************/ -/* 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). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 49b47bf4be..9111252943 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,6 +32,8 @@ #include "core/io/resource_saver.h" #include "core/os/file_access.h" +#include "editor/import/scene_importer_mesh.h" +#include "editor/import/scene_importer_mesh_node_3d.h" #include "scene/3d/mesh_instance_3d.h" #include "scene/3d/node_3d.h" #include "scene/resources/mesh.h" @@ -210,7 +212,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ bool generate_tangents = p_generate_tangents; Vector3 scale_mesh = p_scale_mesh; Vector3 offset_mesh = p_offset_mesh; - int mesh_flags = p_optimize ? Mesh::ARRAY_COMPRESS_DEFAULT : 0; + int mesh_flags = 0; Vector<Vector3> vertices; Vector<Vector3> normals; @@ -225,6 +227,8 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ String current_material_library; String current_material; String current_group; + uint32_t smooth_group = 0; + bool smoothing = true; while (true) { String l = f->get_line().strip_edges(); @@ -294,7 +298,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ norm += normals.size() + 1; } ERR_FAIL_INDEX_V(norm, normals.size(), ERR_FILE_CORRUPT); - surf_tool->add_normal(normals[norm]); + surf_tool->set_normal(normals[norm]); } if (face[idx].size() >= 2 && face[idx][1] != String()) { @@ -303,7 +307,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ uv += uvs.size() + 1; } ERR_FAIL_INDEX_V(uv, uvs.size(), ERR_FILE_CORRUPT); - surf_tool->add_uv(uvs[uv]); + surf_tool->set_uv(uvs[uv]); } int vtx = face[idx][0].to_int() - 1; @@ -315,6 +319,10 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ Vector3 vertex = vertices[vtx]; //if (weld_vertices) // vertex.snap(Vector3(weld_tolerance, weld_tolerance, weld_tolerance)); + if (!smoothing) { + smooth_group++; + } + surf_tool->set_smooth_group(smooth_group); surf_tool->add_vertex(vertex); } @@ -322,10 +330,15 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ } } else if (l.begins_with("s ")) { //smoothing String what = l.substr(2, l.length()).strip_edges(); + bool do_smooth; if (what == "off") { - surf_tool->add_smooth_group(false); + do_smooth = false; } else { - surf_tool->add_smooth_group(true); + do_smooth = true; + } + if (do_smooth != smoothing) { + smooth_group++; + smoothing = do_smooth; } } else if (/*l.begins_with("g ") ||*/ l.begins_with("usemtl ") || (l.begins_with("o ") || f->eof_reached())) { //commit group to mesh //groups are too annoying @@ -426,8 +439,15 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in Node3D *scene = memnew(Node3D); for (List<Ref<Mesh>>::Element *E = meshes.front(); E; E = E->next()) { - MeshInstance3D *mi = memnew(MeshInstance3D); - mi->set_mesh(E->get()); + Ref<EditorSceneImporterMesh> mesh; + mesh.instance(); + Ref<Mesh> m = E->get(); + for (int i = 0; i < m->get_surface_count(); i++) { + mesh->add_surface(m->surface_get_primitive_type(i), m->surface_get_arrays(i), Array(), Dictionary(), m->surface_get_material(i)); + } + + EditorSceneImporterMeshNode3D *mi = memnew(EditorSceneImporterMeshNode3D); + mi->set_mesh(mesh); mi->set_name(E->get()->get_name()); scene->add_child(mi); mi->set_owner(scene); @@ -473,6 +493,10 @@ String ResourceImporterOBJ::get_resource_type() const { return "Mesh"; } +int ResourceImporterOBJ::get_format_version() const { + return 1; +} + int ResourceImporterOBJ::get_preset_count() const { return 0; } diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index 4083bc7403..414e0c1fe6 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -54,6 +54,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const override; virtual String get_save_extension() const override; virtual String get_resource_type() const override; + virtual int get_format_version() const override; virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 5dcdf6bec4..ead1f7c3e9 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,6 +32,7 @@ #include "core/io/resource_saver.h" #include "editor/editor_node.h" +#include "editor/import/scene_importer_mesh_node_3d.h" #include "scene/3d/collision_shape_3d.h" #include "scene/3d/mesh_instance_3d.h" #include "scene/3d/navigation_3d.h" @@ -44,6 +45,7 @@ #include "scene/resources/ray_shape_3d.h" #include "scene/resources/resource_format_text.h" #include "scene/resources/sphere_shape_3d.h" +#include "scene/resources/surface_tool.h" #include "scene/resources/world_margin_shape_3d.h" uint32_t EditorSceneImporter::get_import_flags() const { @@ -172,6 +174,10 @@ String ResourceImporterScene::get_resource_type() const { return "PackedScene"; } +int ResourceImporterScene::get_format_version() const { + return 1; +} + bool ResourceImporterScene::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option.begins_with("animation/")) { if (p_option != "animation/import" && !bool(p_options["animation/import"])) { @@ -425,7 +431,7 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Mesh> CollisionShape3D *colshape = memnew(CollisionShape3D); if (empty_draw_type == "CUBE") { BoxShape3D *boxShape = memnew(BoxShape3D); - boxShape->set_extents(Vector3(1, 1, 1)); + boxShape->set_size(Vector3(2, 2, 2)); colshape->set_shape(boxShape); colshape->set_name("BoxShape3D"); } else if (empty_draw_type == "SINGLE_ARROW") { @@ -1120,9 +1126,9 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "materials/location", PROPERTY_HINT_ENUM, "Node,Mesh"), (meshes_out || materials_out) ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "materials/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.material),Files (.tres)", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), materials_out ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "materials/keep_on_reimport"), materials_out)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/compress"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/ensure_tangents"), true)); 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::BOOL, "meshes/generate_lods"), true)); 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::FLOAT, "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)); @@ -1215,6 +1221,40 @@ Ref<Animation> ResourceImporterScene::import_animation_from_other_importer(Edito return importer->import_animation(p_path, p_flags, p_bake_fps); } +void ResourceImporterScene::_generate_meshes(Node *p_node, bool p_generate_lods) { + EditorSceneImporterMeshNode3D *src_mesh_node = Object::cast_to<EditorSceneImporterMeshNode3D>(p_node); + if (src_mesh_node) { + //is mesh + MeshInstance3D *mesh_node = memnew(MeshInstance3D); + mesh_node->set_name(src_mesh_node->get_name()); + mesh_node->set_transform(src_mesh_node->get_transform()); + mesh_node->set_skin(src_mesh_node->get_skin()); + mesh_node->set_skeleton_path(src_mesh_node->get_skeleton_path()); + if (src_mesh_node->get_mesh().is_valid()) { + Ref<ArrayMesh> mesh; + if (!src_mesh_node->get_mesh()->has_mesh()) { + //do mesh processing + if (p_generate_lods) { + src_mesh_node->get_mesh()->generate_lods(); + } + } + mesh = src_mesh_node->get_mesh()->get_mesh(); + if (mesh.is_valid()) { + mesh_node->set_mesh(mesh); + for (int i = 0; i < mesh->get_surface_count(); i++) { + mesh_node->set_surface_material(i, src_mesh_node->get_surface_material(i)); + } + } + } + p_node->replace_by(mesh_node); + memdelete(p_node); + p_node = mesh_node; + } + + for (int i = 0; i < p_node->get_child_count(); i++) { + _generate_meshes(p_node->get_child(i), p_generate_lods); + } +} Error ResourceImporterScene::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) { const String &src_path = p_source_file; @@ -1253,10 +1293,6 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p import_flags |= EditorSceneImporter::IMPORT_ANIMATION; } - if (int(p_options["meshes/compress"])) { - import_flags |= EditorSceneImporter::IMPORT_USE_COMPRESSION; - } - if (bool(p_options["meshes/ensure_tangents"])) { import_flags |= EditorSceneImporter::IMPORT_GENERATE_TANGENT_ARRAYS; } @@ -1311,6 +1347,10 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p scene->set_name(p_save_path.get_file().get_basename()); } + bool gen_lods = bool(p_options["meshes/generate_lods"]); + + _generate_meshes(scene, gen_lods); + err = OK; String animation_filter = String(p_options["animation/filter_script"]).strip_edges(); @@ -1428,7 +1468,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p if (!ret_used_cache) { // Cache was not used, add the generated entry to the current cache - if (cache_data.empty()) { + if (cache_data.is_empty()) { cache_data.resize(4 + ret_cache_size); int *data = (int *)cache_data.ptrw(); data[0] = 1; diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index 465d11116b..66c317f858 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -32,9 +32,11 @@ #define RESOURCEIMPORTERSCENE_H #include "core/io/resource_importer.h" +#include "scene/3d/node_3d.h" #include "scene/resources/animation.h" #include "scene/resources/mesh.h" #include "scene/resources/shape_3d.h" +#include "scene/resources/skin.h" class Material; @@ -119,6 +121,7 @@ class ResourceImporterScene : public ResourceImporter { }; void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner); + void _generate_meshes(Node *p_node, bool p_generate_lods); public: static ResourceImporterScene *get_singleton() { return singleton; } @@ -133,6 +136,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const override; virtual String get_save_extension() const override; virtual String get_resource_type() const override; + virtual int get_format_version() const override; virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; diff --git a/editor/import/resource_importer_shader_file.cpp b/editor/import/resource_importer_shader_file.cpp index a2e80dfa18..f4d20a6296 100644 --- a/editor/import/resource_importer_shader_file.cpp +++ b/editor/import/resource_importer_shader_file.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_shader_file.h b/editor/import/resource_importer_shader_file.h index 66ae626c51..c421132ec2 100644 --- a/editor/import/resource_importer_shader_file.h +++ b/editor/import/resource_importer_shader_file.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index ac2485fe31..eb16e873e6 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -82,7 +82,7 @@ void ResourceImporterTexture::update_imports() { MutexLock lock(mutex); Vector<String> to_reimport; { - if (make_flags.empty()) { + if (make_flags.is_empty()) { return; } @@ -201,7 +201,7 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/bptc_ldr", PROPERTY_HINT_ENUM, "Disabled,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, "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, "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)); @@ -537,7 +537,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String } 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, stream, detect_3d, detect_roughness, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); + _save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC1_4, mipmaps, stream, detect_3d, detect_roughness, 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"); } diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index 97c4622731..0d551a965c 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -60,13 +60,9 @@ protected: Mutex mutex; struct MakeInfo { - int flags; + int flags = 0; String normal_path_for_roughness; - RS::TextureDetectRoughnessChannel channel_for_roughness; - MakeInfo() { - flags = 0; - channel_for_roughness = RS::TEXTURE_DETECT_ROUGNHESS_R; - } + RS::TextureDetectRoughnessChannel channel_for_roughness = RS::TEXTURE_DETECT_ROUGHNESS_R; }; Map<StringName, MakeInfo> make_flags; diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp index 2423553d22..4c3ae59951 100644 --- a/editor/import/resource_importer_texture_atlas.cpp +++ b/editor/import/resource_importer_texture_atlas.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -97,7 +97,7 @@ Error ResourceImporterTextureAtlas::import(const String &p_source_file, const St return OK; } -static void _plot_triangle(Vector2 *vertices, const Vector2 &p_offset, bool p_transposed, Ref<Image> p_image, const Ref<Image> &p_src_image) { +static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_transposed, Ref<Image> p_image, const Ref<Image> &p_src_image) { int width = p_image->get_width(); int height = p_image->get_height(); int src_width = p_src_image->get_width(); @@ -281,13 +281,13 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file 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++) { - Vector2 positions[3]; + Vector2i positions[3]; for (int l = 0; l < 3; l++) { int vertex_idx = chart.faces[k].vertex[l]; - positions[l] = chart.vertices[vertex_idx]; + positions[l] = Vector2i(chart.vertices[vertex_idx]); } - _plot_triangle(positions, chart.final_offset, chart.transposed, new_atlas, pack_data.image); + _plot_triangle(positions, Vector2i(chart.final_offset), chart.transposed, new_atlas, pack_data.image); } } } diff --git a/editor/import/resource_importer_texture_atlas.h b/editor/import/resource_importer_texture_atlas.h index 9d973c3d8d..b675d12477 100644 --- a/editor/import/resource_importer_texture_atlas.h +++ b/editor/import/resource_importer_texture_atlas.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -38,7 +38,7 @@ class ResourceImporterTextureAtlas : public ResourceImporter { struct PackData { Rect2 region; - bool is_mesh; + bool is_mesh = false; Vector<int> chart_pieces; //one for region, many for mesh Vector<Vector<Vector2>> chart_vertices; //for mesh Ref<Image> image; diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index cb669b4c89..bcc55b330b 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h index 3c4a8757eb..7413dbd11c 100644 --- a/editor/import/resource_importer_wav.h +++ b/editor/import/resource_importer_wav.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/import/scene_importer_mesh.cpp b/editor/import/scene_importer_mesh.cpp new file mode 100644 index 0000000000..cd7d58c6f6 --- /dev/null +++ b/editor/import/scene_importer_mesh.cpp @@ -0,0 +1,326 @@ +/*************************************************************************/ +/* scene_importer_mesh.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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_importer_mesh.h" + +#include "scene/resources/surface_tool.h" + +void EditorSceneImporterMesh::add_blend_shape(const String &p_name) { + ERR_FAIL_COND(surfaces.size() > 0); + blend_shapes.push_back(p_name); +} + +int EditorSceneImporterMesh::get_blend_shape_count() const { + return blend_shapes.size(); +} + +String EditorSceneImporterMesh::get_blend_shape_name(int p_blend_shape) const { + ERR_FAIL_INDEX_V(p_blend_shape, blend_shapes.size(), String()); + return blend_shapes[p_blend_shape]; +} + +void EditorSceneImporterMesh::set_blend_shape_mode(Mesh::BlendShapeMode p_blend_shape_mode) { + blend_shape_mode = p_blend_shape_mode; +} + +Mesh::BlendShapeMode EditorSceneImporterMesh::get_blend_shape_mode() const { + return blend_shape_mode; +} + +void EditorSceneImporterMesh::add_surface(Mesh::PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes, const Dictionary &p_lods, const Ref<Material> &p_material, const String &p_name) { + ERR_FAIL_COND(p_blend_shapes.size() != blend_shapes.size()); + ERR_FAIL_COND(p_arrays.size() != Mesh::ARRAY_MAX); + Surface s; + s.primitive = p_primitive; + s.arrays = p_arrays; + s.name = p_name; + + Vector<Vector3> vertex_array = p_arrays[Mesh::ARRAY_VERTEX]; + int vertex_count = vertex_array.size(); + ERR_FAIL_COND(vertex_count == 0); + + for (int i = 0; i < blend_shapes.size(); i++) { + Array bsdata = p_blend_shapes[i]; + ERR_FAIL_COND(bsdata.size() != Mesh::ARRAY_MAX); + Vector<Vector3> vertex_data = bsdata[Mesh::ARRAY_VERTEX]; + ERR_FAIL_COND(vertex_data.size() != vertex_count); + Surface::BlendShape bs; + bs.arrays = bsdata; + s.blend_shape_data.push_back(bs); + } + + List<Variant> lods; + p_lods.get_key_list(&lods); + for (List<Variant>::Element *E = lods.front(); E; E = E->next()) { + ERR_CONTINUE(!E->get().is_num()); + Surface::LOD lod; + lod.distance = E->get(); + lod.indices = p_lods[E->get()]; + ERR_CONTINUE(lod.indices.size() == 0); + s.lods.push_back(lod); + } + + s.material = p_material; + + surfaces.push_back(s); + mesh.unref(); +} + +int EditorSceneImporterMesh::get_surface_count() const { + return surfaces.size(); +} + +Mesh::PrimitiveType EditorSceneImporterMesh::get_surface_primitive_type(int p_surface) { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Mesh::PRIMITIVE_MAX); + return surfaces[p_surface].primitive; +} +Array EditorSceneImporterMesh::get_surface_arrays(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array()); + return surfaces[p_surface].arrays; +} +String EditorSceneImporterMesh::get_surface_name(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), String()); + return surfaces[p_surface].name; +} +Array EditorSceneImporterMesh::get_surface_blend_shape_arrays(int p_surface, int p_blend_shape) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array()); + ERR_FAIL_INDEX_V(p_blend_shape, surfaces[p_surface].blend_shape_data.size(), Array()); + return surfaces[p_surface].blend_shape_data[p_blend_shape].arrays; +} +int EditorSceneImporterMesh::get_surface_lod_count(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), 0); + return surfaces[p_surface].lods.size(); +} +Vector<int> EditorSceneImporterMesh::get_surface_lod_indices(int p_surface, int p_lod) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Vector<int>()); + ERR_FAIL_INDEX_V(p_lod, surfaces[p_surface].lods.size(), Vector<int>()); + + return surfaces[p_surface].lods[p_lod].indices; +} + +float EditorSceneImporterMesh::get_surface_lod_size(int p_surface, int p_lod) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), 0); + ERR_FAIL_INDEX_V(p_lod, surfaces[p_surface].lods.size(), 0); + return surfaces[p_surface].lods[p_lod].distance; +} + +Ref<Material> EditorSceneImporterMesh::get_surface_material(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Ref<Material>()); + return surfaces[p_surface].material; +} + +void EditorSceneImporterMesh::generate_lods() { + if (!SurfaceTool::simplify_func) { + return; + } + + for (int i = 0; i < surfaces.size(); i++) { + if (surfaces[i].primitive != Mesh::PRIMITIVE_TRIANGLES) { + continue; + } + + surfaces.write[i].lods.clear(); + Vector<Vector3> vertices = surfaces[i].arrays[RS::ARRAY_VERTEX]; + Vector<int> indices = surfaces[i].arrays[RS::ARRAY_INDEX]; + if (indices.size() == 0) { + continue; //no lods if no indices + } + uint32_t vertex_count = vertices.size(); + const Vector3 *vertices_ptr = vertices.ptr(); + + int min_indices = 10; + int index_target = indices.size() / 2; + print_line("total: " + itos(indices.size())); + while (index_target > min_indices) { + float error; + Vector<int> new_indices; + new_indices.resize(indices.size()); + size_t new_len = SurfaceTool::simplify_func((unsigned int *)new_indices.ptrw(), (const unsigned int *)indices.ptr(), indices.size(), (const float *)vertices_ptr, vertex_count, sizeof(Vector3), index_target, 1e20, &error); + print_line("shoot for " + itos(index_target) + ", got " + itos(new_len) + " distance " + rtos(error)); + if ((int)new_len > (index_target * 120 / 100)) { + break; // 20 percent tolerance + } + new_indices.resize(new_len); + Surface::LOD lod; + lod.distance = error; + lod.indices = new_indices; + surfaces.write[i].lods.push_back(lod); + index_target /= 2; + } + } +} + +bool EditorSceneImporterMesh::has_mesh() const { + return mesh.is_valid(); +} + +Ref<ArrayMesh> EditorSceneImporterMesh::get_mesh() { + ERR_FAIL_COND_V(surfaces.size() == 0, Ref<ArrayMesh>()); + + if (mesh.is_null()) { + mesh.instance(); + for (int i = 0; i < blend_shapes.size(); i++) { + mesh->add_blend_shape(blend_shapes[i]); + } + mesh->set_blend_shape_mode(blend_shape_mode); + for (int i = 0; i < surfaces.size(); i++) { + Array bs_data; + if (surfaces[i].blend_shape_data.size()) { + for (int j = 0; j < surfaces[i].blend_shape_data.size(); j++) { + bs_data.push_back(surfaces[i].blend_shape_data[j].arrays); + } + } + Dictionary lods; + if (surfaces[i].lods.size()) { + for (int j = 0; j < surfaces[i].lods.size(); j++) { + lods[surfaces[i].lods[j].distance] = surfaces[i].lods[j].indices; + } + } + + mesh->add_surface_from_arrays(surfaces[i].primitive, surfaces[i].arrays, bs_data, lods); + if (surfaces[i].material.is_valid()) { + mesh->surface_set_material(mesh->get_surface_count() - 1, surfaces[i].material); + } + if (surfaces[i].name != String()) { + mesh->surface_set_name(mesh->get_surface_count() - 1, surfaces[i].name); + } + } + } + + return mesh; +} + +void EditorSceneImporterMesh::clear() { + surfaces.clear(); + blend_shapes.clear(); + mesh.unref(); +} + +void EditorSceneImporterMesh::_set_data(const Dictionary &p_data) { + clear(); + if (p_data.has("blend_shape_names")) { + blend_shapes = p_data["blend_shape_names"]; + } + if (p_data.has("surfaces")) { + Array surface_arr = p_data["surfaces"]; + for (int i = 0; i < surface_arr.size(); i++) { + Dictionary s = surface_arr[i]; + ERR_CONTINUE(!s.has("primitive")); + ERR_CONTINUE(!s.has("arrays")); + Mesh::PrimitiveType prim = Mesh::PrimitiveType(int(s["primitive"])); + ERR_CONTINUE(prim >= Mesh::PRIMITIVE_MAX); + Array arr = s["arrays"]; + Dictionary lods; + String name; + if (s.has("name")) { + name = s["name"]; + } + if (s.has("lods")) { + lods = s["lods"]; + } + Array blend_shapes; + if (s.has("blend_shapes")) { + blend_shapes = s["blend_shapes"]; + } + Ref<Material> material; + if (s.has("material")) { + material = s["material"]; + } + add_surface(prim, arr, blend_shapes, lods, material, name); + } + } +} +Dictionary EditorSceneImporterMesh::_get_data() const { + Dictionary data; + if (blend_shapes.size()) { + data["blend_shape_names"] = blend_shapes; + } + Array surface_arr; + for (int i = 0; i < surfaces.size(); i++) { + Dictionary d; + d["primitive"] = surfaces[i].primitive; + d["arrays"] = surfaces[i].arrays; + if (surfaces[i].blend_shape_data.size()) { + Array bs_data; + for (int j = 0; j < surfaces[i].blend_shape_data.size(); j++) { + bs_data.push_back(surfaces[i].blend_shape_data[j].arrays); + } + d["blend_shapes"] = bs_data; + } + if (surfaces[i].lods.size()) { + Dictionary lods; + for (int j = 0; j < surfaces[i].lods.size(); j++) { + lods[surfaces[i].lods[j].distance] = surfaces[i].lods[j].indices; + } + d["lods"] = lods; + } + + if (surfaces[i].material.is_valid()) { + d["material"] = surfaces[i].material; + } + + if (surfaces[i].name != String()) { + d["name"] = surfaces[i].name; + } + + surface_arr.push_back(d); + } + data["surfaces"] = surface_arr; + return data; +} + +void EditorSceneImporterMesh::_bind_methods() { + ClassDB::bind_method(D_METHOD("add_blend_shape", "name"), &EditorSceneImporterMesh::add_blend_shape); + ClassDB::bind_method(D_METHOD("get_blend_shape_count"), &EditorSceneImporterMesh::get_blend_shape_count); + ClassDB::bind_method(D_METHOD("get_blend_shape_name", "blend_shape_idx"), &EditorSceneImporterMesh::get_blend_shape_name); + + ClassDB::bind_method(D_METHOD("set_blend_shape_mode", "mode"), &EditorSceneImporterMesh::set_blend_shape_mode); + ClassDB::bind_method(D_METHOD("get_blend_shape_mode"), &EditorSceneImporterMesh::get_blend_shape_mode); + + ClassDB::bind_method(D_METHOD("add_surface", "primitive", "arrays", "blend_shapes", "lods", "material"), &EditorSceneImporterMesh::add_surface, DEFVAL(Array()), DEFVAL(Dictionary()), DEFVAL(Ref<Material>()), DEFVAL(String())); + + ClassDB::bind_method(D_METHOD("get_surface_count"), &EditorSceneImporterMesh::get_surface_count); + ClassDB::bind_method(D_METHOD("get_surface_primitive_type", "surface_idx"), &EditorSceneImporterMesh::get_surface_primitive_type); + ClassDB::bind_method(D_METHOD("get_surface_name", "surface_idx"), &EditorSceneImporterMesh::get_surface_name); + ClassDB::bind_method(D_METHOD("get_surface_arrays", "surface_idx"), &EditorSceneImporterMesh::get_surface_arrays); + ClassDB::bind_method(D_METHOD("get_surface_blend_shape_arrays", "surface_idx", "blend_shape_idx"), &EditorSceneImporterMesh::get_surface_blend_shape_arrays); + ClassDB::bind_method(D_METHOD("get_surface_lod_count", "surface_idx"), &EditorSceneImporterMesh::get_surface_lod_count); + ClassDB::bind_method(D_METHOD("get_surface_lod_size", "surface_idx", "lod_idx"), &EditorSceneImporterMesh::get_surface_lod_size); + ClassDB::bind_method(D_METHOD("get_surface_lod_indices", "surface_idx", "lod_idx"), &EditorSceneImporterMesh::get_surface_lod_indices); + ClassDB::bind_method(D_METHOD("get_surface_material", "surface_idx"), &EditorSceneImporterMesh::get_surface_material); + + ClassDB::bind_method(D_METHOD("get_mesh"), &EditorSceneImporterMesh::get_mesh); + ClassDB::bind_method(D_METHOD("clear"), &EditorSceneImporterMesh::clear); + + ClassDB::bind_method(D_METHOD("_set_data", "data"), &EditorSceneImporterMesh::_set_data); + ClassDB::bind_method(D_METHOD("_get_data"), &EditorSceneImporterMesh::_get_data); + + ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_data", "_get_data"); +} diff --git a/editor/import/scene_importer_mesh.h b/editor/import/scene_importer_mesh.h new file mode 100644 index 0000000000..2adeb76b6c --- /dev/null +++ b/editor/import/scene_importer_mesh.h @@ -0,0 +1,96 @@ +/*************************************************************************/ +/* scene_importer_mesh.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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_SCENE_IMPORTER_MESH_H +#define EDITOR_SCENE_IMPORTER_MESH_H + +#include "core/io/resource.h" +#include "scene/resources/mesh.h" +// The following classes are used by importers instead of ArrayMesh and MeshInstance3D +// so the data is not registered (hence, quality loss), importing happens faster and +// its easier to modify before saving + +class EditorSceneImporterMesh : public Resource { + GDCLASS(EditorSceneImporterMesh, Resource) + + struct Surface { + Mesh::PrimitiveType primitive; + Array arrays; + struct BlendShape { + Array arrays; + }; + Vector<BlendShape> blend_shape_data; + struct LOD { + Vector<int> indices; + float distance; + }; + Vector<LOD> lods; + Ref<Material> material; + String name; + }; + Vector<Surface> surfaces; + Vector<String> blend_shapes; + Mesh::BlendShapeMode blend_shape_mode = Mesh::BLEND_SHAPE_MODE_NORMALIZED; + + Ref<ArrayMesh> mesh; + +protected: + void _set_data(const Dictionary &p_data); + Dictionary _get_data() const; + + static void _bind_methods(); + +public: + void add_blend_shape(const String &p_name); + int get_blend_shape_count() const; + String get_blend_shape_name(int p_blend_shape) const; + + void add_surface(Mesh::PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes = Array(), const Dictionary &p_lods = Dictionary(), const Ref<Material> &p_material = Ref<Material>(), const String &p_name = String()); + int get_surface_count() const; + + void set_blend_shape_mode(Mesh::BlendShapeMode p_blend_shape_mode); + Mesh::BlendShapeMode get_blend_shape_mode() const; + + Mesh::PrimitiveType get_surface_primitive_type(int p_surface); + String get_surface_name(int p_surface) const; + Array get_surface_arrays(int p_surface) const; + Array get_surface_blend_shape_arrays(int p_surface, int p_blend_shape) const; + int get_surface_lod_count(int p_surface) const; + Vector<int> get_surface_lod_indices(int p_surface, int p_lod) const; + float get_surface_lod_size(int p_surface, int p_lod) const; + Ref<Material> get_surface_material(int p_surface) const; + + void generate_lods(); + + bool has_mesh() const; + Ref<ArrayMesh> get_mesh(); + void clear(); +}; +#endif // EDITOR_SCENE_IMPORTER_MESH_H diff --git a/editor/import/scene_importer_mesh_node_3d.cpp b/editor/import/scene_importer_mesh_node_3d.cpp new file mode 100644 index 0000000000..3c201cf674 --- /dev/null +++ b/editor/import/scene_importer_mesh_node_3d.cpp @@ -0,0 +1,83 @@ +/*************************************************************************/ +/* scene_importer_mesh_node_3d.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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_importer_mesh_node_3d.h" + +void EditorSceneImporterMeshNode3D::set_mesh(const Ref<EditorSceneImporterMesh> &p_mesh) { + mesh = p_mesh; +} +Ref<EditorSceneImporterMesh> EditorSceneImporterMeshNode3D::get_mesh() const { + return mesh; +} + +void EditorSceneImporterMeshNode3D::set_skin(const Ref<Skin> &p_skin) { + skin = p_skin; +} +Ref<Skin> EditorSceneImporterMeshNode3D::get_skin() const { + return skin; +} + +void EditorSceneImporterMeshNode3D::set_surface_material(int p_idx, const Ref<Material> &p_material) { + ERR_FAIL_COND(p_idx < 0); + if (p_idx >= surface_materials.size()) { + surface_materials.resize(p_idx + 1); + } + + surface_materials.write[p_idx] = p_material; +} +Ref<Material> EditorSceneImporterMeshNode3D::get_surface_material(int p_idx) const { + ERR_FAIL_COND_V(p_idx < 0, Ref<Material>()); + if (p_idx >= surface_materials.size()) { + return Ref<Material>(); + } + return surface_materials[p_idx]; +} + +void EditorSceneImporterMeshNode3D::set_skeleton_path(const NodePath &p_path) { + skeleton_path = p_path; +} +NodePath EditorSceneImporterMeshNode3D::get_skeleton_path() const { + return skeleton_path; +} + +void EditorSceneImporterMeshNode3D::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &EditorSceneImporterMeshNode3D::set_mesh); + ClassDB::bind_method(D_METHOD("get_mesh"), &EditorSceneImporterMeshNode3D::get_mesh); + + ClassDB::bind_method(D_METHOD("set_skin", "skin"), &EditorSceneImporterMeshNode3D::set_skin); + ClassDB::bind_method(D_METHOD("get_skin"), &EditorSceneImporterMeshNode3D::get_skin); + + ClassDB::bind_method(D_METHOD("set_skeleton_path", "skeleton_path"), &EditorSceneImporterMeshNode3D::set_skeleton_path); + ClassDB::bind_method(D_METHOD("get_skeleton_path"), &EditorSceneImporterMeshNode3D::get_skeleton_path); + + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "EditorSceneImporterMesh"), "set_mesh", "get_mesh"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skin", PROPERTY_HINT_RESOURCE_TYPE, "Skin"), "set_skin", "get_skin"); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton"), "set_skeleton_path", "get_skeleton_path"); +} diff --git a/editor/run_settings_dialog.cpp b/editor/import/scene_importer_mesh_node_3d.h index b6dda4c5bb..dec1717c99 100644 --- a/editor/run_settings_dialog.cpp +++ b/editor/import/scene_importer_mesh_node_3d.h @@ -1,12 +1,12 @@ /*************************************************************************/ -/* run_settings_dialog.cpp */ +/* scene_importer_mesh_node_3d.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). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -28,58 +28,37 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "run_settings_dialog.h" +#ifndef EDITOR_SCENE_IMPORTER_MESH_NODE_3D_H +#define EDITOR_SCENE_IMPORTER_MESH_NODE_3D_H -void RunSettingsDialog::popup_run_settings() { - popup_centered(Size2(300, 150)); -} +#include "editor/import/scene_importer_mesh.h" +#include "scene/3d/node_3d.h" +#include "scene/resources/skin.h" -void RunSettingsDialog::set_custom_arguments(const String &p_arguments) { - arguments->set_text(p_arguments); -} +class EditorSceneImporterMesh; -String RunSettingsDialog::get_custom_arguments() const { - return arguments->get_text(); -} +class EditorSceneImporterMeshNode3D : public Node3D { + GDCLASS(EditorSceneImporterMeshNode3D, Node3D) -void RunSettingsDialog::_bind_methods() { - //ClassDB::bind_method("_browse_selected_file",&RunSettingsDialog::_browse_selected_file); -} + Ref<EditorSceneImporterMesh> mesh; + Ref<Skin> skin; + NodePath skeleton_path; + Vector<Ref<Material>> surface_materials; -void RunSettingsDialog::_run_mode_changed(int idx) { - if (idx == 0) { - arguments->set_editable(false); - } else { - arguments->set_editable(true); - } -} +protected: + static void _bind_methods(); -int RunSettingsDialog::get_run_mode() const { - return run_mode->get_selected(); -} +public: + void set_mesh(const Ref<EditorSceneImporterMesh> &p_mesh); + Ref<EditorSceneImporterMesh> get_mesh() const; -void RunSettingsDialog::set_run_mode(int p_run_mode) { - run_mode->select(p_run_mode); - arguments->set_editable(p_run_mode); -} + void set_skin(const Ref<Skin> &p_skin); + Ref<Skin> get_skin() const; -RunSettingsDialog::RunSettingsDialog() { - /* SNAP DIALOG */ + void set_surface_material(int p_idx, const Ref<Material> &p_material); + Ref<Material> get_surface_material(int p_idx) const; - VBoxContainer *vbc = memnew(VBoxContainer); - add_child(vbc); - //set_child_rect(vbc); - - run_mode = memnew(OptionButton); - 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", callable_mp(this, &RunSettingsDialog::_run_mode_changed)); - arguments = memnew(LineEdit); - vbc->add_margin_child(TTR("Main Scene Arguments:"), arguments); - arguments->set_editable(false); - - get_ok()->set_text(TTR("Close")); - - set_title(TTR("Scene Run Settings")); -} + void set_skeleton_path(const NodePath &p_path); + NodePath get_skeleton_path() const; +}; +#endif diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 8ab2e0aef1..103e5e81cb 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -536,7 +536,7 @@ ImportDock::ImportDock() { hb->add_spacer(); reimport_confirm = memnew(ConfirmationDialog); - reimport_confirm->get_ok()->set_text(TTR("Save Scenes, Re-Import, and Restart")); + reimport_confirm->get_ok_button()->set_text(TTR("Save Scenes, Re-Import, and Restart")); add_child(reimport_confirm); reimport_confirm->connect("confirmed", callable_mp(this, &ImportDock::_reimport_and_restart)); diff --git a/editor/import_dock.h b/editor/import_dock.h index 7a2e669620..6c5779ddce 100644 --- a/editor/import_dock.h +++ b/editor/import_dock.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/input_map_editor.cpp b/editor/input_map_editor.cpp index c67e16d371..9a5e7d164c 100644 --- a/editor/input_map_editor.cpp +++ b/editor/input_map_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -35,47 +35,6 @@ #include "editor/editor_node.h" #include "editor/editor_scale.h" -static const char *_button_descriptions[JOY_SDL_BUTTONS] = { - TTRC("Face Bottom, DualShock Cross, Xbox A, Nintendo B"), - TTRC("Face Right, DualShock Circle, Xbox B, Nintendo A"), - TTRC("Face Left, DualShock Square, Xbox X, Nintendo Y"), - TTRC("Face Top, DualShock Triangle, Xbox Y, Nintendo X"), - TTRC("DualShock Select, Xbox Back, Nintendo -"), - TTRC("Home, DualShock PS, Guide"), - TTRC("Start, Nintendo +"), - TTRC("Left Stick, DualShock L3, Xbox L/LS"), - TTRC("Right Stick, DualShock R3, Xbox R/RS"), - TTRC("Left Shoulder, DualShock L1, Xbox LB"), - TTRC("Right Shoulder, DualShock R1, Xbox RB"), - TTRC("D-Pad Up"), - TTRC("D-Pad Down"), - TTRC("D-Pad Left"), - TTRC("D-Pad Right") -}; - -static const char *_axis_descriptions[JOY_AXIS_MAX * 2] = { - TTRC("Left Stick Left"), - TTRC("Left Stick Right"), - TTRC("Left Stick Up"), - TTRC("Left Stick Down"), - TTRC("Right Stick Left"), - TTRC("Right Stick Right"), - TTRC("Right Stick Up"), - TTRC("Right Stick Down"), - TTRC("Joystick 2 Left"), - TTRC("Joystick 2 Right, Left Trigger, L2, LT"), - TTRC("Joystick 2 Up"), - TTRC("Joystick 2 Down, Right Trigger, R2, RT"), - TTRC("Joystick 3 Left"), - TTRC("Joystick 3 Right"), - TTRC("Joystick 3 Up"), - TTRC("Joystick 3 Down"), - TTRC("Joystick 4 Left"), - TTRC("Joystick 4 Right"), - TTRC("Joystick 4 Up"), - TTRC("Joystick 4 Down"), -}; - void InputMapEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { @@ -395,6 +354,42 @@ void InputMapEditor::_show_last_added(const Ref<InputEvent> &p_event, const Stri } } +// Maps to 2*axis if value is neg, or + 1 if value is pos. +static const char *_joy_axis_descriptions[JOY_AXIS_MAX * 2] = { + TTRC("Left Stick Left, Joystick 0 Left"), + TTRC("Left Stick Right, Joystick 0 Right"), + TTRC("Left Stick Up, Joystick 0 Up"), + TTRC("Left Stick Down, Joystick 0 Down"), + TTRC("Right Stick Left, Joystick 1 Left"), + TTRC("Right Stick Right, Joystick 1 Right"), + TTRC("Right Stick Up, Joystick 1 Up"), + TTRC("Right Stick Down, Joystick 1 Down"), + TTRC("Joystick 2 Left"), + TTRC("Left Trigger, Sony L2, Xbox LT, Joystick 2 Right"), + TTRC("Joystick 2 Up"), + TTRC("Right Trigger, Sony R2, Xbox RT, Joystick 2 Down"), + TTRC("Joystick 3 Left"), + TTRC("Joystick 3 Right"), + TTRC("Joystick 3 Up"), + TTRC("Joystick 3 Down"), + TTRC("Joystick 4 Left"), + TTRC("Joystick 4 Right"), + TTRC("Joystick 4 Up"), + TTRC("Joystick 4 Down"), +}; + +// Separate from `InputEvent::as_text()` since the descriptions need to be different for the input map editor. See #43660. +String InputMapEditor::_get_joypad_motion_event_text(const Ref<InputEventJoypadMotion> &p_event) { + ERR_FAIL_COND_V_MSG(p_event.is_null(), String(), "Provided event is not a valid instance of InputEventJoypadMotion"); + + String desc = TTR("Unknown Joypad Axis"); + if (p_event->get_axis() < JOY_AXIS_MAX) { + desc = RTR(_joy_axis_descriptions[2 * p_event->get_axis() + (p_event->get_axis_value() < 0 ? 0 : 1)]); + } + + return vformat("Joypad Axis %s %s (%s)", itos(p_event->get_axis()), p_event->get_axis_value() < 0 ? "-" : "+", desc); +} + void InputMapEditor::_wait_for_key(const Ref<InputEvent> &p_event) { Ref<InputEventKey> k = p_event; @@ -403,7 +398,7 @@ void InputMapEditor::_wait_for_key(const Ref<InputEvent> &p_event) { const String str = (press_a_key_physical) ? keycode_get_string(k->get_physical_keycode_with_modifiers()) + TTR(" (Physical)") : keycode_get_string(k->get_keycode_with_modifiers()); press_a_key_label->set_text(str); - press_a_key->get_ok()->set_disabled(false); + press_a_key->get_ok_button()->set_disabled(false); press_a_key->set_input_as_handled(); } } @@ -437,7 +432,7 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { case INPUT_KEY: { press_a_key_physical = false; press_a_key_label->set_text(TTR("Press a Key...")); - press_a_key->get_ok()->set_disabled(true); + press_a_key->get_ok_button()->set_disabled(true); last_wait_for_key = Ref<InputEvent>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); //press_a_key->grab_focus(); @@ -470,10 +465,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (mb.is_valid()) { device_index->select(mb->get_button_index() - 1); _set_current_device(mb->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -481,9 +476,11 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { device_index_label->set_text(TTR("Joypad Axis Index:")); device_index->clear(); for (int i = 0; i < JOY_AXIS_MAX * 2; i++) { - String desc = TTR("Axis") + " " + itos(i / 2) + " " + ((i & 1) ? "+" : "-") + - " (" + TTR(_axis_descriptions[i]) + ")"; - device_index->add_item(desc); + Ref<InputEventJoypadMotion> jm; + jm.instance(); + jm->set_axis(i / 2); + jm->set_axis_value((i & 1) ? 1 : -1); + device_index->add_item(_get_joypad_motion_event_text(jm)); } device_input->popup_centered(Size2(350, 95) * EDSCALE); @@ -491,10 +488,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (jm.is_valid()) { device_index->select(jm->get_axis() * 2 + (jm->get_axis_value() > 0 ? 1 : 0)); _set_current_device(jm->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -502,11 +499,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { device_index_label->set_text(TTR("Joypad Button Index:")); device_index->clear(); for (int i = 0; i < JOY_BUTTON_MAX; i++) { - String desc = TTR("Button") + " " + itos(i); - if (i < JOY_SDL_BUTTONS) { - desc += " (" + TTR(_button_descriptions[i]) + ")"; - } - device_index->add_item(desc); + Ref<InputEventJoypadButton> jb; + jb.instance(); + jb->set_button_index(i); + device_index->add_item(jb->as_text()); } device_input->popup_centered(Size2(350, 95) * EDSCALE); @@ -514,10 +510,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (jb.is_valid()) { device_index->select(jb->get_button_index()); _set_current_device(jb->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -714,14 +710,7 @@ void InputMapEditor::_update_actions() { Ref<InputEventJoypadButton> jb = event; if (jb.is_valid()) { - const int idx = jb->get_button_index(); - String str = _get_device_string(jb->get_device()) + ", " + - TTR("Button") + " " + itos(idx); - if (idx >= 0 && idx < JOY_SDL_BUTTONS) { - str += String() + " (" + TTR(_button_descriptions[jb->get_button_index()]) + ")"; - } - - action2->set_text(0, str); + action2->set_text(0, jb->as_text()); action2->set_icon(0, input_editor->get_theme_icon("JoyButton", "EditorIcons")); } @@ -754,12 +743,8 @@ void InputMapEditor::_update_actions() { Ref<InputEventJoypadMotion> jm = event; if (jm.is_valid()) { - int ax = jm->get_axis(); - int n = 2 * ax + (jm->get_axis_value() < 0 ? 0 : 1); - String str = _get_device_string(jm->get_device()) + ", " + - TTR("Axis") + " " + itos(ax) + " " + (jm->get_axis_value() < 0 ? "-" : "+") + - " (" + _axis_descriptions[n] + ")"; - action2->set_text(0, str); + device_index->add_item(_get_joypad_motion_event_text(jm)); + action2->set_text(0, jm->as_text()); action2->set_icon(0, input_editor->get_theme_icon("JoyAxis", "EditorIcons")); } action2->set_metadata(0, i); @@ -936,10 +921,10 @@ InputMapEditor::InputMapEditor() { inputmap_changed = "inputmap_changed"; VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_BEGIN, 0); - vbc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, 0); - vbc->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 0); - vbc->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, 0); + vbc->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_BEGIN, 0); + vbc->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, 0); + vbc->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 0); + vbc->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, 0); add_child(vbc); HBoxContainer *hbc = memnew(HBoxContainer); @@ -993,7 +978,7 @@ InputMapEditor::InputMapEditor() { add_child(popup_add); press_a_key = memnew(ConfirmationDialog); - press_a_key->get_ok()->set_disabled(true); + press_a_key->get_ok_button()->set_disabled(true); //press_a_key->set_focus_mode(Control::FOCUS_ALL); press_a_key->connect("window_input", callable_mp(this, &InputMapEditor::_wait_for_key)); press_a_key->connect("confirmed", callable_mp(this, &InputMapEditor::_press_a_key_confirm)); @@ -1001,15 +986,15 @@ InputMapEditor::InputMapEditor() { l = memnew(Label); l->set_text(TTR("Press a Key...")); - l->set_anchors_and_margins_preset(Control::PRESET_WIDE); + l->set_anchors_and_offsets_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); - l->set_margin(MARGIN_TOP, 20); - l->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_BEGIN, 30); + l->set_offset(SIDE_TOP, 20); + l->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_BEGIN, 30); press_a_key->add_child(l); press_a_key_label = l; device_input = memnew(ConfirmationDialog); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); device_input->connect("confirmed", callable_mp(this, &InputMapEditor::_device_input_add)); add_child(device_input); diff --git a/editor/input_map_editor.h b/editor/input_map_editor.h index b9a3ce19d4..cc6ac1660d 100644 --- a/editor/input_map_editor.h +++ b/editor/input_map_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -88,6 +88,8 @@ class InputMapEditor : public Control { void _press_a_key_confirm(); void _show_last_added(const Ref<InputEvent> &p_event, const String &p_name); + String _get_joypad_motion_event_text(const Ref<InputEventJoypadMotion> &p_event); + 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); diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index c88cd8ea5f..fbcd76a95f 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -270,14 +270,13 @@ void InspectorDock::_select_history(int p_idx) { } void InspectorDock::_resource_created() { - Object *c = new_resource_dialog->instance_selected(); + Variant c = new_resource_dialog->instance_selected(); ERR_FAIL_COND(!c); Resource *r = Object::cast_to<Resource>(c); ERR_FAIL_COND(!r); - REF res(r); - editor->push_item(c); + editor->push_item(r); } void InspectorDock::_resource_selected(const RES &p_res, const String &p_property) { @@ -332,13 +331,20 @@ Container *InspectorDock::get_addon_area() { void InspectorDock::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { set_theme(editor->get_gui_base()->get_theme()); resource_new_button->set_icon(get_theme_icon("New", "EditorIcons")); resource_load_button->set_icon(get_theme_icon("Load", "EditorIcons")); resource_save_button->set_icon(get_theme_icon("Save", "EditorIcons")); - backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); - forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + backward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + forward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } else { + backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } history_menu->set_icon(get_theme_icon("History", "EditorIcons")); object_menu->set_icon(get_theme_icon("Tools", "EditorIcons")); warning->set_icon(get_theme_icon("NodeWarning", "EditorIcons")); @@ -445,7 +451,7 @@ void InspectorDock::update(Object *p_object) { List<MethodInfo> methods; p_object->get_method_list(&methods); - if (!methods.empty()) { + if (!methods.is_empty()) { bool found = false; List<MethodInfo>::Element *I = methods.front(); int i = 0; @@ -524,7 +530,11 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { backward_button = memnew(Button); backward_button->set_flat(true); general_options_hb->add_child(backward_button); - backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + backward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } else { + backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } backward_button->set_flat(true); backward_button->set_tooltip(TTR("Go to the previous edited object in history.")); backward_button->set_disabled(true); @@ -533,7 +543,11 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { forward_button = memnew(Button); forward_button->set_flat(true); general_options_hb->add_child(forward_button); - forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + forward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } else { + forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } forward_button->set_flat(true); forward_button->set_tooltip(TTR("Go to the next edited object in history.")); forward_button->set_disabled(true); @@ -554,6 +568,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { node_info_hb->add_child(editor_path); object_menu = memnew(MenuButton); + object_menu->set_shortcut_context(this); object_menu->set_icon(get_theme_icon("Tools", "EditorIcons")); node_info_hb->add_child(object_menu); object_menu->set_tooltip(TTR("Object properties.")); diff --git a/editor/inspector_dock.h b/editor/inspector_dock.h index b2dabf19c5..6a3f8c679c 100644 --- a/editor/inspector_dock.h +++ b/editor/inspector_dock.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/localization_editor.cpp b/editor/localization_editor.cpp index e725ce482d..60553143d5 100644 --- a/editor/localization_editor.cpp +++ b/editor/localization_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -37,6 +37,24 @@ #include "scene/gui/control.h" void LocalizationEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_TEXT_SERVER_CHANGED) { + ts_name->set_text(TTR("Text server: ") + TS->get_name()); + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } + ts_data_info->set_text(TTR("Info: ") + TS->get_support_data_info()); + } if (p_what == NOTIFICATION_ENTER_TREE) { translation_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_translation_delete)); translation_pot_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_pot_delete)); @@ -60,18 +78,21 @@ void LocalizationEditor::_notification(int p_what) { } void LocalizationEditor::add_translation(const String &p_translation) { - _translation_add(p_translation); + PackedStringArray translations; + translations.push_back(p_translation); + _translation_add(translations); } -void LocalizationEditor::_translation_add(const String &p_path) { +void LocalizationEditor::_translation_add(const PackedStringArray &p_paths) { PackedStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); - if (translations.has(p_path)) { - return; + for (int i = 0; i < p_paths.size(); i++) { + if (!translations.has(p_paths[i])) { + // Don't add duplicate translation paths. + translations.push_back(p_paths[i]); + } } - translations.push_back(p_path); - - undo_redo->create_action(TTR("Add Translation")); + undo_redo->create_action(vformat(TTR("Add %d Translations"), p_paths.size())); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translations", translations); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translations", ProjectSettings::get_singleton()->get("locale/translations")); undo_redo->add_do_method(this, "update_translations"); @@ -111,7 +132,7 @@ void LocalizationEditor::_translation_res_file_open() { translation_res_file_open_dialog->popup_file_dialog(); } -void LocalizationEditor::_translation_res_add(const String &p_path) { +void LocalizationEditor::_translation_res_add(const PackedStringArray &p_paths) { Variant prev; Dictionary remaps; @@ -120,13 +141,14 @@ void LocalizationEditor::_translation_res_add(const String &p_path) { prev = remaps; } - if (remaps.has(p_path)) { - return; //pointless already has it + for (int i = 0; i < p_paths.size(); i++) { + if (!remaps.has(p_paths[i])) { + // Don't overwrite with an empty remap array if an array already exists for the given path. + remaps[p_paths[i]] = PackedStringArray(); + } } - remaps[p_path] = PackedStringArray(); - - undo_redo->create_action(TTR("Add Remapped Path")); + undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Path(s)"), p_paths.size())); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", prev); undo_redo->add_do_method(this, "update_translations"); @@ -140,7 +162,7 @@ void LocalizationEditor::_translation_res_option_file_open() { translation_res_option_file_open_dialog->popup_file_dialog(); } -void LocalizationEditor::_translation_res_option_add(const String &p_path) { +void LocalizationEditor::_translation_res_option_add(const PackedStringArray &p_paths) { ERR_FAIL_COND(!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")); Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); @@ -152,10 +174,12 @@ void LocalizationEditor::_translation_res_option_add(const String &p_path) { ERR_FAIL_COND(!remaps.has(key)); PackedStringArray r = remaps[key]; - r.push_back(p_path + ":" + "en"); + for (int i = 0; i < p_paths.size(); i++) { + r.push_back(p_paths[i] + ":" + "en"); + } remaps[key] = r; - undo_redo->create_action(TTR("Resource Remap Add Remap")); + undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Remap(s)"), p_paths.size())); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", ProjectSettings::get_singleton()->get("locale/translation_remaps")); undo_redo->add_do_method(this, "update_translations"); @@ -363,17 +387,20 @@ void LocalizationEditor::_translation_filter_mode_changed(int p_mode) { undo_redo->commit_action(); } -void LocalizationEditor::_pot_add(const String &p_path) { +void LocalizationEditor::_pot_add(const PackedStringArray &p_paths) { PackedStringArray pot_translations = ProjectSettings::get_singleton()->get("locale/translations_pot_files"); - for (int i = 0; i < pot_translations.size(); i++) { - if (pot_translations[i] == p_path) { - return; //exists + for (int i = 0; i < p_paths.size(); i++) { + for (int j = 0; j < pot_translations.size(); j++) { + if (pot_translations[j] == p_paths[i]) { + continue; //exists + } } + + pot_translations.push_back(p_paths[i]); } - pot_translations.push_back(p_path); - undo_redo->create_action(TTR("Add files for POT generation")); + undo_redo->create_action(vformat(TTR("Add %d file(s) for POT generation"), p_paths.size())); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translations_pot_files", pot_translations); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translations_pot_files", ProjectSettings::get_singleton()->get("locale/translations_pot_files")); undo_redo->add_do_method(this, "update_translations"); @@ -622,6 +649,26 @@ void LocalizationEditor::update_translations() { updating_translations = false; } +void LocalizationEditor::_install_ts_data() { + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + TS->save_support_data("res://" + TS->get_support_data_filename()); + } + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } +} + void LocalizationEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("update_translations"), &LocalizationEditor::update_translations); @@ -647,8 +694,8 @@ LocalizationEditor::LocalizationEditor() { translations->add_child(tvb); HBoxContainer *thb = memnew(HBoxContainer); - thb->add_spacer(); thb->add_child(memnew(Label(TTR("Translations:")))); + thb->add_spacer(); tvb->add_child(thb); Button *addtr = memnew(Button(TTR("Add..."))); @@ -664,8 +711,8 @@ LocalizationEditor::LocalizationEditor() { tmc->add_child(translation_list); translation_file_open = memnew(EditorFileDialog); - translation_file_open->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); - translation_file_open->connect("file_selected", callable_mp(this, &LocalizationEditor::_translation_add)); + translation_file_open->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILES); + translation_file_open->connect("files_selected", callable_mp(this, &LocalizationEditor::_translation_add)); add_child(translation_file_open); } @@ -694,8 +741,8 @@ LocalizationEditor::LocalizationEditor() { tmc->add_child(translation_remap); translation_res_file_open_dialog = memnew(EditorFileDialog); - translation_res_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); - translation_res_file_open_dialog->connect("file_selected", callable_mp(this, &LocalizationEditor::_translation_res_add)); + translation_res_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILES); + translation_res_file_open_dialog->connect("files_selected", callable_mp(this, &LocalizationEditor::_translation_res_add)); add_child(translation_res_file_open_dialog); thb = memnew(HBoxContainer); @@ -726,8 +773,8 @@ LocalizationEditor::LocalizationEditor() { tmc->add_child(translation_remap_options); translation_res_option_file_open_dialog = memnew(EditorFileDialog); - translation_res_option_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); - translation_res_option_file_open_dialog->connect("file_selected", callable_mp(this, &LocalizationEditor::_translation_res_option_add)); + translation_res_option_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILES); + translation_res_option_file_open_dialog->connect("files_selected", callable_mp(this, &LocalizationEditor::_translation_res_option_add)); add_child(translation_res_option_file_open_dialog); } @@ -787,8 +834,41 @@ LocalizationEditor::LocalizationEditor() { add_child(pot_generate_dialog); pot_file_open_dialog = memnew(EditorFileDialog); - pot_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); - pot_file_open_dialog->connect("file_selected", callable_mp(this, &LocalizationEditor::_pot_add)); + pot_file_open_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILES); + pot_file_open_dialog->connect("files_selected", callable_mp(this, &LocalizationEditor::_pot_add)); add_child(pot_file_open_dialog); } + + { + VBoxContainer *tvb = memnew(VBoxContainer); + tvb->set_name(TTR("Text Server Data")); + translations->add_child(tvb); + + ts_name = memnew(Label(TTR("Text server: ") + TS->get_name())); + tvb->add_child(ts_name); + + ts_data_status = memnew(Label(TTR("Support data: "))); + tvb->add_child(ts_data_status); + + ts_data_info = memnew(Label(TTR("Info: ") + TS->get_support_data_info())); + tvb->add_child(ts_data_info); + + ts_install = memnew(Button(TTR("Install support data..."))); + ts_install->connect("pressed", callable_mp(this, &LocalizationEditor::_install_ts_data)); + tvb->add_child(ts_install); + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } + } } diff --git a/editor/localization_editor.h b/editor/localization_editor.h index 3c077d9c77..6e0d7ce61f 100644 --- a/editor/localization_editor.h +++ b/editor/localization_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -58,6 +58,11 @@ class LocalizationEditor : public VBoxContainer { Vector<TreeItem *> translation_filter_treeitems; Vector<int> translation_locales_idxs_remap; + Label *ts_name; + Label *ts_data_status; + Label *ts_data_info; + Button *ts_install; + Tree *translation_pot_list; EditorFileDialog *pot_file_open_dialog; EditorFileDialog *pot_generate_dialog; @@ -67,28 +72,30 @@ class LocalizationEditor : public VBoxContainer { String localization_changed; void _translation_file_open(); - void _translation_add(const String &p_path); + void _translation_add(const PackedStringArray &p_paths); void _translation_delete(Object *p_item, int p_column, int p_button); void _translation_res_file_open(); - void _translation_res_add(const String &p_path); + void _translation_res_add(const PackedStringArray &p_paths); void _translation_res_delete(Object *p_item, int p_column, int p_button); void _translation_res_select(); void _translation_res_option_file_open(); - void _translation_res_option_add(const String &p_path); + void _translation_res_option_add(const PackedStringArray &p_paths); void _translation_res_option_changed(); void _translation_res_option_delete(Object *p_item, int p_column, int p_button); void _translation_filter_option_changed(); void _translation_filter_mode_changed(int p_mode); - void _pot_add(const String &p_path); + void _pot_add(const PackedStringArray &p_paths); void _pot_delete(Object *p_item, int p_column, int p_button); void _pot_file_open(); void _pot_generate_open(); void _pot_generate(const String &p_file); void _update_pot_file_extensions(); + void _install_ts_data(); + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/multi_node_edit.cpp b/editor/multi_node_edit.cpp index 1077aca7b3..b714109af7 100644 --- a/editor/multi_node_edit.cpp +++ b/editor/multi_node_edit.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -173,10 +173,6 @@ void MultiNodeEdit::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::OBJECT, "scripts", PROPERTY_HINT_RESOURCE_TYPE, "Script")); } -void MultiNodeEdit::clear_nodes() { - nodes.clear(); -} - void MultiNodeEdit::add_node(const NodePath &p_node) { nodes.push_back(p_node); } diff --git a/editor/multi_node_edit.h b/editor/multi_node_edit.h index 694dad76f1..0544eb2d50 100644 --- a/editor/multi_node_edit.h +++ b/editor/multi_node_edit.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -38,7 +38,7 @@ class MultiNodeEdit : public Reference { List<NodePath> nodes; struct PLData { - int uses; + int uses = 0; PropertyInfo info; }; @@ -50,7 +50,6 @@ protected: void _get_property_list(List<PropertyInfo> *p_list) const; public: - void clear_nodes(); void add_node(const NodePath &p_node); int get_node_count() const; diff --git a/editor/node_3d_editor_gizmos.cpp b/editor/node_3d_editor_gizmos.cpp index 397a958d8f..96ebb131ad 100644 --- a/editor/node_3d_editor_gizmos.cpp +++ b/editor/node_3d_editor_gizmos.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -198,7 +198,7 @@ void EditorNode3DGizmo::add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard, } void EditorNode3DGizmo::add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard, const Color &p_modulate) { - if (p_lines.empty()) { + if (p_lines.is_empty()) { return; } @@ -398,10 +398,10 @@ void EditorNode3DGizmo::add_handles(const Vector<Vector3> &p_handles, const Ref< void EditorNode3DGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size, Vector3 p_position) { ERR_FAIL_COND(!spatial_node); - CubeMesh cubem; - cubem.set_size(p_size); + BoxMesh box_mesh; + box_mesh.set_size(p_size); - Array arrays = cubem.surface_get_arrays(0); + Array arrays = box_mesh.surface_get_arrays(0); PackedVector3Array vertex = arrays[RS::ARRAY_VERTEX]; Vector3 *w = vertex.ptrw(); @@ -412,7 +412,7 @@ void EditorNode3DGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size, arrays[RS::ARRAY_VERTEX] = vertex; Ref<ArrayMesh> m = memnew(ArrayMesh); - m->add_surface_from_arrays(cubem.surface_get_primitive_type(0), arrays); + m->add_surface_from_arrays(box_mesh.surface_get_primitive_type(0), arrays); m->surface_set_material(0, p_material); add_mesh(m); } @@ -633,7 +633,7 @@ bool EditorNode3DGizmo::intersect_ray(Camera3D *p_camera, const Point2 &p_point, tcp = a; } - if (camp.distance_to(tcp) < p_camera->get_znear()) { + if (camp.distance_to(tcp) < p_camera->get_near()) { continue; } cp = tcp; @@ -792,7 +792,7 @@ bool Light3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Light3D>(p_spatial) != nullptr; } -String Light3DGizmoPlugin::get_name() const { +String Light3DGizmoPlugin::get_gizmo_name() const { return "Light3D"; } @@ -863,7 +863,7 @@ void Light3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camer float d = -ra.z; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d <= 0) { // Equal is here for negative zero. @@ -878,7 +878,7 @@ void Light3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camer if (cp.intersects_ray(ray_from, ray_dir, &inters)) { float r = inters.distance_to(gt.origin); if (Node3DEditor::get_singleton()->is_snap_enabled()) { - r = Math::stepify(r, Node3DEditor::get_singleton()->get_translate_snap()); + r = Math::snapped(r, Node3DEditor::get_singleton()->get_translate_snap()); } light->set_param(Light3D::PARAM_RANGE, r); @@ -1061,7 +1061,7 @@ bool AudioStreamPlayer3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<AudioStreamPlayer3D>(p_spatial) != nullptr; } -String AudioStreamPlayer3DGizmoPlugin::get_name() const { +String AudioStreamPlayer3DGizmoPlugin::get_gizmo_name() const { return "AudioStreamPlayer3D"; } @@ -1195,7 +1195,7 @@ bool Camera3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Camera3D>(p_spatial) != nullptr; } -String Camera3DGizmoPlugin::get_name() const { +String Camera3DGizmoPlugin::get_gizmo_name() const { return "Camera3D"; } @@ -1243,7 +1243,7 @@ void Camera3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Came Geometry3D::get_closest_points_between_segments(Vector3(0, 0, -1), Vector3(4096, 0, -1), s[0], s[1], ra, rb); float d = ra.x * 2.0; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } d = CLAMP(d, 0.1, 16384); @@ -1357,7 +1357,7 @@ void Camera3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { case Camera3D::PROJECTION_FRUSTUM: { float hsize = camera->get_size() / 2.0; - Vector3 side = Vector3(hsize, 0, -camera->get_znear()).normalized(); + Vector3 side = Vector3(hsize, 0, -camera->get_near()).normalized(); Vector3 nside = side; nside.x = -nside.x; Vector3 up = Vector3(0, side.x, 0); @@ -1432,7 +1432,7 @@ bool MeshInstance3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<MeshInstance3D>(p_spatial) != nullptr && Object::cast_to<SoftBody3D>(p_spatial) == nullptr; } -String MeshInstance3DGizmoPlugin::get_name() const { +String MeshInstance3DGizmoPlugin::get_gizmo_name() const { return "MeshInstance3D"; } @@ -1469,7 +1469,7 @@ bool Sprite3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Sprite3D>(p_spatial) != nullptr; } -String Sprite3DGizmoPlugin::get_name() const { +String Sprite3DGizmoPlugin::get_gizmo_name() const { return "Sprite3D"; } @@ -1531,7 +1531,7 @@ bool Position3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Position3D>(p_spatial) != nullptr; } -String Position3DGizmoPlugin::get_name() const { +String Position3DGizmoPlugin::get_gizmo_name() const { return "Position3D"; } @@ -1556,7 +1556,7 @@ bool Skeleton3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Skeleton3D>(p_spatial) != nullptr; } -String Skeleton3DGizmoPlugin::get_name() const { +String Skeleton3DGizmoPlugin::get_gizmo_name() const { return "Skeleton3D"; } @@ -1625,13 +1625,13 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { int pointidx = 0; for (int j = 0; j < 3; j++) { bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(rootcolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(rootcolor); surface_tool->add_vertex(v0 - grests[parent].basis[j].normalized() * dist * 0.05); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(rootcolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(rootcolor); surface_tool->add_vertex(v0 + grests[parent].basis[j].normalized() * dist * 0.05); if (j == closest) { @@ -1654,24 +1654,24 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { point += axis * dist * 0.1; bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(v0); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(point); bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(point); bones.write[0] = i; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(v1); points[pointidx++] = point; } @@ -1680,13 +1680,13 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { SWAP(points[1], points[2]); for (int j = 0; j < 4; j++) { bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(points[j]); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(points[(j + 1) % 4]); } @@ -1716,14 +1716,12 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { Vector3 face_points[4]; for (int j=0;j<4;j++) { - float v[3]; v[0]=1.0; v[1]=1-2*((j>>1)&1); v[2]=v[1]*(1-2*(j&1)); for (int k=0;k<3;k++) { - if (i<3) face_points[j][(i+k)%3]=v[k]*(i>=3?-1:1); else @@ -1760,7 +1758,7 @@ bool PhysicalBone3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<PhysicalBone3D>(p_spatial) != nullptr; } -String PhysicalBone3DGizmoPlugin::get_name() const { +String PhysicalBone3DGizmoPlugin::get_gizmo_name() const { return "PhysicalBone3D"; } @@ -1897,7 +1895,7 @@ bool RayCast3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<RayCast3D>(p_spatial) != nullptr; } -String RayCast3DGizmoPlugin::get_name() const { +String RayCast3DGizmoPlugin::get_gizmo_name() const { return "RayCast3D"; } @@ -1949,7 +1947,7 @@ bool SpringArm3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<SpringArm3D>(p_spatial) != nullptr; } -String SpringArm3DGizmoPlugin::get_name() const { +String SpringArm3DGizmoPlugin::get_gizmo_name() const { return "SpringArm3D"; } @@ -1968,7 +1966,7 @@ bool VehicleWheel3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<VehicleWheel3D>(p_spatial) != nullptr; } -String VehicleWheel3DGizmoPlugin::get_name() const { +String VehicleWheel3DGizmoPlugin::get_gizmo_name() const { return "VehicleWheel3D"; } @@ -2040,7 +2038,7 @@ bool SoftBody3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<SoftBody3D>(p_spatial) != nullptr; } -String SoftBody3DGizmoPlugin::get_name() const { +String SoftBody3DGizmoPlugin::get_gizmo_name() const { return "SoftBody3D"; } @@ -2116,7 +2114,7 @@ bool VisibilityNotifier3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<VisibilityNotifier3D>(p_spatial) != nullptr; } -String VisibilityNotifier3DGizmoPlugin::get_name() const { +String VisibilityNotifier3DGizmoPlugin::get_gizmo_name() const { return "VisibilityNotifier3D"; } @@ -2175,7 +2173,7 @@ void VisibilityNotifier3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } aabb.position[p_idx] = d - 1.0 - aabb.size[p_idx] * 0.5; @@ -2187,7 +2185,7 @@ void VisibilityNotifier3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int float d = ra[p_idx] - ofs[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -2272,7 +2270,7 @@ bool CPUParticles3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CPUParticles3D>(p_spatial) != nullptr; } -String CPUParticles3DGizmoPlugin::get_name() const { +String CPUParticles3DGizmoPlugin::get_gizmo_name() const { return "CPUParticles3D"; } @@ -2304,7 +2302,7 @@ bool GPUParticles3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<GPUParticles3D>(p_spatial) != nullptr; } -String GPUParticles3DGizmoPlugin::get_name() const { +String GPUParticles3DGizmoPlugin::get_gizmo_name() const { return "GPUParticles3D"; } @@ -2366,7 +2364,7 @@ void GPUParticles3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } aabb.position[p_idx] = d - 1.0 - aabb.size[p_idx] * 0.5; @@ -2378,7 +2376,7 @@ void GPUParticles3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx float d = ra[p_idx] - ofs[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -2471,7 +2469,7 @@ bool GPUParticlesCollision3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return (Object::cast_to<GPUParticlesCollision3D>(p_spatial) != nullptr) || (Object::cast_to<GPUParticlesAttractor3D>(p_spatial) != nullptr); } -String GPUParticlesCollision3DGizmoPlugin::get_name() const { +String GPUParticlesCollision3DGizmoPlugin::get_gizmo_name() const { return "GPUParticlesCollision3D"; } @@ -2523,7 +2521,7 @@ void GPUParticlesCollision3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, Geometry3D::get_closest_points_between_segments(Vector3(), Vector3(4096, 0, 0), sg[0], sg[1], ra, rb); float d = ra.x; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -2540,7 +2538,7 @@ void GPUParticlesCollision3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb); float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -2735,7 +2733,7 @@ bool ReflectionProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<ReflectionProbe>(p_spatial) != nullptr; } -String ReflectionProbeGizmoPlugin::get_name() const { +String ReflectionProbeGizmoPlugin::get_gizmo_name() const { return "ReflectionProbe"; } @@ -2788,7 +2786,7 @@ void ReflectionProbeGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_id Geometry3D::get_closest_points_between_segments(Vector3(), axis * 16384, sg[0], sg[1], ra, rb); float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -2816,7 +2814,7 @@ void ReflectionProbeGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_id // Adjust the actual position to account for the gizmo handle position float d = ra[p_idx] + 0.25; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } origin[p_idx] = d; @@ -2920,7 +2918,7 @@ bool DecalGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Decal>(p_spatial) != nullptr; } -String DecalGizmoPlugin::get_name() const { +String DecalGizmoPlugin::get_gizmo_name() const { return "Decal"; } @@ -2966,7 +2964,7 @@ void DecalGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3 Geometry3D::get_closest_points_between_segments(Vector3(), axis * 16384, sg[0], sg[1], ra, rb); float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3061,7 +3059,7 @@ bool GIProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<GIProbe>(p_spatial) != nullptr; } -String GIProbeGizmoPlugin::get_name() const { +String GIProbeGizmoPlugin::get_gizmo_name() const { return "GIProbe"; } @@ -3107,7 +3105,7 @@ void GIProbeGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camer Geometry3D::get_closest_points_between_segments(Vector3(), axis * 16384, sg[0], sg[1], ra, rb); float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3256,7 +3254,7 @@ bool BakedLightmapGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<BakedLightmap>(p_spatial) != nullptr; } -String BakedLightmapGizmoPlugin::get_name() const { +String BakedLightmapGizmoPlugin::get_gizmo_name() const { return "BakedLightmap"; } @@ -3438,7 +3436,7 @@ bool LightmapProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<LightmapProbe>(p_spatial) != nullptr; } -String LightmapProbeGizmoPlugin::get_name() const { +String LightmapProbeGizmoPlugin::get_gizmo_name() const { return "LightmapProbe"; } @@ -3522,7 +3520,7 @@ bool CollisionShape3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CollisionShape3D>(p_spatial) != nullptr; } -String CollisionShape3DGizmoPlugin::get_name() const { +String CollisionShape3DGizmoPlugin::get_gizmo_name() const { return "CollisionShape3D"; } @@ -3543,7 +3541,7 @@ String CollisionShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_g } if (Object::cast_to<BoxShape3D>(*s)) { - return "Extents"; + return "Size"; } if (Object::cast_to<CapsuleShape3D>(*s)) { @@ -3576,7 +3574,7 @@ Variant CollisionShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo if (Object::cast_to<BoxShape3D>(*s)) { Ref<BoxShape3D> bs = s; - return bs->get_extents(); + return bs->get_size(); } if (Object::cast_to<CapsuleShape3D>(*s)) { @@ -3619,7 +3617,7 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i Geometry3D::get_closest_points_between_segments(Vector3(), Vector3(4096, 0, 0), sg[0], sg[1], ra, rb); float d = ra.x; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3635,7 +3633,7 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i Geometry3D::get_closest_points_between_segments(Vector3(), Vector3(0, 0, 4096), sg[0], sg[1], ra, rb); float d = ra.z; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3653,16 +3651,16 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb); float d = ra[p_idx]; if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { d = 0.001; } - Vector3 he = bs->get_extents(); - he[p_idx] = d; - bs->set_extents(he); + Vector3 he = bs->get_size(); + he[p_idx] = d * 2; + bs->set_size(he); } if (Object::cast_to<CapsuleShape3D>(*s)) { @@ -3677,7 +3675,7 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i } if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3699,7 +3697,7 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb); float d = axis.dot(ra); if (Node3DEditor::get_singleton()->is_snap_enabled()) { - d = Math::stepify(d, Node3DEditor::get_singleton()->get_translate_snap()); + d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap()); } if (d < 0.001) { @@ -3739,14 +3737,14 @@ void CollisionShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int if (Object::cast_to<BoxShape3D>(*s)) { Ref<BoxShape3D> ss = s; if (p_cancel) { - ss->set_extents(p_restore); + ss->set_size(p_restore); return; } UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Change Box Shape Extents")); - ur->add_do_method(ss.ptr(), "set_extents", ss->get_extents()); - ur->add_undo_method(ss.ptr(), "set_extents", p_restore); + ur->create_action(TTR("Change Box Shape Size")); + ur->add_do_method(ss.ptr(), "set_size", ss->get_size()); + ur->add_undo_method(ss.ptr(), "set_size", p_restore); ur->commit_action(); } @@ -3880,8 +3878,8 @@ void CollisionShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { Ref<BoxShape3D> bs = s; Vector<Vector3> lines; AABB aabb; - aabb.position = -bs->get_extents(); - aabb.size = aabb.position * -2; + aabb.position = -bs->get_size() / 2; + aabb.size = bs->get_size(); for (int i = 0; i < 12; i++) { Vector3 a, b; @@ -3894,7 +3892,7 @@ void CollisionShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { for (int i = 0; i < 3; i++) { Vector3 ax; - ax[i] = bs->get_extents()[i]; + ax[i] = bs->get_size()[i] / 2; handles.push_back(ax); } @@ -4122,7 +4120,7 @@ bool CollisionPolygon3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CollisionPolygon3D>(p_spatial) != nullptr; } -String CollisionPolygon3DGizmoPlugin::get_name() const { +String CollisionPolygon3DGizmoPlugin::get_gizmo_name() const { return "CollisionPolygon3D"; } @@ -4169,7 +4167,7 @@ bool NavigationRegion3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<NavigationRegion3D>(p_spatial) != nullptr; } -String NavigationRegion3DGizmoPlugin::get_name() const { +String NavigationRegion3DGizmoPlugin::get_gizmo_name() const { return "NavigationRegion3D"; } @@ -4207,7 +4205,7 @@ void NavigationRegion3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { } } - if (faces.empty()) { + if (faces.is_empty()) { return; } @@ -4523,7 +4521,7 @@ Joint3DGizmoPlugin::Joint3DGizmoPlugin() { } void Joint3DGizmoPlugin::incremental_update_gizmos() { - if (!current_gizmos.empty()) { + if (!current_gizmos.is_empty()) { update_idx++; update_idx = update_idx % current_gizmos.size(); redraw(current_gizmos[update_idx]); @@ -4534,7 +4532,7 @@ bool Joint3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Joint3D>(p_spatial) != nullptr; } -String Joint3DGizmoPlugin::get_name() const { +String Joint3DGizmoPlugin::get_gizmo_name() const { return "Joint3D"; } diff --git a/editor/node_3d_editor_gizmos.h b/editor/node_3d_editor_gizmos.h index 4826054643..df4ed15a8e 100644 --- a/editor/node_3d_editor_gizmos.h +++ b/editor/node_3d_editor_gizmos.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -41,7 +41,7 @@ class Light3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -58,7 +58,7 @@ class AudioStreamPlayer3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -75,7 +75,7 @@ class Camera3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -92,7 +92,7 @@ class MeshInstance3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool can_be_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -105,7 +105,7 @@ class Sprite3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool can_be_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -121,7 +121,7 @@ class Position3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -133,7 +133,7 @@ class Skeleton3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -145,7 +145,7 @@ class PhysicalBone3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -157,7 +157,7 @@ class RayCast3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -169,7 +169,7 @@ class SpringArm3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -181,7 +181,7 @@ class VehicleWheel3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -193,7 +193,7 @@ class SoftBody3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -211,7 +211,7 @@ class VisibilityNotifier3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -228,7 +228,7 @@ class CPUParticles3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -240,7 +240,7 @@ class GPUParticles3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -258,7 +258,7 @@ class GPUParticlesCollision3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -275,7 +275,7 @@ class ReflectionProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -292,7 +292,7 @@ class DecalGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -309,7 +309,7 @@ class GIProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -326,7 +326,7 @@ class BakedLightmapGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -343,7 +343,7 @@ class LightmapProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -360,7 +360,7 @@ class CollisionShape3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -377,7 +377,7 @@ class CollisionPolygon3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; CollisionPolygon3DGizmoPlugin(); @@ -395,7 +395,7 @@ class NavigationRegion3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -427,7 +427,7 @@ class Joint3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index 2c89517008..43c9cabe01 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/node_dock.h b/editor/node_dock.h index 8e10db5eb3..280369bb09 100644 --- a/editor/node_dock.h +++ b/editor/node_dock.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp index 3ad6938498..19c9662162 100644 --- a/editor/plugin_config_dialog.cpp +++ b/editor/plugin_config_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -126,7 +126,7 @@ void PluginConfigDialog::_on_cancelled() { void PluginConfigDialog::_on_required_text_changed(const String &) { int lang_idx = script_option_edit->get_selected(); String ext = ScriptServer::get_language(lang_idx)->get_extension(); - get_ok()->set_disabled(script_edit->get_text().get_basename().empty() || script_edit->get_text().get_extension() != ext || name_edit->get_text().empty()); + get_ok_button()->set_disabled(script_edit->get_text().get_basename().is_empty() || script_edit->get_text().get_extension() != ext || name_edit->get_text().is_empty()); } void PluginConfigDialog::_notification(int p_what) { @@ -138,7 +138,7 @@ void PluginConfigDialog::_notification(int p_what) { } break; case NOTIFICATION_READY: { connect("confirmed", callable_mp(this, &PluginConfigDialog::_on_confirmed)); - get_cancel()->connect("pressed", callable_mp(this, &PluginConfigDialog::_on_cancelled)); + get_cancel_button()->connect("pressed", callable_mp(this, &PluginConfigDialog::_on_cancelled)); } break; } } @@ -171,8 +171,8 @@ void PluginConfigDialog::config(const String &p_config_path) { Object::cast_to<Label>(subfolder_edit->get_parent()->get_child(subfolder_edit->get_index() - 1))->show(); set_title(TTR("Create a Plugin")); } - get_ok()->set_disabled(!_edit_mode); - get_ok()->set_text(_edit_mode ? TTR("Update") : TTR("Create")); + get_ok_button()->set_disabled(!_edit_mode); + get_ok_button()->set_text(_edit_mode ? TTR("Update") : TTR("Create")); } void PluginConfigDialog::_bind_methods() { @@ -180,7 +180,7 @@ void PluginConfigDialog::_bind_methods() { } PluginConfigDialog::PluginConfigDialog() { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); set_hide_on_ok(true); GridContainer *grid = memnew(GridContainer); diff --git a/editor/plugin_config_dialog.h b/editor/plugin_config_dialog.h index 93c8c01c70..50ca417d81 100644 --- a/editor/plugin_config_dialog.h +++ b/editor/plugin_config_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 7a3fb1ff52..876b67fa77 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -551,9 +551,10 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl if (vertex == hover_point) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); String num = String::num(vertex.vertex); - Size2 num_size = font->get_string_size(num); - p_overlay->draw_string(font, point - num_size * 0.5, num, Color(1.0, 1.0, 1.0, 0.5)); + Size2 num_size = font->get_string_size(num, font_size); + p_overlay->draw_string(font, point - num_size * 0.5, num, HALIGN_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); } } } @@ -723,7 +724,7 @@ AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wi create_resource = memnew(ConfirmationDialog); add_child(create_resource); - create_resource->get_ok()->set_text(TTR("Create")); + create_resource->get_ok_button()->set_text(TTR("Create")); mode = MODE_EDIT; } diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h index 527803150d..4f9adfff25 100644 --- a/editor/plugins/abstract_polygon_2d_editor.h +++ b/editor/plugins/abstract_polygon_2d_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp index d335b29c2f..d69913cc46 100644 --- a/editor/plugins/animation_blend_space_1d_editor.cpp +++ b/editor/plugins/animation_blend_space_1d_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -106,7 +106,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven add_point_pos += blend_space->get_min_space(); if (snap->is_pressed()) { - add_point_pos = Math::stepify(add_point_pos, blend_space->get_snap()); + add_point_pos = Math::snapped(add_point_pos, blend_space->get_snap()); } } @@ -139,7 +139,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEven point += drag_ofs.x; if (snap->is_pressed()) { - point = Math::stepify(point, blend_space->get_snap()); + point = Math::snapped(point, blend_space->get_snap()); } updating = true; @@ -201,6 +201,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { linecolor_soft.a *= 0.5; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Ref<Texture2D> icon = get_theme_icon("KeyValue", "EditorIcons"); Ref<Texture2D> icon_selected = get_theme_icon("KeySelected", "EditorIcons"); @@ -221,7 +222,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { float x = point; blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); - blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); } @@ -252,7 +253,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { if (dragging_selected && selected_point == i) { point += drag_ofs.x; if (snap->is_pressed()) { - point = Math::stepify(point, blend_space->get_snap()); + point = Math::snapped(point, blend_space->get_snap()); } } @@ -453,7 +454,7 @@ void AnimationNodeBlendSpace1DEditor::_update_edited_point_pos() { pos += drag_ofs.x; if (snap->is_pressed()) { - pos = Math::stepify(pos, blend_space->get_snap()); + pos = Math::snapped(pos, blend_space->get_snap()); } } diff --git a/editor/plugins/animation_blend_space_1d_editor.h b/editor/plugins/animation_blend_space_1d_editor.h index 5ff5da47c0..24c950fdee 100644 --- a/editor/plugins/animation_blend_space_1d_editor.h +++ b/editor/plugins/animation_blend_space_1d_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index 60a5188af7..6a57463dbc 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -129,8 +129,8 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven add_point_pos += blend_space->get_min_space(); if (snap->is_pressed()) { - add_point_pos.x = Math::stepify(add_point_pos.x, blend_space->get_snap().x); - add_point_pos.y = Math::stepify(add_point_pos.y, blend_space->get_snap().y); + add_point_pos.x = Math::snapped(add_point_pos.x, blend_space->get_snap().x); + add_point_pos.y = Math::snapped(add_point_pos.y, blend_space->get_snap().y); } } @@ -215,8 +215,8 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven Vector2 point = blend_space->get_blend_point_position(selected_point); point += drag_ofs; if (snap->is_pressed()) { - point.x = Math::stepify(point.x, blend_space->get_snap().x); - point.y = Math::stepify(point.y, blend_space->get_snap().y); + point.x = Math::snapped(point.x, blend_space->get_snap().x); + point.y = Math::snapped(point.y, blend_space->get_snap().y); } updating = true; @@ -396,6 +396,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { Color linecolor_soft = linecolor; linecolor_soft.a *= 0.5; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Ref<Texture2D> icon = get_theme_icon("KeyValue", "EditorIcons"); Ref<Texture2D> icon_selected = get_theme_icon("KeySelected", "EditorIcons"); @@ -412,14 +413,14 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (blend_space->get_min_space().y < 0) { int y = (blend_space->get_max_space().y / (blend_space->get_max_space().y - blend_space->get_min_space().y)) * s.height; blend_space_draw->draw_line(Point2(0, y), Point2(5 * EDSCALE, y), linecolor); - blend_space_draw->draw_string(font, Point2(2 * EDSCALE, y - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(2 * EDSCALE, y - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(5 * EDSCALE, y), Point2(s.width, y), linecolor_soft); } if (blend_space->get_min_space().x < 0) { int x = (-blend_space->get_min_space().x / (blend_space->get_max_space().x - blend_space->get_min_space().x)) * s.width; blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); - blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); } @@ -466,8 +467,8 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (dragging_selected && selected_point == point_idx) { point += drag_ofs; if (snap->is_pressed()) { - point.x = Math::stepify(point.x, blend_space->get_snap().x); - point.y = Math::stepify(point.y, blend_space->get_snap().y); + point.x = Math::snapped(point.x, blend_space->get_snap().x); + point.y = Math::snapped(point.y, blend_space->get_snap().y); } } point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); @@ -502,8 +503,8 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (dragging_selected && selected_point == i) { point += drag_ofs; if (snap->is_pressed()) { - point.x = Math::stepify(point.x, blend_space->get_snap().x); - point.y = Math::stepify(point.y, blend_space->get_snap().y); + point.x = Math::snapped(point.x, blend_space->get_snap().x); + point.y = Math::snapped(point.y, blend_space->get_snap().y); } } point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); @@ -701,8 +702,8 @@ void AnimationNodeBlendSpace2DEditor::_update_edited_point_pos() { if (dragging_selected) { pos += drag_ofs; if (snap->is_pressed()) { - pos.x = Math::stepify(pos.x, blend_space->get_snap().x); - pos.y = Math::stepify(pos.y, blend_space->get_snap().y); + pos.x = Math::snapped(pos.x, blend_space->get_snap().x); + pos.y = Math::snapped(pos.y, blend_space->get_snap().y); } } updating = true; diff --git a/editor/plugins/animation_blend_space_2d_editor.h b/editor/plugins/animation_blend_space_2d_editor.h index 64885aeaca..3b8b78b2b5 100644 --- a/editor/plugins/animation_blend_space_2d_editor.h +++ b/editor/plugins/animation_blend_space_2d_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 38648b5f0a..fbfcac3d22 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -127,7 +127,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() { Ref<AnimationNode> agnode = blend_tree->get_node(E->get()); - node->set_offset(blend_tree->get_node_position(E->get()) * EDSCALE); + node->set_position_offset(blend_tree->get_node_position(E->get()) * EDSCALE); node->set_title(agnode->get_caption()); node->set_name(E->get()); @@ -416,7 +416,7 @@ void AnimationNodeBlendTreeEditor::_delete_nodes_request() { } } - if (to_erase.empty()) { + if (to_erase.is_empty()) { return; } @@ -537,7 +537,7 @@ bool AnimationNodeBlendTreeEditor::_update_filters(const Ref<AnimationNode> &ano default: { } break; } - if (!track_type_name.empty()) { + if (!track_type_name.is_empty()) { types[track_path].insert(track_type_name); } } diff --git a/editor/plugins/animation_blend_tree_editor_plugin.h b/editor/plugins/animation_blend_tree_editor_plugin.h index 3ebf623eef..9f09069719 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.h +++ b/editor/plugins/animation_blend_tree_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 1e56e3d11f..56d82acd2f 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -105,6 +105,8 @@ void AnimationPlayerEditor::_notification(int p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { add_theme_style_override("panel", editor->get_gui_base()->get_theme_stylebox("panel", "Panel")); } break; + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_THEME_CHANGED: { autoplay->set_icon(get_theme_icon("AutoPlay", "EditorIcons")); @@ -114,6 +116,19 @@ void AnimationPlayerEditor::_notification(int p_what) { play_bw_from->set_icon(get_theme_icon("PlayBackwards", "EditorIcons")); autoplay_icon = get_theme_icon("AutoPlay", "EditorIcons"); + reset_icon = get_theme_icon("Reload", "EditorIcons"); + { + Ref<Image> autoplay_img = autoplay_icon->get_data(); + Ref<Image> reset_img = reset_icon->get_data(); + Ref<Image> autoplay_reset_img; + Size2 icon_size = Size2(autoplay_img->get_width(), autoplay_img->get_height()); + autoplay_reset_img.instance(); + autoplay_reset_img->create(icon_size.x * 2, icon_size.y, false, autoplay_img->get_format()); + autoplay_reset_img->blit_rect(autoplay_img, Rect2(Point2(), icon_size), Point2()); + autoplay_reset_img->blit_rect(reset_img, Rect2(Point2(), icon_size), Point2(icon_size.x, 0)); + autoplay_reset_icon.instance(); + autoplay_reset_icon->create_from_image(autoplay_reset_img); + } stop->set_icon(get_theme_icon("Stop", "EditorIcons")); onion_toggle->set_icon(get_theme_icon("Onion", "EditorIcons")); @@ -665,7 +680,7 @@ void AnimationPlayerEditor::set_state(const Dictionary &p_state) { if (p_state.has("animation")) { String anim = p_state["animation"]; - if (!anim.empty() && player->has_animation(anim)) { + if (!anim.is_empty() && player->has_animation(anim)) { _select_anim_by_name(anim); _animation_edit(); } @@ -815,11 +830,17 @@ void AnimationPlayerEditor::_update_player() { int active_idx = -1; for (List<StringName>::Element *E = animlist.front(); E; E = E->next()) { - if (player->get_autoplay() == E->get()) { - animation->add_icon_item(autoplay_icon, E->get()); - } else { - animation->add_item(E->get()); + Ref<Texture2D> icon; + if (E->get() == player->get_autoplay()) { + if (E->get() == "RESET") { + icon = autoplay_reset_icon; + } else { + icon = autoplay_icon; + } + } else if (E->get() == "RESET") { + icon = reset_icon; } + animation->add_icon_item(icon, E->get()); if (player->get_assigned_animation() == E->get()) { active_idx = animation->get_item_count() - 1; @@ -992,7 +1013,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set) { float pos = CLAMP(anim->get_length() * (p_value / frame->get_max()), 0, anim->get_length()); if (track_editor->is_snap_enabled()) { - pos = Math::stepify(pos, _get_editor_step()); + pos = Math::snapped(pos, _get_editor_step()); } if (player->is_valid() && !p_set) { @@ -1048,7 +1069,7 @@ void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_drag) } updating = true; - frame->set_value(Math::stepify(p_pos, _get_editor_step())); + frame->set_value(Math::snapped(p_pos, _get_editor_step())); updating = false; _seek_value_changed(p_pos, !p_drag); @@ -1210,9 +1231,11 @@ void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } else { _play_bw_pressed(); } + accept_event(); } break; case KEY_S: { _stop_pressed(); + accept_event(); } break; case KEY_D: { if (!k->get_shift()) { @@ -1220,6 +1243,7 @@ void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } else { _play_pressed(); } + accept_event(); } break; } } @@ -1370,7 +1394,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { } // Backup current animation state. - AnimatedValuesBackup values_backup = player->backup_animated_values(); + Ref<AnimatedValuesBackup> values_backup = player->backup_animated_values(); float cpos = player->get_current_animation_position(); // Render every past/future step with the capture shader. @@ -1400,7 +1424,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { if (valid) { player->seek(pos, true); get_tree()->flush_transform_notifications(); // Needed for transforms of Node3Ds. - values_backup.update_skeletons(); // Needed for Skeletons (2D & 3D). + values_backup->update_skeletons(); // Needed for Skeletons (2D & 3D). RS::get_singleton()->viewport_set_active(onion.captures[cidx], true); RS::get_singleton()->viewport_set_parent_viewport(root_vp, onion.captures[cidx]); @@ -1420,7 +1444,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { // (Seeking with update=true wouldn't do the trick because the current value of the properties // may not match their value for the current point in the animation). player->seek(cpos, false); - player->restore_animated_values(values_backup); + values_backup->restore(); // Restore state of main editors. if (Node3DEditor::get_singleton()->is_visible()) { @@ -1545,6 +1569,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay delete_dialog->connect("confirmed", callable_mp(this, &AnimationPlayerEditor::_animation_remove_confirmed)); tool_anim = memnew(MenuButton); + tool_anim->set_shortcut_context(this); tool_anim->set_flat(false); tool_anim->set_tooltip(TTR("Animation Tools")); tool_anim->set_text(TTR("Animation")); @@ -1636,7 +1661,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay name_dialog->register_text_enter(name); error_dialog = memnew(ConfirmationDialog); - error_dialog->get_ok()->set_text(TTR("Close")); + error_dialog->get_ok_button()->set_text(TTR("Close")); error_dialog->set_title(TTR("Error!")); add_child(error_dialog); @@ -1644,7 +1669,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay blend_editor.dialog = memnew(AcceptDialog); add_child(blend_editor.dialog); - blend_editor.dialog->get_ok()->set_text(TTR("Close")); + blend_editor.dialog->get_ok_button()->set_text(TTR("Close")); blend_editor.dialog->set_hide_on_ok(true); VBoxContainer *blend_vb = memnew(VBoxContainer); blend_editor.dialog->add_child(blend_vb); diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index e11db1390b..2f6bf55e4c 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -105,6 +105,8 @@ class AnimationPlayerEditor : public VBoxContainer { Label *name_title; UndoRedo *undo_redo; Ref<Texture2D> autoplay_icon; + Ref<Texture2D> reset_icon; + Ref<ImageTexture> autoplay_reset_icon; bool last_active; float timeline_position; @@ -113,9 +115,9 @@ class AnimationPlayerEditor : public VBoxContainer { int current_option; struct BlendEditor { - AcceptDialog *dialog; - Tree *tree; - OptionButton *next; + AcceptDialog *dialog = nullptr; + Tree *tree = nullptr; + OptionButton *next = nullptr; } blend_editor; @@ -131,13 +133,13 @@ class AnimationPlayerEditor : public VBoxContainer { // Onion skinning. struct { // Settings. - bool enabled; - bool past; - bool future; - int steps; - bool differences_only; - bool force_white_modulate; - bool include_gizmos; + bool enabled = false; + bool past = false; + bool future = false; + int steps = 0; + bool differences_only = false; + bool force_white_modulate = false; + bool include_gizmos = false; int get_needed_capture_count() const { // 'Differences only' needs a capture of the present. @@ -145,8 +147,8 @@ class AnimationPlayerEditor : public VBoxContainer { } // Rendering. - int64_t last_frame; - int can_overlay; + int64_t last_frame = 0; + int can_overlay = 0; Size2 capture_size; Vector<RID> captures; Vector<bool> captures_valid; diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 4634d15941..c6d2faf849 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -520,7 +520,7 @@ void AnimationNodeStateMachineEditor::_connection_draw(const Vector2 &p_from, co Transform2D xf; xf.elements[0] = (p_to - p_from).normalized(); - xf.elements[1] = xf.elements[0].tangent(); + xf.elements[1] = xf.elements[0].orthogonal(); xf.elements[2] = (p_from + p_to) * 0.5 - xf.elements[1] * icon->get_height() * 0.5 - xf.elements[0] * icon->get_height() * 0.5; state_machine_draw->draw_set_transform_matrix(xf); @@ -559,6 +559,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<StyleBox> style_selected = get_theme_stylebox("state_machine_selectedframe", "GraphNode"); Ref<Font> font = get_theme_font("title_font", "GraphNode"); + int font_size = get_theme_font_size("title_font_size", "GraphNode"); Color font_color = get_theme_color("title_color", "GraphNode"); Ref<Texture2D> play = get_theme_icon("Play", "EditorIcons"); Ref<Texture2D> auto_play = get_theme_icon("AutoPlay", "EditorIcons"); @@ -612,9 +613,9 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<StyleBox> sb = E->get() == selected_node ? style_selected : style; Size2 s = sb->get_minimum_size(); - int strsize = font->get_string_size(name).width; + int strsize = font->get_string_size(name, font_size).width; s.width += strsize; - s.height += MAX(font->get_height(), play->get_height()); + s.height += MAX(font->get_height(font_size), play->get_height()); s.width += sep + play->get_width(); if (needs_editor) { s.width += sep + edit->get_width(); @@ -689,7 +690,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { tl.width = tr_bidi_offset; if (state_machine->has_transition(tl.to_node, tl.from_node)) { //offset if same exists - Vector2 offset = -(tl.from - tl.to).normalized().tangent() * tr_bidi_offset; + Vector2 offset = -(tl.from - tl.to).normalized().orthogonal() * tr_bidi_offset; tl.from += offset; tl.to += offset; } @@ -741,7 +742,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<AnimationNode> anode = state_machine->get_node(name); bool needs_editor = AnimationTreeEditor::get_singleton()->can_edit(anode); Ref<StyleBox> sb = name == selected_node ? style_selected : style; - int strsize = font->get_string_size(name).width; + int strsize = font->get_string_size(name, font_size).width; NodeRect &nr = node_rects.write[i]; @@ -759,12 +760,12 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { bool onstart = state_machine->get_start_node() == name; if (onstart) { - state_machine_draw->draw_string(font, offset + Vector2(0, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("Start"), font_color); + state_machine_draw->draw_string(font, offset + Vector2(0, -font->get_height(font_size) - 3 * EDSCALE + font->get_ascent(font_size)), TTR("Start"), HALIGN_LEFT, -1, font_size, font_color); } if (state_machine->get_end_node() == name) { - int endofs = nr.node.size.x - font->get_string_size(TTR("End")).x; - state_machine_draw->draw_string(font, offset + Vector2(endofs, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("End"), font_color); + int endofs = nr.node.size.x - font->get_string_size(TTR("End"), font_size).x; + state_machine_draw->draw_string(font, offset + Vector2(endofs, -font->get_height(font_size) - 3 * EDSCALE + font->get_ascent(font_size)), TTR("End"), HALIGN_LEFT, -1, font_size, font_color); } offset.x += sb->get_offset().x; @@ -781,10 +782,10 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { } offset.x += sep + play->get_width(); - nr.name.position = offset + Vector2(0, (h - font->get_height()) / 2).floor(); - nr.name.size = Vector2(strsize, font->get_height()); + nr.name.position = offset + Vector2(0, (h - font->get_height(font_size)) / 2).floor(); + nr.name.size = Vector2(strsize, font->get_height(font_size)); - state_machine_draw->draw_string(font, nr.name.position + Vector2(0, font->get_ascent()), name, font_color); + state_machine_draw->draw_string(font, nr.name.position + Vector2(0, font->get_ascent(font_size)), name, HALIGN_LEFT, -1, font_size, font_color); offset.x += strsize + sep; if (needs_editor) { @@ -880,7 +881,7 @@ void AnimationNodeStateMachineEditor::_update_graph() { } void AnimationNodeStateMachineEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { error_panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); error_label->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); @@ -1290,18 +1291,18 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { 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->set_anchors_and_offsets_preset(PRESET_WIDE); state_machine_play_pos->connect("draw", callable_mp(this, &AnimationNodeStateMachineEditor::_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->set_anchors_and_offsets_preset(PRESET_RIGHT_WIDE); v_scroll->connect("value_changed", callable_mp(this, &AnimationNodeStateMachineEditor::_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->set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE); + h_scroll->set_offset(SIDE_RIGHT, -v_scroll->get_size().x * EDSCALE); h_scroll->connect("value_changed", callable_mp(this, &AnimationNodeStateMachineEditor::_scroll_changed)); error_panel = memnew(PanelContainer); @@ -1327,7 +1328,7 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { add_child(name_edit_popup); name_edit = memnew(LineEdit); name_edit_popup->add_child(name_edit); - name_edit->set_anchors_and_margins_preset(PRESET_WIDE); + name_edit->set_anchors_and_offsets_preset(PRESET_WIDE); name_edit->connect("text_entered", callable_mp(this, &AnimationNodeStateMachineEditor::_name_edited)); name_edit->connect("focus_exited", callable_mp(this, &AnimationNodeStateMachineEditor::_name_edited_focus_out)); diff --git a/editor/plugins/animation_state_machine_editor.h b/editor/plugins/animation_state_machine_editor.h index f78d90bdbf..a969ddd26b 100644 --- a/editor/plugins/animation_state_machine_editor.h +++ b/editor/plugins/animation_state_machine_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -126,10 +126,10 @@ class AnimationNodeStateMachineEditor : public AnimationTreeNodeEditorPlugin { Vector2 to; AnimationNodeStateMachineTransition::SwitchMode mode; StringName advance_condition_name; - bool advance_condition_state; - bool disabled; - bool auto_advance; - float width; + bool advance_condition_state = false; + bool disabled = false; + bool auto_advance = false; + float width = 0; }; Vector<TransitionLine> transition_lines; diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp index 1bbb68d224..c33b06ff32 100644 --- a/editor/plugins/animation_tree_editor_plugin.cpp +++ b/editor/plugins/animation_tree_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -142,9 +142,6 @@ void AnimationTreeEditor::enter_editor(const String &p_path) { edit_path(path); } -void AnimationTreeEditor::_about_to_show_root() { -} - void AnimationTreeEditor::_notification(int p_what) { if (p_what == NOTIFICATION_PROCESS) { ObjectID root; diff --git a/editor/plugins/animation_tree_editor_plugin.h b/editor/plugins/animation_tree_editor_plugin.h index 356a078d99..de3d89ae17 100644 --- a/editor/plugins/animation_tree_editor_plugin.h +++ b/editor/plugins/animation_tree_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -62,7 +62,6 @@ class AnimationTreeEditor : public VBoxContainer { Vector<AnimationTreeNodeEditorPlugin *> editors; void _update_path(); - void _about_to_show_root(); ObjectID current_root; void _path_button_pressed(int p_path); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 5742becf3a..b2d143c416 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -87,10 +87,10 @@ void EditorAssetLibraryItem::_bind_methods() { EditorAssetLibraryItem::EditorAssetLibraryItem() { Ref<StyleBoxEmpty> border; border.instance(); - border->set_default_margin(MARGIN_LEFT, 5 * EDSCALE); - border->set_default_margin(MARGIN_RIGHT, 5 * EDSCALE); - border->set_default_margin(MARGIN_BOTTOM, 5 * EDSCALE); - border->set_default_margin(MARGIN_TOP, 5 * EDSCALE); + border->set_default_margin(SIDE_LEFT, 5 * EDSCALE); + border->set_default_margin(SIDE_RIGHT, 5 * EDSCALE); + border->set_default_margin(SIDE_BOTTOM, 5 * EDSCALE); + border->set_default_margin(SIDE_TOP, 5 * EDSCALE); add_theme_style_override("panel", border); HBoxContainer *hb = memnew(HBoxContainer); @@ -295,8 +295,8 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { preview_hb->set_v_size_flags(Control::SIZE_EXPAND_FILL); previews->add_child(preview_hb); - get_ok()->set_text(TTR("Download")); - get_cancel()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Download")); + get_cancel_button()->set_text(TTR("Close")); } /////////////////////////////////////////////////////////////////////////////////// @@ -580,7 +580,7 @@ void EditorAssetLibrary::_notification(int p_what) { } } -void EditorAssetLibrary::_unhandled_input(const Ref<InputEvent> &p_event) { +void EditorAssetLibrary::_unhandled_key_input(const Ref<InputEvent> &p_event) { const Ref<InputEventKey> key = p_event; if (key.is_valid() && key->is_pressed()) { @@ -702,7 +702,7 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PackedB } } - if (!image->empty()) { + if (!image->is_empty()) { switch (image_queue[p_queue_id].image_type) { case IMAGE_QUEUE_ICON: @@ -1151,7 +1151,7 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const asset_bottom_page = _make_pages(page, pages, page_len, total_items, result.size()); library_vb->add_child(asset_bottom_page); - if (result.empty()) { + if (result.is_empty()) { if (filter->get_text() != String()) { library_error->set_text( vformat(TTR("No results for \"%s\"."), filter->get_text())); @@ -1187,6 +1187,10 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const _request_image(item->get_instance_id(), r["icon_url"], IMAGE_QUEUE_ICON, 0); } } + + if (!result.is_empty()) { + library_scroll->set_v_scroll(0); + } } break; case REQUESTING_ASSET: { Dictionary r = d; @@ -1281,7 +1285,7 @@ void EditorAssetLibrary::disable_community_support() { } void EditorAssetLibrary::_bind_methods() { - ClassDB::bind_method("_unhandled_input", &EditorAssetLibrary::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &EditorAssetLibrary::_unhandled_key_input); ADD_SIGNAL(MethodInfo("install_asset", PropertyInfo(Variant::STRING, "zip_path"), PropertyInfo(Variant::STRING, "name"))); } @@ -1396,10 +1400,10 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { Ref<StyleBoxEmpty> border2; border2.instance(); - border2->set_default_margin(MARGIN_LEFT, 15 * EDSCALE); - border2->set_default_margin(MARGIN_RIGHT, 35 * EDSCALE); - border2->set_default_margin(MARGIN_BOTTOM, 15 * EDSCALE); - border2->set_default_margin(MARGIN_TOP, 15 * EDSCALE); + border2->set_default_margin(SIDE_LEFT, 15 * EDSCALE); + border2->set_default_margin(SIDE_RIGHT, 35 * EDSCALE); + border2->set_default_margin(SIDE_BOTTOM, 15 * EDSCALE); + border2->set_default_margin(SIDE_TOP, 15 * EDSCALE); PanelContainer *library_vb_border = memnew(PanelContainer); library_scroll->add_child(library_vb_border); @@ -1454,7 +1458,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { description = nullptr; set_process(true); - set_process_unhandled_input(true); + set_process_unhandled_key_input(true); // Global shortcuts since there is no main element to be focused. downloads_scroll = memnew(ScrollContainer); downloads_scroll->set_enable_h_scroll(true); @@ -1488,8 +1492,8 @@ AssetLibraryEditorPlugin::AssetLibraryEditorPlugin(EditorNode *p_node) { editor = p_node; addon_library = memnew(EditorAssetLibrary); addon_library->set_v_size_flags(Control::SIZE_EXPAND_FILL); - editor->get_viewport()->add_child(addon_library); - addon_library->set_anchors_and_margins_preset(Control::PRESET_WIDE); + editor->get_main_control()->add_child(addon_library); + addon_library->set_anchors_and_offsets_preset(Control::PRESET_WIDE); addon_library->hide(); } diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index f7ad53f87b..0509145673 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -89,10 +89,10 @@ class EditorAssetLibraryItemDescription : public ConfirmationDialog { PanelContainer *previews_bg; struct Preview { - int id; - bool is_video; + int id = 0; + bool is_video = false; String video_link; - Button *button; + Button *button = nullptr; Ref<Texture2D> image; }; @@ -234,12 +234,12 @@ class EditorAssetLibrary : public PanelContainer { }; struct ImageQueue { - bool active; - int queue_id; - ImageType image_type; - int image_index; + bool active = false; + int queue_id = 0; + ImageType image_type = ImageType::IMAGE_QUEUE_ICON; + int image_index = 0; String image_url; - HTTPRequest *request; + HTTPRequest *request = nullptr; ObjectID target; }; @@ -298,7 +298,7 @@ class EditorAssetLibrary : public PanelContainer { protected: static void _bind_methods(); void _notification(int p_what); - void _unhandled_input(const Ref<InputEvent> &p_event); + void _unhandled_key_input(const Ref<InputEvent> &p_event); public: void disable_community_support(); diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index e6f6b6f2e0..1765c99572 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -202,7 +202,7 @@ AudioStreamEditor::AudioStreamEditor() { add_child(_player); VBoxContainer *vbox = memnew(VBoxContainer); - vbox->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_MINSIZE, 0); + vbox->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_MINSIZE, 0); add_child(vbox); _preview = memnew(ColorRect); @@ -211,7 +211,7 @@ AudioStreamEditor::AudioStreamEditor() { vbox->add_child(_preview); _indicator = memnew(Control); - _indicator->set_anchors_and_margins_preset(PRESET_WIDE); + _indicator->set_anchors_and_offsets_preset(PRESET_WIDE); _indicator->connect("draw", callable_mp(this, &AudioStreamEditor::_draw_indicator)); _indicator->connect("gui_input", callable_mp(this, &AudioStreamEditor::_on_input_indicator)); _preview->add_child(_indicator); @@ -236,11 +236,13 @@ AudioStreamEditor::AudioStreamEditor() { _current_label->set_align(Label::ALIGN_RIGHT); _current_label->set_h_size_flags(SIZE_EXPAND_FILL); _current_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + _current_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); _current_label->set_modulate(Color(1, 1, 1, 0.5)); hbox->add_child(_current_label); _duration_label = memnew(Label); _duration_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + _duration_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); hbox->add_child(_duration_label); } diff --git a/editor/plugins/audio_stream_editor_plugin.h b/editor/plugins/audio_stream_editor_plugin.h index 5936b91fa1..f27add7229 100644 --- a/editor/plugins/audio_stream_editor_plugin.h +++ b/editor/plugins/audio_stream_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/baked_lightmap_editor_plugin.cpp b/editor/plugins/baked_lightmap_editor_plugin.cpp index e5d4e4a761..470b61bf40 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.cpp +++ b/editor/plugins/baked_lightmap_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/baked_lightmap_editor_plugin.h b/editor/plugins/baked_lightmap_editor_plugin.h index b4c7c07562..d291c377d9 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.h +++ b/editor/plugins/baked_lightmap_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/camera_3d_editor_plugin.cpp b/editor/plugins/camera_3d_editor_plugin.cpp index 48f9f208a5..8583e95b25 100644 --- a/editor/plugins/camera_3d_editor_plugin.cpp +++ b/editor/plugins/camera_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -69,12 +69,12 @@ Camera3DEditor::Camera3DEditor() { preview->set_text(TTR("Preview")); preview->set_toggle_mode(true); - preview->set_anchor(MARGIN_LEFT, Control::ANCHOR_END); - preview->set_anchor(MARGIN_RIGHT, Control::ANCHOR_END); - preview->set_margin(MARGIN_LEFT, -60); - preview->set_margin(MARGIN_RIGHT, 0); - preview->set_margin(MARGIN_TOP, 0); - preview->set_margin(MARGIN_BOTTOM, 10); + preview->set_anchor(SIDE_LEFT, Control::ANCHOR_END); + preview->set_anchor(SIDE_RIGHT, Control::ANCHOR_END); + preview->set_offset(SIDE_LEFT, -60); + preview->set_offset(SIDE_RIGHT, 0); + preview->set_offset(SIDE_TOP, 0); + preview->set_offset(SIDE_BOTTOM, 10); preview->connect("pressed", callable_mp(this, &Camera3DEditor::_pressed)); } @@ -98,14 +98,14 @@ void Camera3DEditorPlugin::make_visible(bool p_visible) { Camera3DEditorPlugin::Camera3DEditorPlugin(EditorNode *p_node) { editor = p_node; /* camera_editor = memnew( CameraEditor ); - editor->get_viewport()->add_child(camera_editor); - - camera_editor->set_anchor(MARGIN_LEFT,Control::ANCHOR_END); - camera_editor->set_anchor(MARGIN_RIGHT,Control::ANCHOR_END); - camera_editor->set_margin(MARGIN_LEFT,60); - camera_editor->set_margin(MARGIN_RIGHT,0); - camera_editor->set_margin(MARGIN_TOP,0); - camera_editor->set_margin(MARGIN_BOTTOM,10); + editor->get_main_control()->add_child(camera_editor); + + camera_editor->set_anchor(SIDE_LEFT,Control::ANCHOR_END); + camera_editor->set_anchor(SIDE_RIGHT,Control::ANCHOR_END); + camera_editor->set_offset(SIDE_LEFT,60); + camera_editor->set_offset(SIDE_RIGHT,0); + camera_editor->set_offset(SIDE_TOP,0); + camera_editor->set_offset(SIDE_BOTTOM,10); camera_editor->hide(); diff --git a/editor/plugins/camera_3d_editor_plugin.h b/editor/plugins/camera_3d_editor_plugin.h index 023f1866df..e087dd22a8 100644 --- a/editor/plugins/camera_3d_editor_plugin.h +++ b/editor/plugins/camera_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index e1f2d2c045..498f9d5c19 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -52,7 +52,6 @@ #include "scene/gui/subviewport_container.h" #include "scene/main/canvas_layer.h" #include "scene/main/window.h" -#include "scene/resources/dynamic_font.h" #include "scene/resources/packed_scene.h" // Min and Max are power of two in order to play nicely with successive increment. @@ -367,8 +366,8 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig // Self anchors if ((is_snap_active && snap_node_anchors && (p_modes & SNAP_NODE_ANCHORS)) || (p_forced_modes & SNAP_NODE_ANCHORS)) { if (const Control *c = Object::cast_to<Control>(p_self_canvas_item)) { - Point2 begin = p_self_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(MARGIN_LEFT), c->get_anchor(MARGIN_TOP)))); - Point2 end = p_self_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(MARGIN_RIGHT), c->get_anchor(MARGIN_BOTTOM)))); + Point2 begin = p_self_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(SIDE_LEFT), c->get_anchor(SIDE_TOP)))); + Point2 end = p_self_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(SIDE_RIGHT), c->get_anchor(SIDE_BOTTOM)))); _snap_if_closer_point(p_target, output, snap_target, begin, SNAP_TARGET_SELF_ANCHORS, rotation); _snap_if_closer_point(p_target, output, snap_target, end, SNAP_TARGET_SELF_ANCHORS, rotation); } @@ -445,8 +444,8 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig } } Point2 grid_output; - grid_output.x = Math::stepify(p_target.x - offset.x, grid_step.x * Math::pow(2.0, grid_step_multiplier)) + offset.x; - grid_output.y = Math::stepify(p_target.y - offset.y, grid_step.y * Math::pow(2.0, grid_step_multiplier)) + offset.y; + grid_output.x = Math::snapped(p_target.x - offset.x, grid_step.x * Math::pow(2.0, grid_step_multiplier)) + offset.x; + grid_output.y = Math::snapped(p_target.y - offset.y, grid_step.y * Math::pow(2.0, grid_step_multiplier)) + offset.y; _snap_if_closer_point(p_target, output, snap_target, grid_output, SNAP_TARGET_GRID, 0.0, -1.0); } @@ -463,9 +462,9 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig float CanvasItemEditor::snap_angle(float p_target, float p_start) const { if (((smart_snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL)) && snap_rotation_step != 0) { if (snap_relative) { - return Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset + (p_start - (int)(p_start / snap_rotation_step) * snap_rotation_step); + return Math::snapped(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset + (p_start - (int)(p_start / snap_rotation_step) * snap_rotation_step); } else { - return Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset; + return Math::snapped(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset; } } else { return p_target; @@ -479,22 +478,24 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { return; } - if (k->get_keycode() == KEY_CONTROL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT) { - viewport->update(); - } - - if (k->is_pressed() && !k->get_control() && !k->is_echo()) { - if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { - // Multiply the grid size - grid_step_multiplier = MIN(grid_step_multiplier + 1, 12); + if (k.is_valid()) { + if (k->get_keycode() == KEY_CONTROL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT) { viewport->update(); - } else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { - // Divide the grid size - Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1); - if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) { - grid_step_multiplier--; + } + + if (k->is_pressed() && !k->get_control() && !k->is_echo()) { + if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { + // Multiply the grid size + grid_step_multiplier = MIN(grid_step_multiplier + 1, 12); + viewport->update(); + } else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { + // Divide the grid size + Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1); + if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) { + grid_step_multiplier--; + } + viewport->update(); } - viewport->update(); } } } @@ -517,7 +518,7 @@ void CanvasItemEditor::_keying_changed() { } Rect2 CanvasItemEditor::_get_encompassing_rect_from_list(List<CanvasItem *> p_list) { - ERR_FAIL_COND_V(p_list.empty(), Rect2()); + ERR_FAIL_COND_V(p_list.is_empty(), Rect2()); // Handles the first element CanvasItem *canvas_item = p_list.front()->get(); @@ -726,7 +727,7 @@ bool CanvasItemEditor::_get_bone_shape(Vector<Vector2> *shape, Vector<Vector2> * } Vector2 rel = to - from; - Vector2 relt = rel.tangent().normalized() * bone_width; + Vector2 relt = rel.orthogonal().normalized() * bone_width; Vector2 reln = rel.normalized(); Vector2 reltn = relt.normalized(); @@ -857,7 +858,11 @@ Vector2 CanvasItemEditor::_anchor_to_position(const Control *p_control, Vector2 Transform2D parent_transform = p_control->get_transform().affine_inverse(); Rect2 parent_rect = p_control->get_parent_anchorable_rect(); - return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + if (p_control->is_layout_rtl()) { + return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x - parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + } else { + return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + } } Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 position) { @@ -866,7 +871,11 @@ Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 Rect2 parent_rect = p_control->get_parent_anchorable_rect(); Vector2 output = Vector2(); - output.x = (parent_rect.size.x == 0) ? 0.0 : (p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + if (p_control->is_layout_rtl()) { + output.x = (parent_rect.size.x == 0) ? 0.0 : (parent_rect.size.x - p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + } else { + output.x = (parent_rect.size.x == 0) ? 0.0 : (p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + } output.y = (parent_rect.size.y == 0) ? 0.0 : (p_control->get_transform().xform(position).y - parent_rect.position.y) / parent_rect.size.y; return output; } @@ -954,9 +963,24 @@ void CanvasItemEditor::_restore_canvas_item_state(List<CanvasItem *> p_canvas_it } void CanvasItemEditor::_commit_canvas_item_state(List<CanvasItem *> p_canvas_items, String action_name, bool commit_bones) { - undo_redo->create_action(action_name); + List<CanvasItem *> modified_canvas_items; for (List<CanvasItem *>::Element *E = p_canvas_items.front(); E; E = E->next()) { CanvasItem *canvas_item = E->get(); + Dictionary old_state = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item)->undo_state; + Dictionary new_state = canvas_item->_edit_get_state(); + + if (old_state.hash() != new_state.hash()) { + modified_canvas_items.push_back(canvas_item); + } + } + + if (modified_canvas_items.is_empty()) { + return; + } + + undo_redo->create_action(action_name); + for (List<CanvasItem *>::Element *E = modified_canvas_items.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); undo_redo->add_do_method(canvas_item, "_edit_set_state", canvas_item->_edit_get_state()); undo_redo->add_undo_method(canvas_item, "_edit_set_state", se->undo_state); @@ -1138,7 +1162,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve if (dragged_guide_index >= 0) { vguides.remove(dragged_guide_index); undo_redo->create_action(TTR("Remove Vertical Guide")); - if (vguides.empty()) { + if (vguides.is_empty()) { undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "remove_meta", "_edit_vertical_guides_"); } else { undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", vguides); @@ -1171,7 +1195,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve if (dragged_guide_index >= 0) { hguides.remove(dragged_guide_index); undo_redo->create_action(TTR("Remove Horizontal Guide")); - if (hguides.empty()) { + if (hguides.is_empty()) { undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "remove_meta", "_edit_horizontal_guides_"); } else { undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", hguides); @@ -1513,7 +1537,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { // Start rotation if (drag_type == DRAG_NONE) { if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { - if ((b->get_control() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { + if ((b->get_command() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { List<CanvasItem *> selection = _get_edited_canvas_items(); // Remove not movable nodes @@ -1619,16 +1643,20 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { Control *control = Object::cast_to<Control>(selection[0]); if (control && _is_node_movable(control)) { Vector2 anchor_pos[4]; - anchor_pos[0] = Vector2(control->get_anchor(MARGIN_LEFT), control->get_anchor(MARGIN_TOP)); - anchor_pos[1] = Vector2(control->get_anchor(MARGIN_RIGHT), control->get_anchor(MARGIN_TOP)); - anchor_pos[2] = Vector2(control->get_anchor(MARGIN_RIGHT), control->get_anchor(MARGIN_BOTTOM)); - anchor_pos[3] = Vector2(control->get_anchor(MARGIN_LEFT), control->get_anchor(MARGIN_BOTTOM)); + anchor_pos[0] = Vector2(control->get_anchor(SIDE_LEFT), control->get_anchor(SIDE_TOP)); + anchor_pos[1] = Vector2(control->get_anchor(SIDE_RIGHT), control->get_anchor(SIDE_TOP)); + anchor_pos[2] = Vector2(control->get_anchor(SIDE_RIGHT), control->get_anchor(SIDE_BOTTOM)); + anchor_pos[3] = Vector2(control->get_anchor(SIDE_LEFT), control->get_anchor(SIDE_BOTTOM)); Rect2 anchor_rects[4]; for (int i = 0; i < 4; i++) { anchor_pos[i] = (transform * control->get_global_transform_with_canvas()).xform(_anchor_to_position(control, anchor_pos[i])); anchor_rects[i] = Rect2(anchor_pos[i], anchor_handle->get_size()); - anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 0 || i == 3), float(i <= 1)); + if (control->is_layout_rtl()) { + anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 1 || i == 2), float(i <= 1)); + } else { + anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 0 || i == 3), float(i <= 1)); + } } DragType dragger[] = { @@ -1668,8 +1696,8 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { Transform2D xform = control->get_global_transform_with_canvas().affine_inverse(); Point2 previous_anchor; - previous_anchor.x = (drag_type == DRAG_ANCHOR_TOP_LEFT || drag_type == DRAG_ANCHOR_BOTTOM_LEFT) ? control->get_anchor(MARGIN_LEFT) : control->get_anchor(MARGIN_RIGHT); - previous_anchor.y = (drag_type == DRAG_ANCHOR_TOP_LEFT || drag_type == DRAG_ANCHOR_TOP_RIGHT) ? control->get_anchor(MARGIN_TOP) : control->get_anchor(MARGIN_BOTTOM); + previous_anchor.x = (drag_type == DRAG_ANCHOR_TOP_LEFT || drag_type == DRAG_ANCHOR_BOTTOM_LEFT) ? control->get_anchor(SIDE_LEFT) : control->get_anchor(SIDE_RIGHT); + previous_anchor.y = (drag_type == DRAG_ANCHOR_TOP_LEFT || drag_type == DRAG_ANCHOR_TOP_RIGHT) ? control->get_anchor(SIDE_TOP) : control->get_anchor(SIDE_BOTTOM); previous_anchor = xform.affine_inverse().xform(_anchor_to_position(control, previous_anchor)); Vector2 new_anchor = xform.xform(snap_point(previous_anchor + (drag_to - drag_from), SNAP_GRID | SNAP_OTHER_NODES, SNAP_NODE_PARENT | SNAP_NODE_SIDES | SNAP_NODE_CENTER, control)); @@ -1682,44 +1710,44 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { switch (drag_type) { case DRAG_ANCHOR_TOP_LEFT: if (!use_single_axis || !use_y) { - control->set_anchor(MARGIN_LEFT, new_anchor.x, false, false); + control->set_anchor(SIDE_LEFT, new_anchor.x, false, false); } if (!use_single_axis || use_y) { - control->set_anchor(MARGIN_TOP, new_anchor.y, false, false); + control->set_anchor(SIDE_TOP, new_anchor.y, false, false); } break; case DRAG_ANCHOR_TOP_RIGHT: if (!use_single_axis || !use_y) { - control->set_anchor(MARGIN_RIGHT, new_anchor.x, false, false); + control->set_anchor(SIDE_RIGHT, new_anchor.x, false, false); } if (!use_single_axis || use_y) { - control->set_anchor(MARGIN_TOP, new_anchor.y, false, false); + control->set_anchor(SIDE_TOP, new_anchor.y, false, false); } break; case DRAG_ANCHOR_BOTTOM_RIGHT: if (!use_single_axis || !use_y) { - control->set_anchor(MARGIN_RIGHT, new_anchor.x, false, false); + control->set_anchor(SIDE_RIGHT, new_anchor.x, false, false); } if (!use_single_axis || use_y) { - control->set_anchor(MARGIN_BOTTOM, new_anchor.y, false, false); + control->set_anchor(SIDE_BOTTOM, new_anchor.y, false, false); } break; case DRAG_ANCHOR_BOTTOM_LEFT: if (!use_single_axis || !use_y) { - control->set_anchor(MARGIN_LEFT, new_anchor.x, false, false); + control->set_anchor(SIDE_LEFT, new_anchor.x, false, false); } if (!use_single_axis || use_y) { - control->set_anchor(MARGIN_BOTTOM, new_anchor.y, false, false); + control->set_anchor(SIDE_BOTTOM, new_anchor.y, false, false); } break; case DRAG_ANCHOR_ALL: if (!use_single_axis || !use_y) { - control->set_anchor(MARGIN_LEFT, new_anchor.x, false, true); - control->set_anchor(MARGIN_RIGHT, new_anchor.x, false, true); + control->set_anchor(SIDE_LEFT, new_anchor.x, false, true); + control->set_anchor(SIDE_RIGHT, new_anchor.x, false, true); } if (!use_single_axis || use_y) { - control->set_anchor(MARGIN_TOP, new_anchor.y, false, true); - control->set_anchor(MARGIN_BOTTOM, new_anchor.y, false, true); + control->set_anchor(SIDE_TOP, new_anchor.y, false, true); + control->set_anchor(SIDE_BOTTOM, new_anchor.y, false, true); } break; default: @@ -1795,7 +1823,7 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { } ofs = (endpoints[i] + endpoints[next]) / 2; - ofs += (endpoints[next] - endpoints[i]).tangent().normalized() * (select_handle->get_size().width / 2); + ofs += (endpoints[next] - endpoints[i]).orthogonal().normalized() * (select_handle->get_size().width / 2); if (ofs.distance_to(b->get_position()) < radius) { resize_drag = dragger[i * 2 + 1]; } @@ -1918,8 +1946,8 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { vformat( TTR("Scale Node2D \"%s\" to (%s, %s)"), drag_selection[0]->get_name(), - Math::stepify(drag_selection[0]->_edit_get_scale().x, 0.01), - Math::stepify(drag_selection[0]->_edit_get_scale().y, 0.01)), + Math::snapped(drag_selection[0]->_edit_get_scale().x, 0.01), + Math::snapped(drag_selection[0]->_edit_get_scale().y, 0.01)), true); } else { // Extends from Control. @@ -2070,8 +2098,8 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { drag_selection, vformat(TTR("Scale CanvasItem \"%s\" to (%s, %s)"), drag_selection[0]->get_name(), - Math::stepify(drag_selection[0]->_edit_get_scale().x, 0.01), - Math::stepify(drag_selection[0]->_edit_get_scale().y, 0.01)), + Math::snapped(drag_selection[0]->_edit_get_scale().x, 0.01), + Math::snapped(drag_selection[0]->_edit_get_scale().y, 0.01)), true); } if (key_auto_insert_button->is_pressed()) { @@ -2343,12 +2371,12 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { (!Input::get_singleton()->is_key_pressed(KEY_DOWN)) && (!Input::get_singleton()->is_key_pressed(KEY_LEFT)) && (!Input::get_singleton()->is_key_pressed(KEY_RIGHT))) { - if (drag_selection.size() != 1) { + if (drag_selection.size() > 1) { _commit_canvas_item_state( drag_selection, vformat(TTR("Move %d CanvasItems"), drag_selection.size()), true); - } else { + } else if (drag_selection.size() == 1) { _commit_canvas_item_state( drag_selection, vformat(TTR("Move CanvasItem \"%s\" to (%d, %d)"), @@ -2387,7 +2415,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { _select_click_on_item(item, click, b->get_shift()); return true; - } else if (!selection_results.empty()) { + } else if (!selection_results.is_empty()) { // Sorts items according the their z-index selection_results.sort(); @@ -2450,13 +2478,13 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { // Retrieve the bones Vector<_SelectResult> selection = Vector<_SelectResult>(); _get_bones_at_pos(click, selection); - if (!selection.empty()) { + if (!selection.is_empty()) { canvas_item = selection[0].item; } else { // Retrieve the canvas items selection = Vector<_SelectResult>(); _get_canvas_items_at_pos(click, selection); - if (!selection.empty()) { + if (!selection.is_empty()) { canvas_item = selection[0].item; } } @@ -2767,37 +2795,38 @@ void CanvasItemEditor::_update_cursor() { viewport->set_default_cursor_shape(c); } -void CanvasItemEditor::_draw_text_at_position(Point2 p_position, String p_string, Margin p_side) { +void CanvasItemEditor::_draw_text_at_position(Point2 p_position, String p_string, Side p_side) { Color color = get_theme_color("font_color", "Editor"); color.a = 0.8; Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(p_string); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(p_string, font_size); switch (p_side) { - case MARGIN_LEFT: + case SIDE_LEFT: p_position += Vector2(-text_size.x - 5, text_size.y / 2); break; - case MARGIN_TOP: + case SIDE_TOP: p_position += Vector2(-text_size.x / 2, -5); break; - case MARGIN_RIGHT: + case SIDE_RIGHT: p_position += Vector2(5, text_size.y / 2); break; - case MARGIN_BOTTOM: + case SIDE_BOTTOM: p_position += Vector2(-text_size.x / 2, text_size.y + 5); break; } - viewport->draw_string(font, p_position, p_string, color); + viewport->draw_string(font, p_position, p_string, HALIGN_LEFT, -1, font_size, color); } -void CanvasItemEditor::_draw_margin_at_position(int p_value, Point2 p_position, Margin p_side) { - String str = vformat("%d px", p_value); +void CanvasItemEditor::_draw_margin_at_position(int p_value, Point2 p_position, Side p_side) { + String str = TS->format_number(vformat("%d " + TTR("px"), p_value)); if (p_value != 0) { _draw_text_at_position(p_position, str, p_side); } } -void CanvasItemEditor::_draw_percentage_at_position(float p_value, Point2 p_position, Margin p_side) { - String str = vformat("%.1f %%", p_value * 100.0); +void CanvasItemEditor::_draw_percentage_at_position(float p_value, Point2 p_position, Side p_side) { + String str = TS->format_number(vformat("%.1f ", p_value * 100.0)) + TS->percent_sign(); if (p_value != 0) { _draw_text_at_position(p_position, str, p_side); } @@ -2841,17 +2870,19 @@ void CanvasItemEditor::_draw_guides() { Color text_color = get_theme_color("font_color", "Editor"); text_color.a = 0.5; if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE) { - String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).x)); + String str = TS->format_number(vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).x))); Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(str); - viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, text_color); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(str, font_size); + viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, HALIGN_LEFT, -1, font_size, text_color); viewport->draw_line(Point2(dragged_guide_pos.x, 0), Point2(dragged_guide_pos.x, viewport->get_size().y), guide_color, Math::round(EDSCALE)); } if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_H_GUIDE) { - String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).y)); + String str = TS->format_number(vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).y))); Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(str); - viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, text_color); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(str, font_size); + viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, HALIGN_LEFT, -1, font_size, text_color); viewport->draw_line(Point2(0, dragged_guide_pos.y), Point2(viewport->get_size().x, dragged_guide_pos.y), guide_color, Math::round(EDSCALE)); } } @@ -2876,6 +2907,7 @@ void CanvasItemEditor::_draw_rulers() { Color font_color = get_theme_color("font_color", "Editor"); font_color.a = 0.8; Ref<Font> font = get_theme_font("rulers", "EditorFonts"); + int font_size = get_theme_font_size("rulers_size", "EditorFonts"); // The rule transform Transform2D ruler_transform = Transform2D(); @@ -2918,11 +2950,11 @@ void CanvasItemEditor::_draw_rulers() { // Draw top ruler viewport->draw_rect(Rect2(Point2(RULER_WIDTH, 0), Size2(viewport->get_size().x, RULER_WIDTH)), bg_color); for (int i = Math::ceil(first.x); i < last.x; i++) { - Point2 position = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(Point2(i, 0)); + Point2 position = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(Point2(i, 0)).round(); if (i % (major_subdivision * minor_subdivision) == 0) { viewport->draw_line(Point2(position.x, 0), Point2(position.x, RULER_WIDTH), graduation_color, Math::round(EDSCALE)); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(i, 0)).x; - viewport->draw_string(font, Point2(position.x + 2, font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(position.x + 2, font->get_height(font_size)), TS->format_number(vformat(((int)val == val) ? "%d" : "%.1f", val)), HALIGN_LEFT, -1, font_size, font_color); } else { if (i % minor_subdivision == 0) { viewport->draw_line(Point2(position.x, RULER_WIDTH * 0.33), Point2(position.x, RULER_WIDTH), graduation_color, Math::round(EDSCALE)); @@ -2935,14 +2967,14 @@ void CanvasItemEditor::_draw_rulers() { // Draw left ruler viewport->draw_rect(Rect2(Point2(0, RULER_WIDTH), Size2(RULER_WIDTH, viewport->get_size().y)), bg_color); for (int i = Math::ceil(first.y); i < last.y; i++) { - Point2 position = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(Point2(0, i)); + Point2 position = (transform * ruler_transform * major_subdivide * minor_subdivide).xform(Point2(0, i)).round(); if (i % (major_subdivision * minor_subdivision) == 0) { viewport->draw_line(Point2(0, position.y), Point2(RULER_WIDTH, position.y), graduation_color, Math::round(EDSCALE)); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(0, i)).y; - Transform2D text_xform = Transform2D(-Math_PI / 2.0, Point2(font->get_height(), position.y - 2)); + Transform2D text_xform = Transform2D(-Math_PI / 2.0, Point2(font->get_height(font_size), position.y - 2)); viewport->draw_set_transform_matrix(viewport->get_transform() * text_xform); - viewport->draw_string(font, Point2(), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(), TS->format_number(vformat(((int)val == val) ? "%d" : "%.1f", val)), HALIGN_LEFT, -1, font_size, font_color); viewport->draw_set_transform_matrix(viewport->get_transform()); } else { @@ -3054,17 +3086,21 @@ void CanvasItemEditor::_draw_ruler_tool() { } Ref<Font> font = get_theme_font("bold", "EditorFonts"); + int font_size = get_theme_font_size("bold_size", "EditorFonts"); Color font_color = get_theme_color("font_color", "Editor"); Color font_secondary_color = font_color; - font_secondary_color.a = 0.5; - float text_height = font->get_height(); + font_secondary_color.set_v(font_secondary_color.get_v() > 0.5 ? 0.7 : 0.3); + Color outline_color = font_color.inverted(); + float text_height = font->get_height(font_size); + + const float outline_size = 2; const float text_width = 76; const float angle_text_width = 54; Point2 text_pos = (begin + end) / 2 - Vector2(text_width / 2, text_height / 2); text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); text_pos.y = CLAMP(text_pos.y, text_height * 1.5, viewport->get_rect().size.y - text_height * 1.5); - viewport->draw_string(font, text_pos, vformat("%.2f px", length_vector.length()), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.length())), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); if (draw_secondary_lines) { const float horizontal_angle_rad = atan2(length_vector.y, length_vector.x); @@ -3074,16 +3110,16 @@ void CanvasItemEditor::_draw_ruler_tool() { Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); - viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.y), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.y)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); Point2 v_angle_text_pos = Point2(); v_angle_text_pos.x = CLAMP(begin.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); v_angle_text_pos.y = begin.y < end.y ? MIN(text_pos2.y - 2 * text_height, begin.y - text_height * 0.5) : MAX(text_pos2.y + text_height * 3, begin.y + text_height * 1.5); - viewport->draw_string(font, v_angle_text_pos, vformat("%d deg", vertical_angle), font_secondary_color); + viewport->draw_string(font, v_angle_text_pos, TS->format_number(vformat("%d " + TTR("deg"), vertical_angle)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y - text_height / 2) : MAX(text_pos.y + text_height * 2, end.y - text_height / 2); - viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.x), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.x)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); Point2 h_angle_text_pos = Point2(); h_angle_text_pos.x = CLAMP(end.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); @@ -3100,7 +3136,7 @@ void CanvasItemEditor::_draw_ruler_tool() { h_angle_text_pos.y = MIN(text_pos.y - height_multiplier * text_height, MIN(end.y - text_height * 0.5, text_pos2.y - height_multiplier * text_height)); } } - viewport->draw_string(font, h_angle_text_pos, vformat("%d deg", horizontal_angle), font_secondary_color); + viewport->draw_string(font, h_angle_text_pos, TS->format_number(vformat("%d " + TTR("deg"), horizontal_angle)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); // Angle arcs int arc_point_count = 8; @@ -3137,17 +3173,17 @@ void CanvasItemEditor::_draw_ruler_tool() { text_pos.y = CLAMP(text_pos.y, text_height * 2.5, viewport->get_rect().size.y - text_height / 2); if (draw_secondary_lines) { - viewport->draw_string(font, text_pos, vformat("%.2f units", (length_vector / grid_step).length()), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%.2f " + TTR("units"), (length_vector / grid_step).length())), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.y / grid_step.y)), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%d " + TTR("units"), roundf(length_vector.y / grid_step.y))), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y + text_height / 2) : MAX(text_pos.y + text_height * 2, end.y + text_height / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.x / grid_step.x)), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%d " + TTR("units"), roundf(length_vector.x / grid_step.x))), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); } else { - viewport->draw_string(font, text_pos, vformat("%d units", roundf((length_vector / grid_step).length())), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%d " + TTR("units"), roundf((length_vector / grid_step).length()))), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); } } } else { @@ -3164,10 +3200,10 @@ void CanvasItemEditor::_draw_control_anchors(Control *control) { if (tool == TOOL_SELECT && !Object::cast_to<Container>(control->get_parent())) { // Compute the anchors float anchors_values[4]; - anchors_values[0] = control->get_anchor(MARGIN_LEFT); - anchors_values[1] = control->get_anchor(MARGIN_TOP); - anchors_values[2] = control->get_anchor(MARGIN_RIGHT); - anchors_values[3] = control->get_anchor(MARGIN_BOTTOM); + anchors_values[0] = control->get_anchor(SIDE_LEFT); + anchors_values[1] = control->get_anchor(SIDE_TOP); + anchors_values[2] = control->get_anchor(SIDE_RIGHT); + anchors_values[3] = control->get_anchor(SIDE_BOTTOM); Vector2 anchors_pos[4]; for (int i = 0; i < 4; i++) { @@ -3177,10 +3213,17 @@ void CanvasItemEditor::_draw_control_anchors(Control *control) { // Draw the anchors handles Rect2 anchor_rects[4]; - anchor_rects[0] = Rect2(anchors_pos[0] - anchor_handle->get_size(), anchor_handle->get_size()); - anchor_rects[1] = Rect2(anchors_pos[1] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); - anchor_rects[2] = Rect2(anchors_pos[2], -anchor_handle->get_size()); - anchor_rects[3] = Rect2(anchors_pos[3] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + if (control->is_layout_rtl()) { + anchor_rects[0] = Rect2(anchors_pos[0] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); + anchor_rects[1] = Rect2(anchors_pos[1] - anchor_handle->get_size(), anchor_handle->get_size()); + anchor_rects[2] = Rect2(anchors_pos[2] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + anchor_rects[3] = Rect2(anchors_pos[3], -anchor_handle->get_size()); + } else { + anchor_rects[0] = Rect2(anchors_pos[0] - anchor_handle->get_size(), anchor_handle->get_size()); + anchor_rects[1] = Rect2(anchors_pos[1] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); + anchor_rects[2] = Rect2(anchors_pos[2], -anchor_handle->get_size()); + anchor_rects[3] = Rect2(anchors_pos[3] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + } for (int i = 0; i < 4; i++) { anchor_handle->draw_rect(ci, anchor_rects[i]); @@ -3196,10 +3239,10 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { // Compute the anchors float anchors_values[4]; - anchors_values[0] = control->get_anchor(MARGIN_LEFT); - anchors_values[1] = control->get_anchor(MARGIN_TOP); - anchors_values[2] = control->get_anchor(MARGIN_RIGHT); - anchors_values[3] = control->get_anchor(MARGIN_BOTTOM); + anchors_values[0] = control->get_anchor(SIDE_LEFT); + anchors_values[1] = control->get_anchor(SIDE_TOP); + anchors_values[2] = control->get_anchor(SIDE_RIGHT); + anchors_values[3] = control->get_anchor(SIDE_BOTTOM); Vector2 anchors[4]; Vector2 anchors_pos[4]; @@ -3252,19 +3295,19 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { float percent_val; percent_val = anchors_values[(dragged_anchor + 2) % 4] - anchors_values[dragged_anchor]; percent_val = (dragged_anchor >= 2) ? -percent_val : percent_val; - _draw_percentage_at_position(percent_val, (anchors_pos[dragged_anchor] + anchors_pos[(dragged_anchor + 1) % 4]) / 2, (Margin)((dragged_anchor + 1) % 4)); + _draw_percentage_at_position(percent_val, (anchors_pos[dragged_anchor] + anchors_pos[(dragged_anchor + 1) % 4]) / 2, (Side)((dragged_anchor + 1) % 4)); percent_val = anchors_values[(dragged_anchor + 3) % 4] - anchors_values[(dragged_anchor + 1) % 4]; percent_val = ((dragged_anchor + 1) % 4 >= 2) ? -percent_val : percent_val; - _draw_percentage_at_position(percent_val, (anchors_pos[dragged_anchor] + anchors_pos[(dragged_anchor + 3) % 4]) / 2, (Margin)(dragged_anchor)); + _draw_percentage_at_position(percent_val, (anchors_pos[dragged_anchor] + anchors_pos[(dragged_anchor + 3) % 4]) / 2, (Side)(dragged_anchor)); percent_val = anchors_values[(dragged_anchor + 1) % 4]; percent_val = ((dragged_anchor + 1) % 4 >= 2) ? ANCHOR_END - percent_val : percent_val; - _draw_percentage_at_position(percent_val, (line_starts[dragged_anchor] + anchors_pos[dragged_anchor]) / 2, (Margin)(dragged_anchor)); + _draw_percentage_at_position(percent_val, (line_starts[dragged_anchor] + anchors_pos[dragged_anchor]) / 2, (Side)(dragged_anchor)); percent_val = anchors_values[dragged_anchor]; percent_val = (dragged_anchor >= 2) ? ANCHOR_END - percent_val : percent_val; - _draw_percentage_at_position(percent_val, (line_ends[(dragged_anchor + 1) % 4] + anchors_pos[dragged_anchor]) / 2, (Margin)((dragged_anchor + 1) % 4)); + _draw_percentage_at_position(percent_val, (line_ends[(dragged_anchor + 1) % 4] + anchors_pos[dragged_anchor]) / 2, (Side)((dragged_anchor + 1) % 4)); } // Draw the margin values and the node width/height when dragging control side @@ -3274,22 +3317,22 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { Rect2 parent_rect = control->get_parent_anchorable_rect(); - node_pos_in_parent[0] = control->get_anchor(MARGIN_LEFT) * parent_rect.size.width + control->get_margin(MARGIN_LEFT) + parent_rect.position.x; - node_pos_in_parent[1] = control->get_anchor(MARGIN_TOP) * parent_rect.size.height + control->get_margin(MARGIN_TOP) + parent_rect.position.y; - node_pos_in_parent[2] = control->get_anchor(MARGIN_RIGHT) * parent_rect.size.width + control->get_margin(MARGIN_RIGHT) + parent_rect.position.x; - node_pos_in_parent[3] = control->get_anchor(MARGIN_BOTTOM) * parent_rect.size.height + control->get_margin(MARGIN_BOTTOM) + parent_rect.position.y; + node_pos_in_parent[0] = control->get_anchor(SIDE_LEFT) * parent_rect.size.width + control->get_offset(SIDE_LEFT) + parent_rect.position.x; + node_pos_in_parent[1] = control->get_anchor(SIDE_TOP) * parent_rect.size.height + control->get_offset(SIDE_TOP) + parent_rect.position.y; + node_pos_in_parent[2] = control->get_anchor(SIDE_RIGHT) * parent_rect.size.width + control->get_offset(SIDE_RIGHT) + parent_rect.position.x; + node_pos_in_parent[3] = control->get_anchor(SIDE_BOTTOM) * parent_rect.size.height + control->get_offset(SIDE_BOTTOM) + parent_rect.position.y; Point2 start, end; switch (drag_type) { case DRAG_LEFT: 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); + _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), SIDE_BOTTOM); [[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); - _draw_margin_at_position(control->get_margin(MARGIN_LEFT), parent_transform.xform((start + end) / 2), MARGIN_TOP); + end = start - Vector2(control->get_offset(SIDE_LEFT), 0); + _draw_margin_at_position(control->get_offset(SIDE_LEFT), parent_transform.xform((start + end) / 2), SIDE_TOP); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, Math::round(EDSCALE)); break; default: @@ -3299,12 +3342,12 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_RIGHT: 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); + _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), SIDE_BOTTOM); [[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); - _draw_margin_at_position(control->get_margin(MARGIN_RIGHT), parent_transform.xform((start + end) / 2), MARGIN_BOTTOM); + end = start - Vector2(control->get_offset(SIDE_RIGHT), 0); + _draw_margin_at_position(control->get_offset(SIDE_RIGHT), parent_transform.xform((start + end) / 2), SIDE_BOTTOM); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, Math::round(EDSCALE)); break; default: @@ -3314,12 +3357,12 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_TOP: 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); + _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), SIDE_RIGHT); [[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)); - _draw_margin_at_position(control->get_margin(MARGIN_TOP), parent_transform.xform((start + end) / 2), MARGIN_LEFT); + end = start - Vector2(0, control->get_offset(SIDE_TOP)); + _draw_margin_at_position(control->get_offset(SIDE_TOP), parent_transform.xform((start + end) / 2), SIDE_LEFT); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, Math::round(EDSCALE)); break; default: @@ -3329,12 +3372,12 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_BOTTOM: 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); + _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)), SIDE_RIGHT); [[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)); - _draw_margin_at_position(control->get_margin(MARGIN_BOTTOM), parent_transform.xform((start + end) / 2), MARGIN_RIGHT); + end = start - Vector2(0, control->get_offset(SIDE_BOTTOM)); + _draw_margin_at_position(control->get_offset(SIDE_BOTTOM), parent_transform.xform((start + end) / 2), SIDE_RIGHT); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, Math::round(EDSCALE)); break; default: @@ -3389,7 +3432,6 @@ void CanvasItemEditor::_draw_selection() { if (canvas_item->_edit_use_rect()) { Vector2 pre_drag_endpoints[4] = { - pre_drag_xform.xform(se->pre_drag_rect.position), pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(se->pre_drag_rect.size.x, 0)), pre_drag_xform.xform(se->pre_drag_rect.position + se->pre_drag_rect.size), @@ -3471,7 +3513,7 @@ void CanvasItemEditor::_draw_selection() { select_handle->draw(ci, (endpoints[i] + ofs - (select_handle->get_size() / 2)).floor()); ofs = (endpoints[i] + endpoints[next]) / 2; - ofs += (endpoints[next] - endpoints[i]).tangent().normalized() * (select_handle->get_size().width / 2); + ofs += (endpoints[next] - endpoints[i]).orthogonal().normalized() * (select_handle->get_size().width / 2); select_handle->draw(ci, (ofs - (select_handle->get_size() / 2)).floor()); } @@ -3745,6 +3787,7 @@ void CanvasItemEditor::_draw_hover() { String node_name = hovering_results[i].name; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Size2 node_name_size = font->get_string_size(node_name); Size2 item_size = Size2(node_icon->get_size().x + 4 + node_name_size.x, MAX(node_icon->get_size().y, node_name_size.y - 3)); @@ -3762,7 +3805,7 @@ void CanvasItemEditor::_draw_hover() { viewport->draw_texture(node_icon, pos, Color(1.0, 1.0, 1.0, 0.5)); // Draw name - viewport->draw_string(font, pos + Point2(node_icon->get_size().x + 4, item_size.y - 3), node_name, Color(1.0, 1.0, 1.0, 0.5)); + viewport->draw_string(font, pos + Point2(node_icon->get_size().x + 4, item_size.y - 3), node_name, HALIGN_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); } } @@ -3888,7 +3931,7 @@ void CanvasItemEditor::_draw_viewport() { bool all_locked = true; bool all_group = true; List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { all_locked = false; all_group = false; } else { @@ -3907,13 +3950,13 @@ void CanvasItemEditor::_draw_viewport() { } lock_button->set_visible(!all_locked); - lock_button->set_disabled(selection.empty()); + lock_button->set_disabled(selection.is_empty()); unlock_button->set_visible(all_locked); group_button->set_visible(!all_group); - group_button->set_disabled(selection.empty()); + group_button->set_disabled(selection.is_empty()); ungroup_button->set_visible(all_group); - info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); _draw_grid(); _draw_ruler_tool(); @@ -3928,11 +3971,11 @@ void CanvasItemEditor::_draw_viewport() { RenderingServer::get_singleton()->canvas_item_add_set_transform(ci, Transform2D()); EditorPluginList *over_plugin_list = editor->get_editor_plugins_over(); - if (!over_plugin_list->empty()) { + if (!over_plugin_list->is_empty()) { over_plugin_list->forward_canvas_draw_over_viewport(viewport); } EditorPluginList *force_over_plugin_list = editor->get_editor_plugins_force_over(); - if (!force_over_plugin_list->empty()) { + if (!force_over_plugin_list->is_empty()) { force_over_plugin_list->forward_canvas_force_draw_over_viewport(viewport); } @@ -3991,17 +4034,17 @@ void CanvasItemEditor::_notification(int p_what) { Vector2 pivot; pivot = control->get_pivot_offset(); - anchors[MARGIN_LEFT] = control->get_anchor(MARGIN_LEFT); - anchors[MARGIN_RIGHT] = control->get_anchor(MARGIN_RIGHT); - anchors[MARGIN_TOP] = control->get_anchor(MARGIN_TOP); - anchors[MARGIN_BOTTOM] = control->get_anchor(MARGIN_BOTTOM); + anchors[SIDE_LEFT] = control->get_anchor(SIDE_LEFT); + anchors[SIDE_RIGHT] = control->get_anchor(SIDE_RIGHT); + anchors[SIDE_TOP] = control->get_anchor(SIDE_TOP); + anchors[SIDE_BOTTOM] = control->get_anchor(SIDE_BOTTOM); - if (pivot != se->prev_pivot || anchors[MARGIN_LEFT] != se->prev_anchors[MARGIN_LEFT] || anchors[MARGIN_RIGHT] != se->prev_anchors[MARGIN_RIGHT] || anchors[MARGIN_TOP] != se->prev_anchors[MARGIN_TOP] || anchors[MARGIN_BOTTOM] != se->prev_anchors[MARGIN_BOTTOM]) { + if (pivot != se->prev_pivot || anchors[SIDE_LEFT] != se->prev_anchors[SIDE_LEFT] || anchors[SIDE_RIGHT] != se->prev_anchors[SIDE_RIGHT] || anchors[SIDE_TOP] != se->prev_anchors[SIDE_TOP] || anchors[SIDE_BOTTOM] != se->prev_anchors[SIDE_BOTTOM]) { se->prev_pivot = pivot; - se->prev_anchors[MARGIN_LEFT] = anchors[MARGIN_LEFT]; - se->prev_anchors[MARGIN_RIGHT] = anchors[MARGIN_RIGHT]; - se->prev_anchors[MARGIN_TOP] = anchors[MARGIN_TOP]; - se->prev_anchors[MARGIN_BOTTOM] = anchors[MARGIN_BOTTOM]; + se->prev_anchors[SIDE_LEFT] = anchors[SIDE_LEFT]; + se->prev_anchors[SIDE_RIGHT] = anchors[SIDE_RIGHT]; + se->prev_anchors[SIDE_TOP] = anchors[SIDE_TOP]; + se->prev_anchors[SIDE_BOTTOM] = anchors[SIDE_BOTTOM]; viewport->update(); } nb_control++; @@ -4072,8 +4115,8 @@ void CanvasItemEditor::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { select_sb->set_texture(get_theme_icon("EditorRect2D", "EditorIcons")); for (int i = 0; i < 4; i++) { - select_sb->set_margin_size(Margin(i), 4); - select_sb->set_default_margin(Margin(i), 4); + select_sb->set_margin_size(Side(i), 4); + select_sb->set_default_margin(Side(i), 4); } AnimationPlayerEditor::singleton->get_track_editor()->connect("visibility_changed", callable_mp(this, &CanvasItemEditor::_keying_changed)); @@ -4130,26 +4173,26 @@ void CanvasItemEditor::_notification(int p_what) { PopupMenu *p = presets_menu->get_popup(); p->clear(); - p->add_icon_item(get_theme_icon("ControlAlignTopLeft", "EditorIcons"), TTR("Top Left"), ANCHORS_AND_MARGINS_PRESET_TOP_LEFT); - p->add_icon_item(get_theme_icon("ControlAlignTopRight", "EditorIcons"), TTR("Top Right"), ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT); - p->add_icon_item(get_theme_icon("ControlAlignBottomRight", "EditorIcons"), TTR("Bottom Right"), ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT); - p->add_icon_item(get_theme_icon("ControlAlignBottomLeft", "EditorIcons"), TTR("Bottom Left"), ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT); + p->add_icon_item(get_theme_icon("ControlAlignTopLeft", "EditorIcons"), TTR("Top Left"), ANCHORS_AND_OFFSETS_PRESET_TOP_LEFT); + p->add_icon_item(get_theme_icon("ControlAlignTopRight", "EditorIcons"), TTR("Top Right"), ANCHORS_AND_OFFSETS_PRESET_TOP_RIGHT); + p->add_icon_item(get_theme_icon("ControlAlignBottomRight", "EditorIcons"), TTR("Bottom Right"), ANCHORS_AND_OFFSETS_PRESET_BOTTOM_RIGHT); + p->add_icon_item(get_theme_icon("ControlAlignBottomLeft", "EditorIcons"), TTR("Bottom Left"), ANCHORS_AND_OFFSETS_PRESET_BOTTOM_LEFT); p->add_separator(); - p->add_icon_item(get_theme_icon("ControlAlignLeftCenter", "EditorIcons"), TTR("Center Left"), ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT); - p->add_icon_item(get_theme_icon("ControlAlignTopCenter", "EditorIcons"), TTR("Center Top"), ANCHORS_AND_MARGINS_PRESET_CENTER_TOP); - p->add_icon_item(get_theme_icon("ControlAlignRightCenter", "EditorIcons"), TTR("Center Right"), ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT); - p->add_icon_item(get_theme_icon("ControlAlignBottomCenter", "EditorIcons"), TTR("Center Bottom"), ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM); - p->add_icon_item(get_theme_icon("ControlAlignCenter", "EditorIcons"), TTR("Center"), ANCHORS_AND_MARGINS_PRESET_CENTER); + p->add_icon_item(get_theme_icon("ControlAlignLeftCenter", "EditorIcons"), TTR("Center Left"), ANCHORS_AND_OFFSETS_PRESET_CENTER_LEFT); + p->add_icon_item(get_theme_icon("ControlAlignTopCenter", "EditorIcons"), TTR("Center Top"), ANCHORS_AND_OFFSETS_PRESET_CENTER_TOP); + p->add_icon_item(get_theme_icon("ControlAlignRightCenter", "EditorIcons"), TTR("Center Right"), ANCHORS_AND_OFFSETS_PRESET_CENTER_RIGHT); + p->add_icon_item(get_theme_icon("ControlAlignBottomCenter", "EditorIcons"), TTR("Center Bottom"), ANCHORS_AND_OFFSETS_PRESET_CENTER_BOTTOM); + p->add_icon_item(get_theme_icon("ControlAlignCenter", "EditorIcons"), TTR("Center"), ANCHORS_AND_OFFSETS_PRESET_CENTER); p->add_separator(); - p->add_icon_item(get_theme_icon("ControlAlignLeftWide", "EditorIcons"), TTR("Left Wide"), ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE); - p->add_icon_item(get_theme_icon("ControlAlignTopWide", "EditorIcons"), TTR("Top Wide"), ANCHORS_AND_MARGINS_PRESET_TOP_WIDE); - p->add_icon_item(get_theme_icon("ControlAlignRightWide", "EditorIcons"), TTR("Right Wide"), ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE); - p->add_icon_item(get_theme_icon("ControlAlignBottomWide", "EditorIcons"), TTR("Bottom Wide"), ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE); - p->add_icon_item(get_theme_icon("ControlVcenterWide", "EditorIcons"), TTR("VCenter Wide"), ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE); - p->add_icon_item(get_theme_icon("ControlHcenterWide", "EditorIcons"), TTR("HCenter Wide"), ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE); + p->add_icon_item(get_theme_icon("ControlAlignLeftWide", "EditorIcons"), TTR("Left Wide"), ANCHORS_AND_OFFSETS_PRESET_LEFT_WIDE); + p->add_icon_item(get_theme_icon("ControlAlignTopWide", "EditorIcons"), TTR("Top Wide"), ANCHORS_AND_OFFSETS_PRESET_TOP_WIDE); + p->add_icon_item(get_theme_icon("ControlAlignRightWide", "EditorIcons"), TTR("Right Wide"), ANCHORS_AND_OFFSETS_PRESET_RIGHT_WIDE); + p->add_icon_item(get_theme_icon("ControlAlignBottomWide", "EditorIcons"), TTR("Bottom Wide"), ANCHORS_AND_OFFSETS_PRESET_BOTTOM_WIDE); + p->add_icon_item(get_theme_icon("ControlVcenterWide", "EditorIcons"), TTR("VCenter Wide"), ANCHORS_AND_OFFSETS_PRESET_VCENTER_WIDE); + p->add_icon_item(get_theme_icon("ControlHcenterWide", "EditorIcons"), TTR("HCenter Wide"), ANCHORS_AND_OFFSETS_PRESET_HCENTER_WIDE); p->add_separator(); - p->add_icon_item(get_theme_icon("ControlAlignWide", "EditorIcons"), TTR("Full Rect"), ANCHORS_AND_MARGINS_PRESET_WIDE); - p->add_icon_item(get_theme_icon("Anchor", "EditorIcons"), TTR("Keep Ratio"), ANCHORS_AND_MARGINS_PRESET_KEEP_RATIO); + p->add_icon_item(get_theme_icon("ControlAlignWide", "EditorIcons"), TTR("Full Rect"), ANCHORS_AND_OFFSETS_PRESET_WIDE); + p->add_icon_item(get_theme_icon("Anchor", "EditorIcons"), TTR("Keep Ratio"), ANCHORS_AND_OFFSETS_PRESET_KEEP_RATIO); p->add_separator(); p->add_submenu_item(TTR("Anchors only"), "Anchors"); p->set_item_icon(21, get_theme_icon("Anchor", "EditorIcons")); @@ -4343,8 +4386,13 @@ void CanvasItemEditor::_update_scrollbars() { } // Move and resize the scrollbars, avoiding overlap. - v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0)); - v_scroll->set_end(Point2(size.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + if (is_layout_rtl()) { + v_scroll->set_begin(Point2(0, (show_rulers) ? RULER_WIDTH : 0)); + v_scroll->set_end(Point2(vmin.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + } else { + v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0)); + v_scroll->set_end(Point2(size.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + } h_scroll->set_begin(Point2((show_rulers) ? RULER_WIDTH : 0, size.height - hmin.height)); h_scroll->set_end(Point2(size.width - (v_scroll->is_visible() ? vmin.width : 0), size.height)); @@ -4363,7 +4411,7 @@ void CanvasItemEditor::_popup_warning_depop(Control *p_control) { timer->queue_delete(); p_control->hide(); popup_temporarily_timers.erase(p_control); - info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); } void CanvasItemEditor::_popup_warning_temporarily(Control *p_control, const float p_duration) { @@ -4381,7 +4429,7 @@ void CanvasItemEditor::_popup_warning_temporarily(Control *p_control, const floa timer->start(p_duration); p_control->show(); - info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); } void CanvasItemEditor::_update_scroll(float) { @@ -4394,10 +4442,10 @@ void CanvasItemEditor::_update_scroll(float) { viewport->update(); } -void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_preset) { +void CanvasItemEditor::_set_anchors_and_offsets_preset(Control::LayoutPreset p_preset) { List<Node *> selection = editor_selection->get_selected_node_list(); - undo_redo->create_action(TTR("Change Anchors and Margins")); + undo_redo->create_action(TTR("Change Anchors and Offsets")); for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Control *control = Object::cast_to<Control>(E->get()); @@ -4413,7 +4461,7 @@ void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_p case PRESET_CENTER_RIGHT: case PRESET_CENTER_BOTTOM: case PRESET_CENTER: - undo_redo->add_do_method(control, "set_margins_preset", p_preset, Control::PRESET_MODE_KEEP_SIZE); + undo_redo->add_do_method(control, "set_offsets_preset", p_preset, Control::PRESET_MODE_KEEP_SIZE); break; case PRESET_LEFT_WIDE: case PRESET_TOP_WIDE: @@ -4422,7 +4470,7 @@ void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_p case PRESET_VCENTER_WIDE: case PRESET_HCENTER_WIDE: case PRESET_WIDE: - undo_redo->add_do_method(control, "set_margins_preset", p_preset, Control::PRESET_MODE_MINSIZE); + undo_redo->add_do_method(control, "set_offsets_preset", p_preset, Control::PRESET_MODE_MINSIZE); break; } undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state()); @@ -4435,20 +4483,20 @@ void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_p anchor_mode_button->set_pressed(anchors_mode); } -void CanvasItemEditor::_set_anchors_and_margins_to_keep_ratio() { +void CanvasItemEditor::_set_anchors_and_offsets_to_keep_ratio() { List<Node *> selection = editor_selection->get_selected_node_list(); - undo_redo->create_action(TTR("Change Anchors and Margins")); + undo_redo->create_action(TTR("Change Anchors and Offsets")); for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Control *control = Object::cast_to<Control>(E->get()); if (control) { Point2 top_left_anchor = _position_to_anchor(control, Point2()); Point2 bottom_right_anchor = _position_to_anchor(control, control->get_size()); - undo_redo->add_do_method(control, "set_anchor", MARGIN_LEFT, top_left_anchor.x, false, true); - undo_redo->add_do_method(control, "set_anchor", MARGIN_RIGHT, bottom_right_anchor.x, false, true); - undo_redo->add_do_method(control, "set_anchor", MARGIN_TOP, top_left_anchor.y, false, true); - undo_redo->add_do_method(control, "set_anchor", MARGIN_BOTTOM, bottom_right_anchor.y, false, true); + undo_redo->add_do_method(control, "set_anchor", SIDE_LEFT, top_left_anchor.x, false, true); + undo_redo->add_do_method(control, "set_anchor", SIDE_RIGHT, bottom_right_anchor.x, false, true); + undo_redo->add_do_method(control, "set_anchor", SIDE_TOP, top_left_anchor.y, false, true); + undo_redo->add_do_method(control, "set_anchor", SIDE_BOTTOM, bottom_right_anchor.y, false, true); undo_redo->add_do_method(control, "set_meta", "_edit_use_anchors_", true); bool use_anchors = control->has_meta("_edit_use_anchors_") && control->get_meta("_edit_use_anchors_"); @@ -4541,9 +4589,9 @@ void CanvasItemEditor::_update_zoom_label() { // even if their display doesn't have a particularly low DPI. if (zoom >= 10) { // Don't show a decimal when the zoom level is higher than 1000 %. - zoom_text = rtos(Math::round((zoom / MAX(1, EDSCALE)) * 100)) + " %"; + zoom_text = TS->format_number(rtos(Math::round((zoom / MAX(1, EDSCALE)) * 100))) + " " + TS->percent_sign(); } else { - zoom_text = rtos(Math::stepify((zoom / MAX(1, EDSCALE)) * 100, 0.1)) + " %"; + zoom_text = TS->format_number(rtos(Math::snapped((zoom / MAX(1, EDSCALE)) * 100, 0.1))) + " " + TS->percent_sign(); } zoom_reset->set_text(zoom_text); @@ -4901,56 +4949,56 @@ void CanvasItemEditor::_popup_callback(int p_op) { undo_redo->add_undo_method(viewport, "update", Variant()); undo_redo->commit_action(); } break; - case ANCHORS_AND_MARGINS_PRESET_TOP_LEFT: { - _set_anchors_and_margins_preset(PRESET_TOP_LEFT); + case ANCHORS_AND_OFFSETS_PRESET_TOP_LEFT: { + _set_anchors_and_offsets_preset(PRESET_TOP_LEFT); } break; - case ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT: { - _set_anchors_and_margins_preset(PRESET_TOP_RIGHT); + case ANCHORS_AND_OFFSETS_PRESET_TOP_RIGHT: { + _set_anchors_and_offsets_preset(PRESET_TOP_RIGHT); } break; - case ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT: { - _set_anchors_and_margins_preset(PRESET_BOTTOM_LEFT); + case ANCHORS_AND_OFFSETS_PRESET_BOTTOM_LEFT: { + _set_anchors_and_offsets_preset(PRESET_BOTTOM_LEFT); } break; - case ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT: { - _set_anchors_and_margins_preset(PRESET_BOTTOM_RIGHT); + case ANCHORS_AND_OFFSETS_PRESET_BOTTOM_RIGHT: { + _set_anchors_and_offsets_preset(PRESET_BOTTOM_RIGHT); } break; - case ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT: { - _set_anchors_and_margins_preset(PRESET_CENTER_LEFT); + case ANCHORS_AND_OFFSETS_PRESET_CENTER_LEFT: { + _set_anchors_and_offsets_preset(PRESET_CENTER_LEFT); } break; - case ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT: { - _set_anchors_and_margins_preset(PRESET_CENTER_RIGHT); + case ANCHORS_AND_OFFSETS_PRESET_CENTER_RIGHT: { + _set_anchors_and_offsets_preset(PRESET_CENTER_RIGHT); } break; - case ANCHORS_AND_MARGINS_PRESET_CENTER_TOP: { - _set_anchors_and_margins_preset(PRESET_CENTER_TOP); + case ANCHORS_AND_OFFSETS_PRESET_CENTER_TOP: { + _set_anchors_and_offsets_preset(PRESET_CENTER_TOP); } break; - case ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM: { - _set_anchors_and_margins_preset(PRESET_CENTER_BOTTOM); + case ANCHORS_AND_OFFSETS_PRESET_CENTER_BOTTOM: { + _set_anchors_and_offsets_preset(PRESET_CENTER_BOTTOM); } break; - case ANCHORS_AND_MARGINS_PRESET_CENTER: { - _set_anchors_and_margins_preset(PRESET_CENTER); + case ANCHORS_AND_OFFSETS_PRESET_CENTER: { + _set_anchors_and_offsets_preset(PRESET_CENTER); } break; - case ANCHORS_AND_MARGINS_PRESET_TOP_WIDE: { - _set_anchors_and_margins_preset(PRESET_TOP_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_TOP_WIDE: { + _set_anchors_and_offsets_preset(PRESET_TOP_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE: { - _set_anchors_and_margins_preset(PRESET_LEFT_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_LEFT_WIDE: { + _set_anchors_and_offsets_preset(PRESET_LEFT_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE: { - _set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_RIGHT_WIDE: { + _set_anchors_and_offsets_preset(PRESET_RIGHT_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE: { - _set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_BOTTOM_WIDE: { + _set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE: { - _set_anchors_and_margins_preset(PRESET_VCENTER_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_VCENTER_WIDE: { + _set_anchors_and_offsets_preset(PRESET_VCENTER_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE: { - _set_anchors_and_margins_preset(PRESET_HCENTER_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_HCENTER_WIDE: { + _set_anchors_and_offsets_preset(PRESET_HCENTER_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_WIDE: { - _set_anchors_and_margins_preset(Control::PRESET_WIDE); + case ANCHORS_AND_OFFSETS_PRESET_WIDE: { + _set_anchors_and_offsets_preset(Control::PRESET_WIDE); } break; - case ANCHORS_AND_MARGINS_PRESET_KEEP_RATIO: { - _set_anchors_and_margins_to_keep_ratio(); + case ANCHORS_AND_OFFSETS_PRESET_KEEP_RATIO: { + _set_anchors_and_offsets_to_keep_ratio(); } break; case ANCHORS_PRESET_TOP_LEFT: { @@ -5539,12 +5587,12 @@ void CanvasItemEditor::add_control_to_info_overlay(Control *p_control) { p_control->set_h_size_flags(p_control->get_h_size_flags() & ~Control::SIZE_EXPAND_FILL); info_overlay->add_child(p_control); - info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); } void CanvasItemEditor::remove_control_from_info_overlay(Control *p_control) { info_overlay->remove_child(p_control); - info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + info_overlay->set_offset(SIDE_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); } void CanvasItemEditor::add_control_to_menu_panel(Control *p_control) { @@ -5641,7 +5689,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb = memnew(HBoxContainer); add_child(hb); - hb->set_anchors_and_margins_preset(Control::PRESET_WIDE); + hb->set_anchors_and_offsets_preset(Control::PRESET_WIDE); bottom_split = memnew(VSplitContainer); add_child(bottom_split); @@ -5662,7 +5710,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { SubViewportContainer *scene_tree = memnew(SubViewportContainer); viewport_scrollable->add_child(scene_tree); scene_tree->set_stretch(true); - scene_tree->set_anchors_and_margins_preset(Control::PRESET_WIDE); + scene_tree->set_anchors_and_offsets_preset(Control::PRESET_WIDE); scene_tree->add_child(p_editor->get_scene_root()); controls_vb = memnew(VBoxContainer); @@ -5676,16 +5724,16 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport = memnew(CanvasItemEditorViewport(p_editor, this)); viewport_scrollable->add_child(viewport); viewport->set_mouse_filter(MOUSE_FILTER_PASS); - viewport->set_anchors_and_margins_preset(Control::PRESET_WIDE); + viewport->set_anchors_and_offsets_preset(Control::PRESET_WIDE); viewport->set_clip_contents(true); viewport->set_focus_mode(FOCUS_ALL); viewport->connect("draw", callable_mp(this, &CanvasItemEditor::_draw_viewport)); viewport->connect("gui_input", callable_mp(this, &CanvasItemEditor::_gui_input_viewport)); info_overlay = memnew(VBoxContainer); - info_overlay->set_anchors_and_margins_preset(Control::PRESET_BOTTOM_LEFT); - info_overlay->set_margin(MARGIN_LEFT, 10); - info_overlay->set_margin(MARGIN_BOTTOM, -15); + info_overlay->set_anchors_and_offsets_preset(Control::PRESET_BOTTOM_LEFT); + info_overlay->set_offset(SIDE_LEFT, 10); + info_overlay->set_offset(SIDE_BOTTOM, -15); info_overlay->set_v_grow_direction(Control::GROW_DIRECTION_BEGIN); info_overlay->add_theme_constant_override("separation", 10); viewport_scrollable->add_child(info_overlay); @@ -5704,6 +5752,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent.")); warning_child_of_container->add_theme_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_theme_color("warning_color", "Editor")); warning_child_of_container->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + warning_child_of_container->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); add_control_to_info_overlay(warning_child_of_container); h_scroll = memnew(HScrollBar); @@ -5723,18 +5772,18 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_hb->add_child(zoom_minus); zoom_minus->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(Button); zoom_reset->set_flat(true); zoom_hb->add_child(zoom_reset); - Ref<DynamicFont> font = zoom_reset->get_theme_font("font")->duplicate(false); - font->set_outline_size(1); - font->set_outline_color(Color(0, 0, 0)); - zoom_reset->add_theme_font_override("font", font); + zoom_reset->add_theme_constant_override("outline_size", 1); + zoom_reset->add_theme_color_override("font_outline_modulate", Color(0, 0, 0)); zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1)); zoom_reset->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_reset->set_text_align(Button::TextAlign::ALIGN_CENTER); // Prevent the button's size from changing when the text size changes @@ -5745,6 +5794,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_hb->add_child(zoom_plus); zoom_plus->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); zoom_plus->set_focus_mode(FOCUS_NONE); updating_scroll = false; @@ -5756,6 +5806,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { select_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); 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")); hb->add_child(memnew(VSeparator)); @@ -5766,6 +5817,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { move_button->set_toggle_mode(true); move_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); move_button->set_tooltip(TTR("Move Mode")); rotate_button = memnew(Button); @@ -5774,6 +5826,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { rotate_button->set_toggle_mode(true); rotate_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); rotate_button->set_tooltip(TTR("Rotate Mode")); scale_button = memnew(Button); @@ -5782,6 +5835,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { scale_button->set_toggle_mode(true); scale_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); scale_button->set_tooltip(TTR("Scale Mode")); hb->add_child(memnew(VSeparator)); @@ -5806,6 +5860,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { pan_button->set_toggle_mode(true); pan_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_PAN)); pan_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/pan_mode", TTR("Pan Mode"), KEY_G)); + pan_button->set_shortcut_context(this); pan_button->set_tooltip(TTR("Pan Mode")); ruler_button = memnew(Button); @@ -5814,6 +5869,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { ruler_button->set_toggle_mode(true); ruler_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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_shortcut_context(this); ruler_button->set_tooltip(TTR("Ruler Mode")); hb->add_child(memnew(VSeparator)); @@ -5825,6 +5881,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { smart_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_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)); + smart_snap_button->set_shortcut_context(this); grid_snap_button = memnew(Button); grid_snap_button->set_flat(true); @@ -5833,8 +5890,10 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { grid_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_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)); + grid_snap_button->set_shortcut_context(this); snap_config_menu = memnew(MenuButton); + snap_config_menu->set_shortcut_context(this); hb->add_child(snap_config_menu); snap_config_menu->set_h_size_flags(SIZE_SHRINK_END); snap_config_menu->set_tooltip(TTR("Snapping Options")); @@ -5894,6 +5953,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(memnew(VSeparator)); skeleton_menu = memnew(MenuButton); + skeleton_menu->set_shortcut_context(this); hb->add_child(skeleton_menu); skeleton_menu->set_tooltip(TTR("Skeleton Options")); skeleton_menu->set_switch_on_hover(true); @@ -5922,6 +5982,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(memnew(VSeparator)); view_menu = memnew(MenuButton); + view_menu->set_shortcut_context(this); view_menu->set_text(TTR("View")); hb->add_child(view_menu); view_menu->get_popup()->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_popup_callback)); @@ -5929,7 +5990,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = view_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_G), SHOW_GRID); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_MASK_CTRL | KEY_G), SHOW_GRID); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES); @@ -5946,6 +6007,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/preview_canvas_scale", TTR("Preview Canvas Scale"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_P), PREVIEW_CANVAS_SCALE); presets_menu = memnew(MenuButton); + presets_menu->set_shortcut_context(this); presets_menu->set_text(TTR("Layout")); hb->add_child(presets_menu); presets_menu->hide(); @@ -5979,6 +6041,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_loc_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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); key_rot_button->set_toggle_mode(true); key_rot_button->set_flat(true); @@ -5987,6 +6050,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_rot_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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); @@ -5994,23 +6058,27 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_scale_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_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", callable_mp(this, &CanvasItemEditor::_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)); + key_insert_button->set_shortcut_context(this); animation_hb->add_child(key_insert_button); + key_auto_insert_button = memnew(Button); key_auto_insert_button->set_flat(true); key_auto_insert_button->set_toggle_mode(true); key_auto_insert_button->set_focus_mode(FOCUS_NONE); - //key_auto_insert_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_KEY)); key_auto_insert_button->set_tooltip(TTR("Auto insert keys when objects are translated, rotated or scaled (based on mask).\nKeys are only added to existing tracks, no new tracks will be created.\nKeys must be inserted manually for the first time.")); key_auto_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_auto_insert_key", TTR("Auto Insert Key"))); + key_auto_insert_button->set_shortcut_context(this); animation_hb->add_child(key_auto_insert_button); animation_menu = memnew(MenuButton); + animation_menu->set_shortcut_context(this); animation_menu->set_tooltip(TTR("Animation Key and Pose Options")); animation_hb->add_child(animation_menu); animation_menu->get_popup()->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_popup_callback)); @@ -6086,8 +6154,8 @@ CanvasItemEditorPlugin::CanvasItemEditorPlugin(EditorNode *p_node) { editor = p_node; canvas_item_editor = memnew(CanvasItemEditor(editor)); canvas_item_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); - editor->get_viewport()->add_child(canvas_item_editor); - canvas_item_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); + editor->get_main_control()->add_child(canvas_item_editor); + canvas_item_editor->set_anchors_and_offsets_preset(Control::PRESET_WIDE); canvas_item_editor->hide(); } diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 859e80befe..24149a57b0 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -119,23 +119,23 @@ private: UNLOCK_SELECTED, GROUP_SELECTED, UNGROUP_SELECTED, - ANCHORS_AND_MARGINS_PRESET_TOP_LEFT, - ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT, - ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT, - ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT, - ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT, - ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT, - ANCHORS_AND_MARGINS_PRESET_CENTER_TOP, - ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM, - ANCHORS_AND_MARGINS_PRESET_CENTER, - ANCHORS_AND_MARGINS_PRESET_TOP_WIDE, - ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE, - ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE, - ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE, - ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE, - ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE, - ANCHORS_AND_MARGINS_PRESET_WIDE, - ANCHORS_AND_MARGINS_PRESET_KEEP_RATIO, + ANCHORS_AND_OFFSETS_PRESET_TOP_LEFT, + ANCHORS_AND_OFFSETS_PRESET_TOP_RIGHT, + ANCHORS_AND_OFFSETS_PRESET_BOTTOM_LEFT, + ANCHORS_AND_OFFSETS_PRESET_BOTTOM_RIGHT, + ANCHORS_AND_OFFSETS_PRESET_CENTER_LEFT, + ANCHORS_AND_OFFSETS_PRESET_CENTER_RIGHT, + ANCHORS_AND_OFFSETS_PRESET_CENTER_TOP, + ANCHORS_AND_OFFSETS_PRESET_CENTER_BOTTOM, + ANCHORS_AND_OFFSETS_PRESET_CENTER, + ANCHORS_AND_OFFSETS_PRESET_TOP_WIDE, + ANCHORS_AND_OFFSETS_PRESET_LEFT_WIDE, + ANCHORS_AND_OFFSETS_PRESET_RIGHT_WIDE, + ANCHORS_AND_OFFSETS_PRESET_BOTTOM_WIDE, + ANCHORS_AND_OFFSETS_PRESET_VCENTER_WIDE, + ANCHORS_AND_OFFSETS_PRESET_HCENTER_WIDE, + ANCHORS_AND_OFFSETS_PRESET_WIDE, + ANCHORS_AND_OFFSETS_PRESET_KEEP_RATIO, ANCHORS_PRESET_TOP_LEFT, ANCHORS_PRESET_TOP_RIGHT, ANCHORS_PRESET_BOTTOM_LEFT, @@ -152,22 +152,22 @@ private: ANCHORS_PRESET_VCENTER_WIDE, ANCHORS_PRESET_HCENTER_WIDE, ANCHORS_PRESET_WIDE, - MARGINS_PRESET_TOP_LEFT, - MARGINS_PRESET_TOP_RIGHT, - MARGINS_PRESET_BOTTOM_LEFT, - MARGINS_PRESET_BOTTOM_RIGHT, - MARGINS_PRESET_CENTER_LEFT, - MARGINS_PRESET_CENTER_RIGHT, - MARGINS_PRESET_CENTER_TOP, - MARGINS_PRESET_CENTER_BOTTOM, - MARGINS_PRESET_CENTER, - MARGINS_PRESET_TOP_WIDE, - MARGINS_PRESET_LEFT_WIDE, - MARGINS_PRESET_RIGHT_WIDE, - MARGINS_PRESET_BOTTOM_WIDE, - MARGINS_PRESET_VCENTER_WIDE, - MARGINS_PRESET_HCENTER_WIDE, - MARGINS_PRESET_WIDE, + OFFSETS_PRESET_TOP_LEFT, + OFFSETS_PRESET_TOP_RIGHT, + OFFSETS_PRESET_BOTTOM_LEFT, + OFFSETS_PRESET_BOTTOM_RIGHT, + OFFSETS_PRESET_CENTER_LEFT, + OFFSETS_PRESET_CENTER_RIGHT, + OFFSETS_PRESET_CENTER_TOP, + OFFSETS_PRESET_CENTER_BOTTOM, + OFFSETS_PRESET_CENTER, + OFFSETS_PRESET_TOP_WIDE, + OFFSETS_PRESET_LEFT_WIDE, + OFFSETS_PRESET_RIGHT_WIDE, + OFFSETS_PRESET_BOTTOM_WIDE, + OFFSETS_PRESET_VCENTER_WIDE, + OFFSETS_PRESET_HCENTER_WIDE, + OFFSETS_PRESET_WIDE, ANIM_INSERT_KEY, ANIM_INSERT_KEY_EXISTING, ANIM_INSERT_POS, @@ -288,9 +288,9 @@ private: MenuOption last_option; struct _SelectResult { - CanvasItem *item; - float z_index; - bool has_z; + CanvasItem *item = nullptr; + float z_index = 0; + bool has_z = true; _FORCE_INLINE_ bool operator<(const _SelectResult &p_rr) const { return has_z && p_rr.has_z ? p_rr.z_index < z_index : p_rr.has_z; } @@ -308,8 +308,6 @@ private: Transform2D xform; float length = 0.f; uint64_t last_pass = 0; - - BoneList() {} }; uint64_t bone_last_frame; @@ -331,7 +329,7 @@ private: struct PoseClipboard { Vector2 pos; Vector2 scale; - float rot; + float rot = 0; ObjectID id; }; List<PoseClipboard> pose_clipboard; @@ -456,9 +454,9 @@ private: void _unhandled_key_input(const Ref<InputEvent> &p_ev); - void _draw_text_at_position(Point2 p_position, String p_string, Margin p_side); - void _draw_margin_at_position(int p_value, Point2 p_position, Margin p_side); - void _draw_percentage_at_position(float p_value, Point2 p_position, Margin p_side); + void _draw_text_at_position(Point2 p_position, String p_string, Side p_side); + void _draw_margin_at_position(int p_value, Point2 p_position, Side p_side); + void _draw_percentage_at_position(float p_value, Point2 p_position, Side p_side); void _draw_straight_line(Point2 p_from, Point2 p_to, Color p_color); void _draw_smart_snapping(); @@ -521,9 +519,9 @@ private: const Node *p_current); void _set_anchors_preset(Control::LayoutPreset p_preset); - void _set_margins_preset(Control::LayoutPreset p_preset); - void _set_anchors_and_margins_preset(Control::LayoutPreset p_preset); - void _set_anchors_and_margins_to_keep_ratio(); + void _set_offsets_preset(Control::LayoutPreset p_preset); + void _set_anchors_and_offsets_preset(Control::LayoutPreset p_preset); + void _set_anchors_and_offsets_to_keep_ratio(); void _button_toggle_anchor_mode(bool p_status); diff --git a/editor/plugins/collision_polygon_2d_editor_plugin.cpp b/editor/plugins/collision_polygon_2d_editor_plugin.cpp index 08d6fc966d..8e340b28ef 100644 --- a/editor/plugins/collision_polygon_2d_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/collision_polygon_2d_editor_plugin.h b/editor/plugins/collision_polygon_2d_editor_plugin.h index 482f00a7f7..e78c486a39 100644 --- a/editor/plugins/collision_polygon_2d_editor_plugin.h +++ b/editor/plugins/collision_polygon_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/collision_polygon_3d_editor_plugin.cpp b/editor/plugins/collision_polygon_3d_editor_plugin.cpp index 6eb17685f6..0c18975258 100644 --- a/editor/plugins/collision_polygon_3d_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/collision_polygon_3d_editor_plugin.h b/editor/plugins/collision_polygon_3d_editor_plugin.h index 98f499031a..c66518e3e5 100644 --- a/editor/plugins/collision_polygon_3d_editor_plugin.h +++ b/editor/plugins/collision_polygon_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -44,7 +44,6 @@ class CollisionPolygon3DEditor : public HBoxContainer { UndoRedo *undo_redo; enum Mode { - MODE_CREATE, MODE_EDIT, diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index 105ac24950..a1e7d3d6e0 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -98,7 +98,7 @@ Variant CollisionShape2DEditor::get_handle_value(int idx) const { Ref<RectangleShape2D> rect = node->get_shape(); if (idx < 3) { - return rect->get_extents().abs(); + return rect->get_size().abs(); } } break; @@ -179,13 +179,13 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { if (idx < 3) { Ref<RectangleShape2D> rect = node->get_shape(); - Vector2 extents = rect->get_extents(); + Vector2 size = rect->get_size(); if (idx == 2) { - extents = p_point; + size = p_point * 2; } else { - extents[idx] = p_point[idx]; + size[idx] = p_point[idx] * 2; } - rect->set_extents(extents.abs()); + rect->set_size(size.abs()); canvas_item_editor->update_viewport(); } @@ -279,9 +279,9 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { case RECTANGLE_SHAPE: { Ref<RectangleShape2D> rect = node->get_shape(); - undo_redo->add_do_method(rect.ptr(), "set_extents", rect->get_extents()); + undo_redo->add_do_method(rect.ptr(), "set_size", rect->get_size()); undo_redo->add_do_method(canvas_item_editor, "update_viewport"); - undo_redo->add_undo_method(rect.ptr(), "set_extents", p_org); + undo_redo->add_undo_method(rect.ptr(), "set_size", p_org); undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } break; @@ -493,7 +493,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla Ref<RectangleShape2D> shape = node->get_shape(); handles.resize(3); - Vector2 ext = shape->get_extents(); + Vector2 ext = shape->get_size() / 2; handles.write[0] = Point2(ext.x, 0); handles.write[1] = Point2(0, ext.y); handles.write[2] = Point2(ext.x, ext.y); @@ -563,6 +563,8 @@ CollisionShape2DEditor::CollisionShape2DEditor(EditorNode *p_editor) { edit_handle = -1; pressed = false; + + shape_type = 0; } void CollisionShape2DEditorPlugin::edit(Object *p_obj) { diff --git a/editor/plugins/collision_shape_2d_editor_plugin.h b/editor/plugins/collision_shape_2d_editor_plugin.h index 083ceb4b38..054db1a61b 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.h +++ b/editor/plugins/collision_shape_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp index 32f7d02af2..3403aeceba 100644 --- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.h b/editor/plugins/cpu_particles_2d_editor_plugin.h index 58984d6d16..b188df8e96 100644 --- a/editor/plugins/cpu_particles_2d_editor_plugin.h +++ b/editor/plugins/cpu_particles_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.cpp b/editor/plugins/cpu_particles_3d_editor_plugin.cpp index d44e487ae4..f41ccfa86b 100644 --- a/editor/plugins/cpu_particles_3d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -122,7 +122,7 @@ void CPUParticles3DEditorPlugin::make_visible(bool p_visible) { CPUParticles3DEditorPlugin::CPUParticles3DEditorPlugin(EditorNode *p_node) { editor = p_node; particles_editor = memnew(CPUParticles3DEditor); - editor->get_viewport()->add_child(particles_editor); + editor->get_main_control()->add_child(particles_editor); particles_editor->hide(); } diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.h b/editor/plugins/cpu_particles_3d_editor_plugin.h index 90300daf71..9dced3ea86 100644 --- a/editor/plugins/cpu_particles_3d_editor_plugin.h +++ b/editor/plugins/cpu_particles_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -38,7 +38,6 @@ class CPUParticles3DEditor : public GPUParticles3DEditorBase { GDCLASS(CPUParticles3DEditor, GPUParticles3DEditorBase); enum Menu { - MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE, MENU_OPTION_CLEAR_EMISSION_VOLUME, MENU_OPTION_RESTART diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 539ab03f5b..88e56ccfb9 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -518,7 +518,9 @@ void CurveEditor::set_hover_point_index(int index) { void CurveEditor::update_view_transform() { Ref<Font> font = get_theme_font("font", "Label"); - const real_t margin = font->get_height() + 2 * EDSCALE; + int font_size = get_theme_font_size("font_size", "Label"); + + const real_t margin = font->get_height(font_size) + 2 * EDSCALE; float min_y = 0; float max_y = 1; @@ -662,18 +664,19 @@ void CurveEditor::_draw() { draw_set_transform_matrix(Transform2D()); Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); Color text_color = get_theme_color("font_color", "Editor"); { // X axis float y = curve.get_min_value(); Vector2 off(0, font_height - 1); - draw_string(font, get_view_pos(Vector2(0, y)) + off, "0.0", text_color); - draw_string(font, get_view_pos(Vector2(0.25, y)) + off, "0.25", text_color); - draw_string(font, get_view_pos(Vector2(0.5, y)) + off, "0.5", text_color); - draw_string(font, get_view_pos(Vector2(0.75, y)) + off, "0.75", text_color); - draw_string(font, get_view_pos(Vector2(1, y)) + off, "1.0", text_color); + draw_string(font, get_view_pos(Vector2(0, y)) + off, "0.0", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.25, y)) + off, "0.25", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.5, y)) + off, "0.5", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.75, y)) + off, "0.75", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(1, y)) + off, "1.0", HALIGN_LEFT, -1, font_size, text_color); } { @@ -682,9 +685,9 @@ void CurveEditor::_draw() { float m1 = 0.5 * (curve.get_min_value() + curve.get_max_value()); float m2 = curve.get_max_value(); Vector2 off(1, -1); - draw_string(font, get_view_pos(Vector2(0, m0)) + off, String::num(m0, 2), text_color); - draw_string(font, get_view_pos(Vector2(0, m1)) + off, String::num(m1, 2), text_color); - draw_string(font, get_view_pos(Vector2(0, m2)) + off, String::num(m2, 3), text_color); + draw_string(font, get_view_pos(Vector2(0, m0)) + off, String::num(m0, 2), HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0, m1)) + off, String::num(m1, 2), HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0, m2)) + off, String::num(m2, 3), HALIGN_LEFT, -1, font_size, text_color); } // Draw tangents for current point @@ -744,10 +747,10 @@ void CurveEditor::_draw() { if (_selected_point > 0 && _selected_point + 1 < curve.get_point_count()) { text_color.a *= 0.4; - draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Hold Shift to edit tangents individually"), text_color); + draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Hold Shift to edit tangents individually"), HALIGN_LEFT, -1, font_size, text_color); } else if (curve.get_point_count() == 0) { text_color.a *= 0.4; - draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Right click to add point"), text_color); + draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Right click to add point"), HALIGN_LEFT, -1, font_size, text_color); } } diff --git a/editor/plugins/curve_editor_plugin.h b/editor/plugins/curve_editor_plugin.h index 2872f65730..2e8dd43d7e 100644 --- a/editor/plugins/curve_editor_plugin.h +++ b/editor/plugins/curve_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/debugger_editor_plugin.cpp b/editor/plugins/debugger_editor_plugin.cpp index 0747e42045..1512e1817a 100644 --- a/editor/plugins/debugger_editor_plugin.cpp +++ b/editor/plugins/debugger_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/debugger_editor_plugin.h b/editor/plugins/debugger_editor_plugin.h index c5ae4cd8a9..a6fab01c29 100644 --- a/editor/plugins/debugger_editor_plugin.h +++ b/editor/plugins/debugger_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/editor_debugger_plugin.cpp b/editor/plugins/editor_debugger_plugin.cpp index b775e871e2..85114d88ae 100644 --- a/editor/plugins/editor_debugger_plugin.cpp +++ b/editor/plugins/editor_debugger_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/editor_debugger_plugin.h b/editor/plugins/editor_debugger_plugin.h index 10fd1151de..b33a8ed925 100644 --- a/editor/plugins/editor_debugger_plugin.h +++ b/editor/plugins/editor_debugger_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index 3cf4dc5ac8..bdf88b82e4 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -37,7 +37,7 @@ #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "scene/resources/bit_map.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" #include "servers/audio/audio_stream.h" @@ -106,7 +106,7 @@ Ref<Texture2D> EditorTexturePreviewPlugin::generate(const RES &p_from, const Siz } } - if (img.is_null() || img->empty()) { + if (img.is_null() || img->is_empty()) { return Ref<Texture2D>(); } @@ -150,7 +150,7 @@ bool EditorImagePreviewPlugin::handles(const String &p_type) const { Ref<Texture2D> EditorImagePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Image> img = p_from; - if (img.is_null() || img->empty()) { + if (img.is_null() || img->is_empty()) { return Ref<Image>(); } @@ -798,25 +798,79 @@ void EditorFontPreviewPlugin::_bind_methods() { } bool EditorFontPreviewPlugin::handles(const String &p_type) const { - return ClassDB::is_parent_class(p_type, "DynamicFontData") || ClassDB::is_parent_class(p_type, "DynamicFont"); -} + return ClassDB::is_parent_class(p_type, "FontData") || ClassDB::is_parent_class(p_type, "Font"); +} + +struct FSample { + String script; + String sample; +}; + +static FSample _samples[] = { + { "hani", U"漢語" }, + { "armn", U"Աբ" }, + { "copt", U"Αα" }, + { "cyrl", U"Аб" }, + { "grek", U"Αα" }, + { "hebr", U"אב" }, + { "arab", U"اب" }, + { "syrc", U"ܐܒ" }, + { "thaa", U"ހށ" }, + { "deva", U"आ" }, + { "beng", U"আ" }, + { "guru", U"ਆ" }, + { "gujr", U"આ" }, + { "orya", U"ଆ" }, + { "taml", U"ஆ" }, + { "telu", U"ఆ" }, + { "knda", U"ಆ" }, + { "mylm", U"ആ" }, + { "sinh", U"ආ" }, + { "thai", U"กิ" }, + { "laoo", U"ກິ" }, + { "tibt", U"ༀ" }, + { "mymr", U"က" }, + { "geor", U"Ⴀა" }, + { "hang", U"한글" }, + { "ethi", U"ሀ" }, + { "cher", U"Ꭳ" }, + { "cans", U"ᐁ" }, + { "ogam", U"ᚁ" }, + { "runr", U"ᚠ" }, + { "tglg", U"ᜀ" }, + { "hano", U"ᜠ" }, + { "buhd", U"ᝀ" }, + { "tagb", U"ᝠ" }, + { "khmr", U"ក" }, + { "mong", U"ᠠ" }, + { "limb", U"ᤁ" }, + { "tale", U"ᥐ" }, + { "latn", U"Ab" }, + { "zyyy", U"😀" }, + { "", U"" } +}; 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; - if (res->is_class("DynamicFont")) { + Ref<Font> sampled_font; + if (res->is_class("Font")) { sampled_font = res->duplicate(); - if (sampled_font->get_outline_color() == Color(1, 1, 1, 1)) { - sampled_font->set_outline_color(Color(0, 0, 0, 1)); - } - } else if (res->is_class("DynamicFontData")) { + } else if (res->is_class("FontData")) { sampled_font.instance(); - sampled_font->set_font_data(res); + sampled_font->add_data(res->duplicate()); } - sampled_font->set_size(50); - String sampled_text = "Abg"; - Vector2 size = sampled_font->get_string_size(sampled_text); + String sample; + for (int j = 0; j < sampled_font->get_data_count(); j++) { + for (int i = 0; _samples[i].script != String(); i++) { + if (sampled_font->get_data(j)->is_script_supported(_samples[i].script)) { + if (sampled_font->get_data(j)->has_char(_samples[i].sample[0])) { + sample += _samples[i].sample; + } + } + } + } + Vector2 size = sampled_font->get_string_size(sample, 50); Vector2 pos; @@ -825,7 +879,7 @@ Ref<Texture2D> EditorFontPreviewPlugin::generate_from_path(const String &p_path, Ref<Font> font = sampled_font; - font->draw(canvas_item, pos, sampled_text); + font->draw_string(canvas_item, pos, sample, HALIGN_LEFT, -1.f, 50, Color(1, 1, 1)); preview_done = false; RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h index 9885efc2b5..57e2911c89 100644 --- a/editor/plugins/editor_preview_plugins.h +++ b/editor/plugins/editor_preview_plugins.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -90,7 +90,7 @@ class EditorMaterialPreviewPlugin : public EditorResourcePreviewGenerator { RID light2; RID light_instance2; RID camera; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); @@ -134,7 +134,7 @@ class EditorMeshPreviewPlugin : public EditorResourcePreviewGenerator { RID light2; RID light_instance2; RID camera; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); @@ -156,7 +156,7 @@ class EditorFontPreviewPlugin : public EditorResourcePreviewGenerator { RID viewport_texture; RID canvas; RID canvas_item; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); diff --git a/editor/plugins/font_editor_plugin.cpp b/editor/plugins/font_editor_plugin.cpp new file mode 100644 index 0000000000..fa58eb5480 --- /dev/null +++ b/editor/plugins/font_editor_plugin.cpp @@ -0,0 +1,331 @@ +/*************************************************************************/ +/* font_editor_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 "font_editor_plugin.h" + +#include "editor/editor_scale.h" + +void FontDataPreview::_notification(int p_what) { + if (p_what == NOTIFICATION_DRAW) { + Color text_color = get_theme_color("font_color", "Label"); + Color line_color = text_color; + line_color.a *= 0.6; + Vector2 pos = (get_size() - line->get_size()) / 2; + line->draw(get_canvas_item(), pos, text_color); + draw_line(Vector2(0, pos.y + line->get_line_ascent()), Vector2(pos.x - 5, pos.y + line->get_line_ascent()), line_color); + draw_line(Vector2(pos.x + line->get_size().x + 5, pos.y + line->get_line_ascent()), Vector2(get_size().x, pos.y + line->get_line_ascent()), line_color); + } +} + +void FontDataPreview::_bind_methods() {} + +Size2 FontDataPreview::get_minimum_size() const { + return Vector2(64, 64) * EDSCALE; +} + +struct FSample { + String script; + String sample; +}; + +static FSample _samples[] = { + { "hani", U"漢語" }, + { "armn", U"Աբ" }, + { "copt", U"Αα" }, + { "cyrl", U"Аб" }, + { "grek", U"Αα" }, + { "hebr", U"אב" }, + { "arab", U"اب" }, + { "syrc", U"ܐܒ" }, + { "thaa", U"ހށ" }, + { "deva", U"आ" }, + { "beng", U"আ" }, + { "guru", U"ਆ" }, + { "gujr", U"આ" }, + { "orya", U"ଆ" }, + { "taml", U"ஆ" }, + { "telu", U"ఆ" }, + { "knda", U"ಆ" }, + { "mylm", U"ആ" }, + { "sinh", U"ආ" }, + { "thai", U"กิ" }, + { "laoo", U"ກິ" }, + { "tibt", U"ༀ" }, + { "mymr", U"က" }, + { "geor", U"Ⴀა" }, + { "hang", U"한글" }, + { "ethi", U"ሀ" }, + { "cher", U"Ꭳ" }, + { "cans", U"ᐁ" }, + { "ogam", U"ᚁ" }, + { "runr", U"ᚠ" }, + { "tglg", U"ᜀ" }, + { "hano", U"ᜠ" }, + { "buhd", U"ᝀ" }, + { "tagb", U"ᝠ" }, + { "khmr", U"ក" }, + { "mong", U"ᠠ" }, + { "limb", U"ᤁ" }, + { "tale", U"ᥐ" }, + { "latn", U"Ab" }, + { "zyyy", U"😀" }, + { "", U"" } +}; + +void FontDataPreview::set_data(const Ref<FontData> &p_data) { + Ref<Font> f = memnew(Font); + f->add_data(p_data); + + line->clear(); + + String sample; + for (int i = 0; _samples[i].script != String(); i++) { + if (p_data->is_script_supported(_samples[i].script)) { + if (p_data->has_char(_samples[i].sample[0])) { + sample += _samples[i].sample; + } + } + } + line->add_string(sample, f, 72); + + update(); +} + +FontDataPreview::FontDataPreview() { + line.instance(); +} + +/*************************************************************************/ + +void FontDataEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_SORT_CHILDREN) { + int split_width = get_name_split_ratio() * get_size().width; + button->set_size(Size2(get_theme_icon("Add", "EditorIcons")->get_width(), get_size().height)); + if (is_layout_rtl()) { + if (le != nullptr) { + fit_child_in_rect(le, Rect2(Vector2(split_width, 0), Size2(split_width, get_size().height))); + } + fit_child_in_rect(chk, Rect2(Vector2(split_width - chk->get_size().x, 0), Size2(chk->get_size().x, get_size().height))); + fit_child_in_rect(button, Rect2(Vector2(0, 0), Size2(button->get_size().width, get_size().height))); + } else { + if (le != nullptr) { + fit_child_in_rect(le, Rect2(Vector2(0, 0), Size2(split_width, get_size().height))); + } + fit_child_in_rect(chk, Rect2(Vector2(split_width, 0), Size2(chk->get_size().x, get_size().height))); + fit_child_in_rect(button, Rect2(Vector2(get_size().width - button->get_size().width, 0), Size2(button->get_size().width, get_size().height))); + } + update(); + } + if (p_what == NOTIFICATION_DRAW) { + int split_width = get_name_split_ratio() * get_size().width; + Color dark_color = get_theme_color("dark_color_2", "Editor"); + if (is_layout_rtl()) { + draw_rect(Rect2(Vector2(0, 0), Size2(split_width, get_size().height)), dark_color); + } else { + draw_rect(Rect2(Vector2(split_width, 0), Size2(split_width, get_size().height)), dark_color); + } + } + if (p_what == NOTIFICATION_THEME_CHANGED) { + if (le != nullptr) { + button->set_icon(get_theme_icon("Add", "EditorIcons")); + } else { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + } + queue_sort(); + } + if (p_what == NOTIFICATION_RESIZED) { + queue_sort(); + } +} + +void FontDataEditor::update_property() { + if (le == nullptr) { + bool c = get_edited_object()->get(get_edited_property()); + chk->set_pressed(c); + chk->set_disabled(is_read_only()); + } +} + +Size2 FontDataEditor::get_minimum_size() const { + return Size2(0, 60); +} + +void FontDataEditor::_bind_methods() { +} + +void FontDataEditor::init_lang_add() { + le = memnew(LineEdit); + le->set_placeholder("Language code"); + le->set_custom_minimum_size(Size2(get_size().width / 2, 0)); + le->set_editable(true); + add_child(le); + + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::add_lang)); +} + +void FontDataEditor::init_lang_edit() { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::remove_lang)); + chk->connect("toggled", callable_mp(this, &FontDataEditor::toggle_lang)); +} + +void FontDataEditor::init_script_add() { + le = memnew(LineEdit); + le->set_placeholder("Script code"); + le->set_custom_minimum_size(Size2(get_size().width / 2, 0)); + le->set_editable(true); + add_child(le); + + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::add_script)); +} + +void FontDataEditor::init_script_edit() { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::remove_script)); + chk->connect("toggled", callable_mp(this, &FontDataEditor::toggle_script)); +} + +void FontDataEditor::add_lang() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr && !le->get_text().is_empty()) { + fd->set_language_support_override(le->get_text(), chk->is_pressed()); + le->set_text(""); + chk->set_pressed(false); + } +} + +void FontDataEditor::add_script() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr && le->get_text().length() == 4) { + fd->set_script_support_override(le->get_text(), chk->is_pressed()); + le->set_text(""); + chk->set_pressed(false); + } +} + +void FontDataEditor::toggle_lang(bool p_pressed) { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String lang = String(get_edited_property()).replace("language_support_override/", ""); + fd->set_language_support_override(lang, p_pressed); + } +} + +void FontDataEditor::toggle_script(bool p_pressed) { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String script = String(get_edited_property()).replace("script_support_override/", ""); + fd->set_script_support_override(script, p_pressed); + } +} + +void FontDataEditor::remove_lang() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String lang = String(get_edited_property()).replace("language_support_override/", ""); + fd->remove_language_support_override(lang); + } +} + +void FontDataEditor::remove_script() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String script = String(get_edited_property()).replace("script_support_override/", ""); + fd->remove_script_support_override(script); + } +} + +FontDataEditor::FontDataEditor() { + chk = memnew(CheckBox); + chk->set_text(TTR("On")); + chk->set_flat(true); + add_child(chk); + + button = memnew(Button); + button->set_flat(true); + add_child(button); +} + +/*************************************************************************/ + +bool EditorInspectorPluginFont::can_handle(Object *p_object) { + return Object::cast_to<FontData>(p_object) != nullptr; +} + +void EditorInspectorPluginFont::parse_begin(Object *p_object) { + FontData *fd = Object::cast_to<FontData>(p_object); + ERR_FAIL_COND(!fd); + + FontDataPreview *editor = memnew(FontDataPreview); + editor->set_data(fd); + add_custom_control(editor); +} + +bool EditorInspectorPluginFont::parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) { + if (p_path.begins_with("language_support_override/") && p_object->is_class("FontData")) { + String lang = p_path.replace("language_support_override/", ""); + + FontDataEditor *editor = memnew(FontDataEditor); + if (lang != "_new") { + editor->init_lang_edit(); + } else { + editor->init_lang_add(); + } + add_property_editor(p_path, editor); + + return true; + } + + if (p_path.begins_with("script_support_override/") && p_object->is_class("FontData")) { + String script = p_path.replace("script_support_override/", ""); + + FontDataEditor *editor = memnew(FontDataEditor); + if (script != "_new") { + editor->init_script_edit(); + } else { + editor->init_script_add(); + } + add_property_editor(p_path, editor); + + return true; + } + + return false; +} + +/*************************************************************************/ + +FontEditorPlugin::FontEditorPlugin(EditorNode *p_node) { + Ref<EditorInspectorPluginFont> fd_plugin; + fd_plugin.instance(); + EditorInspector::add_inspector_plugin(fd_plugin); +} diff --git a/editor/plugins/font_editor_plugin.h b/editor/plugins/font_editor_plugin.h new file mode 100644 index 0000000000..04e6c1dac7 --- /dev/null +++ b/editor/plugins/font_editor_plugin.h @@ -0,0 +1,111 @@ +/*************************************************************************/ +/* font_editor_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 FONT_EDITOR_PLUGIN_H +#define FONT_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/resources/font.h" +#include "scene/resources/text_line.h" + +class FontDataPreview : public Control { + GDCLASS(FontDataPreview, Control); + +protected: + void _notification(int p_what); + static void _bind_methods(); + + Ref<TextLine> line; + +public: + virtual Size2 get_minimum_size() const override; + + void set_data(const Ref<FontData> &p_data); + + FontDataPreview(); +}; + +/*************************************************************************/ + +class FontDataEditor : public EditorProperty { + GDCLASS(FontDataEditor, EditorProperty); + + LineEdit *le = nullptr; + CheckBox *chk = nullptr; + Button *button = nullptr; + + void toggle_lang(bool p_pressed); + void toggle_script(bool p_pressed); + void add_lang(); + void add_script(); + void remove_lang(); + void remove_script(); + +protected: + void _notification(int p_what); + + static void _bind_methods(); + +public: + virtual Size2 get_minimum_size() const override; + virtual void update_property() override; + + void init_lang_add(); + void init_lang_edit(); + void init_script_add(); + void init_script_edit(); + + FontDataEditor(); +}; + +/*************************************************************************/ + +class EditorInspectorPluginFont : public EditorInspectorPlugin { + GDCLASS(EditorInspectorPluginFont, EditorInspectorPlugin); + +public: + virtual bool can_handle(Object *p_object) override; + virtual void parse_begin(Object *p_object) override; + virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) override; +}; + +/*************************************************************************/ + +class FontEditorPlugin : public EditorPlugin { + GDCLASS(FontEditorPlugin, EditorPlugin); + +public: + FontEditorPlugin(EditorNode *p_node); + + virtual String get_name() const override { return "Font"; } +}; + +#endif // FONT_EDITOR_PLUGIN_H diff --git a/editor/plugins/gi_probe_editor_plugin.cpp b/editor/plugins/gi_probe_editor_plugin.cpp index 2f5dd36ef1..f309c5da01 100644 --- a/editor/plugins/gi_probe_editor_plugin.cpp +++ b/editor/plugins/gi_probe_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gi_probe_editor_plugin.h b/editor/plugins/gi_probe_editor_plugin.h index 85d2b6f449..fdf0623561 100644 --- a/editor/plugins/gi_probe_editor_plugin.h +++ b/editor/plugins/gi_probe_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.cpp b/editor/plugins/gpu_particles_2d_editor_plugin.cpp index d27df1d063..1aaa98d02e 100644 --- a/editor/plugins/gpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.h b/editor/plugins/gpu_particles_2d_editor_plugin.h index 86e89bd0b0..0b2028b745 100644 --- a/editor/plugins/gpu_particles_2d_editor_plugin.h +++ b/editor/plugins/gpu_particles_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -42,7 +42,6 @@ class GPUParticles2DEditorPlugin : public EditorPlugin { GDCLASS(GPUParticles2DEditorPlugin, EditorPlugin); enum { - MENU_GENERATE_VISIBILITY_RECT, MENU_LOAD_EMISSION_MASK, MENU_CLEAR_EMISSION_MASK, diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.cpp b/editor/plugins/gpu_particles_3d_editor_plugin.cpp index c98ba25db5..5b840ddbcf 100644 --- a/editor/plugins/gpu_particles_3d_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -213,7 +213,7 @@ GPUParticles3DEditorBase::GPUParticles3DEditorBase() { emission_fill->add_item(TTR("Volume")); emd_vb->add_margin_child(TTR("Emission Source: "), emission_fill); - emission_dialog->get_ok()->set_text(TTR("Create")); + emission_dialog->get_ok_button()->set_text(TTR("Create")); emission_dialog->connect("confirmed", callable_mp(this, &GPUParticles3DEditorBase::_generate_emission_points)); emission_tree_dialog = memnew(SceneTreeDialog); @@ -454,7 +454,7 @@ void GPUParticles3DEditorPlugin::make_visible(bool p_visible) { GPUParticles3DEditorPlugin::GPUParticles3DEditorPlugin(EditorNode *p_node) { editor = p_node; particles_editor = memnew(GPUParticles3DEditor); - editor->get_viewport()->add_child(particles_editor); + editor->get_main_control()->add_child(particles_editor); particles_editor->hide(); } diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.h b/editor/plugins/gpu_particles_3d_editor_plugin.h index 1665b3676a..bd10895459 100644 --- a/editor/plugins/gpu_particles_3d_editor_plugin.h +++ b/editor/plugins/gpu_particles_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -71,7 +71,6 @@ class GPUParticles3DEditor : public GPUParticles3DEditorBase { GPUParticles3D *node; enum Menu { - MENU_OPTION_GENERATE_AABB, MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE, MENU_OPTION_CLEAR_EMISSION_VOLUME, diff --git a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp index 0288645f91..8c4928b7cb 100644 --- a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.h b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.h index 0cdc70a62b..5a71fc44ef 100644 --- a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.h +++ b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gradient_editor_plugin.cpp b/editor/plugins/gradient_editor_plugin.cpp index 13b5c8cef5..46fa00f730 100644 --- a/editor/plugins/gradient_editor_plugin.cpp +++ b/editor/plugins/gradient_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/gradient_editor_plugin.h b/editor/plugins/gradient_editor_plugin.h index 4d3fc0d8a9..bcbb86e422 100644 --- a/editor/plugins/gradient_editor_plugin.h +++ b/editor/plugins/gradient_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/item_list_editor_plugin.cpp b/editor/plugins/item_list_editor_plugin.cpp index b4dcbdfe20..c0f690bb6a 100644 --- a/editor/plugins/item_list_editor_plugin.cpp +++ b/editor/plugins/item_list_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/item_list_editor_plugin.h b/editor/plugins/item_list_editor_plugin.h index 87586904a3..8c77f3d952 100644 --- a/editor/plugins/item_list_editor_plugin.h +++ b/editor/plugins/item_list_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -49,7 +49,6 @@ protected: public: enum Flags { - FLAG_ICON = 1, FLAG_CHECKABLE = 2, FLAG_ID = 4, diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp index e422140efa..3d555d7eba 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.cpp +++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/light_occluder_2d_editor_plugin.h b/editor/plugins/light_occluder_2d_editor_plugin.h index e034a41ddc..eb1ce04788 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.h +++ b/editor/plugins/light_occluder_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/line_2d_editor_plugin.cpp b/editor/plugins/line_2d_editor_plugin.cpp index 77eeb19d26..08c5ef02a4 100644 --- a/editor/plugins/line_2d_editor_plugin.cpp +++ b/editor/plugins/line_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/line_2d_editor_plugin.h b/editor/plugins/line_2d_editor_plugin.h index b3bc9df3a5..769109583a 100644 --- a/editor/plugins/line_2d_editor_plugin.h +++ b/editor/plugins/line_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp index e49cfd51f7..ad99ad7808 100644 --- a/editor/plugins/material_editor_plugin.cpp +++ b/editor/plugins/material_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -108,7 +108,7 @@ MaterialEditor::MaterialEditor() { vc = memnew(SubViewportContainer); vc->set_stretch(true); add_child(vc); - vc->set_anchors_and_margins_preset(PRESET_WIDE); + vc->set_anchors_and_offsets_preset(PRESET_WIDE); viewport = memnew(SubViewport); Ref<World3D> world_3d; world_3d.instance(); @@ -155,7 +155,7 @@ MaterialEditor::MaterialEditor() { HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); - hb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); + hb->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); VBoxContainer *vb_shape = memnew(VBoxContainer); hb->add_child(vb_shape); diff --git a/editor/plugins/material_editor_plugin.h b/editor/plugins/material_editor_plugin.h index a6df790620..a4532b58b3 100644 --- a/editor/plugins/material_editor_plugin.h +++ b/editor/plugins/material_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -55,7 +55,7 @@ class MaterialEditor : public Control { Camera3D *camera; Ref<SphereMesh> sphere_mesh; - Ref<CubeMesh> box_mesh; + Ref<BoxMesh> box_mesh; TextureButton *sphere_switch; TextureButton *box_switch; diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp index 9d396467c3..1e4553a967 100644 --- a/editor/plugins/mesh_editor_plugin.cpp +++ b/editor/plugins/mesh_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -137,7 +137,7 @@ MeshEditor::MeshEditor() { HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); - hb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); + hb->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); hb->add_spacer(); diff --git a/editor/plugins/mesh_editor_plugin.h b/editor/plugins/mesh_editor_plugin.h index 1fb0babb10..455fcb5fe9 100644 --- a/editor/plugins/mesh_editor_plugin.h +++ b/editor/plugins/mesh_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp index 5b241deab0..0d2b2ea2f5 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -63,7 +63,7 @@ void MeshInstance3DEditor::_menu_option(int p_option) { List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { Ref<Shape3D> shape = mesh->create_trimesh_shape(); if (shape.is_null()) { err_dialog->set_text(TTR("Couldn't create a Trimesh collision shape.")); @@ -457,7 +457,7 @@ MeshInstance3DEditor::MeshInstance3DEditor() { outline_dialog = memnew(ConfirmationDialog); outline_dialog->set_title(TTR("Create Outline Mesh")); - outline_dialog->get_ok()->set_text(TTR("Create")); + outline_dialog->get_ok_button()->set_text(TTR("Create")); VBoxContainer *outline_dialog_vbc = memnew(VBoxContainer); outline_dialog->add_child(outline_dialog_vbc); @@ -505,7 +505,7 @@ void MeshInstance3DEditorPlugin::make_visible(bool p_visible) { MeshInstance3DEditorPlugin::MeshInstance3DEditorPlugin(EditorNode *p_node) { editor = p_node; mesh_editor = memnew(MeshInstance3DEditor); - editor->get_viewport()->add_child(mesh_editor); + editor->get_main_control()->add_child(mesh_editor); mesh_editor->options->hide(); } diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.h b/editor/plugins/mesh_instance_3d_editor_plugin.h index 77a2b8ec34..69f494de7f 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.h +++ b/editor/plugins/mesh_instance_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -40,7 +40,6 @@ class MeshInstance3DEditor : public Control { GDCLASS(MeshInstance3DEditor, Control); enum Menu { - MENU_OPTION_CREATE_STATIC_TRIMESH_BODY, MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE, MENU_OPTION_CREATE_SINGLE_CONVEX_COLLISION_SHAPE, diff --git a/editor/plugins/mesh_library_editor_plugin.cpp b/editor/plugins/mesh_library_editor_plugin.cpp index 374a8c8290..f8932cd534 100644 --- a/editor/plugins/mesh_library_editor_plugin.cpp +++ b/editor/plugins/mesh_library_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -267,7 +267,7 @@ MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { editor = p_editor; cd = memnew(ConfirmationDialog); add_child(cd); - cd->get_ok()->connect("pressed", callable_mp(this, &MeshLibraryEditor::_menu_confirm)); + cd->get_ok_button()->connect("pressed", callable_mp(this, &MeshLibraryEditor::_menu_confirm)); } void MeshLibraryEditorPlugin::edit(Object *p_node) { @@ -297,8 +297,10 @@ MeshLibraryEditorPlugin::MeshLibraryEditorPlugin(EditorNode *p_node) { EDITOR_DEF("editors/grid_map/preview_size", 64); mesh_library_editor = memnew(MeshLibraryEditor(p_node)); - p_node->get_viewport()->add_child(mesh_library_editor); - mesh_library_editor->set_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); + p_node->get_main_control()->add_child(mesh_library_editor); + mesh_library_editor->set_anchors_and_offsets_preset(Control::PRESET_TOP_WIDE); mesh_library_editor->set_end(Point2(0, 22)); mesh_library_editor->hide(); + + editor = nullptr; } diff --git a/editor/plugins/mesh_library_editor_plugin.h b/editor/plugins/mesh_library_editor_plugin.h index ea13303740..6c33c8bb9e 100644 --- a/editor/plugins/mesh_library_editor_plugin.h +++ b/editor/plugins/mesh_library_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -46,7 +46,6 @@ class MeshLibraryEditor : public Control { int to_erase; enum { - MENU_OPTION_ADD_ITEM, MENU_OPTION_REMOVE_ITEM, MENU_OPTION_UPDATE_FROM_SCENE, diff --git a/editor/plugins/multimesh_editor_plugin.cpp b/editor/plugins/multimesh_editor_plugin.cpp index bd1384967f..19c6dcf402 100644 --- a/editor/plugins/multimesh_editor_plugin.cpp +++ b/editor/plugins/multimesh_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -337,7 +337,7 @@ MultiMeshEditor::MultiMeshEditor() { vbc->add_margin_child(TTR("Scale:"), populate_scale); populate_amount = memnew(SpinBox); - populate_amount->set_anchor(MARGIN_RIGHT, ANCHOR_END); + populate_amount->set_anchor(SIDE_RIGHT, ANCHOR_END); populate_amount->set_begin(Point2(20, 232)); populate_amount->set_end(Point2(-5, 237)); populate_amount->set_min(1); @@ -345,9 +345,9 @@ MultiMeshEditor::MultiMeshEditor() { populate_amount->set_value(128); vbc->add_margin_child(TTR("Amount:"), populate_amount); - populate_dialog->get_ok()->set_text(TTR("Populate")); + populate_dialog->get_ok_button()->set_text(TTR("Populate")); - populate_dialog->get_ok()->connect("pressed", callable_mp(this, &MultiMeshEditor::_populate)); + populate_dialog->get_ok_button()->connect("pressed", callable_mp(this, &MultiMeshEditor::_populate)); std = memnew(SceneTreeDialog); populate_dialog->add_child(std); std->connect("selected", callable_mp(this, &MultiMeshEditor::_browsed)); @@ -378,7 +378,7 @@ void MultiMeshEditorPlugin::make_visible(bool p_visible) { MultiMeshEditorPlugin::MultiMeshEditorPlugin(EditorNode *p_node) { editor = p_node; multimesh_editor = memnew(MultiMeshEditor); - editor->get_viewport()->add_child(multimesh_editor); + editor->get_main_control()->add_child(multimesh_editor); multimesh_editor->options->hide(); } diff --git a/editor/plugins/multimesh_editor_plugin.h b/editor/plugins/multimesh_editor_plugin.h index d1f8a3b74a..2cdd7cf504 100644 --- a/editor/plugins/multimesh_editor_plugin.h +++ b/editor/plugins/multimesh_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -63,7 +63,6 @@ class MultiMeshEditor : public Control { SpinBox *populate_amount; enum Menu { - MENU_OPTION_POPULATE }; diff --git a/editor/plugins/navigation_polygon_editor_plugin.cpp b/editor/plugins/navigation_polygon_editor_plugin.cpp index 8cf9f01fa0..9971d3111d 100644 --- a/editor/plugins/navigation_polygon_editor_plugin.cpp +++ b/editor/plugins/navigation_polygon_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/navigation_polygon_editor_plugin.h b/editor/plugins/navigation_polygon_editor_plugin.h index 3c5a7c2829..0f5928d416 100644 --- a/editor/plugins/navigation_polygon_editor_plugin.h +++ b/editor/plugins/navigation_polygon_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 28acb26012..6cc28ab225 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -63,12 +63,15 @@ #define GIZMO_SCALE_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) #define GIZMO_ARROW_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) -#define ZOOM_MIN_DISTANCE 0.001 -#define ZOOM_MULTIPLIER 1.08 -#define ZOOM_INDICATOR_DELAY_S 1.5 +#define ZOOM_FREELOOK_MIN 0.01 +#define ZOOM_FREELOOK_MULTIPLIER 1.08 +#define ZOOM_FREELOOK_INDICATOR_DELAY_S 1.5 -#define FREELOOK_MIN_SPEED 0.01 -#define FREELOOK_SPEED_MULTIPLIER 1.08 +#ifdef REAL_T_IS_DOUBLE +#define ZOOM_FREELOOK_MAX 1'000'000'000'000 +#else +#define ZOOM_FREELOOK_MAX 10'000 +#endif #define MIN_Z 0.01 #define MAX_Z 1000000.0 @@ -138,7 +141,7 @@ void ViewportRotationControl::_draw_axis(const Axis2D &p_axis) { if (front) { String axis_name = direction == 0 ? "X" : (direction == 1 ? "Y" : "Z"); draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c); - draw_char(get_theme_font("rotation_control", "EditorFonts"), p_axis.screen_point + Vector2i(-4, 5) * EDSCALE, axis_name, "", Color(0.3, 0.3, 0.3)); + draw_char(get_theme_font("rotation_control", "EditorFonts"), p_axis.screen_point + Vector2i(-4, 5) * EDSCALE, axis_name, "", get_theme_font_size("rotation_control_size", "EditorFonts"), Color(0.3, 0.3, 0.3)); } else { draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS * (0.55 + (0.2 * (1.0 + p_axis.z_axis))), c); } @@ -609,7 +612,7 @@ void Node3DEditorViewport::_find_items_at_pos(const Point2 &p_pos, bool &r_inclu results.push_back(res); } - if (results.empty()) { + if (results.is_empty()) { return; } @@ -1042,7 +1045,7 @@ void Node3DEditorViewport::_list_select(Ref<InputEventMouseButton> b) { clicked = ObjectID(); } - } else if (!selection_results.empty()) { + } else if (!selection_results.is_empty()) { NodePath root_path = get_tree()->get_edited_scene_root()->get_path(); StringName root_name = root_path.get_name(root_path.get_name_count() - 1); @@ -1094,7 +1097,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) { { EditorNode *en = editor; EditorPluginList *force_input_forwarding_list = en->get_editor_plugins_force_input_forwarding(); - if (!force_input_forwarding_list->empty()) { + if (!force_input_forwarding_list->is_empty()) { bool discard = force_input_forwarding_list->forward_spatial_gui_input(camera, p_event, true); if (discard) { return; @@ -1104,7 +1107,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) { { EditorNode *en = editor; EditorPluginList *over_plugin_list = en->get_editor_plugins_over(); - if (!over_plugin_list->empty()) { + if (!over_plugin_list->is_empty()) { bool discard = over_plugin_list->forward_spatial_gui_input(camera, p_event, false); if (discard) { return; @@ -1117,7 +1120,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (b.is_valid()) { emit_signal("clicked", this); - float zoom_factor = 1 + (ZOOM_MULTIPLIER - 1) * b->get_factor(); + float zoom_factor = 1 + (ZOOM_FREELOOK_MULTIPLIER - 1) * b->get_factor(); switch (b->get_button_index()) { case BUTTON_WHEEL_UP: { if (is_freelook_active()) { @@ -2207,34 +2210,28 @@ void Node3DEditorViewport::set_freelook_active(bool active_now) { } void Node3DEditorViewport::scale_cursor_distance(real_t scale) { - // Prevents zero distance which would short-circuit any scaling - if (cursor.distance < ZOOM_MIN_DISTANCE) { - cursor.distance = ZOOM_MIN_DISTANCE; - } - - cursor.distance *= scale; - - if (cursor.distance < ZOOM_MIN_DISTANCE) { - cursor.distance = ZOOM_MIN_DISTANCE; + real_t min_distance = MAX(camera->get_near() * 4, ZOOM_FREELOOK_MIN); + real_t max_distance = MIN(camera->get_far() / 4, ZOOM_FREELOOK_MAX); + if (unlikely(min_distance > max_distance)) { + cursor.distance = (min_distance + max_distance) / 2; + } else { + cursor.distance = CLAMP(cursor.distance * scale, min_distance, max_distance); } - zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; + zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S; surface->update(); } void Node3DEditorViewport::scale_freelook_speed(real_t scale) { - // Prevents zero distance which would short-circuit any scaling - if (freelook_speed < FREELOOK_MIN_SPEED) { - freelook_speed = FREELOOK_MIN_SPEED; - } - - freelook_speed *= scale; - - if (freelook_speed < FREELOOK_MIN_SPEED) { - freelook_speed = FREELOOK_MIN_SPEED; + real_t min_speed = MAX(camera->get_near() * 4, ZOOM_FREELOOK_MIN); + real_t max_speed = MIN(camera->get_far() / 4, ZOOM_FREELOOK_MAX); + if (unlikely(min_speed > max_speed)) { + freelook_speed = (min_speed + max_speed) / 2; + } else { + freelook_speed = CLAMP(freelook_speed * scale, min_speed, max_speed); } - zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; + zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S; surface->update(); } @@ -2508,6 +2505,8 @@ void Node3DEditorViewport::_notification(int p_what) { bool show_fps = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_FRAME_TIME)); if (show_fps != fps_label->is_visible()) { + cpu_time_label->set_visible(show_fps); + gpu_time_label->set_visible(show_fps); fps_label->set_visible(show_fps); RS::get_singleton()->viewport_set_measure_render_time(viewport->get_viewport_rid(), show_fps); for (int i = 0; i < FRAME_TIME_HISTORY; i++) { @@ -2515,7 +2514,7 @@ void Node3DEditorViewport::_notification(int p_what) { gpu_time_history[i] = 0; } cpu_time_history_index = 0; - cpu_time_history_index = 0; + gpu_time_history_index = 0; } if (show_fps) { cpu_time_history[cpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_cpu(viewport->get_viewport_rid()); @@ -2534,24 +2533,40 @@ void Node3DEditorViewport::_notification(int p_what) { } gpu_time /= FRAME_TIME_HISTORY; - String text; - text += TTR("CPU Time") + ": " + String::num(cpu_time, 1) + " ms\n"; - text += TTR("GPU Time") + ": " + String::num(gpu_time, 1) + " ms\n"; - text += TTR("FPS") + ": " + itos(1000.0 / gpu_time); - - fps_label->set_text(text); + // Color labels depending on performance level ("good" = green, "OK" = yellow, "bad" = red). + // Middle point is at 15 ms. + cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), String::num(cpu_time, 1))); + cpu_time_label->add_theme_color_override( + "font_color", + frame_time_gradient->get_color_at_offset( + Math::range_lerp(cpu_time, 0, 30, 0, 1))); + + gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), String::num(gpu_time, 1))); + // Middle point is at 15 ms. + gpu_time_label->add_theme_color_override( + "font_color", + frame_time_gradient->get_color_at_offset( + Math::range_lerp(gpu_time, 0, 30, 0, 1))); + + const float fps = 1000.0 / gpu_time; + fps_label->set_text(vformat(TTR("FPS: %d"), fps)); + // Middle point is at 60 FPS. + fps_label->add_theme_color_override( + "font_color", + frame_time_gradient->get_color_at_offset( + Math::range_lerp(fps, 110, 10, 0, 1))); } bool show_cinema = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW)); cinema_label->set_visible(show_cinema); if (show_cinema) { float cinema_half_width = cinema_label->get_size().width / 2.0f; - cinema_label->set_anchor_and_margin(MARGIN_LEFT, 0.5f, -cinema_half_width); + cinema_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -cinema_half_width); } if (lock_rotation) { float locked_half_width = locked_label->get_size().width / 2.0f; - locked_label->set_anchor_and_margin(MARGIN_LEFT, 0.5f, -locked_half_width); + locked_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -locked_half_width); } } @@ -2586,14 +2601,20 @@ void Node3DEditorViewport::_notification(int p_what) { preview_camera->add_theme_style_override("focus", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); preview_camera->add_theme_style_override("disabled", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); + frame_time_gradient->set_color(0, get_theme_color("success_color", "Editor")); + frame_time_gradient->set_color(1, get_theme_color("warning_color", "Editor")); + frame_time_gradient->set_color(2, get_theme_color("error_color", "Editor")); + info_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); + cpu_time_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); + gpu_time_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); fps_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); cinema_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); locked_label->add_theme_style_override("normal", editor->get_gui_base()->get_theme_stylebox("Information3dViewport", "EditorStyles")); } } -static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2D> icon, const Ref<Font> font, const String &text) { +static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2D> icon, const Ref<Font> font, int font_size, const String &text) { // Adjust bar size from control height const Vector2 surface_size = surface.get_size(); const real_t h = surface_size.y / 2.0; @@ -2613,17 +2634,17 @@ static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2 surface.draw_texture(icon, icon_pos); // Draw text below the bar (for speed/zoom information). - surface.draw_string(font, Vector2(icon_pos.x, icon_pos.y + icon_size.y + 16 * EDSCALE), text); + surface.draw_string(font, Vector2(icon_pos.x, icon_pos.y + icon_size.y + 16 * EDSCALE), text, HALIGN_LEFT, -1.f, font_size); } void Node3DEditorViewport::_draw() { EditorPluginList *over_plugin_list = EditorNode::get_singleton()->get_editor_plugins_over(); - if (!over_plugin_list->empty()) { + if (!over_plugin_list->is_empty()) { over_plugin_list->forward_spatial_draw_over_viewport(surface); } EditorPluginList *force_over_plugin_list = editor->get_editor_plugins_force_over(); - if (!force_over_plugin_list->empty()) { + if (!force_over_plugin_list->is_empty()) { force_over_plugin_list->forward_spatial_force_draw_over_viewport(surface); } @@ -2651,19 +2672,40 @@ void Node3DEditorViewport::_draw() { if (message_time > 0) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Point2 msgpos = Point2(5, get_size().y - 20); - font->draw(ci, msgpos + Point2(1, 1), message, Color(0, 0, 0, 0.8)); - font->draw(ci, msgpos + Point2(-1, -1), message, Color(0, 0, 0, 0.8)); - font->draw(ci, msgpos, message, Color(1, 1, 1, 1)); + font->draw_string(ci, msgpos + Point2(1, 1), message, HALIGN_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + font->draw_string(ci, msgpos + Point2(-1, -1), message, HALIGN_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + font->draw_string(ci, msgpos, message, HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 1)); } if (_edit.mode == TRANSFORM_ROTATE) { Point2 center = _point_to_screen(_edit.center); + + Color handle_color; + switch (_edit.plane) { + case TRANSFORM_X_AXIS: + handle_color = get_theme_color("axis_x_color", "Editor"); + break; + case TRANSFORM_Y_AXIS: + handle_color = get_theme_color("axis_y_color", "Editor"); + break; + case TRANSFORM_Z_AXIS: + handle_color = get_theme_color("axis_z_color", "Editor"); + break; + default: + handle_color = get_theme_color("accent_color", "Editor"); + break; + } + handle_color.a = 1.0; + const float brightness = 1.3; + handle_color *= Color(brightness, brightness, brightness); + RenderingServer::get_singleton()->canvas_item_add_line( ci, _edit.mouse_pos, center, - get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.6), + handle_color, Math::round(2 * EDSCALE)); } if (previewing) { @@ -2688,7 +2730,7 @@ void Node3DEditorViewport::_draw() { } break; } - draw_rect = Rect2(Vector2(), s).clip(draw_rect); + draw_rect = Rect2(Vector2(), s).intersection(draw_rect); surface->draw_rect(draw_rect, Color(0.6, 0.6, 0.1, 0.5), false, Math::round(2 * EDSCALE)); @@ -2697,19 +2739,13 @@ void Node3DEditorViewport::_draw() { if (is_freelook_active()) { // Show speed - real_t min_speed = FREELOOK_MIN_SPEED; - real_t max_speed = camera->get_zfar(); + real_t min_speed = MAX(camera->get_near() * 4, ZOOM_FREELOOK_MIN); + real_t max_speed = MIN(camera->get_far() / 4, ZOOM_FREELOOK_MAX); real_t scale_length = (max_speed - min_speed); if (!Math::is_zero_approx(scale_length)) { real_t logscale_t = 1.0 - Math::log(1 + freelook_speed - min_speed) / Math::log(1 + scale_length); - // There is no real maximum speed so that factor can become negative, - // Let's make it look asymptotic instead (will decrease slower and slower). - if (logscale_t < 0.25) { - logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); - } - // Display the freelook speed to help the user get a better sense of scale. const int precision = freelook_speed < 1.0 ? 2 : 1; draw_indicator_bar( @@ -2717,25 +2753,20 @@ void Node3DEditorViewport::_draw() { 1.0 - logscale_t, get_theme_icon("ViewportSpeed", "EditorIcons"), get_theme_font("font", "Label"), + get_theme_font_size("font_size", "Label"), vformat("%s u/s", String::num(freelook_speed).pad_decimals(precision))); } } else { // Show zoom - real_t min_distance = ZOOM_MIN_DISTANCE; // TODO Why not pick znear to limit zoom? - real_t max_distance = camera->get_zfar(); + real_t min_distance = MAX(camera->get_near() * 4, ZOOM_FREELOOK_MIN); + real_t max_distance = MIN(camera->get_far() / 4, ZOOM_FREELOOK_MAX); real_t scale_length = (max_distance - min_distance); if (!Math::is_zero_approx(scale_length)) { real_t logscale_t = 1.0 - Math::log(1 + cursor.distance - min_distance) / Math::log(1 + scale_length); - // There is no real maximum distance so that factor can become negative, - // Let's make it look asymptotic instead (will decrease slower and slower). - if (logscale_t < 0.25) { - logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); - } - // Display the zoom center distance to help the user get a better sense of scale. const int precision = cursor.distance < 1.0 ? 2 : 1; draw_indicator_bar( @@ -2743,6 +2774,7 @@ void Node3DEditorViewport::_draw() { logscale_t, get_theme_icon("ViewportZoom", "EditorIcons"), get_theme_font("font", "Label"), + get_theme_font_size("font_size", "Label"), vformat("%s u", String::num(cursor.distance).pad_decimals(precision))); } } @@ -2967,11 +2999,11 @@ void Node3DEditorViewport::_menu_option(int p_option) { int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS); bool current = view_menu->get_popup()->is_item_checked(idx); current = !current; + uint32_t layers = ((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_GRID_LAYER) | (1 << MISC_TOOL_LAYER); if (current) { - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER)); - } else { - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_GRID_LAYER)); + layers |= (1 << GIZMO_EDIT_LAYER); } + camera->set_cull_mask(layers); view_menu->get_popup()->set_item_checked(idx, current); } break; @@ -3010,7 +3042,8 @@ void Node3DEditorViewport::_menu_option(int p_option) { case VIEW_DISPLAY_DEBUG_DECAL_ATLAS: case VIEW_DISPLAY_DEBUG_SDFGI: case VIEW_DISPLAY_DEBUG_SDFGI_PROBES: - case VIEW_DISPLAY_DEBUG_GI_BUFFER: { + case VIEW_DISPLAY_DEBUG_GI_BUFFER: + case VIEW_DISPLAY_DEBUG_DISABLE_LOD: { static const int display_options[] = { VIEW_DISPLAY_NORMAL, VIEW_DISPLAY_WIREFRAME, @@ -3027,6 +3060,7 @@ void Node3DEditorViewport::_menu_option(int p_option) { VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE, VIEW_DISPLAY_DEBUG_SSAO, VIEW_DISPLAY_DEBUG_GI_BUFFER, + VIEW_DISPLAY_DEBUG_DISABLE_LOD, VIEW_DISPLAY_DEBUG_PSSM_SPLITS, VIEW_DISPLAY_DEBUG_DECAL_ATLAS, VIEW_DISPLAY_DEBUG_SDFGI, @@ -3049,6 +3083,7 @@ void Node3DEditorViewport::_menu_option(int p_option) { Viewport::DEBUG_DRAW_SCENE_LUMINANCE, Viewport::DEBUG_DRAW_SSAO, Viewport::DEBUG_DRAW_GI_BUFFER, + Viewport::DEBUG_DRAW_DISABLE_LOD, Viewport::DEBUG_DRAW_PSSM_SPLITS, Viewport::DEBUG_DRAW_DECAL_ATLAS, Viewport::DEBUG_DRAW_SDFGI, @@ -3880,7 +3915,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito subviewport_container = c; c->set_stretch(true); add_child(c); - c->set_anchors_and_margins_preset(Control::PRESET_WIDE); + c->set_anchors_and_offsets_preset(Control::PRESET_WIDE); viewport = memnew(SubViewport); viewport->set_disable_input(true); @@ -3888,11 +3923,11 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito surface = memnew(Control); surface->set_drag_forwarding(this); add_child(surface); - surface->set_anchors_and_margins_preset(Control::PRESET_WIDE); + surface->set_anchors_and_offsets_preset(Control::PRESET_WIDE); surface->set_clip_contents(true); camera = memnew(Camera3D); camera->set_disable_gizmo(true); - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + p_index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER)); + camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + p_index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER) | (1 << MISC_TOOL_LAYER)); viewport->add_child(camera); camera->make_current(); surface->set_focus_mode(FOCUS_ALL); @@ -3903,8 +3938,9 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito view_menu = memnew(MenuButton); view_menu->set_flat(false); - vbox->add_child(view_menu); view_menu->set_h_size_flags(0); + view_menu->set_shortcut_context(this); + vbox->add_child(view_menu); display_submenu = memnew(PopupMenu); view_menu->get_popup()->add_child(display_submenu); @@ -3951,6 +3987,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito display_submenu->add_radio_check_item(TTR("SSAO"), VIEW_DISPLAY_DEBUG_SSAO); display_submenu->add_separator(); display_submenu->add_radio_check_item(TTR("GI Buffer"), VIEW_DISPLAY_DEBUG_GI_BUFFER); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("Disable LOD"), VIEW_DISPLAY_DEBUG_DISABLE_LOD); display_submenu->set_name("display_advanced"); view_menu->get_popup()->add_submenu_item(TTR("Display Advanced..."), "display_advanced", VIEW_DISPLAY_ADVANCED); view_menu->get_popup()->add_separator(); @@ -4020,27 +4058,17 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito preview_node = nullptr; info_label = memnew(Label); - info_label->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); - info_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -90 * EDSCALE); - info_label->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -10 * EDSCALE); - info_label->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -10 * EDSCALE); + info_label->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -90 * EDSCALE); + info_label->set_anchor_and_offset(SIDE_TOP, ANCHOR_END, -90 * EDSCALE); + info_label->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, -10 * EDSCALE); + info_label->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, -10 * EDSCALE); info_label->set_h_grow_direction(GROW_DIRECTION_BEGIN); info_label->set_v_grow_direction(GROW_DIRECTION_BEGIN); surface->add_child(info_label); info_label->hide(); - fps_label = memnew(Label); - fps_label->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); - fps_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); - fps_label->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -10 * EDSCALE); - fps_label->set_h_grow_direction(GROW_DIRECTION_BEGIN); - fps_label->set_tooltip(TTR("Note: The FPS is estimated on a 60hz refresh rate.")); - fps_label->set_mouse_filter(MOUSE_FILTER_PASS); // Otherwise tooltip doesn't show. - surface->add_child(fps_label); - fps_label->hide(); - cinema_label = memnew(Label); - cinema_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); + cinema_label->set_anchor_and_offset(SIDE_TOP, ANCHOR_BEGIN, 10 * EDSCALE); cinema_label->set_h_grow_direction(GROW_DIRECTION_END); cinema_label->set_align(Label::ALIGN_CENTER); surface->add_child(cinema_label); @@ -4049,8 +4077,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito previewing_cinema = false; locked_label = memnew(Label); - locked_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -20 * EDSCALE); - locked_label->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -10 * EDSCALE); + locked_label->set_anchor_and_offset(SIDE_TOP, ANCHOR_END, -20 * EDSCALE); + locked_label->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, -10 * EDSCALE); locked_label->set_h_grow_direction(GROW_DIRECTION_END); locked_label->set_v_grow_direction(GROW_DIRECTION_BEGIN); locked_label->set_align(Label::ALIGN_CENTER); @@ -4058,9 +4086,17 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito locked_label->set_text(TTR("View Rotation Locked")); locked_label->hide(); + frame_time_gradient = memnew(Gradient); + // The color is set when the theme changes. + frame_time_gradient->add_point(0.5, Color()); + top_right_vbox = memnew(VBoxContainer); - top_right_vbox->set_anchors_and_margins_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE); + top_right_vbox->set_anchors_and_offsets_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE); top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN); + // Make sure frame time labels don't touch the viewport's edge. + top_right_vbox->set_custom_minimum_size(Size2(100, 0) * EDSCALE); + // Prevent visible spacing between frame time labels. + top_right_vbox->add_theme_constant_override("separation", 0); rotation_control = memnew(ViewportRotationControl); rotation_control->set_custom_minimum_size(Size2(80, 80) * EDSCALE); @@ -4068,13 +4104,16 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito rotation_control->set_viewport(this); top_right_vbox->add_child(rotation_control); + // Individual Labels are used to allow coloring each label with its own color. + cpu_time_label = memnew(Label); + top_right_vbox->add_child(cpu_time_label); + cpu_time_label->hide(); + + gpu_time_label = memnew(Label); + top_right_vbox->add_child(gpu_time_label); + gpu_time_label->hide(); + fps_label = memnew(Label); - fps_label->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); - fps_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); - fps_label->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -10 * EDSCALE); - fps_label->set_h_grow_direction(GROW_DIRECTION_BEGIN); - fps_label->set_tooltip(TTR("Note: The FPS value displayed is the editor's framerate.\nIt cannot be used as a reliable indication of in-game performance.")); - fps_label->set_mouse_filter(MOUSE_FILTER_PASS); // Otherwise tooltip doesn't show. top_right_vbox->add_child(fps_label); fps_label->hide(); @@ -4102,6 +4141,10 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito EditorSettings::get_singleton()->connect("settings_changed", callable_mp(this, &Node3DEditorViewport::update_transform_gizmo_view)); } +Node3DEditorViewport::~Node3DEditorViewport() { + memdelete(frame_time_gradient); +} + ////////////////////////////////////////////////////////////// void Node3DEditorViewportContainer::_gui_input(const Ref<InputEvent> &p_event) { @@ -4510,12 +4553,14 @@ Object *Node3DEditor::_get_editor_data(Object *p_what) { RS::get_singleton()->instance_geometry_set_cast_shadows_setting( si->sbox_instance, RS::SHADOW_CASTING_SETTING_OFF); + RS::get_singleton()->instance_set_layer_mask(si->sbox_instance, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); si->sbox_instance_xray = RenderingServer::get_singleton()->instance_create2( selection_box_xray->get_rid(), sp->get_world_3d()->get_scenario()); RS::get_singleton()->instance_geometry_set_cast_shadows_setting( si->sbox_instance_xray, RS::SHADOW_CASTING_SETTING_OFF); + RS::get_singleton()->instance_set_layer_mask(si->sbox_instance_xray, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); return si; } @@ -4558,8 +4603,8 @@ void Node3DEditor::_generate_selection_boxes() { Ref<StandardMaterial3D> mat = memnew(StandardMaterial3D); mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - // Use a similar color to the 2D editor selection. - mat->set_albedo(Color(1, 0.5, 0)); + const Color selection_box_color = EDITOR_GET("editors/3d/selection_box_color"); + mat->set_albedo(selection_box_color); mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); st->set_material(mat); selection_box = st->commit(); @@ -4567,7 +4612,7 @@ void Node3DEditor::_generate_selection_boxes() { Ref<StandardMaterial3D> mat_xray = memnew(StandardMaterial3D); mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); - mat_xray->set_albedo(Color(1, 0.5, 0, 0.15)); + mat_xray->set_albedo(selection_box_color * Color(1, 1, 1, 0.15)); mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); st_xray->set_material(mat_xray); selection_box_xray = st_xray->commit(); @@ -5008,11 +5053,10 @@ void Node3DEditor::_menu_item_pressed(int p_option) { for (int i = 0; i < 3; ++i) { if (grid_enable[i]) { grid_visible[i] = grid_enabled; - if (grid_instance[i].is_valid()) { - RenderingServer::get_singleton()->instance_set_visible(grid_instance[i], grid_enabled); - } } } + _finish_grid(); + _init_grid(); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(p_option), grid_enabled); @@ -5238,7 +5282,9 @@ void Node3DEditor::_init_indicators() { gizmo_color[i] = mat; Ref<StandardMaterial3D> mat_hl = mat->duplicate(); - mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + const float brightness = 1.3; + const Color albedo = Color(col.r * brightness, col.g * brightness, col.b * brightness); + mat_hl->set_albedo(albedo); gizmo_color_hl[i] = mat_hl; Vector3 ivec; @@ -5333,7 +5379,7 @@ void Node3DEditor::_init_indicators() { surftool->commit(move_plane_gizmo[i]); Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); - plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + plane_mat_hl->set_albedo(albedo); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } @@ -5354,7 +5400,7 @@ void Node3DEditor::_init_indicators() { Vector2 ofs = Vector2(Math::cos((Math_PI * 2.0 * k) / m), Math::sin((Math_PI * 2.0 * k) / m)); Vector3 normal = ivec * ofs.x + ivec2 * ofs.y; - surftool->add_normal(basis.xform(normal)); + surftool->set_normal(basis.xform(normal)); surftool->add_vertex(vertex); } } @@ -5416,7 +5462,7 @@ void Node3DEditor::_init_indicators() { rotate_gizmo[i]->surface_set_material(0, rotate_mat); Ref<ShaderMaterial> rotate_mat_hl = rotate_mat->duplicate(); - rotate_mat_hl->set_shader_param("albedo", Color(col.r, col.g, col.b, 1.0)); + rotate_mat_hl->set_shader_param("albedo", albedo); rotate_gizmo_color_hl[i] = rotate_mat_hl; if (i == 2) { // Rotation white outline @@ -5543,7 +5589,7 @@ void Node3DEditor::_init_indicators() { surftool->commit(scale_plane_gizmo[i]); Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); - plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + plane_mat_hl->set_albedo(Color(col.r * 1.3, col.g * 1.3, col.b * 1.3)); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } } @@ -5761,7 +5807,7 @@ void Node3DEditor::_refresh_menu_icons() { List<Node *> &selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { all_locked = false; all_grouped = false; } else { @@ -5780,11 +5826,11 @@ void Node3DEditor::_refresh_menu_icons() { } tool_button[TOOL_LOCK_SELECTED]->set_visible(!all_locked); - tool_button[TOOL_LOCK_SELECTED]->set_disabled(selection.empty()); + tool_button[TOOL_LOCK_SELECTED]->set_disabled(selection.is_empty()); tool_button[TOOL_UNLOCK_SELECTED]->set_visible(all_locked); tool_button[TOOL_GROUP_SELECTED]->set_visible(!all_grouped); - tool_button[TOOL_GROUP_SELECTED]->set_disabled(selection.empty()); + tool_button[TOOL_GROUP_SELECTED]->set_disabled(selection.is_empty()); tool_button[TOOL_UNGROUP_SELECTED]->set_visible(all_grouped); } @@ -5834,16 +5880,30 @@ void Node3DEditor::snap_selected_nodes_to_floor() { // Priorities for snapping to floor are CollisionShapes, VisualInstances and then origin Set<VisualInstance3D *> vi = _get_child_nodes<VisualInstance3D>(sp); Set<CollisionShape3D *> cs = _get_child_nodes<CollisionShape3D>(sp); + bool found_valid_shape = false; if (cs.size()) { - AABB aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb()); - for (Set<CollisionShape3D *>::Element *I = cs.front(); I; I = I->next()) { - aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb())); + AABB aabb; + Set<CollisionShape3D *>::Element *I = cs.front(); + if (I->get()->get_shape().is_valid()) { + CollisionShape3D *collision_shape = cs.front()->get(); + aabb = collision_shape->get_global_transform().xform(collision_shape->get_shape()->get_debug_mesh()->get_aabb()); + found_valid_shape = true; } - Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); - from = aabb.position + size; - position_offset.y = from.y - sp->get_global_transform().origin.y; - } else if (vi.size()) { + for (I = I->next(); I; I = I->next()) { + CollisionShape3D *col_shape = I->get(); + if (col_shape->get_shape().is_valid()) { + aabb.merge_with(col_shape->get_global_transform().xform(col_shape->get_shape()->get_debug_mesh()->get_aabb())); + found_valid_shape = true; + } + } + if (found_valid_shape) { + Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); + from = aabb.position + size; + position_offset.y = from.y - sp->get_global_transform().origin.y; + } + } + if (!found_valid_shape && vi.size()) { AABB aabb = vi.front()->get()->get_transformed_aabb(); for (Set<VisualInstance3D *>::Element *I = vi.front(); I; I = I->next()) { aabb.merge_with(I->get()->get_transformed_aabb()); @@ -5851,7 +5911,7 @@ void Node3DEditor::snap_selected_nodes_to_floor() { Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); from = aabb.position + size; position_offset.y = from.y - sp->get_global_transform().origin.y; - } else { + } else if (!found_valid_shape) { from = sp->get_global_transform().origin; } @@ -6083,7 +6143,7 @@ void Node3DEditor::_toggle_maximize_view(Object *p_viewport) { if (!maximized) { for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { if (i == (uint32_t)index) { - viewports[i]->set_anchors_and_margins_preset(Control::PRESET_WIDE); + viewports[i]->set_anchors_and_offsets_preset(Control::PRESET_WIDE); } else { viewports[i]->hide(); } @@ -6155,9 +6215,9 @@ void Node3DEditor::_bind_methods() { } void Node3DEditor::clear() { - settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0)); - settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05)); - settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500.0)); + settings_fov->set_value(EDITOR_GET("editors/3d/default_fov")); + settings_znear->set_value(EDITOR_GET("editors/3d/default_z_near")); + settings_zfar->set_value(EDITOR_GET("editors/3d/default_z_far")); for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { viewports[i]->reset(); @@ -6167,7 +6227,6 @@ void Node3DEditor::clear() { view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(MENU_VIEW_ORIGIN), true); for (int i = 0; i < 3; ++i) { if (grid_enable[i]) { - RenderingServer::get_singleton()->instance_set_visible(grid_instance[i], true); grid_visible[i] = true; } } @@ -6215,6 +6274,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_SELECT; tool_button[TOOL_MODE_SELECT]->connect("pressed", callable_mp(this, &Node3DEditor::_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_shortcut_context(this); tool_button[TOOL_MODE_SELECT]->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate\nAlt+Drag: Move\nAlt+RMB: Depth list selection")); hbc_menu->add_child(memnew(VSeparator)); @@ -6226,6 +6286,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_MOVE; tool_button[TOOL_MODE_MOVE]->connect("pressed", callable_mp(this, &Node3DEditor::_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_MOVE]->set_shortcut_context(this); tool_button[TOOL_MODE_ROTATE] = memnew(Button); hbc_menu->add_child(tool_button[TOOL_MODE_ROTATE]); @@ -6234,6 +6295,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_ROTATE; tool_button[TOOL_MODE_ROTATE]->connect("pressed", callable_mp(this, &Node3DEditor::_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_ROTATE]->set_shortcut_context(this); tool_button[TOOL_MODE_SCALE] = memnew(Button); hbc_menu->add_child(tool_button[TOOL_MODE_SCALE]); @@ -6242,6 +6304,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_SCALE; tool_button[TOOL_MODE_SCALE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds); tool_button[TOOL_MODE_SCALE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_scale", TTR("Scale Mode"), KEY_R)); + tool_button[TOOL_MODE_SCALE]->set_shortcut_context(this); hbc_menu->add_child(memnew(VSeparator)); @@ -6290,6 +6353,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_LOCAL_COORDS; tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect("toggled", callable_mp(this, &Node3DEditor::_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_LOCAL_COORDS]->set_shortcut_context(this); tool_option_button[TOOL_OPT_USE_SNAP] = memnew(Button); hbc_menu->add_child(tool_option_button[TOOL_OPT_USE_SNAP]); @@ -6298,6 +6362,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_USE_SNAP; tool_option_button[TOOL_OPT_USE_SNAP]->connect("toggled", callable_mp(this, &Node3DEditor::_menu_item_toggled), button_binds); tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut(ED_SHORTCUT("spatial_editor/snap", TTR("Use Snap"), KEY_Y)); + tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut_context(this); hbc_menu->add_child(memnew(VSeparator)); @@ -6335,6 +6400,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { transform_menu = memnew(MenuButton); transform_menu->set_text(TTR("Transform")); transform_menu->set_switch_on_hover(true); + transform_menu->set_shortcut_context(this); hbc_menu->add_child(transform_menu); p = transform_menu->get_popup(); @@ -6349,6 +6415,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); view_menu->set_switch_on_hover(true); + view_menu->set_shortcut_context(this); hbc_menu->add_child(view_menu); p = view_menu->get_popup(); @@ -6414,7 +6481,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { snap_dialog->set_title(TTR("Snap Settings")); add_child(snap_dialog); snap_dialog->connect("confirmed", callable_mp(this, &Node3DEditor::_snap_changed)); - snap_dialog->get_cancel()->connect("pressed", callable_mp(this, &Node3DEditor::_snap_update)); + snap_dialog->get_cancel_button()->connect("pressed", callable_mp(this, &Node3DEditor::_snap_update)); VBoxContainer *snap_dialog_vbc = memnew(VBoxContainer); snap_dialog->add_child(snap_dialog_vbc); @@ -6442,22 +6509,22 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { settings_fov = memnew(SpinBox); settings_fov->set_max(MAX_FOV); settings_fov->set_min(MIN_FOV); - settings_fov->set_step(0.01); - settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0)); + settings_fov->set_step(0.1); + settings_fov->set_value(EDITOR_GET("editors/3d/default_fov")); settings_vbc->add_margin_child(TTR("Perspective FOV (deg.):"), settings_fov); settings_znear = memnew(SpinBox); settings_znear->set_max(MAX_Z); settings_znear->set_min(MIN_Z); settings_znear->set_step(0.01); - settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05)); + settings_znear->set_value(EDITOR_GET("editors/3d/default_z_near")); settings_vbc->add_margin_child(TTR("View Z-Near:"), settings_znear); settings_zfar = memnew(SpinBox); settings_zfar->set_max(MAX_Z); settings_zfar->set_min(MIN_Z); - settings_zfar->set_step(0.01); - settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500)); + settings_zfar->set_step(0.1); + settings_zfar->set_value(EDITOR_GET("editors/3d/default_z_far")); settings_vbc->add_margin_child(TTR("View Z-Far:"), settings_zfar); for (uint32_t i = 0; i < VIEWPORTS_COUNT; ++i) { @@ -6532,8 +6599,8 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { add_to_group("_spatial_editor_group"); EDITOR_DEF("editors/3d/manipulator_gizmo_size", 80); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "editors/3d/manipulator_gizmo_size", PROPERTY_HINT_RANGE, "16,1024,1")); - EDITOR_DEF("editors/3d/manipulator_gizmo_opacity", 0.4); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "editors/3d/manipulator_gizmo_size", PROPERTY_HINT_RANGE, "16,160,1")); + EDITOR_DEF("editors/3d/manipulator_gizmo_opacity", 0.9); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::FLOAT, "editors/3d/manipulator_gizmo_opacity", PROPERTY_HINT_RANGE, "0,1,0.01")); EDITOR_DEF("editors/3d/navigation/show_viewport_rotation_gizmo", true); @@ -6663,10 +6730,10 @@ Node3DEditorPlugin::Node3DEditorPlugin(EditorNode *p_node) { editor = p_node; spatial_editor = memnew(Node3DEditor(p_node)); spatial_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); - editor->get_viewport()->add_child(spatial_editor); + editor->get_main_control()->add_child(spatial_editor); spatial_editor->hide(); - spatial_editor->connect_compat("transform_key_request", editor->get_inspector_dock(), "_transform_keyed"); + spatial_editor->connect("transform_key_request", Callable(editor->get_inspector_dock(), "_transform_keyed")); } Node3DEditorPlugin::~Node3DEditorPlugin() { @@ -6801,9 +6868,9 @@ Ref<StandardMaterial3D> EditorNode3DGizmoPlugin::get_material(const String &p_na return mat; } -String EditorNode3DGizmoPlugin::get_name() const { - if (get_script_instance() && get_script_instance()->has_method("get_name")) { - return get_script_instance()->call("get_name"); +String EditorNode3DGizmoPlugin::get_gizmo_name() const { + if (get_script_instance() && get_script_instance()->has_method("get_gizmo_name")) { + return get_script_instance()->call("get_gizmo_name"); } return TTR("Nameless gizmo"); } @@ -6845,7 +6912,7 @@ void EditorNode3DGizmoPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("create_handle_material", "name", "billboard", "texture"), &EditorNode3DGizmoPlugin::create_handle_material, DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("add_material", "name", "material"), &EditorNode3DGizmoPlugin::add_material); - ClassDB::bind_method(D_METHOD("get_material", "name", "gizmo"), &EditorNode3DGizmoPlugin::get_material); //, DEFVAL(Ref<EditorNode3DGizmo>())); + ClassDB::bind_method(D_METHOD("get_material", "name", "gizmo"), &EditorNode3DGizmoPlugin::get_material, DEFVAL(Ref<EditorNode3DGizmo>())); BIND_VMETHOD(MethodInfo(Variant::STRING, "get_name")); BIND_VMETHOD(MethodInfo(Variant::INT, "get_priority")); diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index 07f6d69d76..0cefaa6557 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -61,16 +61,10 @@ public: Ref<Material> material; Ref<SkinReference> skin_reference; RID skeleton; - bool billboard; - bool unscaled; - bool can_intersect; - bool extra_margin; - Instance() { - billboard = false; - unscaled = false; - can_intersect = false; - extra_margin = false; - } + bool billboard = false; + bool unscaled = false; + bool can_intersect = false; + bool extra_margin = false; void create_instance(Node3D *p_base, bool p_hidden = false); }; @@ -80,7 +74,7 @@ public: struct Handle { Vector3 pos; - bool billboard; + bool billboard = false; }; Vector<Vector3> handles; @@ -180,7 +174,6 @@ class Node3DEditorViewport : public Control { friend class Node3DEditor; friend class ViewportRotationControl; enum { - VIEW_TOP, VIEW_BOTTOM, VIEW_LEFT, @@ -219,6 +212,7 @@ class Node3DEditorViewport : public Control { VIEW_DISPLAY_DEBUG_SDFGI, VIEW_DISPLAY_DEBUG_SDFGI_PROBES, VIEW_DISPLAY_DEBUG_GI_BUFFER, + VIEW_DISPLAY_DEBUG_DISABLE_LOD, VIEW_LOCK_ROTATION, VIEW_CINEMATIC_PREVIEW, VIEW_AUTO_ORTHOGONAL, @@ -230,6 +224,7 @@ public: GIZMO_BASE_LAYER = 27, GIZMO_EDIT_LAYER = 26, GIZMO_GRID_LAYER = 25, + MISC_TOOL_LAYER = 24, FRAME_TIME_HISTORY = 20, }; @@ -294,12 +289,15 @@ private: VBoxContainer *top_right_vbox; ViewportRotationControl *rotation_control; + Gradient *frame_time_gradient; + Label *cpu_time_label; + Label *gpu_time_label; Label *fps_label; struct _RayResult { - Node3D *item; - float depth; - int handle; + Node3D *item = nullptr; + float depth = 0; + int handle = 0; _FORCE_INLINE_ bool operator<(const _RayResult &p_rr) const { return depth < p_rr.depth; } }; @@ -376,11 +374,11 @@ private: Vector3 click_ray_pos; Vector3 center; Vector3 orig_gizmo_pos; - int edited_gizmo; + int edited_gizmo = 0; Point2 mouse_pos; - bool snap; + bool snap = false; Ref<EditorNode3DGizmo> gizmo; - int gizmo_handle; + int gizmo_handle = 0; Variant gizmo_initial_value; Vector3 gizmo_initial_pos; } _edit; @@ -485,6 +483,7 @@ public: Camera3D *get_camera() { return camera; } // return the default camera object. Node3DEditorViewport(Node3DEditor *p_spatial_editor, EditorNode *p_editor, int p_index); + ~Node3DEditorViewport(); }; class Node3DEditorSelectedItem : public Object { @@ -554,7 +553,6 @@ public: static const unsigned int VIEWPORTS_COUNT = 4; enum ToolMode { - TOOL_MODE_SELECT, TOOL_MODE_MOVE, TOOL_MODE_ROTATE, @@ -568,7 +566,6 @@ public: }; enum ToolOptions { - TOOL_OPT_LOCAL_COORDS, TOOL_OPT_USE_SNAP, TOOL_OPT_OVERRIDE_CAMERA, @@ -628,13 +625,12 @@ private: AABB preview_bounds; struct Gizmo { - bool visible; - float scale; + bool visible = false; + float scale = 0; Transform transform; } gizmo; enum MenuOption { - MENU_TOOL_SELECT, MENU_TOOL_MOVE, MENU_TOOL_ROTATE, @@ -871,7 +867,7 @@ public: Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorNode3DGizmo> &p_gizmo = Ref<EditorNode3DGizmo>()); - virtual String get_name() const; + virtual String get_gizmo_name() const; virtual int get_priority() const; virtual bool can_be_hidden() const; virtual bool is_selectable_when_hidden() const; diff --git a/editor/plugins/ot_features_plugin.cpp b/editor/plugins/ot_features_plugin.cpp new file mode 100644 index 0000000000..ebfdf2c7cd --- /dev/null +++ b/editor/plugins/ot_features_plugin.cpp @@ -0,0 +1,213 @@ +/*************************************************************************/ +/* ot_features_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 "ot_features_plugin.h" + +#include "editor/editor_scale.h" + +void OpenTypeFeaturesEditor::_value_changed(double val) { + if (setting) { + return; + } + + emit_changed(get_edited_property(), spin->get_value()); +} + +void OpenTypeFeaturesEditor::update_property() { + double val = get_edited_object()->get(get_edited_property()); + setting = true; + spin->set_value(val); + setting = false; +} + +void OpenTypeFeaturesEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + Color base = get_theme_color("accent_color", "Editor"); + + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->set_size(get_theme_icon("Remove", "EditorIcons")->get_size()); + spin->set_custom_label_color(true, base); + } +} + +void OpenTypeFeaturesEditor::_remove_feature() { + get_edited_object()->set(get_edited_property(), -1); +} + +void OpenTypeFeaturesEditor::_bind_methods() { +} + +OpenTypeFeaturesEditor::OpenTypeFeaturesEditor() { + HBoxContainer *bc = memnew(HBoxContainer); + add_child(bc); + + spin = memnew(EditorSpinSlider); + spin->set_flat(true); + bc->add_child(spin); + add_focusable(spin); + spin->connect("value_changed", callable_mp(this, &OpenTypeFeaturesEditor::_value_changed)); + spin->set_h_size_flags(SIZE_EXPAND_FILL); + + spin->set_min(0); + spin->set_max(65536); + spin->set_step(1); + spin->set_hide_slider(false); + spin->set_allow_greater(false); + spin->set_allow_lesser(false); + + button = memnew(Button); + button->set_tooltip(RTR("Remove feature")); + button->set_flat(true); + bc->add_child(button); + + button->connect("pressed", callable_mp(this, &OpenTypeFeaturesEditor::_remove_feature)); + + setting = false; +} + +/*************************************************************************/ + +void OpenTypeFeaturesAdd::_add_feature(int p_option) { + get_edited_object()->set("opentype_features/" + TS->tag_to_name(p_option), 1); +} + +void OpenTypeFeaturesAdd::update_property() { + menu->clear(); + menu_ss->clear(); + menu_cv->clear(); + menu_cu->clear(); + bool have_ss = false; + bool have_cv = false; + bool have_cu = false; + Dictionary features = Object::cast_to<Control>(get_edited_object())->get_theme_font("font")->get_feature_list(); + for (const Variant *ftr = features.next(nullptr); ftr != nullptr; ftr = features.next(ftr)) { + String ftr_name = TS->tag_to_name(*ftr); + if (ftr_name.begins_with("stylistic_set_")) { + menu_ss->add_item(ftr_name.capitalize(), (int32_t)*ftr); + have_ss = true; + } else if (ftr_name.begins_with("character_variant_")) { + menu_cv->add_item(ftr_name.capitalize(), (int32_t)*ftr); + have_cv = true; + } else if (ftr_name.begins_with("custom_")) { + menu_cu->add_item(ftr_name.replace("custom_", ""), (int32_t)*ftr); + have_cu = true; + } else { + menu->add_item(ftr_name.capitalize(), (int32_t)*ftr); + } + } + if (have_ss) { + menu->add_submenu_item(RTR("Stylistic Sets"), "SSMenu"); + } + if (have_cv) { + menu->add_submenu_item(RTR("Character Variants"), "CVMenu"); + } + if (have_cu) { + menu->add_submenu_item(RTR("Custom"), "CUMenu"); + } +} + +void OpenTypeFeaturesAdd::_features_menu() { + Size2 size = get_size(); + menu->set_position(get_screen_position() + Size2(0, size.height * get_global_transform().get_scale().y)); + menu->popup(); +} + +void OpenTypeFeaturesAdd::_notification(int p_what) { + if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) { + set_label(""); + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->set_size(get_theme_icon("Add", "EditorIcons")->get_size()); + } +} + +void OpenTypeFeaturesAdd::_bind_methods() { +} + +OpenTypeFeaturesAdd::OpenTypeFeaturesAdd() { + menu = memnew(PopupMenu); + add_child(menu); + + menu_cv = memnew(PopupMenu); + menu_cv->set_name("CVMenu"); + menu->add_child(menu_cv); + + menu_ss = memnew(PopupMenu); + menu_ss->set_name("SSMenu"); + menu->add_child(menu_ss); + + menu_cu = memnew(PopupMenu); + menu_cu->set_name("CUMenu"); + menu->add_child(menu_cu); + + button = memnew(Button); + button->set_flat(true); + button->set_text(RTR("Add feature...")); + button->set_tooltip(RTR("Add feature...")); + add_child(button); + + button->connect("pressed", callable_mp(this, &OpenTypeFeaturesAdd::_features_menu)); + menu->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_cv->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_ss->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_cu->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); +} + +/*************************************************************************/ + +bool EditorInspectorPluginOpenTypeFeatures::can_handle(Object *p_object) { + return (Object::cast_to<Control>(p_object) != nullptr); +} + +void EditorInspectorPluginOpenTypeFeatures::parse_begin(Object *p_object) { +} + +void EditorInspectorPluginOpenTypeFeatures::parse_category(Object *p_object, const String &p_parse_category) { +} + +bool EditorInspectorPluginOpenTypeFeatures::parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) { + if (p_path == "opentype_features/_new") { + OpenTypeFeaturesAdd *editor = memnew(OpenTypeFeaturesAdd); + add_property_editor(p_path, editor); + return true; + } else if (p_path.begins_with("opentype_features")) { + OpenTypeFeaturesEditor *editor = memnew(OpenTypeFeaturesEditor); + add_property_editor(p_path, editor); + return true; + } + return false; +} + +/*************************************************************************/ + +OpenTypeFeaturesEditorPlugin::OpenTypeFeaturesEditorPlugin(EditorNode *p_node) { + Ref<EditorInspectorPluginOpenTypeFeatures> ftr_plugin; + ftr_plugin.instance(); + EditorInspector::add_inspector_plugin(ftr_plugin); +} diff --git a/editor/plugins/ot_features_plugin.h b/editor/plugins/ot_features_plugin.h new file mode 100644 index 0000000000..9559a6c0c3 --- /dev/null +++ b/editor/plugins/ot_features_plugin.h @@ -0,0 +1,105 @@ +/*************************************************************************/ +/* ot_features_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 OT_FEATURES_PLUGIN_H +#define OT_FEATURES_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/editor_properties.h" + +/*************************************************************************/ + +class OpenTypeFeaturesEditor : public EditorProperty { + GDCLASS(OpenTypeFeaturesEditor, EditorProperty); + EditorSpinSlider *spin; + bool setting = true; + void _value_changed(double p_val); + Button *button = nullptr; + + void _remove_feature(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + virtual void update_property() override; + OpenTypeFeaturesEditor(); +}; + +/*************************************************************************/ + +class OpenTypeFeaturesAdd : public EditorProperty { + GDCLASS(OpenTypeFeaturesAdd, EditorProperty); + + Button *button = nullptr; + PopupMenu *menu = nullptr; + PopupMenu *menu_ss = nullptr; + PopupMenu *menu_cv = nullptr; + PopupMenu *menu_cu = nullptr; + + void _add_feature(int p_option); + void _features_menu(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + virtual void update_property() override; + + OpenTypeFeaturesAdd(); +}; + +/*************************************************************************/ + +class EditorInspectorPluginOpenTypeFeatures : public EditorInspectorPlugin { + GDCLASS(EditorInspectorPluginOpenTypeFeatures, EditorInspectorPlugin); + +public: + virtual bool can_handle(Object *p_object) override; + virtual void parse_begin(Object *p_object) override; + virtual void parse_category(Object *p_object, const String &p_parse_category) override; + virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) override; +}; + +/*************************************************************************/ + +class OpenTypeFeaturesEditorPlugin : public EditorPlugin { + GDCLASS(OpenTypeFeaturesEditorPlugin, EditorPlugin); + +public: + OpenTypeFeaturesEditorPlugin(EditorNode *p_node); + + virtual String get_name() const override { return "OpenTypeFeatures"; } +}; + +#endif // OT_FEATURES_PLUGIN_H diff --git a/editor/plugins/packed_scene_translation_parser_plugin.cpp b/editor/plugins/packed_scene_translation_parser_plugin.cpp index 608b5c3104..1f20a87565 100644 --- a/editor/plugins/packed_scene_translation_parser_plugin.cpp +++ b/editor/plugins/packed_scene_translation_parser_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -81,14 +81,14 @@ Error PackedSceneEditorTranslationParserPlugin::parse_file(const String &p_path, Vector<String> str_values = property_value; for (int k = 0; k < str_values.size(); k++) { String desc = str_values[k].get_slice(";", 1).strip_edges(); - if (!desc.empty()) { + if (!desc.is_empty()) { parsed_strings.push_back(desc); } } } else if (property_value.get_type() == Variant::STRING) { String str_value = String(property_value); // Prevent reading text containing only spaces. - if (!str_value.strip_edges().empty()) { + if (!str_value.strip_edges().is_empty()) { parsed_strings.push_back(str_value); } } diff --git a/editor/plugins/packed_scene_translation_parser_plugin.h b/editor/plugins/packed_scene_translation_parser_plugin.h index a0ffdf692c..e51d65414e 100644 --- a/editor/plugins/packed_scene_translation_parser_plugin.h +++ b/editor/plugins/packed_scene_translation_parser_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp index f79098ce5d..908235f89f 100644 --- a/editor/plugins/path_2d_editor_plugin.cpp +++ b/editor/plugins/path_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/path_2d_editor_plugin.h b/editor/plugins/path_2d_editor_plugin.h index 6a7dffc7f8..867e0ce74f 100644 --- a/editor/plugins/path_2d_editor_plugin.h +++ b/editor/plugins/path_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -76,7 +76,6 @@ class Path2DEditor : public HBoxContainer { }; enum Action { - ACTION_NONE, ACTION_MOVING_POINT, ACTION_MOVING_IN, diff --git a/editor/plugins/path_3d_editor_plugin.cpp b/editor/plugins/path_3d_editor_plugin.cpp index 280f6fafd8..3783af8fc6 100644 --- a/editor/plugins/path_3d_editor_plugin.cpp +++ b/editor/plugins/path_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -290,6 +290,8 @@ void Path3DGizmo::redraw() { Path3DGizmo::Path3DGizmo(Path3D *p_path) { path = p_path; set_spatial_node(p_path); + orig_in_length = 0; + orig_out_length = 0; } bool Path3DEditorPlugin::forward_spatial_gui_input(Camera3D *p_camera, const Ref<InputEvent> &p_event) { @@ -607,7 +609,7 @@ Path3DEditorPlugin::Path3DEditorPlugin(EditorNode *p_node) { curve_edit->set_pressed(true); /* collision_polygon_editor = memnew( PathEditor(p_node) ); - editor->get_viewport()->add_child(collision_polygon_editor); + editor->get_main_control()->add_child(collision_polygon_editor); collision_polygon_editor->set_margin(MARGIN_LEFT,200); collision_polygon_editor->set_margin(MARGIN_RIGHT,230); collision_polygon_editor->set_margin(MARGIN_TOP,0); @@ -630,7 +632,7 @@ Ref<EditorNode3DGizmo> Path3DGizmoPlugin::create_gizmo(Node3D *p_spatial) { return ref; } -String Path3DGizmoPlugin::get_name() const { +String Path3DGizmoPlugin::get_gizmo_name() const { return "Path3D"; } diff --git a/editor/plugins/path_3d_editor_plugin.h b/editor/plugins/path_3d_editor_plugin.h index be275944a6..13870d7591 100644 --- a/editor/plugins/path_3d_editor_plugin.h +++ b/editor/plugins/path_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -59,7 +59,7 @@ protected: Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial) override; public: - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; Path3DGizmoPlugin(); }; diff --git a/editor/plugins/physical_bone_3d_editor_plugin.cpp b/editor/plugins/physical_bone_3d_editor_plugin.cpp index 30bf827b3c..4b52512933 100644 --- a/editor/plugins/physical_bone_3d_editor_plugin.cpp +++ b/editor/plugins/physical_bone_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/physical_bone_3d_editor_plugin.h b/editor/plugins/physical_bone_3d_editor_plugin.h index bdfcca8878..248aad9298 100644 --- a/editor/plugins/physical_bone_3d_editor_plugin.h +++ b/editor/plugins/physical_bone_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 0ccca7e06c..3d7b01c149 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -86,8 +86,8 @@ void Polygon2DEditor::_notification(int p_what) { b_snap_enable->set_icon(get_theme_icon("SnapGrid", "EditorIcons")); uv_icon_zoom->set_texture(get_theme_icon("Zoom", "EditorIcons")); - uv_vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); - uv_hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + uv_vscroll->set_anchors_and_offsets_preset(PRESET_RIGHT_WIDE); + uv_hscroll->set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE); } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (!is_visible()) { @@ -1052,8 +1052,6 @@ void Polygon2DEditor::_uv_draw() { 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)); } - - rect.expand_to(mtx.basis_xform(uvs[i])); } for (int i = 0; i < polygons.size(); i++) { @@ -1160,8 +1158,8 @@ void Polygon2DEditor::_uv_draw() { uv_edit_draw->draw_circle(bone_paint_pos, bone_paint_radius->get_value() * EDSCALE, Color(1, 1, 1, 0.1)); } - rect.position -= uv_edit_draw->get_size(); - rect.size += uv_edit_draw->get_size() * 2.0; + rect.position = -uv_edit_draw->get_size(); + rect.size = uv_edit_draw->get_size() * 2.0 + base_tex->get_size() * uv_draw_zoom; updating_uv_scroll = true; @@ -1189,8 +1187,8 @@ void Polygon2DEditor::_uv_draw() { Size2 vmin = uv_vscroll->get_combined_minimum_size(); // Avoid scrollbar overlapping. - uv_hscroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, uv_vscroll->is_visible() ? -vmin.width : 0); - uv_vscroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, uv_hscroll->is_visible() ? -hmin.height : 0); + uv_hscroll->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, uv_vscroll->is_visible() ? -vmin.width : 0); + uv_vscroll->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, uv_hscroll->is_visible() ? -hmin.height : 0); updating_uv_scroll = false; } diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index 77580a5604..af3b2f5aef 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index f317aebe74..b4b8e82124 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -62,7 +62,7 @@ void ResourcePreloaderEditor::_files_load_request(const Vector<String> &p_paths) dialog->set_text(TTR("ERROR: Couldn't load resource!")); dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } @@ -144,7 +144,7 @@ void ResourcePreloaderEditor::_paste_pressed() { if (!r.is_valid()) { dialog->set_text(TTR("Resource clipboard is empty!")); dialog->set_title(TTR("Error!")); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } diff --git a/editor/plugins/resource_preloader_editor_plugin.h b/editor/plugins/resource_preloader_editor_plugin.h index ddfb54c40b..bc10b48a16 100644 --- a/editor/plugins/resource_preloader_editor_plugin.h +++ b/editor/plugins/resource_preloader_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp index e107435373..50f4d8493f 100644 --- a/editor/plugins/root_motion_editor_plugin.cpp +++ b/editor/plugins/root_motion_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/root_motion_editor_plugin.h b/editor/plugins/root_motion_editor_plugin.h index cc19228470..c70fff7db7 100644 --- a/editor/plugins/root_motion_editor_plugin.h +++ b/editor/plugins/root_motion_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 8dd7d6d6e2..1af790c48d 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -234,15 +234,15 @@ static bool _is_built_in_script(Script *p_script) { class EditorScriptCodeCompletionCache : public ScriptCodeCompletionCache { struct Cache { - uint64_t time_loaded; + uint64_t time_loaded = 0; RES cache; }; Map<String, Cache> cached; public: - uint64_t max_time_cache; - int max_cache_size; + uint64_t max_time_cache = 5 * 60 * 1000; //minutes, five + int max_cache_size = 128; void cleanup() { List<Map<String, Cache>::Element *> to_clean; @@ -292,11 +292,6 @@ public: return E->get().cache; } - EditorScriptCodeCompletionCache() { - max_cache_size = 128; - max_time_cache = 5 * 60 * 1000; //minutes, five - } - virtual ~EditorScriptCodeCompletionCache() {} }; @@ -343,7 +338,7 @@ void ScriptEditorQuickOpen::_update_search() { } } - get_ok()->set_disabled(root->get_children() == nullptr); + get_ok_button()->set_disabled(root->get_children() == nullptr); } void ScriptEditorQuickOpen::_confirmed() { @@ -387,8 +382,8 @@ ScriptEditorQuickOpen::ScriptEditorQuickOpen() { search_box->connect("gui_input", callable_mp(this, &ScriptEditorQuickOpen::_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); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); search_options->connect("item_activated", callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); @@ -592,7 +587,7 @@ void ScriptEditor::_go_to_tab(int p_idx) { } void ScriptEditor::_add_recent_script(String p_path) { - if (p_path.empty()) { + if (p_path.is_empty()) { return; } @@ -707,7 +702,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) { } } if (script.is_valid()) { - if (!script->get_path().empty()) { + if (!script->get_path().is_empty()) { // Only saved scripts can be restored. previous_scripts.push_back(script->get_path()); } @@ -1134,7 +1129,7 @@ void ScriptEditor::_menu_option(int p_option) { return; } break; case FILE_REOPEN_CLOSED: { - if (previous_scripts.empty()) { + if (previous_scripts.is_empty()) { return; } @@ -1249,13 +1244,35 @@ void ScriptEditor::_menu_option(int p_option) { RES resource = current->get_edited_resource(); Ref<TextFile> text_file = resource; + Ref<Script> script = resource; + if (text_file != nullptr) { current->apply_code(); _save_text_file(text_file, text_file->get_path()); break; } + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->save_resource(resource); + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } + } break; case FILE_SAVE_AS: { if (trim_trailing_whitespace_on_save) { @@ -1274,6 +1291,8 @@ void ScriptEditor::_menu_option(int p_option) { RES resource = current->get_edited_resource(); Ref<TextFile> text_file = resource; + Ref<Script> script = resource; + if (text_file != nullptr) { file_dialog->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); @@ -1289,9 +1308,27 @@ void ScriptEditor::_menu_option(int p_option) { break; } + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->push_item(resource.ptr()); editor->save_resource_as(resource); + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } } break; case FILE_TOOL_RELOAD: @@ -1344,7 +1381,7 @@ void ScriptEditor::_menu_option(int p_option) { case SHOW_IN_FILE_SYSTEM: { const RES script = current->get_edited_resource(); const String path = script->get_path(); - if (!path.empty()) { + if (!path.is_empty()) { FileSystemDock *file_system_dock = EditorNode::get_singleton()->get_filesystem_dock(); file_system_dock->navigate_to_path(path); // Ensure that the FileSystem dock is visible. @@ -1485,12 +1522,19 @@ void ScriptEditor::_notification(int p_what) { EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &ScriptEditor::_filesystem_changed)); [[fallthrough]]; } + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_THEME_CHANGED: { help_search->set_icon(get_theme_icon("HelpSearch", "EditorIcons")); site_search->set_icon(get_theme_icon("Instance", "EditorIcons")); - script_forward->set_icon(get_theme_icon("Forward", "EditorIcons")); - script_back->set_icon(get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + script_forward->set_icon(get_theme_icon("Back", "EditorIcons")); + script_back->set_icon(get_theme_icon("Forward", "EditorIcons")); + } else { + script_forward->set_icon(get_theme_icon("Forward", "EditorIcons")); + script_back->set_icon(get_theme_icon("Back", "EditorIcons")); + } members_overview_alphabeta_sort_button->set_icon(get_theme_icon("Sort", "EditorIcons")); @@ -1597,17 +1641,6 @@ void ScriptEditor::get_breakpoints(List<String> *p_breakpoints) { } } -void ScriptEditor::ensure_focus_current() { - if (!is_inside_tree()) { - return; - } - - ScriptEditorBase *current = _get_current_editor(); - if (current) { - current->ensure_focus(); - } -} - void ScriptEditor::_members_overview_selected(int p_idx) { ScriptEditorBase *se = _get_current_editor(); if (!se) { @@ -1674,11 +1707,11 @@ struct _ScriptEditorItemData { String name; String sort_key; Ref<Texture2D> icon; - int index; + int index = 0; String tooltip; - bool used; - int category; - Node *ref; + bool used = false; + int category = 0; + Node *ref = nullptr; bool operator<(const _ScriptEditorItemData &id) const { if (category == id.category) { @@ -1854,7 +1887,7 @@ void ScriptEditor::_update_script_names() { if (se) { Ref<Texture2D> icon = se->get_theme_icon(); String path = se->get_edited_resource()->get_path(); - bool saved = !path.empty(); + bool saved = !path.is_empty(); if (saved) { // The script might be deleted, moved, or renamed, so make sure // to update original path to previously edited resource. @@ -1901,7 +1934,7 @@ void ScriptEditor::_update_script_names() { sd.name = name; } break; case DISPLAY_DIR_AND_NAME: { - if (!path.get_base_dir().get_file().empty()) { + if (!path.get_base_dir().get_file().is_empty()) { sd.name = path.get_base_dir().get_file().plus_file(name); } else { sd.name = name; @@ -1921,7 +1954,7 @@ void ScriptEditor::_update_script_names() { Vector<String> disambiguated_script_names; Vector<String> full_script_paths; for (int j = 0; j < sedata.size(); j++) { - disambiguated_script_names.append(sedata[j].name.replace("(*)", "")); + disambiguated_script_names.append(sedata[j].name.replace("(*)", "").get_file()); full_script_paths.append(sedata[j].tooltip); } @@ -1955,7 +1988,7 @@ void ScriptEditor::_update_script_names() { } } - if (_sort_list_on_update && !sedata.empty()) { + if (_sort_list_on_update && !sedata.is_empty()) { sedata.sort(); // change actual order of tab_container so that the order can be rearranged by user @@ -2019,7 +2052,7 @@ void ScriptEditor::_update_script_names() { _update_help_overview_visibility(); _update_script_colors(); - file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(FILE_REOPEN_CLOSED), previous_scripts.empty()); + file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(FILE_REOPEN_CLOSED), previous_scripts.is_empty()); } void ScriptEditor::_update_script_connections() { @@ -2311,11 +2344,33 @@ void ScriptEditor::save_all_scripts() { if (edited_res->get_path() != "" && edited_res->get_path().find("local://") == -1 && edited_res->get_path().find("::") == -1) { Ref<TextFile> text_file = edited_res; + Ref<Script> script = edited_res; + if (text_file != nullptr) { _save_text_file(text_file, text_file->get_path()); continue; } + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->save_resource(edited_res); //external script, save it + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } } } @@ -2637,7 +2692,7 @@ void ScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Co } } -void ScriptEditor::_unhandled_input(const Ref<InputEvent> &p_event) { +void ScriptEditor::_unhandled_key_input(const Ref<InputEvent> &p_event) { if (!is_visible_in_tree() || !p_event->is_pressed() || p_event->is_echo()) { return; } @@ -2751,7 +2806,7 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) { String path = scripts[i]; Dictionary script_info = scripts[i]; - if (!script_info.empty()) { + if (!script_info.is_empty()) { path = script_info["path"]; } @@ -2778,7 +2833,7 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) { } } - if (!script_info.empty()) { + if (!script_info.is_empty()) { ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(tab_container->get_tab_count() - 1)); if (se) { se->set_edit_state(script_info["state"]); @@ -2893,6 +2948,18 @@ void ScriptEditor::_help_class_goto(const String &p_desc) { _save_layout(); } +void ScriptEditor::update_doc(const String &p_name) { + ERR_FAIL_COND(!EditorHelp::get_doc_data()->has_doc(p_name)); + + for (int i = 0; i < tab_container->get_child_count(); i++) { + EditorHelp *eh = Object::cast_to<EditorHelp>(tab_container->get_child(i)); + if (eh && eh->get_class() == p_name) { + eh->update_doc(); + return; + } + } +} + void ScriptEditor::_update_selected_editor_menu() { for (int i = 0; i < tab_container->get_child_count(); i++) { bool current = tab_container->get_current_tab() == i; @@ -3165,7 +3232,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_update_script_connections", &ScriptEditor::_update_script_connections); ClassDB::bind_method("_help_class_open", &ScriptEditor::_help_class_open); ClassDB::bind_method("_live_auto_reload_running_scripts", &ScriptEditor::_live_auto_reload_running_scripts); - ClassDB::bind_method("_unhandled_input", &ScriptEditor::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &ScriptEditor::_unhandled_key_input); ClassDB::bind_method("_update_members_overview", &ScriptEditor::_update_members_overview); ClassDB::bind_method("_update_recent_scripts", &ScriptEditor::_update_recent_scripts); @@ -3292,12 +3359,13 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { ED_SHORTCUT("script_editor/window_move_down", TTR("Move Down"), KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_DOWN); ED_SHORTCUT("script_editor/next_script", TTR("Next script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_PERIOD); // these should be KEY_GREATER and KEY_LESS but those don't work ED_SHORTCUT("script_editor/prev_script", TTR("Previous script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_COMMA); - set_process_unhandled_input(true); + set_process_unhandled_key_input(true); file_menu = memnew(MenuButton); - menu_hb->add_child(file_menu); file_menu->set_text(TTR("File")); file_menu->set_switch_on_hover(true); + file_menu->set_shortcut_context(this); + menu_hb->add_child(file_menu); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New Script...")), FILE_NEW); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new_textfile", TTR("New Text File...")), FILE_NEW_TEXTFILE); @@ -3352,10 +3420,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->connect("id_pressed", callable_mp(this, &ScriptEditor::_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->set_shortcut_context(this); script_search_menu->get_popup()->connect("id_pressed", callable_mp(this, &ScriptEditor::_menu_option)); + menu_hb->add_child(script_search_menu); MenuButton *debug_menu = memnew(MenuButton); menu_hb->add_child(debug_menu); @@ -3413,7 +3482,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { tab_container->connect("tab_changed", callable_mp(this, &ScriptEditor::_tab_changed)); erase_tab_confirm = memnew(ConfirmationDialog); - erase_tab_confirm->get_ok()->set_text(TTR("Save")); + erase_tab_confirm->get_ok_button()->set_text(TTR("Save")); erase_tab_confirm->add_button(TTR("Discard"), DisplayServer::get_singleton()->get_swap_cancel_ok(), "discard"); erase_tab_confirm->connect("confirmed", callable_mp(this, &ScriptEditor::_close_current_tab)); erase_tab_confirm->connect("custom_action", callable_mp(this, &ScriptEditor::_close_discard_current_tab)); @@ -3446,7 +3515,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { disk_changed_list->set_v_size_flags(SIZE_EXPAND_FILL); disk_changed->connect("confirmed", callable_mp(this, &ScriptEditor::_reload_scripts)); - disk_changed->get_ok()->set_text(TTR("Reload")); + disk_changed->get_ok_button()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); disk_changed->connect("custom_action", callable_mp(this, &ScriptEditor::_resave_scripts)); @@ -3577,7 +3646,7 @@ void ScriptEditorPlugin::edited_scene_changed() { ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) { editor = p_node; script_editor = memnew(ScriptEditor(p_node)); - editor->get_viewport()->add_child(script_editor); + editor->get_main_control()->add_child(script_editor); script_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); script_editor->hide(); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 32f47239ef..09ed3854ea 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -291,7 +291,7 @@ class ScriptEditor : public PanelContainer { Vector<Ref<EditorSyntaxHighlighter>> syntax_highlighters; struct ScriptHistory { - Control *control; + Control *control = nullptr; Variant state; }; @@ -402,7 +402,7 @@ class ScriptEditor : public PanelContainer { 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 _unhandled_input(const Ref<InputEvent> &p_event); + void _unhandled_key_input(const Ref<InputEvent> &p_event); void _script_list_gui_input(const Ref<InputEvent> &ev); void _make_script_list_context_menu(); @@ -453,7 +453,6 @@ public: bool toggle_scripts_panel(); bool is_scripts_panel_toggled(); - void ensure_focus_current(); void apply_scripts() const; void open_script_create_dialog(const String &p_base_name, const String &p_base_path); @@ -482,6 +481,7 @@ public: void close_builtin_scripts_from_scene(const String &p_scene); void goto_help(const String &p_desc) { _help_class_goto(p_desc); } + void update_doc(const String &p_name); bool can_take_away_focus() const; diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 7feb7cb3d3..1b0e9ec781 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -84,10 +84,10 @@ ConnectionInfoDialog::ConnectionInfoDialog() { set_title(TTR("Connections to method:")); VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); - vbc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, -8 * EDSCALE); add_child(vbc); method = memnew(Label); @@ -349,7 +349,7 @@ void ScriptTextEditor::update_settings() { bool ScriptTextEditor::is_unsaved() { const bool unsaved = code_editor->get_text_editor()->get_version() != code_editor->get_text_editor()->get_saved_version() || - script->get_path().empty(); // In memory. + script->get_path().is_empty(); // In memory. return unsaved; } @@ -427,7 +427,7 @@ String ScriptTextEditor::get_name() { if (script->get_path().find("local://") == -1 && script->get_path().find("::") == -1) { name = script->get_path().get_file(); if (is_unsaved()) { - if (script->get_path().empty()) { + if (script->get_path().is_empty()) { name = TTR("[unsaved]"); } name += "(*)"; @@ -551,7 +551,7 @@ void ScriptTextEditor::_validate_script() { if (safe_lines.has(i + 1)) { te->set_line_gutter_item_color(i, line_number_gutter, safe_line_number_color); last_is_safe = true; - } else if (last_is_safe && (te->is_line_comment(i) || te->get_line(i).strip_edges().empty())) { + } else if (last_is_safe && (te->is_line_comment(i) || te->get_line(i).strip_edges().is_empty())) { te->set_line_gutter_item_color(i, line_number_gutter, safe_line_number_color); } else { te->set_line_gutter_item_color(i, line_number_gutter, default_line_number_color); @@ -912,6 +912,7 @@ void ScriptTextEditor::update_toggle_scripts_button() { void ScriptTextEditor::_update_connected_methods() { CodeEdit *text_edit = code_editor->get_text_editor(); + text_edit->set_gutter_width(connection_gutter, text_edit->get_row_height()); for (int i = 0; i < text_edit->get_line_count(); i++) { if (text_edit->get_line_gutter_metadata(i, connection_gutter) == "") { continue; @@ -1352,7 +1353,8 @@ void ScriptTextEditor::_change_syntax_highlighter(int p_idx) { void ScriptTextEditor::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_THEME_CHANGED: { + case NOTIFICATION_THEME_CHANGED: + case NOTIFICATION_ENTER_TREE: { code_editor->get_text_editor()->set_gutter_width(connection_gutter, code_editor->get_text_editor()->get_row_height()); } break; default: @@ -1677,7 +1679,7 @@ void ScriptTextEditor::_enable_code_editor() { VSplitContainer *editor_box = memnew(VSplitContainer); add_child(editor_box); - editor_box->set_anchors_and_margins_preset(Control::PRESET_WIDE); + editor_box->set_anchors_and_offsets_preset(Control::PRESET_WIDE); editor_box->set_v_size_flags(SIZE_EXPAND_FILL); editor_box->add_child(code_editor); @@ -1697,6 +1699,8 @@ void ScriptTextEditor::_enable_code_editor() { editor_box->add_child(warnings_panel); warnings_panel->add_theme_font_override( "normal_font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + warnings_panel->add_theme_font_size_override( + "normal_font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); warnings_panel->connect("meta_clicked", callable_mp(this, &ScriptTextEditor::_warning_clicked)); add_child(context_menu); @@ -1805,7 +1809,7 @@ void ScriptTextEditor::_enable_code_editor() { ScriptTextEditor::ScriptTextEditor() { code_editor = memnew(CodeTextEditor); code_editor->add_theme_constant_override("separation", 2); - code_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); + code_editor->set_anchors_and_offsets_preset(Control::PRESET_WIDE); code_editor->set_code_complete_func(_code_complete_scripts, this); code_editor->set_v_size_flags(SIZE_EXPAND_FILL); @@ -1845,6 +1849,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_menu = memnew(MenuButton); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); + edit_menu->set_shortcut_context(this); convert_case = memnew(PopupMenu); convert_case->set_name("convert_case"); @@ -1864,10 +1869,12 @@ ScriptTextEditor::ScriptTextEditor() { search_menu = memnew(MenuButton); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); + search_menu->set_shortcut_context(this); goto_menu = memnew(MenuButton); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); + goto_menu->set_shortcut_context(this); bookmarks_menu = memnew(PopupMenu); bookmarks_menu->set_name("Bookmarks"); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 1e436fbe65..17abfcf4cc 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 29db284b44..d6a816f606 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -339,7 +339,7 @@ void ShaderEditor::_menu_option(int p_option) { shader_editor->remove_all_bookmarks(); } break; case HELP_DOCS: { - OS::get_singleton()->shell_open("https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/index.html"); + OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html"); } break; } if (p_option != SEARCH_FIND && p_option != SEARCH_REPLACE && p_option != SEARCH_GOTO_LINE) { @@ -372,7 +372,6 @@ void ShaderEditor::_bind_methods() { void ShaderEditor::ensure_select_current() { /* if (tab_container->get_child_count() && tab_container->get_current_tab()>=0) { - ShaderTextEditor *ste = Object::cast_to<ShaderTextEditor>(tab_container->get_child(tab_container->get_current_tab())); if (!ste) return; @@ -559,7 +558,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { shader_editor = memnew(ShaderTextEditor); shader_editor->set_v_size_flags(SIZE_EXPAND_FILL); shader_editor->add_theme_constant_override("separation", 0); - shader_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); + shader_editor->set_anchors_and_offsets_preset(Control::PRESET_WIDE); shader_editor->connect("script_changed", callable_mp(this, &ShaderEditor::apply_shaders)); EditorSettings::get_singleton()->connect("settings_changed", callable_mp(this, &ShaderEditor::_editor_settings_changed)); @@ -582,6 +581,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { HBoxContainer *hbc = memnew(HBoxContainer); edit_menu = memnew(MenuButton); + edit_menu->set_shortcut_context(this); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); @@ -606,6 +606,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { edit_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); search_menu = memnew(MenuButton); + search_menu->set_shortcut_context(this); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); @@ -616,6 +617,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { search_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); MenuButton *goto_menu = memnew(MenuButton); + goto_menu->set_shortcut_context(this); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); goto_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); @@ -659,7 +661,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { vbc->add_child(dl); disk_changed->connect("confirmed", callable_mp(this, &ShaderEditor::_reload_shader_from_disk)); - disk_changed->get_ok()->set_text(TTR("Reload")); + disk_changed->get_ok_button()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); disk_changed->connect("custom_action", callable_mp(this, &ShaderEditor::save_external_data)); @@ -712,6 +714,8 @@ ShaderEditorPlugin::ShaderEditorPlugin(EditorNode *p_node) { shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE); button = editor->add_bottom_panel_item(TTR("Shader"), shader_editor); button->hide(); + + _2d = false; } ShaderEditorPlugin::~ShaderEditorPlugin() { diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index 904aed186a..731c0a5b7e 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -69,7 +69,6 @@ class ShaderEditor : public PanelContainer { GDCLASS(ShaderEditor, PanelContainer); enum { - EDIT_UNDO, EDIT_REDO, EDIT_CUT, diff --git a/editor/plugins/shader_file_editor_plugin.cpp b/editor/plugins/shader_file_editor_plugin.cpp index f15a801530..47d7f8204b 100644 --- a/editor/plugins/shader_file_editor_plugin.cpp +++ b/editor/plugins/shader_file_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -59,7 +59,7 @@ void ShaderFileEditor::_version_selected(int p_option) { ERR_FAIL_COND(bytecode.is_null()); for (int i = 0; i < RD::SHADER_STAGE_MAX; i++) { - if (bytecode->get_stage_bytecode(RD::ShaderStage(i)).empty() && bytecode->get_stage_compile_error(RD::ShaderStage(i)) == String()) { + if (bytecode->get_stage_bytecode(RD::ShaderStage(i)).is_empty() && bytecode->get_stage_compile_error(RD::ShaderStage(i)) == String()) { stages[i]->set_icon(Ref<Texture2D>()); continue; } @@ -182,7 +182,7 @@ void ShaderFileEditor::_update_options() { for (int i = 0; i < RD::SHADER_STAGE_MAX; i++) { Vector<uint8_t> bc = bytecode->get_stage_bytecode(RD::ShaderStage(i)); String error = bytecode->get_stage_compile_error(RD::ShaderStage(i)); - bool disable = error == String() && bc.empty(); + bool disable = error == String() && bc.is_empty(); stages[i]->set_disabled(disable); if (!disable) { if (stages[i]->is_pressed()) { diff --git a/editor/plugins/shader_file_editor_plugin.h b/editor/plugins/shader_file_editor_plugin.h index 6858f7d933..7d6e503b6c 100644 --- a/editor/plugins/shader_file_editor_plugin.h +++ b/editor/plugins/shader_file_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp index a198e4ff8f..44916e1d46 100644 --- a/editor/plugins/skeleton_2d_editor_plugin.cpp +++ b/editor/plugins/skeleton_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -129,7 +129,7 @@ void Skeleton2DEditorPlugin::make_visible(bool p_visible) { Skeleton2DEditorPlugin::Skeleton2DEditorPlugin(EditorNode *p_node) { editor = p_node; sprite_editor = memnew(Skeleton2DEditor); - editor->get_viewport()->add_child(sprite_editor); + editor->get_main_control()->add_child(sprite_editor); make_visible(false); //sprite_editor->options->hide(); diff --git a/editor/plugins/skeleton_2d_editor_plugin.h b/editor/plugins/skeleton_2d_editor_plugin.h index b8377fc914..dacd8fe43f 100644 --- a/editor/plugins/skeleton_2d_editor_plugin.h +++ b/editor/plugins/skeleton_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp index 52da8dea19..ea58a4535b 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.cpp +++ b/editor/plugins/skeleton_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -114,10 +114,11 @@ void BoneTransformEditor::_notification(int p_what) { } case NOTIFICATION_SORT_CHILDREN: { const Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Point2 buffer; buffer.x += get_theme_constant("inspector_margin", "Editor"); - buffer.y += font->get_height(); + buffer.y += font->get_height(font_size); buffer.y += get_theme_constant("vseparation", "Tree"); const float vector_height = translation_property->get_size().y; @@ -263,12 +264,7 @@ void BoneTransformEditor::_update_transform_properties(Transform tform) { } BoneTransformEditor::BoneTransformEditor(Skeleton3D *p_skeleton) : - skeleton(p_skeleton), - key_button(nullptr), - enabled_checkbox(nullptr), - keyable(false), - toggle_enabled(false), - updating(false) { + skeleton(p_skeleton) { undo_redo = EditorNode::get_undo_redo(); } @@ -297,7 +293,7 @@ void BoneTransformEditor::_key_button_pressed() { const BoneId bone_id = property.get_slicec('/', 1).to_int(); const String name = skeleton->get_bone_name(bone_id); - if (name.empty()) + if (name.is_empty()) return; // Need to normalize the basis before you key it diff --git a/editor/plugins/skeleton_3d_editor_plugin.h b/editor/plugins/skeleton_3d_editor_plugin.h index 7843fc1754..14c213f7b2 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.h +++ b/editor/plugins/skeleton_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -47,13 +47,13 @@ class EditorPropertyVector3; class BoneTransformEditor : public VBoxContainer { GDCLASS(BoneTransformEditor, VBoxContainer); - EditorInspectorSection *section; + EditorInspectorSection *section = nullptr; - EditorPropertyVector3 *translation_property; - EditorPropertyVector3 *rotation_property; - EditorPropertyVector3 *scale_property; - EditorInspectorSection *transform_section; - EditorPropertyTransform *transform_property; + EditorPropertyVector3 *translation_property = nullptr; + EditorPropertyVector3 *rotation_property = nullptr; + EditorPropertyVector3 *scale_property = nullptr; + EditorInspectorSection *transform_section = nullptr; + EditorPropertyTransform *transform_property = nullptr; Rect2 background_rects[5]; @@ -62,12 +62,12 @@ class BoneTransformEditor : public VBoxContainer { UndoRedo *undo_redo; - Button *key_button; - CheckBox *enabled_checkbox; + Button *key_button = nullptr; + CheckBox *enabled_checkbox = nullptr; - bool keyable; - bool toggle_enabled; - bool updating; + bool keyable = false; + bool toggle_enabled = false; + bool updating = false; String label; @@ -128,7 +128,6 @@ class Skeleton3DEditor : public VBoxContainer { struct BoneInfo { PhysicalBone3D *physical_bone = nullptr; Transform relative_rest; // Relative to skeleton node - BoneInfo() {} }; EditorNode *editor; @@ -136,20 +135,20 @@ class Skeleton3DEditor : public VBoxContainer { Skeleton3D *skeleton; - Tree *joint_tree; - BoneTransformEditor *rest_editor; - BoneTransformEditor *pose_editor; - BoneTransformEditor *custom_pose_editor; + Tree *joint_tree = nullptr; + BoneTransformEditor *rest_editor = nullptr; + BoneTransformEditor *pose_editor = nullptr; + BoneTransformEditor *custom_pose_editor = nullptr; - MenuButton *options; - EditorFileDialog *file_dialog; + MenuButton *options = nullptr; + EditorFileDialog *file_dialog = nullptr; - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; void _on_click_option(int p_option); void _file_selected(const String &p_file); - EditorFileDialog *file_export_lib; + EditorFileDialog *file_export_lib = nullptr; void update_joint_tree(); void update_editors(); diff --git a/editor/plugins/skeleton_ik_3d_editor_plugin.cpp b/editor/plugins/skeleton_ik_3d_editor_plugin.cpp index 8fc789b94a..2da49c1c0b 100644 --- a/editor/plugins/skeleton_ik_3d_editor_plugin.cpp +++ b/editor/plugins/skeleton_ik_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/skeleton_ik_3d_editor_plugin.h b/editor/plugins/skeleton_ik_3d_editor_plugin.h index c1585ea670..b0d2138115 100644 --- a/editor/plugins/skeleton_ik_3d_editor_plugin.h +++ b/editor/plugins/skeleton_ik_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/sprite_2d_editor_plugin.cpp b/editor/plugins/sprite_2d_editor_plugin.cpp index f5fafb68a5..03ddaa2c74 100644 --- a/editor/plugins/sprite_2d_editor_plugin.cpp +++ b/editor/plugins/sprite_2d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -120,7 +120,7 @@ void Sprite2DEditor::_menu_option(int p_option) { switch (p_option) { case MENU_OPTION_CONVERT_TO_MESH_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create Mesh2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Mesh2D")); debug_uv_dialog->set_title(TTR("Mesh2D Preview")); _update_mesh_data(); @@ -129,7 +129,7 @@ void Sprite2DEditor::_menu_option(int p_option) { } break; case MENU_OPTION_CONVERT_TO_POLYGON_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create Polygon2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Polygon2D")); debug_uv_dialog->set_title(TTR("Polygon2D Preview")); _update_mesh_data(); @@ -137,7 +137,7 @@ void Sprite2DEditor::_menu_option(int p_option) { debug_uv->update(); } break; case MENU_OPTION_CREATE_COLLISION_POLY_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create CollisionPolygon2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create CollisionPolygon2D")); debug_uv_dialog->set_title(TTR("CollisionPolygon2D Preview")); _update_mesh_data(); @@ -146,7 +146,7 @@ void Sprite2DEditor::_menu_option(int p_option) { } break; case MENU_OPTION_CREATE_LIGHT_OCCLUDER_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create LightOccluder2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create LightOccluder2D")); debug_uv_dialog->set_title(TTR("LightOccluder2D Preview")); _update_mesh_data(); @@ -340,7 +340,7 @@ void Sprite2DEditor::_convert_to_mesh_2d_node() { } void Sprite2DEditor::_convert_to_polygon_2d_node() { - if (computed_outline_lines.empty()) { + if (computed_outline_lines.is_empty()) { err_dialog->set_text(TTR("Invalid geometry, can't create polygon.")); err_dialog->popup_centered(); return; @@ -398,7 +398,7 @@ void Sprite2DEditor::_convert_to_polygon_2d_node() { } void Sprite2DEditor::_create_collision_polygon_2d_node() { - if (computed_outline_lines.empty()) { + if (computed_outline_lines.is_empty()) { err_dialog->set_text(TTR("Invalid geometry, can't create collision polygon.")); err_dialog->popup_centered(); return; @@ -420,7 +420,7 @@ void Sprite2DEditor::_create_collision_polygon_2d_node() { } void Sprite2DEditor::_create_light_occluder_2d_node() { - if (computed_outline_lines.empty()) { + if (computed_outline_lines.is_empty()) { err_dialog->set_text(TTR("Invalid geometry, can't create light occluder.")); err_dialog->popup_centered(); return; @@ -515,7 +515,7 @@ Sprite2DEditor::Sprite2DEditor() { add_child(err_dialog); debug_uv_dialog = memnew(ConfirmationDialog); - debug_uv_dialog->get_ok()->set_text(TTR("Create Mesh2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Mesh2D")); debug_uv_dialog->set_title("Mesh 2D Preview"); VBoxContainer *vb = memnew(VBoxContainer); debug_uv_dialog->add_child(vb); @@ -583,7 +583,7 @@ void Sprite2DEditorPlugin::make_visible(bool p_visible) { Sprite2DEditorPlugin::Sprite2DEditorPlugin(EditorNode *p_node) { editor = p_node; sprite_editor = memnew(Sprite2DEditor); - editor->get_viewport()->add_child(sprite_editor); + editor->get_main_control()->add_child(sprite_editor); make_visible(false); //sprite_editor->options->hide(); diff --git a/editor/plugins/sprite_2d_editor_plugin.h b/editor/plugins/sprite_2d_editor_plugin.h index 8769f19b5c..d4a1ef4312 100644 --- a/editor/plugins/sprite_2d_editor_plugin.h +++ b/editor/plugins/sprite_2d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 69a8a8d92c..2aa6ad0eaa 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -74,8 +74,8 @@ void SpriteFramesEditor::_sheet_preview_draw() { } if (frames_selected.size() == 0) { - split_sheet_dialog->get_ok()->set_disabled(true); - split_sheet_dialog->get_ok()->set_text(TTR("No Frames Selected")); + split_sheet_dialog->get_ok_button()->set_disabled(true); + split_sheet_dialog->get_ok_button()->set_text(TTR("No Frames Selected")); return; } @@ -97,8 +97,8 @@ void SpriteFramesEditor::_sheet_preview_draw() { split_sheet_preview->draw_rect(Rect2(x + 5, y + 5, width - 10, height - 10), Color(0, 0, 0, 1), false); } - split_sheet_dialog->get_ok()->set_disabled(false); - split_sheet_dialog->get_ok()->set_text(vformat(TTR("Add %d Frame(s)"), frames_selected.size())); + split_sheet_dialog->get_ok_button()->set_disabled(false); + split_sheet_dialog->get_ok_button()->set_text(vformat(TTR("Add %d Frame(s)"), frames_selected.size())); } void SpriteFramesEditor::_sheet_preview_input(const Ref<InputEvent> &p_event) { @@ -310,7 +310,7 @@ void SpriteFramesEditor::_file_load_request(const Vector<String> &p_path, int p_ dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } @@ -318,7 +318,7 @@ void SpriteFramesEditor::_file_load_request(const Vector<String> &p_path, int p_ resources.push_back(resource); } - if (resources.empty()) { + if (resources.is_empty()) { return; } @@ -361,7 +361,7 @@ void SpriteFramesEditor::_paste_pressed() { dialog->set_text(TTR("Resource clipboard is empty or not a texture!")); dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } diff --git a/editor/plugins/sprite_frames_editor_plugin.h b/editor/plugins/sprite_frames_editor_plugin.h index 0dce93f55a..bbc26ca726 100644 --- a/editor/plugins/sprite_frames_editor_plugin.h +++ b/editor/plugins/sprite_frames_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/style_box_editor_plugin.cpp b/editor/plugins/style_box_editor_plugin.cpp index 3641052a4e..64df982d5d 100644 --- a/editor/plugins/style_box_editor_plugin.cpp +++ b/editor/plugins/style_box_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/style_box_editor_plugin.h b/editor/plugins/style_box_editor_plugin.h index 41daa662db..d4a235cd10 100644 --- a/editor/plugins/style_box_editor_plugin.h +++ b/editor/plugins/style_box_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 8935b698b6..3628a2e4d1 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -119,7 +119,7 @@ String TextEditor::get_name() { if (text_file->get_path().find("local://") == -1 && text_file->get_path().find("::") == -1) { name = text_file->get_path().get_file(); if (is_unsaved()) { - if (text_file->get_path().empty()) { + if (text_file->get_path().is_empty()) { name = TTR("[unsaved]"); } name += "(*)"; @@ -242,7 +242,7 @@ void TextEditor::apply_code() { bool TextEditor::is_unsaved() { const bool unsaved = code_editor->get_text_editor()->get_version() != code_editor->get_text_editor()->get_saved_version() || - text_file->get_path().empty(); // In memory. + text_file->get_path().is_empty(); // In memory. return unsaved; } @@ -548,7 +548,7 @@ TextEditor::TextEditor() { code_editor->add_theme_constant_override("separation", 0); code_editor->connect("load_theme_settings", callable_mp(this, &TextEditor::_load_theme_settings)); code_editor->connect("validate_script", callable_mp(this, &TextEditor::_validate_script)); - code_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); + code_editor->set_anchors_and_offsets_preset(Control::PRESET_WIDE); code_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); update_settings(); @@ -563,6 +563,7 @@ TextEditor::TextEditor() { edit_hb = memnew(HBoxContainer); search_menu = memnew(MenuButton); + search_menu->set_shortcut_context(this); edit_hb->add_child(search_menu); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); @@ -577,6 +578,7 @@ TextEditor::TextEditor() { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace_in_files"), REPLACE_IN_FILES); edit_menu = memnew(MenuButton); + edit_menu->set_shortcut_context(this); edit_hb->add_child(edit_menu); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); @@ -631,6 +633,7 @@ TextEditor::TextEditor() { set_syntax_highlighter(plain_highlighter); MenuButton *goto_menu = memnew(MenuButton); + goto_menu->set_shortcut_context(this); edit_hb->add_child(goto_menu); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); diff --git a/editor/plugins/text_editor.h b/editor/plugins/text_editor.h index ea425bd033..c066d51b18 100644 --- a/editor/plugins/text_editor.h +++ b/editor/plugins/text_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/texture_3d_editor_plugin.cpp b/editor/plugins/texture_3d_editor_plugin.cpp index 8447a2346f..099257daa1 100644 --- a/editor/plugins/texture_3d_editor_plugin.cpp +++ b/editor/plugins/texture_3d_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -160,16 +160,16 @@ Texture3DEditor::Texture3DEditor() { layer->set_step(1); layer->set_max(100); add_child(layer); - layer->set_anchor(MARGIN_RIGHT, 1); - layer->set_anchor(MARGIN_LEFT, 1); + layer->set_anchor(SIDE_RIGHT, 1); + layer->set_anchor(SIDE_LEFT, 1); layer->set_h_grow_direction(GROW_DIRECTION_BEGIN); layer->set_modulate(Color(1, 1, 1, 0.8)); info = memnew(Label); add_child(info); - info->set_anchor(MARGIN_RIGHT, 1); - info->set_anchor(MARGIN_LEFT, 1); - info->set_anchor(MARGIN_BOTTOM, 1); - info->set_anchor(MARGIN_TOP, 1); + info->set_anchor(SIDE_RIGHT, 1); + info->set_anchor(SIDE_LEFT, 1); + info->set_anchor(SIDE_BOTTOM, 1); + info->set_anchor(SIDE_TOP, 1); info->set_h_grow_direction(GROW_DIRECTION_BEGIN); info->set_v_grow_direction(GROW_DIRECTION_BEGIN); info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); diff --git a/editor/plugins/texture_3d_editor_plugin.h b/editor/plugins/texture_3d_editor_plugin.h index 4fbf47ecfe..944abf16d9 100644 --- a/editor/plugins/texture_3d_editor_plugin.h +++ b/editor/plugins/texture_3d_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index f8facb0fd5..1d3fd668c6 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -79,6 +79,7 @@ void TextureEditor::_notification(int p_what) { draw_texture_rect(texture, Rect2(ofs_x, ofs_y, tex_width, tex_height)); Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); String format; if (Object::cast_to<ImageTexture>(*texture)) { @@ -90,16 +91,16 @@ void TextureEditor::_notification(int p_what) { } String text = itos(texture->get_width()) + "x" + itos(texture->get_height()) + " " + format; - Size2 rect = font->get_string_size(text); + Size2 rect = font->get_string_size(text, font_size); - Vector2 draw_from = size - rect + Size2(-2, font->get_ascent() - 2); + Vector2 draw_from = size - rect + Size2(-2, font->get_ascent(font_size) - 2); if (draw_from.x < 0) { draw_from.x = 0; } - draw_string(font, draw_from + Vector2(2, 2), text, Color(0, 0, 0, 0.5), size.width); - draw_string(font, draw_from - Vector2(2, 2), text, Color(0, 0, 0, 0.5), size.width); - draw_string(font, draw_from, text, Color(1, 1, 1, 1), size.width); + draw_string(font, draw_from + Vector2(2, 2), text, HALIGN_LEFT, size.width, font_size, Color(0, 0, 0, 0.5)); + draw_string(font, draw_from - Vector2(2, 2), text, HALIGN_LEFT, size.width, font_size, Color(0, 0, 0, 0.5)); + draw_string(font, draw_from, text, HALIGN_LEFT, size.width, font_size, Color(1, 1, 1, 1)); } } diff --git a/editor/plugins/texture_editor_plugin.h b/editor/plugins/texture_editor_plugin.h index 0d4452c662..621d737028 100644 --- a/editor/plugins/texture_editor_plugin.h +++ b/editor/plugins/texture_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/texture_layered_editor_plugin.cpp b/editor/plugins/texture_layered_editor_plugin.cpp index eafe4d546b..3b95ed813f 100644 --- a/editor/plugins/texture_layered_editor_plugin.cpp +++ b/editor/plugins/texture_layered_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -225,16 +225,16 @@ TextureLayeredEditor::TextureLayeredEditor() { layer->set_step(1); layer->set_max(100); add_child(layer); - layer->set_anchor(MARGIN_RIGHT, 1); - layer->set_anchor(MARGIN_LEFT, 1); + layer->set_anchor(SIDE_RIGHT, 1); + layer->set_anchor(SIDE_LEFT, 1); layer->set_h_grow_direction(GROW_DIRECTION_BEGIN); layer->set_modulate(Color(1, 1, 1, 0.8)); info = memnew(Label); add_child(info); - info->set_anchor(MARGIN_RIGHT, 1); - info->set_anchor(MARGIN_LEFT, 1); - info->set_anchor(MARGIN_BOTTOM, 1); - info->set_anchor(MARGIN_TOP, 1); + info->set_anchor(SIDE_RIGHT, 1); + info->set_anchor(SIDE_LEFT, 1); + info->set_anchor(SIDE_BOTTOM, 1); + info->set_anchor(SIDE_TOP, 1); info->set_h_grow_direction(GROW_DIRECTION_BEGIN); info->set_v_grow_direction(GROW_DIRECTION_BEGIN); info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); diff --git a/editor/plugins/texture_layered_editor_plugin.h b/editor/plugins/texture_layered_editor_plugin.h index 9a28d2dff8..4bcc8fa1f1 100644 --- a/editor/plugins/texture_layered_editor_plugin.h +++ b/editor/plugins/texture_layered_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index f599b94428..53e127d4c8 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -177,7 +177,7 @@ void TextureRegionEditor::_region_draw() { } ofs = (endpoints[next] - endpoints[i]) / 2; - ofs += (endpoints[next] - endpoints[i]).tangent().normalized() * (select_handle->get_size().width / 2); + ofs += (endpoints[next] - endpoints[i]).orthogonal().normalized() * (select_handle->get_size().width / 2); if (snap_mode != SNAP_AUTOSLICE) { edit_draw->draw_texture(select_handle, (endpoints[i] + ofs - (select_handle->get_size() / 2)).floor() - draw_ofs * draw_zoom); @@ -217,23 +217,23 @@ void TextureRegionEditor::_region_draw() { Size2 vmin = vscroll->get_combined_minimum_size(); // Avoid scrollbar overlapping. - hscroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, vscroll->is_visible() ? -vmin.width : 0); - vscroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, hscroll->is_visible() ? -hmin.height : 0); + hscroll->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, vscroll->is_visible() ? -vmin.width : 0); + vscroll->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, hscroll->is_visible() ? -hmin.height : 0); updating_scroll = false; if (node_ninepatch || obj_styleBox.is_valid()) { float margins[4] = { 0 }; if (node_ninepatch) { - margins[0] = node_ninepatch->get_patch_margin(MARGIN_TOP); - margins[1] = node_ninepatch->get_patch_margin(MARGIN_BOTTOM); - margins[2] = node_ninepatch->get_patch_margin(MARGIN_LEFT); - margins[3] = node_ninepatch->get_patch_margin(MARGIN_RIGHT); + margins[0] = node_ninepatch->get_patch_margin(SIDE_TOP); + margins[1] = node_ninepatch->get_patch_margin(SIDE_BOTTOM); + margins[2] = node_ninepatch->get_patch_margin(SIDE_LEFT); + margins[3] = node_ninepatch->get_patch_margin(SIDE_RIGHT); } else if (obj_styleBox.is_valid()) { - margins[0] = obj_styleBox->get_margin_size(MARGIN_TOP); - margins[1] = obj_styleBox->get_margin_size(MARGIN_BOTTOM); - margins[2] = obj_styleBox->get_margin_size(MARGIN_LEFT); - margins[3] = obj_styleBox->get_margin_size(MARGIN_RIGHT); + margins[0] = obj_styleBox->get_margin_size(SIDE_TOP); + margins[1] = obj_styleBox->get_margin_size(SIDE_BOTTOM); + margins[2] = obj_styleBox->get_margin_size(SIDE_LEFT); + margins[3] = obj_styleBox->get_margin_size(SIDE_RIGHT); } Vector2 pos[4] = { @@ -278,15 +278,15 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { edited_margin = -1; float margins[4] = { 0 }; if (node_ninepatch) { - margins[0] = node_ninepatch->get_patch_margin(MARGIN_TOP); - margins[1] = node_ninepatch->get_patch_margin(MARGIN_BOTTOM); - margins[2] = node_ninepatch->get_patch_margin(MARGIN_LEFT); - margins[3] = node_ninepatch->get_patch_margin(MARGIN_RIGHT); + margins[0] = node_ninepatch->get_patch_margin(SIDE_TOP); + margins[1] = node_ninepatch->get_patch_margin(SIDE_BOTTOM); + margins[2] = node_ninepatch->get_patch_margin(SIDE_LEFT); + margins[3] = node_ninepatch->get_patch_margin(SIDE_RIGHT); } else if (obj_styleBox.is_valid()) { - margins[0] = obj_styleBox->get_margin_size(MARGIN_TOP); - margins[1] = obj_styleBox->get_margin_size(MARGIN_BOTTOM); - margins[2] = obj_styleBox->get_margin_size(MARGIN_LEFT); - margins[3] = obj_styleBox->get_margin_size(MARGIN_RIGHT); + margins[0] = obj_styleBox->get_margin_size(SIDE_TOP); + margins[1] = obj_styleBox->get_margin_size(SIDE_BOTTOM); + margins[2] = obj_styleBox->get_margin_size(SIDE_LEFT); + margins[3] = obj_styleBox->get_margin_size(SIDE_RIGHT); } Vector2 pos[4] = { @@ -395,13 +395,13 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } else if (drag) { if (edited_margin >= 0) { undo_redo->create_action(TTR("Set Margin")); - static Margin m[4] = { MARGIN_TOP, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT }; + static Side side[4] = { SIDE_TOP, SIDE_BOTTOM, SIDE_LEFT, SIDE_RIGHT }; if (node_ninepatch) { - undo_redo->add_do_method(node_ninepatch, "set_patch_margin", m[edited_margin], node_ninepatch->get_patch_margin(m[edited_margin])); - undo_redo->add_undo_method(node_ninepatch, "set_patch_margin", m[edited_margin], prev_margin); + undo_redo->add_do_method(node_ninepatch, "set_patch_margin", side[edited_margin], node_ninepatch->get_patch_margin(side[edited_margin])); + undo_redo->add_undo_method(node_ninepatch, "set_patch_margin", side[edited_margin], prev_margin); } else if (obj_styleBox.is_valid()) { - undo_redo->add_do_method(obj_styleBox.ptr(), "set_margin_size", m[edited_margin], obj_styleBox->get_margin_size(m[edited_margin])); - undo_redo->add_undo_method(obj_styleBox.ptr(), "set_margin_size", m[edited_margin], prev_margin); + undo_redo->add_do_method(obj_styleBox.ptr(), "set_margin_size", side[edited_margin], obj_styleBox->get_margin_size(side[edited_margin])); + undo_redo->add_undo_method(obj_styleBox.ptr(), "set_margin_size", side[edited_margin], prev_margin); obj_styleBox->emit_signal(CoreStringNames::get_singleton()->changed); } edited_margin = -1; @@ -438,12 +438,12 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { if (drag) { drag = false; if (edited_margin >= 0) { - static Margin m[4] = { MARGIN_TOP, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT }; + static Side side[4] = { SIDE_TOP, SIDE_BOTTOM, SIDE_LEFT, SIDE_RIGHT }; if (node_ninepatch) { - node_ninepatch->set_patch_margin(m[edited_margin], prev_margin); + node_ninepatch->set_patch_margin(side[edited_margin], prev_margin); } if (obj_styleBox.is_valid()) { - obj_styleBox->set_margin_size(m[edited_margin], prev_margin); + obj_styleBox->set_margin_size(side[edited_margin], prev_margin); } edited_margin = -1; } else { @@ -486,12 +486,12 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { if (new_margin < 0) { new_margin = 0; } - static Margin m[4] = { MARGIN_TOP, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT }; + static Side side[4] = { SIDE_TOP, SIDE_BOTTOM, SIDE_LEFT, SIDE_RIGHT }; if (node_ninepatch) { - node_ninepatch->set_patch_margin(m[edited_margin], new_margin); + node_ninepatch->set_patch_margin(side[edited_margin], new_margin); } if (obj_styleBox.is_valid()) { - obj_styleBox->set_margin_size(m[edited_margin], new_margin); + obj_styleBox->set_margin_size(side[edited_margin], new_margin); } } else { Vector2 new_pos = mtx.affine_inverse().xform(mm->get_position()); @@ -772,8 +772,8 @@ void TextureRegionEditor::_notification(int p_what) { zoom_reset->set_icon(get_theme_icon("ZoomReset", "EditorIcons")); zoom_in->set_icon(get_theme_icon("ZoomMore", "EditorIcons")); - vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); - hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + vscroll->set_anchors_and_offsets_preset(PRESET_RIGHT_WIDE); + hscroll->set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE); } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (snap_mode == SNAP_AUTOSLICE && is_visible() && autoslice_is_dirty) { diff --git a/editor/plugins/texture_region_editor_plugin.h b/editor/plugins/texture_region_editor_plugin.h index e9f58006a4..56ccefb025 100644 --- a/editor/plugins/texture_region_editor_plugin.h +++ b/editor/plugins/texture_region_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 932ded6938..dfa8c04145 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -78,9 +78,12 @@ void ThemeEditor::_name_menu_about_to_show() { Theme::get_default()->get_font_list(fromtype, &names); break; case 3: - Theme::get_default()->get_color_list(fromtype, &names); + Theme::get_default()->get_font_size_list(fromtype, &names); break; case 4: + Theme::get_default()->get_color_list(fromtype, &names); + break; + case 5: Theme::get_default()->get_constant_list(fromtype, &names); break; } @@ -88,6 +91,7 @@ void ThemeEditor::_name_menu_about_to_show() { theme->get_icon_list(fromtype, &names); theme->get_stylebox_list(fromtype, &names); theme->get_font_list(fromtype, &names); + theme->get_font_size_list(fromtype, &names); theme->get_color_list(fromtype, &names); theme->get_constant_list(fromtype, &names); } @@ -120,6 +124,7 @@ struct _TECategory { Set<RefItem<StyleBox>> stylebox_items; Set<RefItem<Font>> font_items; + Set<Item<int>> font_size_items; Set<RefItem<Texture2D>> icon_items; Set<Item<Color>> color_items; @@ -160,6 +165,15 @@ void ThemeEditor::_save_template_cbk(String fname) { tc.font_items.insert(it); } + List<StringName> font_size_list; + Theme::get_default()->get_font_size_list(E->key(), &font_list); + for (List<StringName>::Element *F = font_size_list.front(); F; F = F->next()) { + _TECategory::Item<int> it; + it.name = F->get(); + it.item = Theme::get_default()->get_font_size(F->get(), E->key()); + tc.font_size_items.insert(it); + } + 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()) { @@ -284,6 +298,14 @@ void ThemeEditor::_save_template_cbk(String fname) { file->store_line(E->key() + "." + F->get().name + " = default"); } + if (tc.font_size_items.size()) { + file->store_line("\n; Font Size Items:\n"); + } + + for (Set<_TECategory::Item<int>>::Element *F = tc.font_size_items.front(); F; F = F->next()) { + file->store_line(E->key() + "." + F->get().name + " = default"); + } + if (tc.icon_items.size()) { file->store_line("\n; Icon Items:\n"); } @@ -327,9 +349,12 @@ void ThemeEditor::_dialog_cbk() { 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()); + theme->set_font_size(name_edit->get_text(), type_edit->get_text(), -1); break; case 4: + theme->set_color(name_edit->get_text(), type_edit->get_text(), Color()); + break; + case 5: theme->set_constant(name_edit->get_text(), type_edit->get_text(), 0); break; } @@ -362,6 +387,13 @@ void ThemeEditor::_dialog_cbk() { } { names.clear(); + Theme::get_default()->get_font_size_list(fromtype, &names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + theme->set_font_size(E->get(), fromtype, Theme::get_default()->get_font_size(E->get(), fromtype)); + } + } + { + names.clear(); Theme::get_default()->get_color_list(fromtype, &names); for (List<StringName>::Element *E = names.front(); E; E = E->next()) { theme->set_color(E->get(), fromtype, Theme::get_default()->get_color(E->get(), fromtype)); @@ -387,9 +419,12 @@ void ThemeEditor::_dialog_cbk() { theme->clear_font(name_edit->get_text(), type_edit->get_text()); break; case 3: - theme->clear_color(name_edit->get_text(), type_edit->get_text()); + theme->clear_font_size(name_edit->get_text(), type_edit->get_text()); break; case 4: + theme->clear_color(name_edit->get_text(), type_edit->get_text()); + break; + case 5: theme->clear_constant(name_edit->get_text(), type_edit->get_text()); break; } @@ -422,6 +457,13 @@ void ThemeEditor::_dialog_cbk() { } { names.clear(); + Theme::get_default()->get_font_size_list(fromtype, &names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + theme->clear_font_size(E->get(), fromtype); + } + } + { + names.clear(); Theme::get_default()->get_color_list(fromtype, &names); for (List<StringName>::Element *E = names.front(); E; E = E->next()) { theme->clear_color(E->get(), fromtype); @@ -465,13 +507,6 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { theme->set_icon(E->get(), type, import ? base_theme->get_icon(E->get(), type) : Ref<Texture2D>()); } - List<StringName> shaders; - base_theme->get_shader_list(type, &shaders); - - for (List<StringName>::Element *E = shaders.front(); E; E = E->next()) { - theme->set_shader(E->get(), type, import ? base_theme->get_shader(E->get(), type) : Ref<Shader>()); - } - List<StringName> styleboxs; base_theme->get_stylebox_list(type, &styleboxs); @@ -486,6 +521,13 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { theme->set_font(E->get(), type, Ref<Font>()); } + List<StringName> font_sizes; + base_theme->get_font_size_list(type, &font_sizes); + + for (List<StringName>::Element *E = font_sizes.front(); E; E = E->next()) { + theme->set_font_size(E->get(), type, base_theme->get_font_size(E->get(), type)); + } + List<StringName> colors; base_theme->get_color_list(type, &colors); @@ -514,7 +556,7 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { if (p_option == POPUP_ADD) { // Add. add_del_dialog->set_title(TTR("Add Item")); - add_del_dialog->get_ok()->set_text(TTR("Add")); + add_del_dialog->get_ok_button()->set_text(TTR("Add")); add_del_dialog->popup_centered(Size2(490, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -522,7 +564,7 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { } else if (p_option == POPUP_CLASS_ADD) { // Add. add_del_dialog->set_title(TTR("Add All Items")); - add_del_dialog->get_ok()->set_text(TTR("Add All")); + add_del_dialog->get_ok_button()->set_text(TTR("Add All")); add_del_dialog->popup_centered(Size2(240, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -534,14 +576,14 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { } else if (p_option == POPUP_REMOVE) { add_del_dialog->set_title(TTR("Remove Item")); - add_del_dialog->get_ok()->set_text(TTR("Remove")); + add_del_dialog->get_ok_button()->set_text(TTR("Remove")); add_del_dialog->popup_centered(Size2(490, 85) * EDSCALE); base_theme = theme; } else if (p_option == POPUP_CLASS_REMOVE) { add_del_dialog->set_title(TTR("Remove All Items")); - add_del_dialog->get_ok()->set_text(TTR("Remove All")); + add_del_dialog->get_ok_button()->set_text(TTR("Remove All")); add_del_dialog->popup_centered(Size2(240, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -860,12 +902,13 @@ ThemeEditor::ThemeEditor() { type_select->add_item(TTR("Icon")); type_select->add_item(TTR("Style")); type_select->add_item(TTR("Font")); + type_select->add_item(TTR("Font Size")); type_select->add_item(TTR("Color")); type_select->add_item(TTR("Constant")); dialog_vbc->add_child(type_select); - add_del_dialog->get_ok()->connect("pressed", callable_mp(this, &ThemeEditor::_dialog_cbk)); + add_del_dialog->get_ok_button()->connect("pressed", callable_mp(this, &ThemeEditor::_dialog_cbk)); file_dialog = memnew(EditorFileDialog); file_dialog->add_filter("*.theme ; " + TTR("Theme File")); diff --git a/editor/plugins/theme_editor_plugin.h b/editor/plugins/theme_editor_plugin.h index e374dd8714..ab199f8e51 100644 --- a/editor/plugins/theme_editor_plugin.h +++ b/editor/plugins/theme_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 7b516175b2..6a16aa28a9 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -39,7 +39,10 @@ #include "scene/gui/split_container.h" void TileMapEditor::_node_removed(Node *p_node) { - if (p_node == node) { + if (p_node == node && node) { + // Fixes #44824, which describes a situation where you can reselect a TileMap node without first de-selecting it when switching scenes. + node->disconnect("settings_changed", callable_mp(this, &TileMapEditor::_tileset_settings_changed)); + node = nullptr; } } @@ -262,7 +265,7 @@ Vector<int> TileMapEditor::get_selected_tiles() const { } void TileMapEditor::set_selected_tiles(Vector<int> p_tiles) { - palette->unselect_all(); + palette->deselect_all(); for (int i = p_tiles.size() - 1; i >= 0; i--) { int idx = palette->find_metadata(p_tiles[i]); @@ -409,7 +412,7 @@ void TileMapEditor::_sbox_input(const Ref<InputEvent> &p_ie) { // In modern C++ this could have been inside its body. namespace { struct _PaletteEntry { - int id; + int id = 0; String name; bool operator<(const _PaletteEntry &p_rhs) const { @@ -449,7 +452,7 @@ void TileMapEditor::_update_palette() { List<int> tiles; tileset->get_tile_list(&tiles); - if (tiles.empty()) { + if (tiles.is_empty()) { return; } @@ -1779,7 +1782,7 @@ void TileMapEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { return; } - if (paint_undo.empty()) { + if (paint_undo.is_empty()) { return; } @@ -1810,7 +1813,7 @@ void TileMapEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { } } } else if (tool == TOOL_PASTING) { - if (copydata.empty()) { + if (copydata.is_empty()) { return; } @@ -2085,7 +2088,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { 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); + info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); palette->add_child(info_message); // Add autotile override palette. @@ -2109,6 +2112,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { paint_button = memnew(Button); paint_button->set_flat(true); paint_button->set_shortcut(ED_SHORTCUT("tile_map_editor/paint_tile", TTR("Paint Tile"), KEY_P)); + paint_button->set_shortcut_context(this); paint_button->set_tooltip(TTR("RMB: Erase")); paint_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_NONE)); paint_button->set_toggle_mode(true); @@ -2117,6 +2121,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { line_button = memnew(Button); line_button->set_flat(true); line_button->set_shortcut(ED_SHORTCUT("tile_map_editor/line_fill", TTR("Line Fill"), KEY_L)); + line_button->set_shortcut_context(this); line_button->set_tooltip(TTR("RMB: Erase")); line_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_LINE_PAINT)); line_button->set_toggle_mode(true); @@ -2125,6 +2130,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rectangle_button = memnew(Button); rectangle_button->set_flat(true); rectangle_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rectangle_fill", TTR("Rectangle Fill"), KEY_O)); + rectangle_button->set_shortcut_context(this); rectangle_button->set_tooltip(TTR("Shift+LMB: Keep 1:1 proporsions\nRMB: Erase")); rectangle_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_RECTANGLE_PAINT)); rectangle_button->set_toggle_mode(true); @@ -2133,6 +2139,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { bucket_fill_button = memnew(Button); bucket_fill_button->set_flat(true); bucket_fill_button->set_shortcut(ED_SHORTCUT("tile_map_editor/bucket_fill", TTR("Bucket Fill"), KEY_B)); + bucket_fill_button->set_shortcut_context(this); bucket_fill_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_BUCKET)); bucket_fill_button->set_toggle_mode(true); toolbar->add_child(bucket_fill_button); @@ -2140,6 +2147,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { picker_button = memnew(Button); picker_button->set_flat(true); picker_button->set_shortcut(ED_SHORTCUT("tile_map_editor/pick_tile", TTR("Pick Tile"), KEY_I)); + picker_button->set_shortcut_context(this); picker_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_PICKING)); picker_button->set_toggle_mode(true); toolbar->add_child(picker_button); @@ -2147,6 +2155,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { select_button = memnew(Button); select_button->set_flat(true); select_button->set_shortcut(ED_SHORTCUT("tile_map_editor/select", TTR("Select"), KEY_M)); + select_button->set_shortcut_context(this); select_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_SELECTING)); select_button->set_toggle_mode(true); toolbar->add_child(select_button); @@ -2165,15 +2174,16 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { tile_info->set_modulate(Color(1, 1, 1, 0.8)); tile_info->set_mouse_filter(MOUSE_FILTER_IGNORE); tile_info->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + tile_info->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); // The tile info is only displayed after a tile has been hovered. tile_info->hide(); CanvasItemEditor::get_singleton()->add_control_to_info_overlay(tile_info); // Menu. options = memnew(MenuButton); + options->set_shortcut_context(this); options->set_text("TileMap"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon("TileMap", "EditorIcons")); - options->set_process_unhandled_key_input(false); toolbar_right->add_child(options); PopupMenu *p = options->get_popup(); @@ -2190,6 +2200,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rotate_left_button->set_focus_mode(FOCUS_NONE); rotate_left_button->connect("pressed", callable_mp(this, &TileMapEditor::_rotate), varray(-1)); rotate_left_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_left", TTR("Rotate Left"), KEY_A)); + rotate_left_button->set_shortcut_context(this); tool_hb->add_child(rotate_left_button); rotate_right_button = memnew(Button); @@ -2198,6 +2209,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rotate_right_button->set_focus_mode(FOCUS_NONE); rotate_right_button->connect("pressed", callable_mp(this, &TileMapEditor::_rotate), varray(1)); rotate_right_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_right", TTR("Rotate Right"), KEY_S)); + rotate_right_button->set_shortcut_context(this); tool_hb->add_child(rotate_right_button); flip_horizontal_button = memnew(Button); @@ -2206,6 +2218,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { flip_horizontal_button->set_focus_mode(FOCUS_NONE); flip_horizontal_button->connect("pressed", callable_mp(this, &TileMapEditor::_flip_horizontal)); flip_horizontal_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_horizontal", TTR("Flip Horizontally"), KEY_X)); + flip_horizontal_button->set_shortcut_context(this); tool_hb->add_child(flip_horizontal_button); flip_vertical_button = memnew(Button); @@ -2214,6 +2227,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { flip_vertical_button->set_focus_mode(FOCUS_NONE); flip_vertical_button->connect("pressed", callable_mp(this, &TileMapEditor::_flip_vertical)); flip_vertical_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_vertical", TTR("Flip Vertically"), KEY_Z)); + flip_vertical_button->set_shortcut_context(this); tool_hb->add_child(flip_vertical_button); clear_transform_button = memnew(Button); @@ -2222,6 +2236,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { clear_transform_button->set_focus_mode(FOCUS_NONE); clear_transform_button->connect("pressed", callable_mp(this, &TileMapEditor::_clear_transform)); clear_transform_button->set_shortcut(ED_SHORTCUT("tile_map_editor/clear_transform", TTR("Clear Transform"), KEY_W)); + clear_transform_button->set_shortcut_context(this); tool_hb->add_child(clear_transform_button); clear_transform_button->set_disabled(true); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index f57616db1f..421a3b3f68 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -43,7 +43,6 @@ class TileMapEditor : public VBoxContainer { GDCLASS(TileMapEditor, VBoxContainer); enum Tool { - TOOL_NONE, TOOL_PAINTING, TOOL_ERASING, @@ -58,7 +57,6 @@ class TileMapEditor : public VBoxContainer { }; enum Options { - OPTION_COPY, OPTION_ERASE_SELECTION, OPTION_FIX_INVALID, @@ -133,8 +131,6 @@ class TileMapEditor : public VBoxContainer { bool yf = false; bool tr = false; Vector2 ac; - - CellOp() {} }; Map<Point2i, CellOp> paint_undo; @@ -146,8 +142,6 @@ class TileMapEditor : public VBoxContainer { bool flip_v = false; bool transpose = false; Point2i autotile_coord; - - TileData() {} }; List<TileData> copydata; diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 9c589267fc..deeab2fbc7 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -279,6 +279,8 @@ void TileSetEditor::_notification(int p_what) { case NOTIFICATION_READY: { add_theme_constant_override("autohide", 1); // Fixes the dragger always showing up. } break; + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_theme_icon("ToolAddNode", "EditorIcons")); @@ -296,8 +298,13 @@ void TileSetEditor::_notification(int p_what) { tools[BITMASK_CLEAR]->set_icon(get_theme_icon("Clear", "EditorIcons")); tools[SHAPE_NEW_POLYGON]->set_icon(get_theme_icon("CollisionPolygon2D", "EditorIcons")); tools[SHAPE_NEW_RECTANGLE]->set_icon(get_theme_icon("CollisionShape2D", "EditorIcons")); - tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); - tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + if (is_layout_rtl()) { + tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); + tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + } else { + tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); + } tools[SHAPE_DELETE]->set_icon(get_theme_icon("Remove", "EditorIcons")); tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_theme_icon("Snap", "EditorIcons")); tools[TOOL_GRID_SNAP]->set_icon(get_theme_icon("SnapGrid", "EditorIcons")); @@ -407,6 +414,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb->move_child(tools[SELECT_NEXT], WORKSPACE_CREATE_SINGLE); tools[SELECT_NEXT]->set_flat(true); tools[SELECT_NEXT]->set_shortcut(ED_SHORTCUT("tileset_editor/next_shape", TTR("Next Coordinate"), KEY_PAGEDOWN)); + tools[SELECT_NEXT]->set_shortcut_context(this); tools[SELECT_NEXT]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SELECT_NEXT)); tools[SELECT_NEXT]->set_tooltip(TTR("Select the next shape, subtile, or Tile.")); tools[SELECT_PREVIOUS] = memnew(Button); @@ -414,6 +422,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb->move_child(tools[SELECT_PREVIOUS], WORKSPACE_CREATE_SINGLE); tools[SELECT_PREVIOUS]->set_flat(true); tools[SELECT_PREVIOUS]->set_shortcut(ED_SHORTCUT("tileset_editor/previous_shape", TTR("Previous Coordinate"), KEY_PAGEUP)); + tools[SELECT_PREVIOUS]->set_shortcut_context(this); tools[SELECT_PREVIOUS]->set_tooltip(TTR("Select the previous shape, subtile, or Tile.")); tools[SELECT_PREVIOUS]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SELECT_PREVIOUS)); @@ -460,6 +469,16 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_editmode[EDITMODE_ICON]->set_shortcut(ED_SHORTCUT("tileset_editor/editmode_icon", TTR("Icon Mode"), KEY_7)); tool_editmode[EDITMODE_Z_INDEX]->set_shortcut(ED_SHORTCUT("tileset_editor/editmode_z_index", TTR("Z Index Mode"), KEY_8)); + tool_editmode[EDITMODE_REGION]->set_shortcut_context(this); + tool_editmode[EDITMODE_REGION]->set_shortcut_context(this); + tool_editmode[EDITMODE_COLLISION]->set_shortcut_context(this); + tool_editmode[EDITMODE_OCCLUSION]->set_shortcut_context(this); + tool_editmode[EDITMODE_NAVIGATION]->set_shortcut_context(this); + tool_editmode[EDITMODE_BITMASK]->set_shortcut_context(this); + tool_editmode[EDITMODE_PRIORITY]->set_shortcut_context(this); + tool_editmode[EDITMODE_ICON]->set_shortcut_context(this); + tool_editmode[EDITMODE_Z_INDEX]->set_shortcut_context(this); + main_vb->add_child(tool_hb); separator_editmode = memnew(HSeparator); main_vb->add_child(separator_editmode); @@ -500,6 +519,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_NEW_RECTANGLE]->set_button_group(tg); tools[SHAPE_NEW_RECTANGLE]->set_tooltip(TTR("Create a new rectangle.")); tools[SHAPE_NEW_RECTANGLE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_RECTANGLE)); + tools[SHAPE_NEW_RECTANGLE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_rectangle", TTR("New Rectangle"), KEY_MASK_SHIFT | KEY_R)); tools[SHAPE_NEW_POLYGON] = memnew(Button); toolbar->add_child(tools[SHAPE_NEW_POLYGON]); @@ -508,6 +528,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_NEW_POLYGON]->set_button_group(tg); tools[SHAPE_NEW_POLYGON]->set_tooltip(TTR("Create a new polygon.")); tools[SHAPE_NEW_POLYGON]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_POLYGON)); + tools[SHAPE_NEW_POLYGON]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_polygon", TTR("New Polygon"), KEY_MASK_SHIFT | KEY_P)); separator_shape_toggle = memnew(VSeparator); toolbar->add_child(separator_shape_toggle); @@ -521,6 +542,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_DELETE] = memnew(Button); tools[SHAPE_DELETE]->set_flat(true); tools[SHAPE_DELETE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_DELETE)); + tools[SHAPE_DELETE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_delete", TTR("Delete Selected Shape"), KEY_MASK_SHIFT | KEY_BACKSPACE)); toolbar->add_child(tools[SHAPE_DELETE]); spin_priority = memnew(SpinBox); @@ -1170,11 +1192,12 @@ void TileSetEditor::_on_workspace_overlay_draw() { } String tile_id_name = String::num(t_id, 0) + ": " + tileset->tile_get_name(t_id); Ref<Font> font = get_theme_font("font", "Label"); - region.set_size(font->get_string_size(tile_id_name)); + int font_size = get_theme_font_size("font_size", "Label"); + region.set_size(font->get_string_size(tile_id_name, font_size)); workspace_overlay->draw_rect(region, c); region.position.y += region.size.y - 2; c = Color(0.1, 0.1, 0.1); - workspace_overlay->draw_string(font, region.position, tile_id_name, c); + workspace_overlay->draw_string(font, region.position, tile_id_name, HALIGN_LEFT, -1, font_size, c); } delete tiles; } @@ -2336,8 +2359,8 @@ void TileSetEditor::_set_edited_collision_shape(const Ref<Shape2D> &p_shape) { } void TileSetEditor::_set_snap_step(Vector2 p_val) { - snap_step.x = CLAMP(p_val.x, 0, 256); - snap_step.y = CLAMP(p_val.y, 0, 256); + snap_step.x = CLAMP(p_val.x, 1, 256); + snap_step.y = CLAMP(p_val.y, 1, 256); workspace->update(); } @@ -3597,11 +3620,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_compat("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->connect("idle_frame", Callable(tileset_editor, "_on_workspace_process")); } else { editor->hide_bottom_panel(); tileset_editor_button->hide(); - get_tree()->disconnect_compat("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->disconnect("idle_frame", Callable(tileset_editor, "_on_workspace_process")); } } diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index 72eb14941c..e778c18f44 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp index 5e98b2d98b..0af3b936cb 100644 --- a/editor/plugins/version_control_editor_plugin.cpp +++ b/editor/plugins/version_control_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -119,19 +119,13 @@ void VersionControlEditorPlugin::_initialize_vcs() { } void VersionControlEditorPlugin::_send_commit_msg() { - String msg = commit_message->get_text(); - if (msg == "") { - commit_status->set_text(TTR("No commit message was provided")); - return; - } - if (EditorVCSInterface::get_singleton()) { if (staged_files_count == 0) { commit_status->set_text(TTR("No files added to stage")); return; } - EditorVCSInterface::get_singleton()->commit(msg); + EditorVCSInterface::get_singleton()->commit(commit_message->get_text()); commit_message->set_text(""); version_control_dock_button->set_pressed(false); @@ -294,6 +288,10 @@ void VersionControlEditorPlugin::_update_commit_status() { staged_files_count = 0; } +void VersionControlEditorPlugin::_update_commit_button() { + commit_button->set_disabled(commit_message->get_text().strip_edges() == ""); +} + void VersionControlEditorPlugin::register_editor() { if (!EditorVCSInterface::get_singleton()) { EditorNode::get_singleton()->add_control_to_dock(EditorNode::DOCK_SLOT_RIGHT_UL, version_commit_dock); @@ -357,7 +355,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_dialog->set_min_size(Size2(400, 100)); version_control_actions->add_child(set_up_dialog); - set_up_ok_button = set_up_dialog->get_ok(); + set_up_ok_button = set_up_dialog->get_ok_button(); set_up_ok_button->set_text(TTR("Close")); set_up_vbc = memnew(VBoxContainer); @@ -463,11 +461,12 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_message->set_v_grow_direction(Control::GrowDirection::GROW_DIRECTION_END); commit_message->set_custom_minimum_size(Size2(200, 100)); commit_message->set_wrap_enabled(true); - commit_message->set_text(TTR("Add a commit message")); + commit_message->connect("text_changed", callable_mp(this, &VersionControlEditorPlugin::_update_commit_button)); commit_box_vbc->add_child(commit_message); commit_button = memnew(Button); commit_button->set_text(TTR("Commit Changes")); + commit_button->set_disabled(true); commit_button->connect("pressed", callable_mp(this, &VersionControlEditorPlugin::_send_commit_msg)); commit_box_vbc->add_child(commit_button); diff --git a/editor/plugins/version_control_editor_plugin.h b/editor/plugins/version_control_editor_plugin.h index 248a1435fd..7d7c66a7ee 100644 --- a/editor/plugins/version_control_editor_plugin.h +++ b/editor/plugins/version_control_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -43,7 +43,6 @@ class VersionControlEditorPlugin : public EditorPlugin { public: enum ChangeType { - CHANGE_TYPE_NEW = 0, CHANGE_TYPE_MODIFIED = 1, CHANGE_TYPE_RENAMED = 2, @@ -111,6 +110,7 @@ private: void _clear_file_diff(); void _update_stage_status(); void _update_commit_status(); + void _update_commit_button(); friend class EditorVCSInterface; diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index f3fc22b313..056562a7a7 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -49,7 +49,7 @@ struct FloatConstantDef { String name; - float value; + float value = 0; String desc; }; @@ -83,10 +83,10 @@ void VisualShaderNodePlugin::_bind_methods() { static Ref<StyleBoxEmpty> make_empty_stylebox(float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) { Ref<StyleBoxEmpty> style(memnew(StyleBoxEmpty)); - style->set_default_margin(MARGIN_LEFT, p_margin_left * EDSCALE); - style->set_default_margin(MARGIN_RIGHT, p_margin_right * EDSCALE); - style->set_default_margin(MARGIN_BOTTOM, p_margin_bottom * EDSCALE); - style->set_default_margin(MARGIN_TOP, p_margin_top * EDSCALE); + style->set_default_margin(SIDE_LEFT, p_margin_left * EDSCALE); + style->set_default_margin(SIDE_RIGHT, p_margin_right * EDSCALE); + style->set_default_margin(SIDE_BOTTOM, p_margin_bottom * EDSCALE); + style->set_default_margin(SIDE_TOP, p_margin_top * EDSCALE); return style; } @@ -102,7 +102,6 @@ void VisualShaderGraphPlugin::_bind_methods() { ClassDB::bind_method("disconnect_nodes", &VisualShaderGraphPlugin::disconnect_nodes); ClassDB::bind_method("set_node_position", &VisualShaderGraphPlugin::set_node_position); ClassDB::bind_method("set_node_size", &VisualShaderGraphPlugin::set_node_size); - ClassDB::bind_method("show_port_preview", &VisualShaderGraphPlugin::show_port_preview); ClassDB::bind_method("update_node", &VisualShaderGraphPlugin::update_node); ClassDB::bind_method("update_node_deferred", &VisualShaderGraphPlugin::update_node_deferred); ClassDB::bind_method("set_input_port_default_value", &VisualShaderGraphPlugin::set_input_port_default_value); @@ -121,9 +120,11 @@ void VisualShaderGraphPlugin::set_connections(List<VisualShader::Connection> &p_ } void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p_node_id, int p_port_id) { - if (visual_shader->get_shader_type() == p_type && links.has(p_node_id)) { + if (visual_shader->get_shader_type() == p_type && links.has(p_node_id) && links[p_node_id].output_ports.has(p_port_id)) { for (Map<int, Port>::Element *E = links[p_node_id].output_ports.front(); E; E = E->next()) { - E->value().preview_button->set_pressed(false); + if (E->value().preview_button != nullptr) { + E->value().preview_button->set_pressed(false); + } } if (links[p_node_id].preview_visible && !is_dirty() && links[p_node_id].preview_box != nullptr) { @@ -133,7 +134,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p links[p_node_id].preview_visible = false; } - if (p_port_id != -1) { + if (p_port_id != -1 && links[p_node_id].output_ports[p_port_id].preview_button != nullptr) { if (is_dirty()) { links[p_node_id].preview_pos = links[p_node_id].graph_node->get_child_count(); } @@ -282,7 +283,7 @@ VisualShader::Type VisualShaderGraphPlugin::get_shader_type() const { void VisualShaderGraphPlugin::set_node_position(VisualShader::Type p_type, int p_id, const Vector2 &p_position) { if (visual_shader->get_shader_type() == p_type && links.has(p_id)) { - links[p_id].graph_node->set_offset(p_position); + links[p_id].graph_node->set_position_offset(p_position); } } @@ -364,7 +365,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { expression = expression_node->get_expression(); } - node->set_offset(visual_shader->get_node_position(p_type, p_id)); + node->set_position_offset(visual_shader->get_node_position(p_type, p_id)); node->set_title(vsnode->get_caption()); node->set_name(itos(p_id)); @@ -498,16 +499,32 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { if (group_node->is_editable()) { HBoxContainer *hb2 = memnew(HBoxContainer); + String input_port_name = "input" + itos(group_node->get_free_input_port_id()); + String output_port_name = "output" + itos(group_node->get_free_output_port_id()); + + for (int i = 0; i < MAX(vsnode->get_input_port_count(), vsnode->get_output_port_count()); i++) { + if (i < vsnode->get_input_port_count()) { + if (input_port_name == vsnode->get_input_port_name(i)) { + input_port_name = "_" + input_port_name; + } + } + if (i < vsnode->get_output_port_count()) { + if (output_port_name == vsnode->get_output_port_name(i)) { + output_port_name = "_" + output_port_name; + } + } + } + Button *add_input_btn = memnew(Button); add_input_btn->set_text(TTR("Add Input")); - add_input_btn->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_input_port), varray(p_id, 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("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_input_port), varray(p_id, group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, input_port_name), 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", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_output_port), varray(p_id, 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("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_output_port), varray(p_id, group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, output_port_name), CONNECT_DEFERRED); hb2->add_child(add_output_btn); node->add_child(hb2); @@ -584,8 +601,8 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); name_box->set_text(name_left); - name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_input_port_name), varray(name_box, p_id, i)); - name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, false)); + name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_input_port_name), varray(name_box, p_id, i), CONNECT_DEFERRED); + name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, false), CONNECT_DEFERRED); Button *remove_btn = memnew(Button); remove_btn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon("Remove", "EditorIcons")); @@ -625,8 +642,8 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); name_box->set_text(name_right); - name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_output_port_name), varray(name_box, p_id, i)); - name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, true)); + name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_output_port_name), varray(name_box, p_id, i), CONNECT_DEFERRED); + name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, true), CONNECT_DEFERRED); OptionButton *type_box = memnew(OptionButton); hb->add_child(type_box); @@ -713,6 +730,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { } expression_box->add_theme_font_override("font", VisualShaderEditor::get_singleton()->get_theme_font("expression", "EditorFonts")); + expression_box->add_theme_font_size_override("font_size", VisualShaderEditor::get_singleton()->get_theme_font_size("expression_size", "EditorFonts")); expression_box->add_theme_color_override("font_color", text_color); expression_syntax_highlighter->set_number_color(number_color); expression_syntax_highlighter->set_symbol_color(symbol_color); @@ -991,13 +1009,13 @@ String VisualShaderEditor::_get_description(int p_idx) { void VisualShaderEditor::_update_options_menu() { node_desc->set_text(""); - members_dialog->get_ok()->set_disabled(true); + members_dialog->get_ok_button()->set_disabled(true); members->clear(); TreeItem *root = members->create_item(); String filter = node_filter->get_text().strip_edges(); - bool use_filter = !filter.empty(); + bool use_filter = !filter.is_empty(); bool is_first_item = true; @@ -1335,29 +1353,57 @@ void VisualShaderEditor::_change_output_port_type(int p_type, int p_node, int p_ undo_redo->commit_action(); } -void VisualShaderEditor::_change_input_port_name(const String &p_text, Object *line_edit, int p_node_id, int p_port_id) { +void VisualShaderEditor::_change_input_port_name(const String &p_text, Object *p_line_edit, int p_node_id, int p_port_id) { VisualShader::Type type = get_current_shader_type(); Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); ERR_FAIL_COND(!node.is_valid()); + String prev_name = node->get_input_port_name(p_port_id); + if (prev_name == p_text) { + return; + } + + LineEdit *line_edit = Object::cast_to<LineEdit>(p_line_edit); + ERR_FAIL_COND(!line_edit); + + String validated_name = visual_shader->validate_port_name(p_text, node.ptr(), p_port_id, false); + if (validated_name == String() || prev_name == validated_name) { + line_edit->set_text(node->get_input_port_name(p_port_id)); + return; + } + undo_redo->create_action(TTR("Change Input Port Name")); - undo_redo->add_do_method(node.ptr(), "set_input_port_name", p_port_id, p_text); + undo_redo->add_do_method(node.ptr(), "set_input_port_name", p_port_id, validated_name); undo_redo->add_undo_method(node.ptr(), "set_input_port_name", p_port_id, node->get_input_port_name(p_port_id)); undo_redo->add_do_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->commit_action(); } -void VisualShaderEditor::_change_output_port_name(const String &p_text, Object *line_edit, int p_node_id, int p_port_id) { +void VisualShaderEditor::_change_output_port_name(const String &p_text, Object *p_line_edit, int p_node_id, int p_port_id) { VisualShader::Type type = get_current_shader_type(); Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); ERR_FAIL_COND(!node.is_valid()); + String prev_name = node->get_output_port_name(p_port_id); + if (prev_name == p_text) { + return; + } + + LineEdit *line_edit = Object::cast_to<LineEdit>(p_line_edit); + ERR_FAIL_COND(!line_edit); + + String validated_name = visual_shader->validate_port_name(p_text, node.ptr(), p_port_id, true); + if (validated_name == String() || prev_name == validated_name) { + line_edit->set_text(node->get_output_port_name(p_port_id)); + return; + } + undo_redo->create_action(TTR("Change Output Port Name")); - undo_redo->add_do_method(node.ptr(), "set_output_port_name", p_port_id, p_text); - undo_redo->add_undo_method(node.ptr(), "set_output_port_name", p_port_id, node->get_output_port_name(p_port_id)); + undo_redo->add_do_method(node.ptr(), "set_output_port_name", p_port_id, validated_name); + undo_redo->add_undo_method(node.ptr(), "set_output_port_name", p_port_id, prev_name); undo_redo->add_do_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->commit_action(); @@ -1452,6 +1498,17 @@ void VisualShaderEditor::_remove_output_port(int p_node, int p_port) { } } + int preview_port = node->get_output_port_for_preview(); + if (preview_port != -1) { + if (preview_port == p_port) { + undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", -1); + undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port); + } else if (preview_port > p_port) { + undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", preview_port - 1); + undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port); + } + } + undo_redo->add_do_method(node.ptr(), "remove_output_port", p_port); undo_redo->add_undo_method(node.ptr(), "add_output_port", p_port, (int)node->get_output_port_type(p_port), node->get_output_port_name(p_port)); @@ -1523,9 +1580,9 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p box_size.x = gn->get_size().x; } } - box_size.x -= text_box->get_margin(MARGIN_LEFT); + box_size.x -= text_box->get_offset(SIDE_LEFT); box_size.x -= 28 * EDSCALE; - box_size.y -= text_box->get_margin(MARGIN_TOP); + box_size.y -= text_box->get_offset(SIDE_TOP); box_size.y -= 28 * EDSCALE; text_box->set_custom_minimum_size(Size2(box_size.x, box_size.y)); text_box->set_size(Size2(1, 1)); @@ -1558,8 +1615,8 @@ void VisualShaderEditor::_preview_select_port(int p_node, int p_port) { undo_redo->create_action(p_port == -1 ? TTR("Hide Port Preview") : TTR("Show Port Preview")); undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", p_port); undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", prev_port); - undo_redo->add_do_method(graph_plugin.ptr(), "show_port_preview", (int)type, p_node, p_port); - undo_redo->add_undo_method(graph_plugin.ptr(), "show_port_preview", (int)type, p_node, prev_port); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, p_node); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, p_node); undo_redo->commit_action(); } @@ -1596,53 +1653,10 @@ void VisualShaderEditor::_uniform_line_edit_focus_out(Object *line_edit, int p_n } void VisualShaderEditor::_port_name_focus_out(Object *line_edit, int p_node_id, int p_port_id, bool p_output) { - VisualShader::Type type = get_current_shader_type(); - - Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); - ERR_FAIL_COND(!node.is_valid()); - - String text = Object::cast_to<LineEdit>(line_edit)->get_text(); - if (!p_output) { - if (node->get_input_port_name(p_port_id) == text) { - return; - } + _change_input_port_name(Object::cast_to<LineEdit>(line_edit)->get_text(), line_edit, p_node_id, p_port_id); } else { - if (node->get_output_port_name(p_port_id) == text) { - return; - } - } - - List<String> input_names; - List<String> output_names; - - for (int i = 0; i < node->get_input_port_count(); i++) { - if (!p_output && i == p_port_id) { - continue; - } - input_names.push_back(node->get_input_port_name(i)); - } - for (int i = 0; i < node->get_output_port_count(); i++) { - if (p_output && i == p_port_id) { - continue; - } - output_names.push_back(node->get_output_port_name(i)); - } - - String validated_name = visual_shader->validate_port_name(text, input_names, output_names); - if (validated_name == "") { - if (!p_output) { - Object::cast_to<LineEdit>(line_edit)->set_text(node->get_input_port_name(p_port_id)); - } else { - Object::cast_to<LineEdit>(line_edit)->set_text(node->get_output_port_name(p_port_id)); - } - return; - } - - if (!p_output) { - _change_input_port_name(validated_name, line_edit, p_node_id, p_port_id); - } else { - _change_output_port_name(validated_name, line_edit, p_node_id, p_port_id); + _change_output_port_name(Object::cast_to<LineEdit>(line_edit)->get_text(), line_edit, p_node_id, p_port_id); } } @@ -1959,6 +1973,8 @@ void VisualShaderEditor::_connection_request(const String &p_from, int p_from_in undo_redo->add_undo_method(visual_shader.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, to); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, to); undo_redo->commit_action(); } @@ -1975,6 +1991,8 @@ void VisualShaderEditor::_disconnection_request(const String &p_from, int p_from undo_redo->add_undo_method(visual_shader.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_do_method(graph_plugin.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_undo_method(graph_plugin.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, to); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, to); undo_redo->commit_action(); } @@ -2090,7 +2108,7 @@ void VisualShaderEditor::_delete_nodes_request() { } } - if (to_erase.empty()) { + if (to_erase.is_empty()) { return; } @@ -2127,13 +2145,13 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) { } } } - if (to_change.empty() && copy_nodes_buffer.empty()) { + if (to_change.is_empty() && copy_nodes_buffer.is_empty()) { _show_members_dialog(true); } else { - popup_menu->set_item_disabled(NodeMenuOptions::COPY, to_change.empty()); - popup_menu->set_item_disabled(NodeMenuOptions::PASTE, copy_nodes_buffer.empty()); - popup_menu->set_item_disabled(NodeMenuOptions::DELETE, to_change.empty()); - popup_menu->set_item_disabled(NodeMenuOptions::DUPLICATE, to_change.empty()); + popup_menu->set_item_disabled(NodeMenuOptions::COPY, to_change.is_empty()); + popup_menu->set_item_disabled(NodeMenuOptions::PASTE, copy_nodes_buffer.is_empty()); + popup_menu->set_item_disabled(NodeMenuOptions::DELETE, to_change.is_empty()); + popup_menu->set_item_disabled(NodeMenuOptions::DUPLICATE, to_change.is_empty()); menu_point = graph->get_local_mouse_position(); Point2 gpos = Input::get_singleton()->get_mouse_position(); popup_menu->set_position(gpos); @@ -2237,6 +2255,7 @@ void VisualShaderEditor::_notification(int p_what) { } preview_text->add_theme_font_override("font", get_theme_font("expression", "EditorFonts")); + preview_text->add_theme_font_size_override("font_size", get_theme_font_size("expression_size", "EditorFonts")); preview_text->add_theme_color_override("font_color", text_color); syntax_highlighter->set_number_color(number_color); syntax_highlighter->set_symbol_color(symbol_color); @@ -2247,6 +2266,7 @@ void VisualShaderEditor::_notification(int p_what) { syntax_highlighter->add_color_region("//", "", comment_color, true); error_text->add_theme_font_override("font", get_theme_font("status_source", "EditorFonts")); + error_text->add_theme_font_size_override("font_size", get_theme_font_size("status_source_size", "EditorFonts")); error_text->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); } @@ -2425,7 +2445,7 @@ void VisualShaderEditor::_duplicate_nodes() { _dup_copy_nodes(type, nodes, excluded); - if (nodes.empty()) { + if (nodes.is_empty()) { return; } @@ -2443,7 +2463,7 @@ void VisualShaderEditor::_copy_nodes() { } void VisualShaderEditor::_paste_nodes(bool p_use_custom_position, const Vector2 &p_custom_position) { - if (copy_nodes_buffer.empty()) { + if (copy_nodes_buffer.is_empty()) { return; } @@ -2593,12 +2613,12 @@ void VisualShaderEditor::_member_selected() { TreeItem *item = members->get_selected(); if (item != nullptr && item->has_meta("id")) { - members_dialog->get_ok()->set_disabled(false); + members_dialog->get_ok_button()->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); + members_dialog->get_ok_button()->set_disabled(true); node_desc->set_text(""); } } @@ -2977,12 +2997,12 @@ VisualShaderEditor::VisualShaderEditor() { popup_menu = memnew(PopupMenu); add_child(popup_menu); - popup_menu->add_item("Add Node", NodeMenuOptions::ADD); + popup_menu->add_item(TTR("Add Node"), NodeMenuOptions::ADD); popup_menu->add_separator(); - popup_menu->add_item("Copy", NodeMenuOptions::COPY); - popup_menu->add_item("Paste", NodeMenuOptions::PASTE); - popup_menu->add_item("Delete", NodeMenuOptions::DELETE); - popup_menu->add_item("Duplicate", NodeMenuOptions::DUPLICATE); + popup_menu->add_item(TTR("Copy"), NodeMenuOptions::COPY); + popup_menu->add_item(TTR("Paste"), NodeMenuOptions::PASTE); + popup_menu->add_item(TTR("Delete"), NodeMenuOptions::DELETE); + popup_menu->add_item(TTR("Duplicate"), NodeMenuOptions::DUPLICATE); popup_menu->connect("id_pressed", callable_mp(this, &VisualShaderEditor::_node_menu_id_pressed)); /////////////////////////////////////// @@ -3048,9 +3068,9 @@ VisualShaderEditor::VisualShaderEditor() { members_dialog->set_title(TTR("Create Shader Node")); members_dialog->set_exclusive(false); members_dialog->add_child(members_vb); - members_dialog->get_ok()->set_text(TTR("Create")); - members_dialog->get_ok()->connect("pressed", callable_mp(this, &VisualShaderEditor::_member_create)); - members_dialog->get_ok()->set_disabled(true); + members_dialog->get_ok_button()->set_text(TTR("Create")); + members_dialog->get_ok_button()->connect("pressed", callable_mp(this, &VisualShaderEditor::_member_create)); + members_dialog->get_ok_button()->set_disabled(true); members_dialog->connect("cancelled", callable_mp(this, &VisualShaderEditor::_member_cancel)); add_child(members_dialog); @@ -3120,7 +3140,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("InvProjection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "inv_projection"), "inv_projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Normal", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "normal"), "normal", VisualShaderNode::PORT_TYPE_VECTOR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("OutputIsSRGB", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "output_is_srgb"), "output_is_srgb", VisualShaderNode::PORT_TYPE_BOOLEAN, -1, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Projection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "camera"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Projection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "projection"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Time", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "time"), "time", VisualShaderNode::PORT_TYPE_SCALAR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("ViewportSize", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "viewport_size"), "viewport_size", VisualShaderNode::PORT_TYPE_VECTOR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("World", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "world"), "world", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); @@ -3167,7 +3187,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("View", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "view"), "view", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Albedo", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "albedo"), "albedo", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Attenuation", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "attenuation"), "attenuation", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Attenuation", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "attenuation"), "attenuation", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Diffuse", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "diffuse"), "diffuse", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Light", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light"), "light", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); @@ -3175,7 +3195,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Metallic", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "metallic"), "metallic", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Roughness", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "roughness"), "roughness", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Specular", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "specular"), "specular", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Transmission", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "transmission"), "transmission", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Backlight", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "backlight"), "backlight", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("View", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "view"), "view", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Alpha", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "alpha"), "alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_SPATIAL)); @@ -3190,33 +3210,38 @@ VisualShaderEditor::VisualShaderEditor() { // CANVASITEM INPUTS + add_options.push_back(AddOption("AtLightPass", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "at_light_pass"), "at_light_pass", VisualShaderNode::PORT_TYPE_BOOLEAN, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightPass", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("NormalTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "normal_texture"), "normal_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenPixelSize", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_pixel_size"), "screen_pixel_size", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_texture"), "screen_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininess", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess"), "specular_shininess", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessAlpha", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess_alpha"), "specular_shininess_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "specular_shininess_texture"), "specular_shininess_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Texture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Light", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light"), "light", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_alpha"), "light_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_color"), "light_color", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightHeight", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_height"), "light_height", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_uv"), "light_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightVector", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_vec"), "light_vec", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightColorAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_color_alpha"), "light_color_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightPosition", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_position"), "light_position", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightVertex", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_vertex"), "light_vertex", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Normal", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "normal"), "normal", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_alpha"), "shadow_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_color"), "shadow_color", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("ShadowVec", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_vec"), "shadow_vec", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininess", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess"), "specular_shininess", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess_alpha"), "specular_shininess_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Texture", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("Extra", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "extra"), "extra", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightPass", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("AtLightPass", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "at_light_pass"), "at_light_pass", VisualShaderNode::PORT_TYPE_BOOLEAN, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Canvas", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "canvas"), "canvas", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointSize", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "point_size"), "point_size", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("Projection", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "projection"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Screen", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "screen"), "screen", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Vertex", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "vertex"), "vertex", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("World", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "world"), "world", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); @@ -4037,9 +4062,6 @@ void VisualShaderNodePortPreview::_notification(int p_what) { void VisualShaderNodePortPreview::_bind_methods() { } -VisualShaderNodePortPreview::VisualShaderNodePortPreview() { -} - ////////////////////////////////// String VisualShaderConversionPlugin::converts_to() const { diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index 73bebcd192..6e8ac92dc2 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -56,26 +56,26 @@ class VisualShaderGraphPlugin : public Reference { private: struct InputPort { - Button *default_input_button; + Button *default_input_button = nullptr; }; struct Port { - TextureButton *preview_button; + TextureButton *preview_button = nullptr; }; struct Link { - VisualShader::Type type; - VisualShaderNode *visual_node; - GraphNode *graph_node; - bool preview_visible; - int preview_pos; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + VisualShaderNode *visual_node = nullptr; + GraphNode *graph_node = nullptr; + bool preview_visible = 0; + int preview_pos = 0; Map<int, InputPort> input_ports; Map<int, Port> output_ports; - VBoxContainer *preview_box; - LineEdit *uniform_name; - OptionButton *const_op; - CodeEdit *expression_edit; - CurveEditor *curve_editor; + VBoxContainer *preview_box = nullptr; + LineEdit *uniform_name = nullptr; + OptionButton *const_op = nullptr; + CodeEdit *expression_edit = nullptr; + CurveEditor *curve_editor = nullptr; }; Ref<VisualShader> visual_shader; @@ -206,16 +206,16 @@ class VisualShaderEditor : public VBoxContainer { String category; String type; String description; - int sub_func; + int sub_func = 0; String sub_func_str; Ref<Script> script; - int mode; - int return_type; - int func; - float value; - bool highend; - bool is_custom; - int temp_idx; + int mode = 0; + int return_type = 0; + int func = 0; + float value = 0; + bool highend = false; + bool is_custom = false; + int temp_idx = 0; 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; @@ -283,8 +283,8 @@ class VisualShaderEditor : public VBoxContainer { static VisualShaderEditor *singleton; struct DragOp { - VisualShader::Type type; - int node; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + int node = 0; Vector2 from; Vector2 to; }; @@ -354,12 +354,12 @@ class VisualShaderEditor : public VBoxContainer { void _add_input_port(int p_node, int p_port, int p_port_type, const String &p_name); void _remove_input_port(int p_node, int p_port); void _change_input_port_type(int p_type, int p_node, int p_port); - void _change_input_port_name(const String &p_text, Object *line_edit, int p_node, int p_port); + void _change_input_port_name(const String &p_text, Object *p_line_edit, int p_node, int p_port); void _add_output_port(int p_node, int p_port, int p_port_type, const String &p_name); void _remove_output_port(int p_node, int p_port); void _change_output_port_type(int p_type, int p_node, int p_port); - void _change_output_port_name(const String &p_text, Object *line_edit, int p_node, int p_port); + void _change_output_port_name(const String &p_text, Object *p_line_edit, int p_node, int p_port); void _expression_focus_out(Object *code_edit, int p_node); @@ -462,9 +462,9 @@ public: class VisualShaderNodePortPreview : public Control { GDCLASS(VisualShaderNodePortPreview, Control); Ref<VisualShader> shader; - VisualShader::Type type; - int node; - int port; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + int node = 0; + int port = 0; void _shader_changed(); //must regen protected: void _notification(int p_what); @@ -473,7 +473,6 @@ protected: public: virtual Size2 get_minimum_size() const override; void setup(const Ref<VisualShader> &p_shader, VisualShader::Type p_type, int p_node, int p_port); - VisualShaderNodePortPreview(); }; class VisualShaderConversionPlugin : public EditorResourceConversionPlugin { diff --git a/editor/pot_generator.cpp b/editor/pot_generator.cpp index 9b3227ad28..2d65c00a89 100644 --- a/editor/pot_generator.cpp +++ b/editor/pot_generator.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -135,7 +135,7 @@ void POTGenerator::_write_to_pot(const String &p_file) { } // Write context. - if (!context.empty()) { + if (!context.is_empty()) { file->store_line("msgctxt \"" + context + "\""); } @@ -143,7 +143,7 @@ void POTGenerator::_write_to_pot(const String &p_file) { _write_msgid(file, msgid, false); // Write msgid_plural - if (!plural.empty()) { + if (!plural.is_empty()) { _write_msgid(file, plural, true); file->store_line("msgstr[0] \"\""); file->store_line("msgstr[1] \"\"\n"); @@ -185,7 +185,7 @@ void POTGenerator::_add_new_msgid(const String &p_msgid, const String &p_context Vector<MsgidData> &v_mdata = all_translation_strings[p_msgid]; for (int i = 0; i < v_mdata.size(); i++) { if (v_mdata[i].ctx == p_context) { - if (!v_mdata[i].plural.empty() && !p_plural.empty() && v_mdata[i].plural != p_plural) { + if (!v_mdata[i].plural.is_empty() && !p_plural.is_empty() && v_mdata[i].plural != p_plural) { WARN_PRINT("Redefinition of plural message (msgid_plural), under the same message (msgid) and context (msgctxt)"); } v_mdata.write[i].locations.insert(p_location); diff --git a/editor/pot_generator.h b/editor/pot_generator.h index 1fd2956445..ab055e0c0e 100644 --- a/editor/pot_generator.h +++ b/editor/pot_generator.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/progress_dialog.cpp b/editor/progress_dialog.cpp index 46a656e0af..0b6a3798b3 100644 --- a/editor/progress_dialog.cpp +++ b/editor/progress_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -50,7 +50,7 @@ void BackgroundProgress::_add_task(const String &p_task, const String &p_label, Control *ec = memnew(Control); ec->set_h_size_flags(SIZE_EXPAND_FILL); ec->set_v_size_flags(SIZE_EXPAND_FILL); - t.progress->set_anchors_and_margins_preset(Control::PRESET_WIDE); + t.progress->set_anchors_and_offsets_preset(Control::PRESET_WIDE); ec->add_child(t.progress); ec->set_custom_minimum_size(Size2(80, 5) * EDSCALE); t.hb->add_child(ec); @@ -111,7 +111,7 @@ void BackgroundProgress::task_step(const String &p_task, int p_step) { bool no_updates = true; { _THREAD_SAFE_METHOD_ - no_updates = updates.empty(); + no_updates = updates.is_empty(); } if (no_updates) { @@ -141,10 +141,10 @@ void ProgressDialog::_popup() { Ref<StyleBox> style = main->get_theme_stylebox("panel", "PopupMenu"); ms += style->get_minimum_size(); - main->set_margin(MARGIN_LEFT, style->get_margin(MARGIN_LEFT)); - main->set_margin(MARGIN_RIGHT, -style->get_margin(MARGIN_RIGHT)); - main->set_margin(MARGIN_TOP, style->get_margin(MARGIN_TOP)); - main->set_margin(MARGIN_BOTTOM, -style->get_margin(MARGIN_BOTTOM)); + main->set_offset(SIDE_LEFT, style->get_margin(SIDE_LEFT)); + main->set_offset(SIDE_RIGHT, -style->get_margin(SIDE_RIGHT)); + main->set_offset(SIDE_TOP, style->get_margin(SIDE_TOP)); + main->set_offset(SIDE_BOTTOM, -style->get_margin(SIDE_BOTTOM)); //raise(); popup_centered(ms); @@ -218,7 +218,7 @@ void ProgressDialog::end_task(const String &p_task) { memdelete(t.vb); tasks.erase(p_task); - if (tasks.empty()) { + if (tasks.is_empty()) { hide(); } else { _popup(); @@ -235,7 +235,7 @@ void ProgressDialog::_bind_methods() { ProgressDialog::ProgressDialog() { main = memnew(VBoxContainer); add_child(main); - main->set_anchors_and_margins_preset(Control::PRESET_WIDE); + main->set_anchors_and_offsets_preset(Control::PRESET_WIDE); set_exclusive(true); last_progress_tick = 0; singleton = this; diff --git a/editor/progress_dialog.h b/editor/progress_dialog.h index 753b6ac955..3f4b1d2944 100644 --- a/editor/progress_dialog.h +++ b/editor/progress_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -43,8 +43,8 @@ class BackgroundProgress : public HBoxContainer { _THREAD_SAFE_CLASS_ struct Task { - HBoxContainer *hb; - ProgressBar *progress; + HBoxContainer *hb = nullptr; + ProgressBar *progress = nullptr; }; Map<String, Task> tasks; @@ -70,9 +70,9 @@ class ProgressDialog : public PopupPanel { GDCLASS(ProgressDialog, PopupPanel); struct Task { String task; - VBoxContainer *vb; - ProgressBar *progress; - Label *state; + VBoxContainer *vb = nullptr; + ProgressBar *progress = nullptr; + Label *state = nullptr; }; HBoxContainer *cancel_hb; Button *cancel; diff --git a/editor/project_export.cpp b/editor/project_export.cpp index e8c2b1f954..4a8990daa9 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -196,7 +196,7 @@ void ProjectExportDialog::_edit_preset(int p_index) { export_path->hide(); runnable->set_disabled(true); parameters->edit(nullptr); - presets->unselect_all(); + presets->deselect_all(); duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); sections->hide(); @@ -262,13 +262,13 @@ void ProjectExportDialog::_edit_preset(int p_index) { } export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } else { export_error->hide(); export_templates_error->hide(); export_button->set_disabled(false); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } custom_features->set_text(current->get_custom_features()); @@ -516,7 +516,7 @@ void ProjectExportDialog::_script_encryption_key_changed(const String &p_key) { bool ProjectExportDialog::_validate_script_encryption_key(const String &p_key) { bool is_valid = false; - if (!p_key.empty() && p_key.is_valid_hex_number(false) && p_key.length() == 64) { + if (!p_key.is_empty() && p_key.is_valid_hex_number(false) && p_key.length() == 64) { is_valid = true; } return is_valid; @@ -586,7 +586,7 @@ void ProjectExportDialog::_delete_preset_confirm() { int idx = presets->get_current(); _edit_preset(-1); export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); EditorExport::get_singleton()->remove_export_preset(idx); _update_presets(); } @@ -721,14 +721,19 @@ void ProjectExportDialog::_fill_resource_tree() { } bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> ¤t, bool p_only_scenes) { + p_item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); p_item->set_icon(0, presets->get_theme_icon("folder", "FileDialog")); p_item->set_text(0, p_dir->get_name() + "/"); + p_item->set_editable(0, true); + p_item->set_metadata(0, p_dir->get_path()); bool used = false; + bool checked = true; for (int i = 0; i < p_dir->get_subdir_count(); i++) { TreeItem *subdir = include_files->create_item(p_item); if (_fill_tree(p_dir->get_subdir(i), subdir, current, p_only_scenes)) { used = true; + checked = checked && subdir->is_checked(0); } else { memdelete(subdir); } @@ -750,10 +755,12 @@ bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem file->set_editable(0, true); file->set_checked(0, current->has_export_file(path)); file->set_metadata(0, path); + checked = checked && file->is_checked(0); used = true; } + p_item->set_checked(0, checked); return used; } @@ -775,13 +782,53 @@ void ProjectExportDialog::_tree_changed() { String path = item->get_metadata(0); bool added = item->is_checked(0); - if (added) { - current->add_export_file(path); + if (path.ends_with("/")) { + _check_dir_recursive(item, added); } else { - current->remove_export_file(path); + if (added) { + current->add_export_file(path); + } else { + current->remove_export_file(path); + } + } + _refresh_parent_checks(item); // Makes parent folder checked if all files/folders are checked. +} + +void ProjectExportDialog::_check_dir_recursive(TreeItem *p_dir, bool p_checked) { + for (TreeItem *child = p_dir->get_children(); child; child = child->get_next()) { + String path = child->get_metadata(0); + + child->set_checked(0, p_checked); + if (path.ends_with("/")) { + _check_dir_recursive(child, p_checked); + } else { + if (p_checked) { + get_current_preset()->add_export_file(path); + } else { + get_current_preset()->remove_export_file(path); + } + } } } +void ProjectExportDialog::_refresh_parent_checks(TreeItem *p_item) { + TreeItem *parent = p_item->get_parent(); + if (!parent) { + return; + } + + bool checked = true; + for (TreeItem *child = parent->get_children(); child; child = child->get_next()) { + checked = checked && child->is_checked(0); + if (!checked) { + break; + } + } + parent->set_checked(0, checked); + + _refresh_parent_checks(parent); +} + void ProjectExportDialog::_export_pck_zip() { export_pck_zip->popup_file_dialog(); } @@ -809,19 +856,19 @@ void ProjectExportDialog::_validate_export_path(const String &p_path) { bool invalid_path = (p_path.get_file().get_basename() == ""); // Check if state change before needlessly messing with signals - if (invalid_path && export_project->get_ok()->is_disabled()) { + if (invalid_path && export_project->get_ok_button()->is_disabled()) { return; } - if (!invalid_path && !export_project->get_ok()->is_disabled()) { + if (!invalid_path && !export_project->get_ok_button()->is_disabled()) { return; } if (invalid_path) { - export_project->get_ok()->set_disabled(true); - export_project->get_line_edit()->disconnect_compat("text_entered", export_project, "_file_entered"); + export_project->get_ok_button()->set_disabled(true); + export_project->get_line_edit()->disconnect("text_entered", Callable(export_project, "_file_entered")); } else { - export_project->get_ok()->set_disabled(false); - export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); + export_project->get_ok_button()->set_disabled(false); + export_project->get_line_edit()->connect("text_entered", Callable(export_project, "_file_entered")); } } @@ -853,9 +900,9 @@ void ProjectExportDialog::_export_project() { // with _validate_export_path. // FIXME: This is a hack, we should instead change EditorFileDialog to allow // disabling validation by the "text_entered" signal. - 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_compat("text_entered", export_project, "_file_entered"); + if (!export_project->get_line_edit()->is_connected("text_entered", Callable(export_project, "_file_entered"))) { + export_project->get_ok_button()->set_disabled(false); + export_project->get_line_edit()->connect("text_entered", Callable(export_project, "_file_entered")); } export_project->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); @@ -1137,26 +1184,26 @@ ProjectExportDialog::ProjectExportDialog() { delete_confirm = memnew(ConfirmationDialog); add_child(delete_confirm); - delete_confirm->get_ok()->set_text(TTR("Delete")); + delete_confirm->get_ok_button()->set_text(TTR("Delete")); delete_confirm->connect("confirmed", callable_mp(this, &ProjectExportDialog::_delete_preset_confirm)); // Export buttons, dialogs and errors. updating = false; - get_cancel()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Export PCK/Zip")); + get_cancel_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Export PCK/Zip")); export_button = add_button(TTR("Export Project"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "export"); export_button->connect("pressed", callable_mp(this, &ProjectExportDialog::_export_project)); // Disable initially before we select a valid preset export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); export_all_dialog = memnew(ConfirmationDialog); add_child(export_all_dialog); export_all_dialog->set_title("Export All"); export_all_dialog->set_text(TTR("Export mode?")); - export_all_dialog->get_ok()->hide(); + export_all_dialog->get_ok_button()->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", callable_mp(this, &ProjectExportDialog::_export_all_dialog_action)); diff --git a/editor/project_export.h b/editor/project_export.h index 026daac2ad..cfd4934c34 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -123,6 +123,8 @@ private: void _fill_resource_tree(); bool _fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> ¤t, bool p_only_scenes); void _tree_changed(); + void _check_dir_recursive(TreeItem *p_dir, bool p_checked); + void _refresh_parent_checks(TreeItem *p_item); 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; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index b67a134549..dacd0162ba 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -160,7 +160,7 @@ private: if (valid_path == "") { set_message(TTR("The path specified doesn't exist."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } @@ -174,7 +174,7 @@ private: if (valid_install_path == "") { set_message(TTR("The path specified doesn't exist."), MESSAGE_ERROR, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } } @@ -189,7 +189,7 @@ private: if (!pkg) { set_message(TTR("Error opening package file (it's not in ZIP format)."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); unzClose(pkg); return ""; } @@ -210,7 +210,7 @@ private: if (ret == UNZ_END_OF_LIST_OF_FILE) { set_message(TTR("Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); unzClose(pkg); return ""; } @@ -237,7 +237,7 @@ private: if (!is_folder_empty) { set_message(TTR("Please choose an empty folder."), MESSAGE_WARNING, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } @@ -245,14 +245,14 @@ private: set_message(TTR("Please choose a \"project.godot\" or \".zip\" file."), MESSAGE_ERROR); memdelete(d); install_path_container->hide(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } } else if (valid_path.ends_with("zip")) { set_message(TTR("This directory already contains a Godot project."), MESSAGE_ERROR, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } @@ -277,7 +277,7 @@ private: if (!is_folder_empty) { set_message(TTR("The selected path is not empty. Choosing an empty folder is highly recommended."), MESSAGE_WARNING); memdelete(d); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); return valid_path; } } @@ -285,7 +285,7 @@ private: set_message(""); set_message("", MESSAGE_SUCCESS, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); return valid_path; } @@ -320,14 +320,14 @@ private: if (p.ends_with("project.godot")) { p = p.get_base_dir(); install_path_container->hide(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else if (p.ends_with(".zip")) { install_path->set_text(p.get_base_dir()); install_path_container->show(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else { set_message(TTR("Please choose a \"project.godot\" or \".zip\" file."), MESSAGE_ERROR); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } } @@ -338,7 +338,7 @@ private: if (p.ends_with(".zip")) { install_path->call_deferred("grab_focus"); } else { - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } } @@ -346,14 +346,14 @@ private: String sp = p_path.simplify_path(); project_path->set_text(sp); _path_text_changed(sp); - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } void _install_path_selected(const String &p_path) { String sp = p_path.simplify_path(); install_path->set_text(sp); _path_text_changed(sp); - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } void _browse_path() { @@ -466,7 +466,7 @@ private: ConfirmationDialog *cd = memnew(ConfirmationDialog); cd->set_title(TTR("Warning: This folder is not empty")); cd->set_text(TTR("You are about to create a Godot project in a non-empty folder.\nThe entire contents of this folder will be imported as project resources!\n\nAre you sure you wish to continue?")); - cd->get_ok()->connect("pressed", callable_mp(this, &ProjectDialog::_nonempty_confirmation_ok_pressed)); + cd->get_ok_button()->connect("pressed", callable_mp(this, &ProjectDialog::_nonempty_confirmation_ok_pressed)); get_parent()->add_child(cd); cd->popup_centered(); cd->grab_focus(); @@ -684,14 +684,14 @@ public: install_browse->hide(); set_title(TTR("Rename Project")); - get_ok()->set_text(TTR("Rename")); + get_ok_button()->set_text(TTR("Rename")); name_container->show(); status_rect->hide(); msg->hide(); install_path_container->hide(); install_status_rect->hide(); rasterizer_container->hide(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); ProjectSettings *current = memnew(ProjectSettings); @@ -700,7 +700,7 @@ public: set_message(vformat(TTR("Couldn't load project.godot in project path (error %d). It may be missing or corrupted."), err), MESSAGE_ERROR); status_rect->show(); msg->show(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } else if (current->has_setting("application/config/name")) { String proj = current->get("application/config/name"); project_name->set_text(proj); @@ -738,7 +738,7 @@ public: if (mode == MODE_IMPORT) { set_title(TTR("Import Existing Project")); - get_ok()->set_text(TTR("Import & Edit")); + get_ok_button()->set_text(TTR("Import & Edit")); name_container->hide(); install_path_container->hide(); rasterizer_container->hide(); @@ -746,7 +746,7 @@ public: } else if (mode == MODE_NEW) { set_title(TTR("Create New Project")); - get_ok()->set_text(TTR("Create & Edit")); + get_ok_button()->set_text(TTR("Create & Edit")); name_container->show(); install_path_container->hide(); rasterizer_container->show(); @@ -755,7 +755,7 @@ public: } else if (mode == MODE_INSTALL) { set_title(TTR("Install Project:") + " " + zip_title); - get_ok()->set_text(TTR("Install & Edit")); + get_ok_button()->set_text(TTR("Install & Edit")); project_name->set_text(zip_title); name_container->show(); install_path_container->hide(); @@ -804,6 +804,7 @@ public: project_path = memnew(LineEdit); project_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); + project_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); pphb->add_child(project_path); install_path_container = memnew(VBoxContainer); @@ -818,6 +819,7 @@ public: install_path = memnew(LineEdit); install_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); + install_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); iphb->add_child(install_path); // status icon @@ -956,7 +958,7 @@ public: } break; case NOTIFICATION_DRAW: { if (hover) { - draw_style_box(get_theme_stylebox("hover", "Tree"), Rect2(Point2(), get_size() - Size2(10, 0) * EDSCALE)); + draw_style_box(get_theme_stylebox("hover", "Tree"), Rect2(Point2(), get_size())); } } break; } @@ -982,13 +984,13 @@ public: String path; String icon; String main_scene; - uint64_t last_edited; - bool favorite; - bool grayed; - bool missing; - int version; + uint64_t last_edited = 0; + bool favorite = false; + bool grayed = false; + bool missing = false; + int version = 0; - ProjectListItemControl *control; + ProjectListItemControl *control = nullptr; Item() {} @@ -1074,7 +1076,7 @@ private: }; struct ProjectListComparator { - FilterOption order_option; + FilterOption order_option = FilterOption::EDIT_DATE; // operator< _FORCE_INLINE_ bool operator()(const ProjectList::Item &a, const ProjectList::Item &b) const { @@ -1367,6 +1369,7 @@ void ProjectList::create_project_item_control(int p_index) { vb->add_child(ec); Label *title = memnew(Label(!item.missing ? item.project_name : TTR("Missing Project"))); title->add_theme_font_override("font", get_theme_font("title", "EditorFonts")); + title->add_theme_font_size_override("font_size", get_theme_font_size("title_size", "EditorFonts")); title->add_theme_color_override("font_color", font_color); title->set_clip_text(true); vb->add_child(title); @@ -1393,6 +1396,7 @@ void ProjectList::create_project_item_control(int p_index) { } Label *fpath = memnew(Label(item.path)); + fpath->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); path_hb->add_child(fpath); fpath->set_h_size_flags(Control::SIZE_EXPAND_FILL); fpath->set_modulate(Color(1, 1, 1, 0.5)); @@ -1541,7 +1545,7 @@ bool ProjectList::is_any_project_missing() const { } void ProjectList::erase_missing_projects() { - if (_projects.empty()) { + if (_projects.is_empty()) { return; } @@ -1723,12 +1727,16 @@ void ProjectList::erase_selected_projects() { void ProjectList::_panel_draw(Node *p_hb) { Control *hb = Object::cast_to<Control>(p_hb); - hb->draw_line(Point2(0, hb->get_size().y + 1), Point2(hb->get_size().x - 10, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + if (is_layout_rtl() && get_v_scrollbar()->is_visible_in_tree()) { + hb->draw_line(Point2(get_v_scrollbar()->get_minimum_size().x, hb->get_size().y + 1), Point2(hb->get_size().x, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + } else { + hb->draw_line(Point2(0, hb->get_size().y + 1), Point2(hb->get_size().x, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + } String key = _projects[p_hb->get_index()].project_key; if (_selected_project_keys.has(key)) { - hb->draw_style_box(get_theme_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size() - Size2(10, 0) * EDSCALE)); + hb->draw_style_box(get_theme_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size())); } } @@ -1814,6 +1822,11 @@ void ProjectList::_bind_methods() { void ProjectManager::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: { + settings_hb->set_anchors_and_offsets_preset(Control::PRESET_TOP_RIGHT); + update(); + } break; case NOTIFICATION_ENTER_TREE: { search_box->set_right_icon(get_theme_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); @@ -1841,7 +1854,7 @@ void ProjectManager::_notification(int p_what) { } } break; case NOTIFICATION_VISIBILITY_CHANGED: { - set_process_unhandled_input(is_visible_in_tree()); + set_process_unhandled_key_input(is_visible_in_tree()); } break; case NOTIFICATION_WM_CLOSE_REQUEST: { _dim_window(); @@ -1862,7 +1875,7 @@ void ProjectManager::_dim_window() { void ProjectManager::_update_project_buttons() { Vector<ProjectList::Item> selected_projects = _project_list->get_selected_projects(); - bool empty_selection = selected_projects.empty(); + bool empty_selection = selected_projects.is_empty(); bool is_missing_project_selected = false; for (int i = 0; i < selected_projects.size(); ++i) { @@ -1880,7 +1893,7 @@ void ProjectManager::_update_project_buttons() { erase_missing_btn->set_disabled(!_project_list->is_any_project_missing()); } -void ProjectManager::_unhandled_input(const Ref<InputEvent> &p_ev) { +void ProjectManager::_unhandled_key_input(const Ref<InputEvent> &p_ev) { Ref<InputEventKey> k = p_ev; if (k.is_valid()) { @@ -2105,7 +2118,7 @@ void ProjectManager::_run_project_confirm() { if (selected_main == "") { run_error_diag->set_text(TTR("Can't run project: no main scene defined.\nPlease edit the project and set the main scene in the Project Settings under the \"Application\" category.")); run_error_diag->popup_centered(); - return; + continue; } const String &selected = selected_list[i].project_key; @@ -2115,7 +2128,7 @@ void ProjectManager::_run_project_confirm() { if (!DirAccess::exists(path.plus_file(ProjectSettings::IMPORTED_FILES_PATH.right(6)))) { run_error_diag->set_text(TTR("Can't run project: Assets need to be imported.\nPlease edit the project to trigger the initial import.")); run_error_diag->popup_centered(); - return; + continue; } print_line("Running project: " + path + " (" + selected + ")"); @@ -2308,8 +2321,8 @@ void ProjectManager::_files_dropped(PackedStringArray p_files, int p_screen) { memdelete(dir); } if (confirm) { - multi_scan_ask->get_ok()->disconnect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders)); - multi_scan_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders), varray(folders)); + multi_scan_ask->get_ok_button()->disconnect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders)); + multi_scan_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_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(); @@ -2344,7 +2357,7 @@ void ProjectManager::_on_search_term_changed(const String &p_term) { void ProjectManager::_bind_methods() { ClassDB::bind_method("_exit_dialog", &ProjectManager::_exit_dialog); - ClassDB::bind_method("_unhandled_input", &ProjectManager::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &ProjectManager::_unhandled_key_input); ClassDB::bind_method("_update_project_buttons", &ProjectManager::_update_project_buttons); } @@ -2366,12 +2379,24 @@ ProjectManager::ProjectManager() { switch (display_scale) { case 0: { - // Try applying a suitable display scale automatically + // Try applying a suitable display scale automatically. #ifdef OSX_ENABLED editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); - editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); + float scale; + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + // hiDPI display. + scale = 2.0; + } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. + // Icons won't look great, but this is better than having editor elements overflow from its window. + scale = 0.75; + } else { + scale = 1.0; + } + + editor_set_scale(scale); #endif } break; @@ -2393,9 +2418,9 @@ ProjectManager::ProjectManager() { case 6: editor_set_scale(2.0); break; - default: { + default: editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale")); - } break; + break; } // Define a minimum window size to prevent UI elements from overlapping or being cut off @@ -2405,26 +2430,29 @@ ProjectManager::ProjectManager() { DisplayServer::get_singleton()->window_set_size(DisplayServer::get_singleton()->window_get_size() * MAX(1, EDSCALE)); } - String cp; - cp += 0xA9; // TRANSLATORS: This refers to the application where users manage their Godot projects. - DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + TTR("Project Manager") + " - " + cp + " 2007-2020 Juan Linietsky, Ariel Manzur & Godot Contributors"); + if (TS->is_locale_right_to_left(TranslationServer::get_singleton()->get_tool_locale())) { + // For RTL languages, embed translated part of the title (using control characters) to ensure correct order. + DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + String::chr(0x202B) + TTR("Project Manager") + String::chr(0x202C) + String::chr(0x200E) + " - " + String::chr(0xA9) + " 2007-2021 Juan Linietsky, Ariel Manzur & Godot Contributors"); + } else { + DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + TTR("Project Manager") + " - " + String::chr(0xA9) + " 2007-2021 Juan Linietsky, Ariel Manzur & Godot Contributors"); + } FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files")); - set_anchors_and_margins_preset(Control::PRESET_WIDE); + set_anchors_and_offsets_preset(Control::PRESET_WIDE); set_theme(create_custom_theme()); - set_anchors_and_margins_preset(Control::PRESET_WIDE); + set_anchors_and_offsets_preset(Control::PRESET_WIDE); Panel *panel = memnew(Panel); add_child(panel); - panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); + panel->set_anchors_and_offsets_preset(Control::PRESET_WIDE); panel->add_theme_style_override("panel", get_theme_stylebox("Background", "EditorStyles")); VBoxContainer *vb = memnew(VBoxContainer); panel->add_child(vb); - vb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 8 * EDSCALE); + vb->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 8 * EDSCALE); Control *center_box = memnew(Control); center_box->set_v_size_flags(Control::SIZE_EXPAND_FILL); @@ -2432,7 +2460,7 @@ ProjectManager::ProjectManager() { tabs = memnew(TabContainer); center_box->add_child(tabs); - tabs->set_anchors_and_margins_preset(Control::PRESET_WIDE); + tabs->set_anchors_and_offsets_preset(Control::PRESET_WIDE); tabs->set_tab_align(TabContainer::ALIGN_LEFT); HBoxContainer *projects_hb = memnew(HBoxContainer); @@ -2540,9 +2568,10 @@ ProjectManager::ProjectManager() { { // Version info and language options - HBoxContainer *settings_hb = memnew(HBoxContainer); + settings_hb = memnew(HBoxContainer); settings_hb->set_alignment(BoxContainer::ALIGN_END); settings_hb->set_h_grow_direction(Control::GROW_DIRECTION_BEGIN); + settings_hb->set_anchors_and_offsets_preset(Control::PRESET_TOP_RIGHT); Label *version_label = memnew(Label); String hash = String(VERSION_HASH); @@ -2586,7 +2615,6 @@ ProjectManager::ProjectManager() { settings_hb->add_child(language_btn); center_box->add_child(settings_hb); - settings_hb->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT); } if (StreamPeerSSL::is_available()) { @@ -2601,9 +2629,9 @@ ProjectManager::ProjectManager() { { // Dialogs language_restart_ask = memnew(ConfirmationDialog); - language_restart_ask->get_ok()->set_text(TTR("Restart Now")); - language_restart_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_restart_confirm)); - language_restart_ask->get_cancel()->set_text(TTR("Continue")); + language_restart_ask->get_ok_button()->set_text(TTR("Restart Now")); + language_restart_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_restart_confirm)); + language_restart_ask->get_cancel_button()->set_text(TTR("Continue")); add_child(language_restart_ask); scan_dir = memnew(FileDialog); @@ -2615,31 +2643,31 @@ ProjectManager::ProjectManager() { scan_dir->connect("dir_selected", callable_mp(this, &ProjectManager::_scan_begin)); erase_missing_ask = memnew(ConfirmationDialog); - erase_missing_ask->get_ok()->set_text(TTR("Remove All")); - erase_missing_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects_confirm)); + erase_missing_ask->get_ok_button()->set_text(TTR("Remove All")); + erase_missing_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects_confirm)); add_child(erase_missing_ask); erase_ask = memnew(ConfirmationDialog); - erase_ask->get_ok()->set_text(TTR("Remove")); - erase_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_erase_project_confirm)); + erase_ask->get_ok_button()->set_text(TTR("Remove")); + erase_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_erase_project_confirm)); 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", callable_mp(this, &ProjectManager::_open_selected_projects)); + multi_open_ask->get_ok_button()->set_text(TTR("Edit")); + multi_open_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_open_selected_projects)); 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", callable_mp(this, &ProjectManager::_run_project_confirm)); + multi_run_ask->get_ok_button()->set_text(TTR("Run")); + multi_run_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_run_project_confirm)); add_child(multi_run_ask); multi_scan_ask = memnew(ConfirmationDialog); - multi_scan_ask->get_ok()->set_text(TTR("Scan")); + multi_scan_ask->get_ok_button()->set_text(TTR("Scan")); add_child(multi_scan_ask); ask_update_settings = memnew(ConfirmationDialog); - ask_update_settings->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_confirm_update_settings)); + ask_update_settings->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_confirm_update_settings)); add_child(ask_update_settings); npdialog = memnew(ProjectDialog); @@ -2656,7 +2684,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->get_ok_button()->set_text(TTR("Open Asset Library")); open_templates->connect("confirmed", callable_mp(this, &ProjectManager::_open_asset_library)); add_child(open_templates); } diff --git a/editor/project_manager.h b/editor/project_manager.h index 212d693f1d..db8cb8410c 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -74,6 +74,8 @@ class ProjectManager : public Control { ConfirmationDialog *ask_update_settings; ConfirmationDialog *open_templates; + HBoxContainer *settings_hb; + AcceptDialog *run_error_diag; AcceptDialog *dialog_error; ProjectDialog *npdialog; @@ -110,7 +112,7 @@ class ProjectManager : public Control { void _install_project(const String &p_zip_path, const String &p_title); void _dim_window(); - void _unhandled_input(const Ref<InputEvent> &p_ev); + void _unhandled_key_input(const Ref<InputEvent> &p_ev); void _files_dropped(PackedStringArray p_files, int p_screen); void _on_order_option_changed(int p_idx); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 55d80021c8..98cdab0b70 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -156,7 +156,7 @@ void ProjectSettingsEditor::_update_advanced_bar() { bool disable_add = true; bool disable_del = true; - if (!property_box->get_text().empty()) { + if (!property_box->get_text().is_empty()) { const String setting = _get_setting_name(); bool setting_exists = ps->has_setting(setting); if (setting_exists) { @@ -197,7 +197,7 @@ void ProjectSettingsEditor::_update_advanced_bar() { String ProjectSettingsEditor::_get_setting_name() const { const String cat = category_box->get_text(); - const String name = (cat.empty() ? "global" : cat.strip_edges()).plus_file(property_box->get_text().strip_edges()); + const String name = (cat.is_empty() ? "global" : cat.strip_edges()).plus_file(property_box->get_text().strip_edges()); const String feature = feature_override->get_item_text(feature_override->get_selected()); return (feature == "") ? name : (name + "." + feature); @@ -478,6 +478,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { del_confirmation->connect("confirmed", callable_mp(this, &ProjectSettingsEditor::_delete_setting), varray(true)); add_child(del_confirmation); - get_ok()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Close")); set_hide_on_ok(true); } diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index 73e96d7b03..88c96540ff 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 1e4ed0c552..07312e42b4 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -251,7 +251,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { emit_signal("variant_changed"); break; } - ERR_FAIL_COND(inheritors_array.empty()); + ERR_FAIL_COND(inheritors_array.is_empty()); String intype = inheritors_array[p_which - TYPE_BASE_ID]; @@ -262,7 +262,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { return; } - Object *obj = ClassDB::instance(intype); + Variant obj = ClassDB::instance(intype); if (!obj) { if (ScriptServer::is_global_class(intype)) { @@ -280,7 +280,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { res->call("set_instance_base_type", owner->get_class()); } - v = res; + v = obj; emit_signal("variant_changed"); } break; @@ -367,18 +367,18 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: int c = hint_text.get_slice_count(","); float min = 0, max = 100, step = type == Variant::FLOAT ? .01 : 1; if (c >= 1) { - if (!hint_text.get_slice(",", 0).empty()) { + if (!hint_text.get_slice(",", 0).is_empty()) { min = hint_text.get_slice(",", 0).to_float(); } } if (c >= 2) { - if (!hint_text.get_slice(",", 1).empty()) { + if (!hint_text.get_slice(",", 1).is_empty()) { max = hint_text.get_slice(",", 1).to_float(); } } if (c >= 3) { - if (!hint_text.get_slice(",", 2).empty()) { + if (!hint_text.get_slice(",", 2).is_empty()) { step = hint_text.get_slice(",", 2).to_float(); } } @@ -456,14 +456,14 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: set_size(Vector2(4, 4) * EDSCALE + checks20gc->get_position() + checks20gc->get_size()); } else if (hint == PROPERTY_HINT_EXP_EASING) { - easing_draw->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 5 * EDSCALE); - easing_draw->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -5 * EDSCALE); - easing_draw->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_BEGIN, 5 * EDSCALE); - easing_draw->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, -30 * EDSCALE); - type_button->set_anchor_and_margin(MARGIN_LEFT, Control::ANCHOR_BEGIN, 3 * EDSCALE); - type_button->set_anchor_and_margin(MARGIN_RIGHT, Control::ANCHOR_END, -3 * EDSCALE); - type_button->set_anchor_and_margin(MARGIN_TOP, Control::ANCHOR_END, -25 * EDSCALE); - type_button->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_END, -7 * EDSCALE); + easing_draw->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 5 * EDSCALE); + easing_draw->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -5 * EDSCALE); + easing_draw->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_BEGIN, 5 * EDSCALE); + easing_draw->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, -30 * EDSCALE); + type_button->set_anchor_and_offset(SIDE_LEFT, Control::ANCHOR_BEGIN, 3 * EDSCALE); + type_button->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -3 * EDSCALE); + type_button->set_anchor_and_offset(SIDE_TOP, Control::ANCHOR_END, -25 * EDSCALE); + type_button->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_END, -7 * EDSCALE); type_button->set_text(TTR("Preset...")); type_button->get_popup()->clear(); type_button->get_popup()->add_item(TTR("Linear"), EASING_LINEAR); @@ -501,7 +501,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: List<String> names; names.push_back("value:"); config_value_editors(1, 1, 50, names); - value_editor[0]->set_text(String::num(v)); + value_editor[0]->set_text(TS->format_number(String::num(v))); } } break; @@ -536,10 +536,10 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: int button_margin = text_edit->get_theme_constant("button_margin", "Dialogs"); int margin = text_edit->get_theme_constant("margin", "Dialogs"); - action_buttons[0]->set_anchor(MARGIN_LEFT, Control::ANCHOR_END); - action_buttons[0]->set_anchor(MARGIN_TOP, Control::ANCHOR_END); - action_buttons[0]->set_anchor(MARGIN_RIGHT, Control::ANCHOR_END); - action_buttons[0]->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_END); + action_buttons[0]->set_anchor(SIDE_LEFT, Control::ANCHOR_END); + action_buttons[0]->set_anchor(SIDE_TOP, Control::ANCHOR_END); + action_buttons[0]->set_anchor(SIDE_RIGHT, Control::ANCHOR_END); + action_buttons[0]->set_anchor(SIDE_BOTTOM, Control::ANCHOR_END); action_buttons[0]->set_begin(Point2(-70 * EDSCALE, -button_margin + 5 * EDSCALE)); action_buttons[0]->set_end(Point2(-margin, -margin)); action_buttons[0]->set_text(TTR("Close")); @@ -882,7 +882,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: bool is_custom_resource = false; Ref<Texture2D> icon; - if (!custom_resources.empty()) { + if (!custom_resources.is_empty()) { for (int k = 0; k < custom_resources.size(); k++) { if (custom_resources[k].name == t) { is_custom_resource = true; @@ -1064,7 +1064,7 @@ void CustomPropertyEditor::_type_create_selected(int p_idx) { String intype = inheritors_array[p_idx]; - Object *obj = ClassDB::instance(intype); + Variant obj = ClassDB::instance(intype); if (!obj) { if (ScriptServer::is_global_class(intype)) { @@ -1075,11 +1075,9 @@ void CustomPropertyEditor::_type_create_selected(int p_idx) { } ERR_FAIL_COND(!obj); + ERR_FAIL_COND(!Object::cast_to<Resource>(obj)); - Resource *res = Object::cast_to<Resource>(obj); - ERR_FAIL_COND(!res); - - v = res; + v = obj; emit_signal("variant_changed"); hide(); } @@ -1246,12 +1244,12 @@ void CustomPropertyEditor::_action_pressed(int p_which) { } break; case Variant::OBJECT: { if (p_which == 0) { - ERR_FAIL_COND(inheritors_array.empty()); + ERR_FAIL_COND(inheritors_array.is_empty()); String intype = inheritors_array[0]; if (hint == PROPERTY_HINT_RESOURCE_TYPE) { - Object *obj = ClassDB::instance(intype); + Variant obj = ClassDB::instance(intype); if (!obj) { if (ScriptServer::is_global_class(intype)) { @@ -1262,10 +1260,9 @@ void CustomPropertyEditor::_action_pressed(int p_which) { } ERR_BREAK(!obj); - Resource *res = Object::cast_to<Resource>(obj); - ERR_BREAK(!res); + ERR_BREAK(!Object::cast_to<Resource>(obj)); - v = res; + v = obj; emit_signal("variant_changed"); hide(); } @@ -1389,6 +1386,7 @@ void CustomPropertyEditor::_draw_easing() { bool flip = hint_text == "attenuation"; Ref<Font> f = easing_draw->get_theme_font("font", "Label"); + int font_size = easing_draw->get_theme_font_size("font_size", "Label"); Color color = easing_draw->get_theme_color("font_color", "Label"); for (int i = 1; i <= points; i++) { @@ -1406,7 +1404,7 @@ void CustomPropertyEditor::_draw_easing() { prev = h; } - f->draw(ci, Point2(10, 10 + f->get_ascent()), String::num(exp, 2), color); + f->draw_string(ci, Point2(10, 10 + f->get_ascent(font_size)), String::num(exp, 2), HALIGN_LEFT, -1, font_size, color); } void CustomPropertyEditor::_text_edit_changed() { @@ -1432,7 +1430,7 @@ void CustomPropertyEditor::_modified(String p_string) { updating = true; switch (type) { case Variant::INT: { - String text = value_editor[0]->get_text(); + String text = TS->parse_number(value_editor[0]->get_text()); Ref<Expression> expr; expr.instance(); Error err = expr->parse(text); @@ -1447,7 +1445,7 @@ void CustomPropertyEditor::_modified(String p_string) { } break; case Variant::FLOAT: { if (hint != PROPERTY_HINT_EXP_EASING) { - String text = value_editor[0]->get_text(); + String text = TS->parse_number(value_editor[0]->get_text()); v = _parse_real_expression(text); emit_signal("variant_changed"); } @@ -1660,10 +1658,10 @@ void CustomPropertyEditor::_focus_exit() { void CustomPropertyEditor::config_action_buttons(const List<String> &p_strings) { Ref<StyleBox> sb = action_buttons[0]->get_theme_stylebox("panel"); - int margin_top = sb->get_margin(MARGIN_TOP); - int margin_left = sb->get_margin(MARGIN_LEFT); - int margin_bottom = sb->get_margin(MARGIN_BOTTOM); - int margin_right = sb->get_margin(MARGIN_RIGHT); + int margin_top = sb->get_margin(SIDE_TOP); + int margin_left = sb->get_margin(SIDE_LEFT); + int margin_bottom = sb->get_margin(SIDE_BOTTOM); + int margin_right = sb->get_margin(SIDE_RIGHT); int max_width = 0; int height = 0; @@ -1793,8 +1791,8 @@ CustomPropertyEditor::CustomPropertyEditor() { text_edit = memnew(TextEdit); add_child(text_edit); - text_edit->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); - text_edit->set_margin(MARGIN_BOTTOM, -30); + text_edit->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); + text_edit->set_offset(SIDE_BOTTOM, -30); text_edit->hide(); text_edit->connect("text_changed", callable_mp(this, &CustomPropertyEditor::_text_edit_changed)); @@ -1852,12 +1850,12 @@ CustomPropertyEditor::CustomPropertyEditor() { spinbox = memnew(SpinBox); add_child(spinbox); - spinbox->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); + spinbox->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); spinbox->connect("value_changed", callable_mp(this, &CustomPropertyEditor::_range_modified)); slider = memnew(HSlider); add_child(slider); - slider->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); + slider->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); slider->connect("value_changed", callable_mp(this, &CustomPropertyEditor::_range_modified)); create_dialog = nullptr; diff --git a/editor/property_editor.h b/editor/property_editor.h index 75c6fd372b..c6929f3b42 100644 --- a/editor/property_editor.h +++ b/editor/property_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 75420a1ef4..da798962e5 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -31,6 +31,7 @@ #include "property_selector.h" #include "core/os/keyboard.h" +#include "editor/doc_tools.h" #include "editor/editor_node.h" #include "editor_scale.h" @@ -320,7 +321,7 @@ void PropertySelector::_update_search() { } } - get_ok()->set_disabled(root->get_children() == nullptr); + get_ok_button()->set_disabled(root->get_children() == nullptr); } void PropertySelector::_confirmed() { @@ -349,7 +350,7 @@ void PropertySelector::_item_selected() { class_type = base_type; } - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); String text; if (properties) { @@ -552,8 +553,8 @@ PropertySelector::PropertySelector() { search_box->connect("gui_input", callable_mp(this, &PropertySelector::_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); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); search_options->connect("item_activated", callable_mp(this, &PropertySelector::_confirmed)); diff --git a/editor/property_selector.h b/editor/property_selector.h index f579c0404c..37b00e938b 100644 --- a/editor/property_selector.h +++ b/editor/property_selector.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/pvrtc_compress.cpp b/editor/pvrtc_compress.cpp deleted file mode 100644 index 23bcf9540e..0000000000 --- a/editor/pvrtc_compress.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************/ -/* pvrtc_compress.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 "pvrtc_compress.h" - -#include "core/io/resource_loader.h" -#include "core/io/resource_saver.h" -#include "core/os/dir_access.h" -#include "core/os/file_access.h" -#include "core/os/os.h" -#include "editor_settings.h" -#include "scene/resources/texture.h" - -static void (*_base_image_compress_pvrtc2_func)(Image *) = nullptr; -static void (*_base_image_compress_pvrtc4_func)(Image *) = nullptr; - -static void _compress_image(Image::CompressMode p_mode, Image *p_image) { - String ttpath = EditorSettings::get_singleton()->get("filesystem/import/pvrtc_texture_tool"); - - if (ttpath.strip_edges() == "" || !FileAccess::exists(ttpath)) { - switch (p_mode) { - case Image::COMPRESS_PVRTC2: - if (_base_image_compress_pvrtc2_func) { - _base_image_compress_pvrtc2_func(p_image); - } else if (_base_image_compress_pvrtc4_func) { - _base_image_compress_pvrtc4_func(p_image); - } - break; - case Image::COMPRESS_PVRTC4: - if (_base_image_compress_pvrtc4_func) { - _base_image_compress_pvrtc4_func(p_image); - } - break; - default: - ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module."); - } - return; - } - - String tmppath = EditorSettings::get_singleton()->get_cache_dir(); - String src_img = tmppath.plus_file("_tmp_src_img.png"); - String dst_img = tmppath.plus_file("_tmp_dst_img.pvr"); - - List<String> args; - args.push_back("-i"); - args.push_back(src_img); - args.push_back("-o"); - args.push_back(dst_img); - args.push_back("-f"); - - switch (p_mode) { - case Image::COMPRESS_PVRTC2: - args.push_back("PVRTC2"); - break; - case Image::COMPRESS_PVRTC4: - args.push_back("PVRTC4"); - break; - case Image::COMPRESS_ETC: - args.push_back("ETC"); - break; - default: - ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module."); - } - - if (EditorSettings::get_singleton()->get("filesystem/import/pvrtc_fast_conversion").operator bool()) { - args.push_back("-pvrtcfast"); - } - if (p_image->has_mipmaps()) { - args.push_back("-m"); - } - - // Save source PNG. - Ref<ImageTexture> t = memnew(ImageTexture); - t->create_from_image(Ref<Image>(p_image)); - ResourceSaver::save(src_img, t); - - Error err = OS::get_singleton()->execute(ttpath, args, true); - if (err != OK) { - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); - ERR_FAIL_MSG("Could not execute PVRTC tool: " + ttpath); - } - - t = ResourceLoader::load(dst_img, "Texture2D"); - if (t.is_null()) { - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); - ERR_FAIL_MSG("Can't load back converted image using PVRTC tool."); - } - - p_image->copy_internals_from(t->get_data()); - - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); -} - -static void _compress_pvrtc2(Image *p_image) { - _compress_image(Image::COMPRESS_PVRTC2, p_image); -} - -static void _compress_pvrtc4(Image *p_image) { - _compress_image(Image::COMPRESS_PVRTC4, p_image); -} - -void _pvrtc_register_compressors() { - _base_image_compress_pvrtc2_func = Image::_image_compress_pvrtc2_func; - _base_image_compress_pvrtc4_func = Image::_image_compress_pvrtc4_func; - - Image::_image_compress_pvrtc2_func = _compress_pvrtc2; - Image::_image_compress_pvrtc4_func = _compress_pvrtc4; -} diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp index e1308b4895..7f720d65d0 100644 --- a/editor/quick_open.cpp +++ b/editor/quick_open.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -107,11 +107,11 @@ void EditorQuickOpen::_update_search() { to_select->set_as_cursor(0); search_options->scroll_to_item(to_select); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else { search_options->deselect_all(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } } @@ -256,6 +256,6 @@ EditorQuickOpen::EditorQuickOpen() { search_options->add_theme_constant_override("draw_guides", 1); vbc->add_margin_child(TTR("Matches:"), search_options, true); - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_hide_on_ok(false); } diff --git a/editor/quick_open.h b/editor/quick_open.h index 3b199f9561..f1787d522b 100644 --- a/editor/quick_open.h +++ b/editor/quick_open.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -49,7 +49,7 @@ class EditorQuickOpen : public ConfirmationDialog { struct Entry { String path; - float score; + float score = 0; }; struct EntryComparator { diff --git a/editor/register_exporters.h b/editor/register_exporters.h index 27071f4a51..5091292b1a 100644 --- a/editor/register_exporters.h +++ b/editor/register_exporters.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp index 318324e56d..48aa0471c9 100644 --- a/editor/rename_dialog.cpp +++ b/editor/rename_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -286,7 +286,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und // ---- Dialog related set_min_size(Size2(383, 0)); - get_ok()->set_text(TTR("Rename")); + get_ok_button()->set_text(TTR("Rename")); Button *but_reset = add_button(TTR("Reset")); eh.errfunc = _error_handler; @@ -572,7 +572,7 @@ void RenameDialog::rename() { // Forward recursive as opposed to the actual renaming. _iterate_scene(root_node, selected_node_list, &global_count); - if (undo_redo && !to_rename.empty()) { + if (undo_redo && !to_rename.is_empty()) { undo_redo->create_action(TTR("Batch Rename")); // Make sure to iterate reversed so that child nodes will find parents. diff --git a/editor/rename_dialog.h b/editor/rename_dialog.h index 164d7ab1b0..76e99e3b66 100644 --- a/editor/rename_dialog.h +++ b/editor/rename_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/reparent_dialog.cpp b/editor/reparent_dialog.cpp index 0ff27af7c1..aab046c235 100644 --- a/editor/reparent_dialog.cpp +++ b/editor/reparent_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -87,7 +87,7 @@ ReparentDialog::ReparentDialog() { //cancel->connect("pressed", this,"_cancel"); - get_ok()->set_text(TTR("Reparent")); + get_ok_button()->set_text(TTR("Reparent")); } ReparentDialog::~ReparentDialog() { diff --git a/editor/reparent_dialog.h b/editor/reparent_dialog.h index 4566e3a02a..5c3a65a522 100644 --- a/editor/reparent_dialog.h +++ b/editor/reparent_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 038b18a648..bbedb4f033 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -114,7 +114,12 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) { _tool_selected(TOOL_COPY_NODE_PATH); } else if (ED_IS_SHORTCUT("scene_tree/delete", p_event)) { _tool_selected(TOOL_ERASE); + } else { + return; } + + // Tool selection was successful, accept the event to stop propagation. + accept_event(); } void SceneTreeDock::instance(const String &p_file) { @@ -223,6 +228,7 @@ void SceneTreeDock::_perform_instance_scenes(const Vector<String> &p_files, Node } editor_data->get_undo_redo().commit_action(); + editor->push_item(instances[instances.size() - 1]); } void SceneTreeDock::_replace_with_branch_scene(const String &p_file, Node *base) { @@ -356,7 +362,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (current_edited_scene_root) { String root_class = current_edited_scene_root->get_class_name(); static Vector<String> preferred_types; - if (preferred_types.empty()) { + if (preferred_types.is_empty()) { preferred_types.push_back("Control"); preferred_types.push_back("Node2D"); preferred_types.push_back("Node3D"); @@ -411,7 +417,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { } Node *selected = scene_tree->get_selected(); - if (!selected && !editor_selection->get_selected_node_list().empty()) { + if (!selected && !editor_selection->get_selected_node_list().is_empty()) { selected = editor_selection->get_selected_node_list().front()->get(); } @@ -433,7 +439,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { Array selection = editor_selection->get_selected_nodes(); - if (selection.empty()) { + if (selection.is_empty()) { return; } @@ -732,7 +738,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { List<Node *> remove_list = editor_selection->get_selected_node_list(); - if (remove_list.empty()) { + if (remove_list.is_empty()) { return; } @@ -1010,7 +1016,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { break; case TOOL_CREATE_USER_INTERFACE: { Control *node = memnew(Control); - node->set_anchors_and_margins_preset(PRESET_WIDE); //more useful for resizable UIs. + node->set_anchors_and_offsets_preset(PRESET_WIDE); //more useful for resizable UIs. new_node = node; } break; @@ -1068,14 +1074,14 @@ void SceneTreeDock::_notification(int p_what) { 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_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"); + canvas_item_plugin->get_canvas_item_editor()->connect("item_lock_status_changed", Callable(scene_tree, "_update_tree")); + canvas_item_plugin->get_canvas_item_editor()->connect("item_group_status_changed", Callable(scene_tree, "_update_tree")); scene_tree->connect("node_changed", callable_mp((CanvasItem *)canvas_item_plugin->get_canvas_item_editor()->get_viewport_control(), &CanvasItem::update)); } Node3DEditorPlugin *spatial_editor_plugin = Object::cast_to<Node3DEditorPlugin>(editor_data->get_editor("3D")); - 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"); + spatial_editor_plugin->get_spatial_editor()->connect("item_lock_status_changed", Callable(scene_tree, "_update_tree")); + spatial_editor_plugin->get_spatial_editor()->connect("item_group_status_changed", Callable(scene_tree, "_update_tree")); button_add->set_icon(get_theme_icon("Add", "EditorIcons")); button_instance->set_icon(get_theme_icon("Instance", "EditorIcons")); @@ -1102,7 +1108,7 @@ void SceneTreeDock::_notification(int p_what) { node_shortcuts_toggle->set_toggle_mode(true); node_shortcuts_toggle->set_tooltip(TTR("Switch to Favorite Nodes")); 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->set_anchors_and_offsets_preset(Control::PRESET_CENTER_RIGHT); node_shortcuts_toggle->connect("pressed", callable_mp(this, &SceneTreeDock::_update_create_root_dialog)); top_row->add_child(node_shortcuts_toggle); @@ -1348,8 +1354,8 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP break; } - // update if the node itself moved up/down the tree hirarchy - if (root_path == F->get().first) { + // update the node itself if it has a valid node path and has not been deleted + if (root_path == F->get().first && p != NodePath() && F->get().second != NodePath()) { NodePath abs_path = NodePath(String(root_path).plus_file(p)).simplified(); NodePath rel_path_new = F->get().second.rel_path_to(abs_path); @@ -1524,7 +1530,7 @@ void SceneTreeDock::_node_reparent(NodePath p_path, bool p_keep_global_xform) { List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { return; // Nothing to reparent. } @@ -1698,7 +1704,7 @@ bool SceneTreeDock::_is_collapsed_recursive(TreeItem *p_item) const { List<TreeItem *> needs_check; needs_check.push_back(p_item); - while (!needs_check.empty()) { + while (!needs_check.is_empty()) { TreeItem *item = needs_check.back()->get(); needs_check.pop_back(); @@ -1720,7 +1726,7 @@ void SceneTreeDock::_set_collapsed_recursive(TreeItem *p_item, bool p_collapsed) List<TreeItem *> to_collapse; to_collapse.push_back(p_item); - while (!to_collapse.empty()) { + while (!to_collapse.is_empty()) { TreeItem *item = to_collapse.back()->get(); to_collapse.pop_back(); @@ -1737,7 +1743,7 @@ void SceneTreeDock::_set_collapsed_recursive(TreeItem *p_item, bool p_collapsed) void SceneTreeDock::_script_created(Ref<Script> p_script) { List<Node *> selected = editor_selection->get_selected_node_list(); - if (selected.empty()) { + if (selected.is_empty()) { return; } @@ -1806,7 +1812,7 @@ void SceneTreeDock::_toggle_editable_children(Node *p_node) { void SceneTreeDock::_delete_confirm() { List<Node *> remove_list = editor_selection->get_selected_node_list(); - if (remove_list.empty()) { + if (remove_list.is_empty()) { return; } @@ -1929,25 +1935,8 @@ void SceneTreeDock::_selection_changed() { _update_script_button(); } -Node *SceneTreeDock::_get_selection_group_tail(Node *p_node, List<Node *> p_list) { - Node *tail = p_node; - Node *parent = tail->get_parent(); - - for (int i = p_node->get_index(); i < parent->get_child_count(); i++) { - Node *sibling = parent->get_child(i); - - if (p_list.find(sibling)) { - tail = sibling; - } else { - break; - } - } - - return tail; -} - void SceneTreeDock::_do_create(Node *p_parent) { - Object *c = create_dialog->instance_selected(); + Variant c = create_dialog->instance_selected(); ERR_FAIL_COND(!c); Node *child = Object::cast_to<Node>(c); @@ -1990,6 +1979,9 @@ void SceneTreeDock::_do_create(Node *p_parent) { if (ms.height < 4) { ms.height = 40; } + if (ct->is_layout_rtl()) { + ct->set_position(ct->get_position() - Vector2(ms.x, 0)); + } ct->set_size(ms); } } @@ -2024,7 +2016,7 @@ void SceneTreeDock::_create() { Node *n = E->get(); ERR_FAIL_COND(!n); - Object *c = create_dialog->instance_selected(); + Variant c = create_dialog->instance_selected(); ERR_FAIL_COND(!c); Node *newnode = Object::cast_to<Node>(c); @@ -2358,7 +2350,7 @@ void SceneTreeDock::_script_dropped(String p_file, NodePath p_to) { void SceneTreeDock::_nodes_dragged(Array p_nodes, NodePath p_to, int p_type) { List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { return; //nothing to reparent } @@ -2610,7 +2602,7 @@ void SceneTreeDock::attach_script_to_selected(bool p_extend) { } List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) { + if (selection.is_empty()) { return; } @@ -2824,8 +2816,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel HBoxContainer *filter_hbc = memnew(HBoxContainer); filter_hbc->add_theme_constant_override("separate", 0); - ED_SHORTCUT("scene_tree/rename", TTR("Rename")); - ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_CMD | KEY_F2); + ED_SHORTCUT("scene_tree/rename", TTR("Rename"), KEY_F2); + ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_SHIFT | KEY_F2); ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KEY_MASK_CMD | KEY_A); ED_SHORTCUT("scene_tree/instance_scene", TTR("Instance Child Scene")); ED_SHORTCUT("scene_tree/expand_collapse_all", TTR("Expand/Collapse All")); @@ -2954,6 +2946,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel quick_open = memnew(EditorQuickOpen); add_child(quick_open); quick_open->connect("quick_open", callable_mp(this, &SceneTreeDock::_quick_open)); + set_process_unhandled_key_input(true); delete_dialog = memnew(ConfirmationDialog); @@ -2990,7 +2983,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel clear_inherit_confirm = memnew(ConfirmationDialog); clear_inherit_confirm->set_text(TTR("Clear Inheritance? (No Undo!)")); - clear_inherit_confirm->get_ok()->set_text(TTR("Clear")); + clear_inherit_confirm->get_ok_button()->set_text(TTR("Clear")); add_child(clear_inherit_confirm); set_process_input(true); diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h index c2c877bf68..4f8d85f07c 100644 --- a/editor/scene_tree_dock.h +++ b/editor/scene_tree_dock.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -55,7 +55,6 @@ class SceneTreeDock : public VBoxContainer { GDCLASS(SceneTreeDock, VBoxContainer); enum Tool { - TOOL_NEW, TOOL_INSTANCE, TOOL_EXPAND_COLLAPSE, @@ -204,7 +203,6 @@ class SceneTreeDock : public VBoxContainer { bool _validate_no_foreign(); void _selection_changed(); void _update_script_button(); - Node *_get_selection_group_tail(Node *p_node, List<Node *> p_list); void _fill_path_renames(Vector<StringName> base_path, Vector<StringName> new_base_path, Node *p_node, List<Pair<NodePath, NodePath>> *p_renames); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 3ec012ce3c..b8475656ee 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -251,7 +251,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (can_rename) { //should be can edit.. String warning = p_node->get_configuration_warning(); - if (!warning.empty()) { + if (!warning.is_empty()) { item->add_button(0, get_theme_icon("NodeWarning", "EditorIcons"), BUTTON_WARNING, false, TTR("Node configuration warning:") + "\n" + p_node->get_configuration_warning()); } @@ -754,7 +754,7 @@ void SceneTreeEditor::_renamed() { ERR_FAIL_COND(!n); // Empty node names are not allowed, so resets it to previous text and show warning - if (which->get_text(0).strip_edges().empty()) { + if (which->get_text(0).strip_edges().is_empty()) { which->set_text(0, n->get_name()); EditorNode::get_singleton()->show_warning(TTR("No name provided.")); return; @@ -765,7 +765,7 @@ void SceneTreeEditor::_renamed() { error->set_text(TTR("Invalid node name, the following characters are not allowed:") + "\n" + Node::invalid_character); error->popup_centered(); - if (new_name.empty()) { + if (new_name.is_empty()) { which->set_text(0, n->get_name()); return; } @@ -829,10 +829,6 @@ void SceneTreeEditor::set_display_foreign_nodes(bool p_display) { _update_tree(); } -bool SceneTreeEditor::get_display_foreign_nodes() const { - return display_foreign; -} - void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) { valid_types = p_valid; } @@ -935,7 +931,7 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from next = tree->get_next_selected(next); } - if (selected.empty()) { + if (selected.is_empty()) { return Variant(); } @@ -1154,8 +1150,8 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope } tree = memnew(Tree); - tree->set_anchor(MARGIN_RIGHT, ANCHOR_END); - tree->set_anchor(MARGIN_BOTTOM, ANCHOR_END); + tree->set_anchor(SIDE_RIGHT, ANCHOR_END); + tree->set_anchor(SIDE_BOTTOM, ANCHOR_END); tree->set_begin(Point2(0, p_label ? 18 : 0)); tree->set_end(Point2(0, 0)); tree->add_theme_constant_override("button_margin", 0); diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h index 9373ef41f9..831723a27c 100644 --- a/editor/scene_tree_editor.h +++ b/editor/scene_tree_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -138,7 +138,6 @@ public: void set_undo_redo(UndoRedo *p_undo_redo) { undo_redo = p_undo_redo; }; void set_display_foreign_nodes(bool p_display); - bool get_display_foreign_nodes() const; void set_marked(const Set<Node *> &p_marked, bool p_selectable = false, bool p_children_selectable = true); void set_marked(Node *p_marked, bool p_selectable = false, bool p_children_selectable = true); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index b5f11fc6f9..b707f6c353 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -50,7 +50,7 @@ void ScriptCreateDialog::_theme_changed() { } String last_lang = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); - if (!last_lang.empty()) { + if (!last_lang.is_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); @@ -522,7 +522,7 @@ void ScriptCreateDialog::_browse_path(bool browse_parent, bool p_save) { if (p_save) { file_browse->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); file_browse->set_title(TTR("Open Script / Choose Location")); - file_browse->get_ok()->set_text(TTR("Open")); + file_browse->get_ok_button()->set_text(TTR("Open")); } else { file_browse->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); file_browse->set_title(TTR("Open Script")); @@ -568,6 +568,8 @@ void ScriptCreateDialog::_create() { void ScriptCreateDialog::_browse_class_in_tree() { select_class->set_base_type(base_type); select_class->popup_create(true); + select_class->set_title(vformat(TTR("Inherit %s"), base_type)); + select_class->get_ok_button()->set_text(TTR("Inherit")); } void ScriptCreateDialog::_path_changed(const String &p_path) { @@ -686,7 +688,7 @@ void ScriptCreateDialog::_update_dialog() { builtin_warning_label->set_visible(is_built_in); if (is_built_in) { - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -694,7 +696,7 @@ void ScriptCreateDialog::_update_dialog() { } else if (is_new_script_created) { // New script created. - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -704,7 +706,7 @@ void ScriptCreateDialog::_update_dialog() { } else if (load_enabled) { // Script loaded. - get_ok()->set_text(TTR("Load")); + get_ok_button()->set_text(TTR("Load")); parent_name->set_editable(false); parent_search_button->set_disabled(true); parent_browse_button->set_disabled(true); @@ -712,7 +714,7 @@ void ScriptCreateDialog::_update_dialog() { _msg_path_valid(true, TTR("Will load an existing script file.")); } } else { - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -721,7 +723,7 @@ void ScriptCreateDialog::_update_dialog() { script_ok = false; } - get_ok()->set_disabled(!script_ok); + get_ok_button()->set_disabled(!script_ok); Callable entered_call = callable_mp(this, &ScriptCreateDialog::_path_entered); if (script_ok) { @@ -878,7 +880,7 @@ ScriptCreateDialog::ScriptCreateDialog() { file_browse->connect("file_selected", callable_mp(this, &ScriptCreateDialog::_file_selected)); file_browse->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); add_child(file_browse); - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); alert = memnew(AcceptDialog); alert->get_label()->set_autowrap(true); alert->get_label()->set_align(Label::ALIGN_CENTER); diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h index 40415ea209..e898b6f927 100644 --- a/editor/script_create_dialog.h +++ b/editor/script_create_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -86,8 +86,8 @@ class ScriptCreateDialog : public ConfirmationDialog { SCRIPT_ORIGIN_EDITOR, }; struct ScriptTemplateInfo { - int id; - ScriptOrigin origin; + int id = 0; + ScriptOrigin origin = ScriptOrigin::SCRIPT_ORIGIN_EDITOR; String dir; String name; String extension; diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 864e5976b2..1dad3c091d 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -275,8 +275,8 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column last_wait_for_key = Ref<InputEventKey>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); //press_a_key->grab_focus(); - press_a_key->get_ok()->set_focus_mode(Control::FOCUS_NONE); - press_a_key->get_cancel()->set_focus_mode(Control::FOCUS_NONE); + press_a_key->get_ok_button()->set_focus_mode(Control::FOCUS_NONE); + press_a_key->get_cancel_button()->set_focus_mode(Control::FOCUS_NONE); shortcut_configured = item; } else if (p_idx == 1) { //erase @@ -471,10 +471,10 @@ EditorSettingsDialog::EditorSettingsDialog() { Label *l = memnew(Label); l->set_text(TTR("Press a Key...")); - l->set_anchors_and_margins_preset(Control::PRESET_WIDE); + l->set_anchors_and_offsets_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); - l->set_margin(MARGIN_TOP, 20); - l->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_BEGIN, 30); + l->set_offset(SIDE_TOP, 20); + l->set_anchor_and_offset(SIDE_BOTTOM, Control::ANCHOR_BEGIN, 30); press_a_key_label = l; press_a_key->add_child(l); press_a_key->connect("window_input", callable_mp(this, &EditorSettingsDialog::_wait_for_key)); @@ -488,7 +488,7 @@ EditorSettingsDialog::EditorSettingsDialog() { timer->set_one_shot(true); add_child(timer); EditorSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorSettingsDialog::_settings_changed)); - get_ok()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Close")); updating = false; } diff --git a/editor/settings_config_dialog.h b/editor/settings_config_dialog.h index 044519cb4d..b1ee58ae8f 100644 --- a/editor/settings_config_dialog.h +++ b/editor/settings_config_dialog.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/shader_globals_editor.cpp b/editor/shader_globals_editor.cpp index 915aec6d9a..14d305e34f 100644 --- a/editor/shader_globals_editor.cpp +++ b/editor/shader_globals_editor.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ @@ -483,5 +483,8 @@ ShaderGlobalsEditor::ShaderGlobalsEditor() { } ShaderGlobalsEditor::~ShaderGlobalsEditor() { + if (is_visible_in_tree()) { + inspector->edit(nullptr); + } memdelete(interface); } diff --git a/editor/shader_globals_editor.h b/editor/shader_globals_editor.h index 00b6cdef9f..84ab6ac063 100644 --- a/editor/shader_globals_editor.h +++ b/editor/shader_globals_editor.h @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 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 */ diff --git a/editor/translations/af.po b/editor/translations/af.po index 55009e16ae..0f26618d10 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -1,16 +1,17 @@ # Afrikaans translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Ray West <the.raxar@gmail.com>, 2017. # Julius Stopforth <jjstopforth@gmail.com>, 2018. # Isa Tippens <isatippens2@gmail.com>, 2019. +# Henry Geyser <thegoat187@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-03-28 09:36+0000\n" -"Last-Translator: Isa Tippens <isatippens2@gmail.com>\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" +"Last-Translator: Henry Geyser <thegoat187@gmail.com>\n" "Language-Team: Afrikaans <https://hosted.weblate.org/projects/godot-engine/" "godot/af/>\n" "Language: af\n" @@ -18,7 +19,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.6-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +28,7 @@ msgstr "Ongeldige tiepe argument om te omskep(), gebruik TYPE_* konstante" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Verwag 'n string van lengte 1 ('n karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -50,72 +51,71 @@ msgstr "Ongeldige operande vir operateur %s, %s en %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Ongeldige indeks van tipe %s vir basiese tipe %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ongeldige benaming van indeks '%s' vir basiese tipe %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Ongeldige argument om '%s' te genereer" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Aan roep tot '%s':" #: core/ustring.cpp msgid "B" -msgstr "" +msgstr "B" #: core/ustring.cpp msgid "KiB" -msgstr "" +msgstr "KiB" #: core/ustring.cpp msgid "MiB" -msgstr "" +msgstr "MiB" #: core/ustring.cpp msgid "GiB" -msgstr "" +msgstr "GiB" #: core/ustring.cpp msgid "TiB" -msgstr "" +msgstr "TiB" #: core/ustring.cpp msgid "PiB" -msgstr "" +msgstr "PiB" #: core/ustring.cpp msgid "EiB" -msgstr "" +msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Bevry" +msgstr "Bevry / Verniet" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Gebalanseer" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "" +msgstr "Spieel" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" -msgstr "" +msgstr "Tyd:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "" +msgstr "Waarde:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Anim Voeg Sleutel by" +msgstr "Voeg Sleutel Hier" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -123,18 +123,16 @@ msgid "Duplicate Selected Key(s)" msgstr "Dupliseer Seleksie" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Skrap gekose lêers?" +msgstr "Skrap gekose sleutels" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "" +msgstr "Voeg Bezier Punt By" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "Skuif Gunsteling Op" +msgstr "Verskuif Bezier Punte" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -145,9 +143,8 @@ msgid "Anim Delete Keys" msgstr "Anim Skrap Sleutels" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Verander Waarde" +msgstr "Anim Verander Sleutelraam Tyd" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" @@ -155,51 +152,44 @@ msgstr "Anim Verander Oorgang" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Anim Verander Transform" +msgstr "Anim Verander Transformasie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Verander Waarde" +msgstr "Anim Verander Sleutelraam Waarde" #: editor/animation_track_editor.cpp msgid "Anim Change Call" msgstr "Anim Verander Roep" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Anim Verander Waarde" +msgstr "Anim Herhaalde Verandering Van Sleutelraam Tye" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Anim Verander Oorgang" +msgstr "Anim Herhaalde Veranderinde Transisie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Anim Verander Transform" +msgstr "Anim Herhaalde Verandering van Transformasie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Anim Verander Waarde" +msgstr "Anim Herhaalde Verandering Van Sleutelraam Waarde" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Anim Verander Roep" +msgstr "Anim Herhaalde Verandering van Roep" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "Verander Anim Lente" +msgstr "Verander Animasie Lente" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Verander Animasie Omloop" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -1074,14 +1064,18 @@ msgstr "Eienaars van:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Verwyder geselekteerde lêers uit die projek? (geen ontdoen)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Die lêers wat verwyder word, word vereis deur ander hulpbronne sodat hulle " "reg kan werk.\n" @@ -1132,7 +1126,7 @@ msgstr "Verweerde Hulpbron Verkenner" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2389,11 +2383,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2401,7 +2400,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3707,6 +3706,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3761,15 +3770,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Dupliseer" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3800,10 +3800,17 @@ msgid "Collapse All" msgstr "Vervang Alles" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Dupliseer" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Skuif AutoLaai" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3841,7 +3848,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3917,8 +3927,18 @@ msgstr "Soek" #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Deursoek Teks" +msgid "%d match in %d file." +msgstr "Geen Pasmaats" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Geen Pasmaats" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Geen Pasmaats" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8415,10 +8435,25 @@ msgstr "Skep Nuwe" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Skep Nuwe" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Skep Intekening" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Skep Intekening" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Skrap gekose lêers?" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8624,10 +8659,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8690,10 +8721,6 @@ msgid "Stage All" msgstr "Vervang Alles" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9841,6 +9868,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12070,6 +12101,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12333,6 +12368,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12593,6 +12648,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12731,6 +12806,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12800,6 +12879,10 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Deursoek Teks" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Skuif Gunsteling Op" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 346ebd62e0..a99dde217a 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -1,6 +1,6 @@ # Arabic translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Adel <dragonhunter250@gmail.com>, 2018. # athomield <athomield@hotmail.com>, 2017. @@ -16,7 +16,7 @@ # Rached Noureddine <rached.noureddine@gmail.com>, 2018. # Rex_sa <asd1234567890m@gmail.com>, 2017, 2018, 2019. # Wajdi Feki <wajdi.feki@gmail.com>, 2017. -# Omar Aglan <omar.aglan91@yahoo.com>, 2018, 2019. +# Omar Aglan <omar.aglan91@yahoo.com>, 2018, 2019, 2020. # Codes Otaku <ilyas.gamerz@gmail.com>, 2018, 2019. # Takai Eddine Kennouche <takai.kenn@gmail.com>, 2018. # Mohamed El-Baz <albaz2000eg@gmail.com>, 2018. @@ -45,12 +45,14 @@ # ChemicalInk <aladdinalkhafaji@gmail.com>, 2020. # Musab Alasaifer <mousablasefer@gmail.com>, 2020. # Yassine Oudjana <y.oudjana@protonmail.com>, 2020. +# bruvzg <bruvzg13@gmail.com>, 2020. +# StarlkYT <mrsstarlkps4@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-12 00:46+0000\n" -"Last-Translator: Yassine Oudjana <y.oudjana@protonmail.com>\n" +"PO-Revision-Date: 2020-12-29 15:03+0000\n" +"Last-Translator: StarlkYT <mrsstarlkps4@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -59,12 +61,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4.1-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, استخدم احدى الثوابت من مجموعة TYPE_*." +msgstr "معامل خاطئ لدالة ()Convert، استخدم احدى الثوابت من مجموعة TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -78,7 +80,7 @@ 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)" @@ -86,7 +88,7 @@ msgstr "لا يمكن إستخدامه نفسه لأن الحالة فارغة ( #: 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" @@ -933,9 +935,8 @@ msgid "Signals" msgstr "الإشارات" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "تنقية البلاطات" +msgstr "تنقية الإشارات" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1063,17 +1064,23 @@ msgid "Owners Of:" msgstr "ملاك:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "إمسح الملفات المختارة من المشروع؟ (لا يمكن استعادتها)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"حذف الملفات المختارة من المشروع؟ (لا يمكن استعادتها)\n" +"يمكنك إيجاد الملفات المحذوفة في سلة مهملات النظام حيث يمكنك إسترجاعها." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"الملف الذي يُمسح مطلوب من موارد أخري لكل تعمل جيداً.\n" -"إمسح علي أية حال؟ (لا رجعة)" +"الملفات التي يتم إزالتها مطلوبة من قبل موارد أخرى من اجل ان تعمل.\n" +"هل تريد إزالتها على أي حال؟ (لا تراجع)\n" +"يمكنك العثور على الملفات التي تمت إزالتها في مهملات النظام لاستعادتها." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1117,7 +1124,7 @@ msgstr "متصفح الموارد أورفان" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1398,7 +1405,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" @@ -1410,7 +1417,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت." #: editor/editor_audio_buses.cpp msgid "Error saving file: %s" -msgstr "خطأ في تحميل الملف: s%" +msgstr "خطأ في تحميل الملف: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1626,25 +1633,22 @@ msgstr "" "Driver Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"المنصة المستهدفة تحتاج لتشفير ملمس 'ETC' ل GLES2. قم بتمكين 'Import Etc' في " -"إعدادات المشروع." +"المنصة المستهدفة تحتاج لتشفير ملمس 'PVRTC' ل GLES2. قم بتمكين 'Import Pvrtc' " +"في إعدادات المشروع." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"المنصة المستهدفة تحتاج لتشفير ملمس \"ETC2\" ل GLES3. قم بتمكين 'Import Etc " -"2' في إعدادات المشروع." +"المنصة المستهدفة تحتاج لتشفير ملمس \"ETC2\" او 'PVRTC' ل GLES3. قم بتمكين " +"'Import Etc 2' او 'Import Pvrtc' في إعدادات المشروع." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" @@ -1653,7 +1657,7 @@ msgid "" msgstr "" "تتطلب المنصة المستهدفة ضغط الرسومات النقشية 'ETC' texture ليرجع المعرّف إلى " "GLES2.\n" -"مكّن 'استيراد Etc' في إعدادات المشروع، أو عطّل 'تمكين التوافق الرجعي للتعريفات " +"مَكِّن 'استيراد Etc' في إعدادات المشروع، أو عطّل 'تمكين التوافق الرجعي للتعريفات " "Driver Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2057,8 +2061,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"لا يوجد حاليا وصف لهذه الخاصية. الرجاء المساعدة من خلال [url][/color/] " -"المساهمة واحد [color=$color][url=$url]!" +"لا يوجد حاليا وصف لهذه الخاصية. الرجاء المساعدة من خلال [color=$color][url=" +"$url]المساهمة واحد [/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2268,7 +2272,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." @@ -2329,19 +2333,27 @@ msgid "Error saving TileSet!" msgstr "خطأ في حفظ مجموعة البلاط!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "خطآ في محاولة حفظ النسق!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"حدث خطأ ما عند المحاوله لحفظ المحرر.\n" +"تأكد من عنوان بيانات المستخدم للمحرر قابله للكتابه." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "تخطي نسق المُحرر الإفتراضي." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "إسم النسق غير موجود!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "إسترجاع النسق الإفتراضي إلي الإعدادات الأساسية." #: editor/editor_node.cpp @@ -3009,7 +3021,7 @@ msgstr "المجتمع" #: editor/editor_node.cpp msgid "About" -msgstr "عن هذا التطبيق" +msgstr "حول" #: editor/editor_node.cpp msgid "Play the project." @@ -3709,6 +3721,16 @@ msgid "Name contains invalid characters." msgstr "الأسم يحتوي علي أحرف غير صالحة." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "إعادة تسمية ملف:" @@ -3756,14 +3778,6 @@ msgstr "تعديل التبعيات..." msgid "View Owners..." msgstr "أظهر المُلاك..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "إعادة تسمية..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "تكرير..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "تحريك إلي..." @@ -3791,11 +3805,17 @@ msgid "Collapse All" msgstr "طوي الكل" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "إعادة التسمية" +msgid "Duplicate..." +msgstr "تكرير..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "نقل التحميل التلقائي" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "إعادة تسمية..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3830,8 +3850,11 @@ msgid "Move" msgstr "تحريك" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "يوجد بالفعل ملف أو مجلد بنفس الاسم في هذا المكان." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "إعادة التسمية" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3899,8 +3922,19 @@ msgid "Searching..." msgstr "جاري البحث..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "إكتمل البحث" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d تطابقات." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d تطابقات." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d تطابقات." #: editor/groups_editor.cpp msgid "Add to Group" @@ -4737,7 +4771,7 @@ msgstr "عُقد البداية والنهاية مطلوبة لأجل الان #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "لم يتم تعيين موارد التشغيل في المسار:٪ s." +msgstr "لم يتم تعيين موارد التشغيل في المسار: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -8315,10 +8349,25 @@ msgid "Create a new rectangle." msgstr "إنشاء مستطيل جديد." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "مستطيل الطلاء" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "إنشاء مُضلع جديد." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "تحريك المُضلع" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "حذف المُختار" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "إبقاء المُضلع داخل مستطيل المنطقة." @@ -8523,10 +8572,6 @@ msgid "Error" msgstr "خطأ" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "لم يتم تقديم رسالة ارتكاب commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "لم يتم إضافة ملفات إلى المرحلة" @@ -8583,10 +8628,6 @@ msgid "Stage All" msgstr "مُجمل المراحل" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "إضافة رسالة إجراء" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "اقتراف التعديلا" @@ -9795,6 +9836,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12056,6 +12101,10 @@ msgstr "" "مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12357,6 +12406,26 @@ msgstr "" "(CPUParticles2D) استخدام لوحة-مادة-العنصر (CanvasItemMaterial) مع تفعيل" "\"الرسوم المتحركة للجزيئات\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12694,6 +12763,26 @@ msgstr "" "بواسطة محرك الفيزياء عند التشغيل.\n" "قم بتغيير الحجم في أشكال تصادم الأتباع (Children) بدلاً من ذلك." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12855,6 +12944,11 @@ msgstr "تنبيه!" msgid "Please Confirm..." msgstr "يُرجى التأكيد..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "تمكين المحاذاة" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12934,6 +13028,24 @@ msgstr "يمكن تعيين المتغيرات فقط في الذروة ." msgid "Constants cannot be modified." msgstr "لا يمكن تعديل الثوابت." +#~ msgid "Search complete" +#~ msgstr "إكتمل البحث" + +#~ msgid "No commit message was provided" +#~ msgstr "لم يتم تقديم رسالة ارتكاب commit" + +#~ msgid "Add a commit message" +#~ msgstr "إضافة رسالة إجراء" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "يوجد بالفعل ملف أو مجلد بنفس الاسم في هذا المكان." + +#~ msgid "Error trying to save layout!" +#~ msgstr "خطآ في محاولة حفظ النسق!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "تخطي نسق المُحرر الإفتراضي." + #~ msgid "Move pivot" #~ msgstr "نقل المحور" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index afb48710bc..83885ff225 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -1,6 +1,6 @@ # Bulgarian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # 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. @@ -11,12 +11,14 @@ # Whod <whodizhod@gmail.com>, 2020. # Stoyan <stoyan.stoyanov99@protonmail.com>, 2020. # zooid <the.zooid@gmail.com>, 2020. +# Любомир Василев <lyubomirv@gmx.com>, 2020. +# Ziv D <wizdavid@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" -"Last-Translator: zooid <the.zooid@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Любомир Василев <lyubomirv@gmx.com>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" "Language: bg\n" @@ -24,7 +26,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 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -888,9 +890,8 @@ msgid "Signals" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Поставяне на възелите" +msgstr "Филтриране на сигналите" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1014,15 +1015,19 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)" +"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)\n" +"Ще можете да ги откриете в кошчето, ако искате да ги възстановите." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1067,7 +1072,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1624,9 +1629,8 @@ msgid "Node Dock" msgstr "Панел за възлите" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Показване във файловата система" +msgstr "Панел за файловата система" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -1933,7 +1937,7 @@ msgstr "Наследява:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "Наследява се от:" #: editor/editor_help.cpp msgid "Description" @@ -2248,11 +2252,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2260,7 +2269,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -2386,9 +2395,8 @@ msgid "Can't reload a scene that was never saved." msgstr "Сцена, която никога не е била запазвана, не може да бъде презаредена." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Saved Scene" -msgstr "Запазване на сцената" +msgstr "Презареждане на запазената сцена" #: editor/editor_node.cpp msgid "" @@ -2854,9 +2862,8 @@ msgid "Q&A" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Report a Bug" -msgstr "Повторно внасяне" +msgstr "Докладване на проблем" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3542,6 +3549,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Преименуване на файла:" @@ -3558,9 +3575,8 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Inherited Scene" -msgstr "Нов скрипт" +msgstr "Нова сцена – наследник" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" @@ -3590,14 +3606,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3625,10 +3633,15 @@ msgid "Collapse All" msgstr "Свиване на всичко" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Преместване в кошчето" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3662,7 +3675,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3729,8 +3745,19 @@ msgid "Searching..." msgstr "Търсене..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Търсенето е завършено" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d съвпадения." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d съвпадения." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d съвпадения." #: editor/groups_editor.cpp msgid "Add to Group" @@ -4445,7 +4472,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "Указания" +msgstr "Направления" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -4485,9 +4512,8 @@ msgid "Include Gizmos (3D)" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Изтриване на анимацията?" +msgstr "Закачане на AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -4558,9 +4584,8 @@ msgid "Start and end nodes are needed for a sub-transition." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Обектът не е базиран на ресурсен файл" +msgstr "Няма ресурс, който може да бъде изпълнен, на пътя: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4611,9 +4636,8 @@ msgstr "Режим на възпроизвеждане:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Изтриване на анимацията?" +msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4916,9 +4940,8 @@ msgid "No results for \"%s\"." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Import..." -msgstr "Повторно внасяне..." +msgstr "Внасяне…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Plugins..." @@ -5153,24 +5176,20 @@ msgid "Center" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" -msgstr "Изглед Отляво." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" -msgstr "Изглед Отгоре." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" -msgstr "Изглед Отдясно." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" -msgstr "Изглед Отдолу." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" @@ -5252,9 +5271,8 @@ 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" @@ -5273,9 +5291,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 @@ -5310,9 +5327,8 @@ msgstr "Режим на завъртане" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Режим на Селектиране" +msgstr "Режим на скалиране" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5478,9 +5494,8 @@ msgid "Center Selection" msgstr "Центриране върху избраното" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Frame Selection" -msgstr "Покажи Селекцията (вмести в целия прозорец)" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -5515,9 +5530,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)" @@ -5540,9 +5554,8 @@ msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Изглед Отзад." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -5637,9 +5650,8 @@ msgstr "" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Папки и файлове:" +msgstr "" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5711,9 +5723,8 @@ msgid "Left Linear" msgstr "Линейно" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right Linear" -msgstr "Изглед Отдясно." +msgstr "" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Preset" @@ -5789,9 +5800,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Shape" -msgstr "Създай нови възли." +msgstr "Създаване на единична изпъкнала форма" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." @@ -5802,9 +5812,8 @@ msgid "Couldn't create any collision shapes." msgstr "Не могат да бъдат създадени никакви форми за колизии." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Shapes" -msgstr "Създай нови възли." +msgstr "Създаване на няколко изпъкнали форми" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -6330,9 +6339,8 @@ msgid "Transform UV Map" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Transform Polygon" -msgstr "Създаване на папка" +msgstr "Преобразуване на полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" @@ -6367,22 +6375,20 @@ msgid "Move Points" msgstr "Преместване на точките" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Влачене: завъртане" +msgstr "Command: завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: преместване на всичко" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: мащабиране" +msgstr "Shift+Command: мащабиране" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl: Завъртане" +msgstr "Ctrl: завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" @@ -6423,14 +6429,12 @@ msgid "Radius:" msgstr "Радиус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Полигон -> UV" +msgstr "Копиране на полигона в UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Превръщане в Polygon2D" +msgstr "Копиране на UV в полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6694,9 +6698,8 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" -msgstr "История Назад" +msgstr "Назад в историята" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -7018,9 +7021,8 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Create Rest Pose from Bones" -msgstr "Възпроизвеждане на сцена по избор" +msgstr "Създаване на поза на покоя от костите" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" @@ -7087,9 +7089,8 @@ msgid "Scaling: " msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Добавяне на превод" +msgstr "Транслиране: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -7180,14 +7181,12 @@ msgid "Rear" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "Изглед Отдясно." +msgstr "Подравняване на трансформацията с изгледа" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy 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." @@ -7234,9 +7233,8 @@ msgid "View Information" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr "Преглед на файловете" +msgstr "Показване на кадри/сек" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7247,9 +7245,8 @@ msgid "Audio Listener" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Позволи филтриране" +msgstr "Включване на доплеровия ефект" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7433,9 +7430,8 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Настройки" +msgstr "Настройки…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7502,19 +7498,16 @@ msgid "Nameless gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Mesh2D" -msgstr "Създайте нов/а %s" +msgstr "Създаване на Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Преглед" +msgstr "Преглед на Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Polygon2D" -msgstr "Създаване на папка" +msgstr "Създаване на Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" @@ -7565,9 +7558,8 @@ msgid "Invalid geometry, can't create collision polygon." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D Sibling" -msgstr "Създаване на папка" +msgstr "Създаване на съседен CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." @@ -7654,9 +7646,8 @@ msgid "New Animation" msgstr "Нова анимация" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Скорост (кадри в секунда):" +msgstr "Скорост:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -7794,20 +7785,19 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "Създаване на празен шаблон" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "" +msgstr "Създаване на празен шаблон за редактора" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "" +msgstr "Създаване от текущата тема на редактора" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Toggle Button" -msgstr "Средно копче" +msgstr "Бутон-превключвател" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Button" @@ -7911,9 +7901,8 @@ msgid "Color" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme File" -msgstr "Тема" +msgstr "Файл с тема" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -7925,18 +7914,16 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Центрирай върху Селекцията" +msgstr "Изрязване на избраното" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Линейно" +msgstr "Изчертаване на линия" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -7963,14 +7950,12 @@ msgid "Disable Autotile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Enable Priority" -msgstr "Промени Филтрите" +msgstr "Включване на приоритета" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Filter tiles" -msgstr "Поставяне на възелите" +msgstr "Филтриране на плочките" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." @@ -7997,14 +7982,12 @@ msgid "Pick Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Left" -msgstr "Режим на Завъртане" +msgstr "Завъртане наляво" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Right" -msgstr "Завъртане на Полигон" +msgstr "Завъртане надясно" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip Horizontally" @@ -8015,9 +7998,8 @@ msgid "Flip Vertically" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear Transform" -msgstr "Изнасяне към платформа" +msgstr "Изчистване на трансформацията" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." @@ -8050,32 +8032,28 @@ msgid "New Atlas" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Next Coordinate" -msgstr "Следващ скрипт" +msgstr "Следваща координата" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the next shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Previous Coordinate" -msgstr "Предишен подпрозорец" +msgstr "Предходна координата" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Режим на Завъртане" +msgstr "Регион" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Промени съществуващ полигон:" +msgstr "Колизия" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8083,34 +8061,28 @@ msgid "Occlusion" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "Анимационен Възел" +msgstr "Навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "Режим на Завъртане" +msgstr "Побитова маска" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Режим на изнасяне:" +msgstr "Приоритет" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Индекс по Z" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region Mode" -msgstr "Режим на Завъртане" +msgstr "Режим на регион" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision Mode" -msgstr "Промени съществуващ полигон:" +msgstr "Режим на колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8118,53 +8090,56 @@ msgid "Occlusion Mode" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation Mode" -msgstr "Анимационен Възел" +msgstr "Режим на навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask Mode" -msgstr "Режим на Завъртане" +msgstr "Режим на побитова маска" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "Режим на изнасяне:" +msgstr "Режим на приоритет" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Icon Mode" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Режим на иконки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index Mode" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Режим на индекс по Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Paste bitmask." -msgstr "Поставяне на възелите" +msgstr "Поставяне на битова маска." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Erase bitmask." -msgstr "Изтрий точки." +msgstr "Изтриване на побитовата маска." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "Създай нови възли." +msgstr "Създаване на нов правоъгълник." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Нов правоъгълник" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new polygon." -msgstr "Създай нов полигон от нулата." +msgstr "Създаване на нов полигон." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Нов полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Изтриване на избраната форма" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." @@ -8184,9 +8159,10 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." -msgstr "Преместване на пътечката нагоре." +msgstr "" +"Преместване на избраната текстура? Това ще премахне всички плочки, които я " +"ползват." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -8201,9 +8177,8 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy 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." @@ -8216,30 +8191,32 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete selected Rect." -msgstr "Изтрий избраните файлове?" +msgstr "Изтриване на избрания Rect." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Изберете редактираната в момента под-плочка.\n" +"Щракнете върху друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete polygon." -msgstr "Изтриване на анимацията?" +msgstr "Изтриване на полигона." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Ляв бутон: включване на бита.\n" +"Десен бутон: изключване на бита.\n" +"Shift + ляв бутон: включване на бита за заместване.\n" +"Щракнете на друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8255,35 +8232,32 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Изберете под-плочка, за да промените индекса ѝ по Z.\n" +"Щракнете на друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Set Tile Region" -msgstr "Двуизмерна текстура" +msgstr "Задаване на регион от плочки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Tile" -msgstr "Създаване на папка" +msgstr "Създаване на плочка" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Bitmask" -msgstr "Промени Филтрите" +msgstr "Редактиране на побитовата маска на плочката" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Collision Polygon" -msgstr "Промени съществуващ полигон:" +msgstr "Редактиране на полигона за колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8291,38 +8265,32 @@ msgid "Edit Occlusion Polygon" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Navigation Polygon" -msgstr "Промени съществуващ полигон:" +msgstr "Редактиране на полигона за навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Paste Tile Bitmask" -msgstr "Поставяне на възелите" +msgstr "Поставяне на побитовата маска на плочката" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Clear Tile Bitmask" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Concave" -msgstr "Преместване на Полигон" +msgstr "Преобразуване на полигона във вдлъбнат" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Convex" -msgstr "Преместване на Полигон" +msgstr "Преобразуване на полигона в изпъкнал" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Tile" -msgstr "Затваряне на всичко" +msgstr "Премахване на плочката" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Collision Polygon" -msgstr "Преместване на Полигон" +msgstr "Премахване на полигона за колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8330,47 +8298,40 @@ msgid "Remove Occlusion Polygon" msgstr "Преместване на Полигон" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Navigation Polygon" -msgstr "Завъртане на Полигон" +msgstr "Премахване на полигона за навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Priority" -msgstr "Промени Филтрите" +msgstr "Редактиране на приоритета на плочката" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" msgstr "" #: 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 -#, fuzzy msgid "Create Collision Polygon" -msgstr "Създаване на папка" +msgstr "Създаване на полигон за колизии" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Occlusion Polygon" -msgstr "Създаване на папка" +msgstr "Създаване на полигон за прикриване" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." -msgstr "" +msgstr "Това свойство не може да бъде променено." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "TileSet" -msgstr "Файл:" +msgstr "Плочен набор" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." @@ -8381,10 +8342,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8401,18 +8358,16 @@ msgid "Version Control System" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" -msgstr "Всяка дума с Главна буква" +msgstr "Инициализиране" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Създай нови възли." +msgstr "Засичане на новите промени" #: editor/plugins/version_control_editor_plugin.cpp msgid "Changes" @@ -8423,14 +8378,12 @@ msgid "Modified" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Renamed" -msgstr "Възел" +msgstr "Преименуван" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Deleted" -msgstr "Изтрий" +msgstr "Изтрит" #: editor/plugins/version_control_editor_plugin.cpp msgid "Typechange" @@ -8447,10 +8400,6 @@ msgid "Stage All" msgstr "Запази Всичко" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -8476,19 +8425,16 @@ msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "Любими:" +msgstr "Добавяне на изход" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar" -msgstr "Мащаб:" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector" -msgstr "Инспектор" +msgstr "Вектор" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8499,27 +8445,24 @@ msgid "Sampler" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "Любими:" +msgstr "Добавяне на входящ порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port type" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на типа на входящия порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port type" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port name" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на името на входящия порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port name" @@ -8554,9 +8497,8 @@ msgid "Add Node to Visual Shader" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Възелът е преместен" +msgstr "Възлите са преместени" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -9008,9 +8950,8 @@ msgid "Scalar constant." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "Изнасяне към платформа" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." @@ -9033,9 +8974,8 @@ msgid "2D texture uniform lookup with triplanar." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "Създаване на папка" +msgstr "Функция за трансформация." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9077,19 +9017,16 @@ msgid "Multiplies vector by transform." 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 "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector function." -msgstr "Отиди на Ред" +msgstr "Векторна функция." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector operator." @@ -9581,6 +9518,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10133,9 +10074,8 @@ msgid "Batch Rename" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Замяна: " +msgstr "Замяна:" #: editor/rename_dialog.cpp msgid "Prefix:" @@ -10246,9 +10186,8 @@ msgid "Reset" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Използване на регулярни изрази" +msgstr "Грешка в регулярния израз:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -10317,9 +10256,8 @@ msgid "Instance Child Scene" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Detach Script" -msgstr "Закачане на скрипт" +msgstr "Разкачане на скрипта" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." @@ -10354,9 +10292,8 @@ msgid "Make node as Root" msgstr "Превръщане на възела в корен" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes and any children?" -msgstr "Изтриване на %d възела?" +msgstr "Изтриване на %d възела и дъщерните им елементи?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -10500,9 +10437,8 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Създай нови възли." +msgstr "Преместване под нов възел" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10522,9 +10458,8 @@ msgid "Copy Node Path" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete (No Confirm)" -msgstr "Моля, потвърдете..." +msgstr "Изтриване (без потвърждение)" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10573,9 +10508,8 @@ msgid "Button Group" msgstr "Копче 7" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Свързване..." +msgstr "(Свързване от)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" @@ -10600,9 +10534,8 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Нова сцена" +msgstr "Отваряне на скрипт:" #: editor/scene_tree_editor.cpp msgid "" @@ -10659,9 +10592,8 @@ msgid "Path is not local." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Име:" +msgstr "Неправилен базов път." #: editor/script_create_dialog.cpp #, fuzzy @@ -10682,9 +10614,8 @@ msgid "Wrong extension chosen." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при зареждане на шаблона „%s“" #: editor/script_create_dialog.cpp #, fuzzy @@ -10692,9 +10623,8 @@ msgid "Error - Could not create script in filesystem." msgstr "Неуспешно създаване на папка." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при зареждане на скрипт от %s" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -10714,9 +10644,8 @@ msgid "Open Script" msgstr "Нова сцена" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "Файлът съществува. Искате ли да го презапишете?" +msgstr "Файлът съществува и ще бъде преизползван." #: editor/script_create_dialog.cpp msgid "Invalid path." @@ -10744,9 +10673,8 @@ msgid "Built-in script (into scene file)." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Създаване на нов скрипт" +msgstr "Ще създаде нов скиптов файл." #: editor/script_create_dialog.cpp msgid "Will load an existing script file." @@ -10769,14 +10697,12 @@ msgid "Class Name:" msgstr "Клас:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template:" -msgstr "Шаблони" +msgstr "Шаблон:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script:" -msgstr "Нова сцена" +msgstr "Вграден скрипт:" #: editor/script_create_dialog.cpp #, fuzzy @@ -10784,33 +10710,28 @@ msgid "Attach Node Script" msgstr "Нова сцена" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Затваряне на всичко" +msgstr "Отдалечено " #: editor/script_editor_debugger.cpp msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Warning:" -msgstr "Предупреждения:" +msgstr "Предупреждение:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Error:" -msgstr "Грешки:" +msgstr "Грешка:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error" -msgstr "Грешки" +msgstr "Грешка в C++" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error:" -msgstr "Грешки:" +msgstr "Грешка в C++:" #: editor/script_editor_debugger.cpp msgid "C++ Source" @@ -10833,9 +10754,8 @@ msgid "Errors" msgstr "Грешки" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Child process connected." -msgstr "Разкачи" +msgstr "Дъщерният процес е свързан." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -11395,14 +11315,12 @@ msgid "Set Variable Type" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Input Port" -msgstr "Любими:" +msgstr "Добавяне на входящ порт" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Output Port" -msgstr "Любими:" +msgstr "Добавяне на изходящ порт" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -11654,9 +11572,8 @@ msgid "Add Nodes..." msgstr "Добави Възел..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Function..." -msgstr "Отиди на Ред" +msgstr "Добавяне на функция…" #: modules/visual_script/visual_script_editor.cpp msgid "function_name" @@ -11692,9 +11609,8 @@ msgid "Refresh Graph" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Файл:" +msgstr "" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -11816,6 +11732,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11826,9 +11746,8 @@ msgid "Invalid public key for APK expansion." msgstr "" #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "невалидно име на Група." +msgstr "Неправилно име на пакет:" #: platform/android/export/export.cpp msgid "" @@ -11939,28 +11858,24 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Неуспешно създаване на папка." +msgstr "Файлът не може да бъде записан:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Неуспешно създаване на папка." +msgstr "Шаблонът не може да се отвори за изнасяне:" #: platform/javascript/export/export.cpp msgid "Invalid export template:" msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Неуспешно създаване на папка." +msgstr "Не може да се прочете персонализирана HTML-обвивка:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Неуспешно създаване на папка." +msgstr "Не може да се прочете файл с изображение при стартиране:" #: platform/javascript/export/export.cpp #, fuzzy @@ -11968,19 +11883,16 @@ msgid "Using default boot splash image." msgstr "Неуспешно създаване на папка." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "невалидно име на Група." +msgstr "Неправилно кратко име на пакет." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "невалидно име на Група." +msgstr "Неправилно уникално име на пакет." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "невалидно име на Група." +msgstr "Неправилно име за показване на издателя на пакет." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12075,13 +11987,12 @@ msgstr "" "форма." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"За да работи CollisionShape2D, е нужно да му се даде форма. Моля, създайте " -"му Shape2D ресурс." +"За да работи CollisionShape2D, е необходимо да се зададе форма. Моля, " +"създайте ресурс с форма за него!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12095,6 +12006,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12374,6 +12305,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12514,6 +12465,10 @@ msgstr "Тревога!" msgid "Please Confirm..." msgstr "Моля, потвърдете..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12534,7 +12489,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(Други)" #: scene/main/scene_tree.cpp msgid "" @@ -12582,6 +12537,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Константите не могат да бъдат променени." +#~ msgid "Search complete" +#~ msgstr "Търсенето е завършено" + #~ msgid "UV->Polygon" #~ msgstr "UV -> Полигон" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 9d0dc019e0..c85147c40c 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -1,6 +1,6 @@ # Bengali translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Abu Md. Maruf Sarker <maruf.webdev@gmail.com>, 2016-2017. # Abdullah Zubair <abdullahzubair109@gmail.com>, 2017. @@ -10,12 +10,13 @@ # Oymate <dhruboadittya96@gmail.com>, 2020. # Mokarrom Hossain <mhb2016.bzs@gmail.com>, 2020. # Sagen Soren <sagensoren03@gmail.com>, 2020. +# Hasibul Hasan <d1hasib@yahoo.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-22 19:41+0000\n" -"Last-Translator: Sagen Soren <sagensoren03@gmail.com>\n" +"PO-Revision-Date: 2020-12-27 02:25+0000\n" +"Last-Translator: Mokarrom Hossain <mhb2016.bzs@gmail.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -23,12 +24,12 @@ 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 4.3.1\n" +"X-Generator: Weblate 4.4.1-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 "অবৈধ প্রকার রূপান্তর করার যুক্তি(),use TYPE_* constants." +msgstr "অবৈধ প্রকার রূপান্তর করার যুক্তি , TYPE_* constants ব্যবহার করুন" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -38,7 +39,7 @@ 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 "বিন্যাস জানার জন্য যথেষ্ট বাইট নেই, অথবা ভুল ফরম্যাট।" +msgstr "ডিকোডিং বাইট, বা অবৈধ বিন্যাসের জন্য পর্যাপ্ত পরিমাণে বাইট নেই।" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -117,14 +118,12 @@ msgid "Value:" msgstr "মান:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "চাবি সন্নিবেশ করুন" +msgstr "চাবি ইন্সার্ট করুন" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "নির্বাচিত সমূহ অনুলিপি করুন" +msgstr "নির্বাচিত key সমূহ অনুলিপি করুন" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" @@ -147,9 +146,8 @@ msgid "Anim Delete Keys" msgstr "অ্যানিমেশনের (Anim) চাবিগুলো অপসারণ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "অ্যানিমেশন (Anim)কীফ্রেম time পরিবর্তন করুন" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" @@ -168,34 +166,28 @@ msgid "Anim Change Call" msgstr "অ্যানিমেশন (Anim) কল পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) কীফ্রেমের সময় পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "অ্যানিমেশন (Anim) ট্র্যানজিশন পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ট্র্যানজিশন পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "অ্যানিমেশন (Anim) কল পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) কল পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "অ্যানিমেশনের লুপ পরিবর্তন করুন" +msgstr "অ্যানিমেশনের ব্যাপ্তিকাল পরিবর্তন করুন" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -203,51 +195,44 @@ msgid "Change Animation Loop" msgstr "অ্যানিমেশনের লুপ পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "প্রপার্টি:" +msgstr "বৈশিষ্ট্য ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "রুপান্তরের ধরণ" +msgstr "3D রূপান্তর ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "কল মেথড ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "বেজিয়ার কার্ভ ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "অডিও প্লেব্যাক ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "অ্যানিমেশনের চালনা বন্ধ করুন। (S)" +msgstr "অ্যানিমেশন প্লেব্যাক ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সময় সেকেন্ডে)।" +msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (ফ্রেমে)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সময় সেকেন্ডে)।" +msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সেকেন্ডে)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "অ্যানিমেশন (Anim) ট্র্যাক যোগ করুন" +msgstr "ট্র্যাক যোগ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "অ্যানিমেশন (Animation) জুম (zoom) করুন।" +msgstr "অ্যানিমেশন (Animation) লুপিং" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -255,37 +240,32 @@ msgid "Functions:" msgstr "ফাংশনগুলি:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "অডিও শ্রোতা" +msgstr "অডিও ক্লিপস:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "ক্লিপসমূহ" +msgstr "অ্যানিমেশন ক্লিপসমূহ :" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "শ্রেণীবিন্যাস/সারির মান পরিবর্তন করুন" +msgstr "ট্র্যাক পাথ (পথ) পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy 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 -#, fuzzy msgid "Interpolation Mode" -msgstr "অ্যানিমেশনের নোড" +msgstr "ইন্টারপোলেশন মোড" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "লুপ Wrap মোড (লুপ দিয়ে শুরু দিয়ে ইন্টারপোলেট শেষ)" #: editor/animation_track_editor.cpp #, fuzzy @@ -293,14 +273,12 @@ msgid "Remove this track." msgstr "নির্বাচিত ট্র্যাক/পথ অপসারণ করুন।" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "X-ফেড/বিলীন সময় (সেঃ):" +msgstr "সময় (সেঃ): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle Track Enabled" -msgstr "সক্রিয় করুন" +msgstr "ট্র্যাক সক্রিয় করুন" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -315,13 +293,12 @@ msgid "Trigger" msgstr "ট্রিগার/চালনা করুন" #: editor/animation_track_editor.cpp -#, fuzzy 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 @@ -330,45 +307,40 @@ 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 "Wrap লুপ ইন্টারপ" #: 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" @@ -400,7 +372,7 @@ msgstr "অ্যানিমেশনে (Anim) অন্তর্ভুক্ #: 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" @@ -415,18 +387,16 @@ msgid "Anim Insert Key" msgstr "অ্যানিমেশনে (Anim) চাবি যোগ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "অ্যানিমেশনের FPS পরিবর্তন করুন" +msgstr "অ্যানিমেশনের ধাপ পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rearrange Tracks" -msgstr "Autoload সমূহ পুনর্বিন্যস্ত করুন" +msgstr "ট্র্যাকগুলি পুনর্বিন্যস্ত করুন" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "রূপান্তর ট্র্যাকগুলি কেবল Spatial-based নোডগুলিতে প্রযোজ্য।" #: editor/animation_track_editor.cpp msgid "" @@ -435,35 +405,39 @@ 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 "অ্যানিমেশন (Anim) ট্র্যাক যোগ করুন" +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 "ট্র্যাক Spatial টাইপের নয়, কী সন্নিবেশ করতে পারে না" #: editor/animation_track_editor.cpp #, fuzzy @@ -494,9 +468,8 @@ msgid "Anim Move Keys" msgstr "অ্যানিমেশনে (Anim) চাবি/কী-সমুহ সরান" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "রিসোর্সের ক্লীপবোর্ড খালি!" +msgstr "ক্লীপবোর্ড খালি" #: editor/animation_track_editor.cpp #, fuzzy @@ -544,23 +517,21 @@ 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" -msgstr "" +msgstr "সেকেন্ড" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "FPS" -msgstr "এফ পি এস" +msgstr "এফপিএস" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -573,9 +544,8 @@ msgid "Edit" msgstr "সম্পাদন করুন (Edit)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "অ্যানিমেশন" +msgstr "অ্যানিমেশন বৈশিষ্ট্য।" #: editor/animation_track_editor.cpp #, fuzzy @@ -604,12 +574,10 @@ msgid "Delete Selection" msgstr "নির্বাচিত সমূহ অপসারণ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "পরবর্তী ধাপে যান" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "পূর্ববর্তী ধাপে যান" @@ -1094,14 +1062,18 @@ msgstr "স্বত্বাধিকারীসমূহ:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "নির্বাচিত ফাইলসমূহ প্রকল্প হতে অপসারণ করবেন? (অফেরৎযোগ্য)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "যেসব ফাইল অপসারিত হচ্ছে তারা অন্যান্য রিসোর্স ফাইলের কার্যকররুপে কাজ করার জন্য " "দরকারি।\n" @@ -1152,7 +1124,7 @@ msgstr "মালিকবিহীন রিসোর্সের অনুস #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2452,19 +2424,25 @@ msgid "Error saving TileSet!" msgstr "TileSet সংরক্ষণে সমস্যা হয়েছে!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "লেআউট/নকশা সংরক্ষণের চেষ্টায় সমস্যা হয়েছে!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "এডিটরের সাধারণ লেআউট/নকশা পরিবর্তিত হয়েছে।" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "লেআউট/নকশার নাম পাওয়া যায়নি!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "সাধারণ লেআউট/নকশা আদি সেটিংসে প্রত্যাবর্তিত হয়েছে।" #: editor/editor_node.cpp @@ -3168,12 +3146,14 @@ msgid "Send Docs Feedback" msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Community" -msgstr "কমিউনিটি/যৌথ-সামাজিক উৎস" +msgstr "সম্প্রদায়" #: editor/editor_node.cpp +#, fuzzy msgid "About" -msgstr "সম্বন্ধে/সম্পর্কে" +msgstr "সম্বন্ধে" #: editor/editor_node.cpp msgid "Play the project." @@ -3939,6 +3919,16 @@ msgid "Name contains invalid characters." msgstr "গ্রহনযোগ্য অক্ষরসমূহ:" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "চলক/ভেরিয়েবল-এর নামান্তর করুন" @@ -3995,16 +3985,6 @@ msgstr "নির্ভরতাসমূহ সম্পাদন করুন. msgid "View Owners..." msgstr "স্বত্বাধিকারীদের দেখুন..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "পুনঃনামকরণ করুন" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "ডুপ্লিকেট" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "এখানে সরান..." @@ -4037,10 +4017,18 @@ msgid "Collapse All" msgstr "কলাপ্স করুন" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "ডুপ্লিকেট" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Autoload স্থানান্তর করুন" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." msgstr "পুনঃনামকরণ করুন" #: editor/filesystem_dock.cpp @@ -4080,9 +4068,11 @@ msgid "Move" msgstr "সরান" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "গ্রুপের নাম ইতিমধ্যেই আছে!" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "পুনঃনামকরণ করুন" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4158,8 +4148,18 @@ msgstr "সংরক্ষিত হচ্ছে..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "টেক্সট অনুসন্ধান করুন" +msgid "%d match in %d file." +msgstr "কোনো মিল নেই" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "কোনো মিল নেই" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "কোনো মিল নেই" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8937,10 +8937,25 @@ msgstr "নতুন তৈরি করুন" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "রেক্ট্যাঙ্গল পেইন্ট" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "আরম্ভ হতে নতুন polygon তৈরি করুন।" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "পলিগন সরান" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "নির্বাচিত সমূহ অপসারণ করুন" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9156,11 +9171,6 @@ msgid "Error" msgstr "সমস্যা/ভুল" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "কোন নাম ব্যাবহার করা হয়নি" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -9226,10 +9236,6 @@ msgid "Stage All" 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 "স্ক্রিপ্টের পরিবর্তনসমূহ সুসংগত/সমন্বয় করুন" @@ -10440,6 +10446,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10881,7 +10891,7 @@ msgstr "প্রকল্পের সেটিংস (engine.cfg)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "জেনেরাল" +msgstr "সাধারণ" #: editor/project_settings_editor.cpp msgid "Override For..." @@ -12855,6 +12865,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13133,6 +13147,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -13427,6 +13461,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13573,6 +13627,11 @@ msgstr "সতর্কতা!" msgid "Please Confirm..." msgstr "অনুগ্রহ করে নিশ্চিত করুন..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "স্ন্যাপ সক্রিয় করুন" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -13653,6 +13712,24 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Search complete" +#~ msgstr "টেক্সট অনুসন্ধান করুন" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "কোন নাম ব্যাবহার করা হয়নি" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "গ্রুপের নাম ইতিমধ্যেই আছে!" + +#~ msgid "Error trying to save layout!" +#~ msgstr "লেআউট/নকশা সংরক্ষণের চেষ্টায় সমস্যা হয়েছে!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "এডিটরের সাধারণ লেআউট/নকশা পরিবর্তিত হয়েছে।" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "কেন্দ্র স্থানান্তর করুন" diff --git a/editor/translations/br.po b/editor/translations/br.po new file mode 100644 index 0000000000..2085d843df --- /dev/null +++ b/editor/translations/br.po @@ -0,0 +1,12373 @@ +# Breton translation of the Godot Engine editor +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). +# This file is distributed under the same license as the Godot source code. +# +# Feufoll <feufoll@gmail.com>, 2020. +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2020-12-29 15:03+0000\n" +"Last-Translator: Feufoll <feufoll@gmail.com>\n" +"Language-Team: Breton <https://hosted.weblate.org/projects/godot-engine/" +"godot/br/>\n" +"Language: br\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=5; plural=(n % 10 == 1 && n % 100 != 11 && n % 100 != " +"71 && n % 100 != 91) ? 0 : ((n % 10 == 2 && n % 100 != 12 && n % 100 != 72 " +"&& n % 100 != 92) ? 1 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && " +"(n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 " +"< 90 || n % 100 > 99)) ? 2 : ((n != 0 && n % 1000000 == 0) ? 3 : 4)));\n" +"X-Generator: Weblate 4.4.1-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 "Argumant a dip fall e convert(), implijit koñstantennoù TYPE_*." + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "O c'hortozh ur chadenn a hirder 1 (ul lizherenn)." + +#: 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 "Re nebeut a oktedoù evit diskodiñ, pe formad fall." + +#: core/math/expression.cpp +msgid "Invalid input %i (not passed) in expression" +msgstr "Enkas fall %i (ket tremenet) en eztaol" + +#: core/math/expression.cpp +msgid "self can't be used because instance is null (not passed)" +msgstr "self n'hall ket bezhañ implijet dre eo nul an istañs (ket tremened)" + +#: core/math/expression.cpp +msgid "Invalid operands to operator %s, %s and %s." +msgstr "Oberantennoù fall en oberantenn %s, %s ha %s." + +#: core/math/expression.cpp +msgid "Invalid index of type %s for base type %s" +msgstr "Indeks fall a dip %s evit an tip diazez %s" + +#: core/math/expression.cpp +msgid "Invalid named index '%s' for base type %s" +msgstr "Anv fall d'an indeks '%s' evit an tip orin %s" + +#: core/math/expression.cpp +msgid "Invalid arguments to construct '%s'" +msgstr "Argumant fall evit sevel '%s'" + +#: core/math/expression.cpp +msgid "On call to '%s':" +msgstr "O gervel '%s' :" + +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + +#: editor/animation_bezier_editor.cpp +msgid "Free" +msgstr "Dieub" + +#: editor/animation_bezier_editor.cpp +msgid "Balanced" +msgstr "Kempouezet" + +#: editor/animation_bezier_editor.cpp +msgid "Mirror" +msgstr "Melezour" + +#: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp +msgid "Time:" +msgstr "Amzer :" + +#: editor/animation_bezier_editor.cpp +msgid "Value:" +msgstr "Talvoud :" + +#: editor/animation_bezier_editor.cpp +msgid "Insert Key Here" +msgstr "Enlakaat an Alc'hwezh Amañ" + +#: editor/animation_bezier_editor.cpp +msgid "Duplicate Selected Key(s)" +msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet" + +#: editor/animation_bezier_editor.cpp +msgid "Delete Selected Key(s)" +msgstr "Dilemel an Alc'hwez(ioù) Uhelsklaeriet" + +#: editor/animation_bezier_editor.cpp +msgid "Add Bezier Point" +msgstr "Ouzhpenn ur Poent Bezier" + +#: editor/animation_bezier_editor.cpp +msgid "Move Bezier Points" +msgstr "Fiñval ar Poentoù Bezier" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Eilskloueriañ an Alc'hwezhioù Fiñvskeudenn" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Delete Keys" +msgstr "Dilemel Alc'hwezhioù Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Time" +msgstr "Cheñch Amzer ar Skeudenn-alc'hwezh Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transition" +msgstr "Cheñch Tremenadur ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transform" +msgstr "Cheñch Treuzfurmadur ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Cheñch Talvoud ar Skeudenn-alc'hwez Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Call" +msgstr "Cheñch Galv ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Keyframe Time" +msgstr "Cheñch Meur a Amzer Skeudenn-alc'hwez Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Transition" +msgstr "Cheñch Meur a Tremenadur Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Transform" +msgstr "Cheñch Meur a Treuzfurmadur Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Keyframe Value" +msgstr "Cheñch Meur Talvoud Skeudenn-alc'hwez Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Call" +msgstr "Cheñch Meur Galv Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Length" +msgstr "Cheñch Hirder ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "Cheñch Tro ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Property Track" +msgstr "Roudenn Perzhioù" + +#: editor/animation_track_editor.cpp +msgid "3D Transform Track" +msgstr "Roudenn Treuzfurmadur 3D" + +#: editor/animation_track_editor.cpp +msgid "Call Method Track" +msgstr "Roudenn Galv Metodenn" + +#: editor/animation_track_editor.cpp +msgid "Bezier Curve Track" +msgstr "Roudenn Krommenn Bezier" + +#: editor/animation_track_editor.cpp +msgid "Audio Playback Track" +msgstr "Roudenn Lenn Audio" + +#: editor/animation_track_editor.cpp +msgid "Animation Playback Track" +msgstr "Roudenn Lenn Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Animation length (frames)" +msgstr "Hirder ar Fiñvskeudenn (e skeudennoù)" + +#: editor/animation_track_editor.cpp +msgid "Animation length (seconds)" +msgstr "Hirder Fiñvskeudenn (e sekondennoù)" + +#: editor/animation_track_editor.cpp +msgid "Add Track" +msgstr "Ouzhpenn Roudenn" + +#: editor/animation_track_editor.cpp +msgid "Animation Looping" +msgstr "Tro Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Fonksionoù :" + +#: editor/animation_track_editor.cpp +msgid "Audio Clips:" +msgstr "Lodenn Audio :" + +#: editor/animation_track_editor.cpp +msgid "Anim Clips:" +msgstr "Lodennoù Fiñvskeudenn :" + +#: editor/animation_track_editor.cpp +msgid "Change Track Path" +msgstr "Cheñch Hent ar Roudenn" + +#: editor/animation_track_editor.cpp +msgid "Toggle this track on/off." +msgstr "Aktivañ/Diaktivañ ar roudenn-se." + +#: editor/animation_track_editor.cpp +msgid "Update Mode (How this property is set)" +msgstr "Mod Bremenadur (Penaos eo termenet ar perzh-se)" + +#: editor/animation_track_editor.cpp +msgid "Interpolation Mode" +msgstr "Mod Interpoladur" + +#: editor/animation_track_editor.cpp +msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" +msgstr "Mod Treiñ (Interpoliñ ar fin gant penn-kentañ an tro)" + +#: editor/animation_track_editor.cpp +msgid "Remove this track." +msgstr "Dilemel ar roudenn-se." + +#: editor/animation_track_editor.cpp +msgid "Time (s): " +msgstr "Amzer (s) : " + +#: editor/animation_track_editor.cpp +msgid "Toggle Track Enabled" +msgstr "Aktivañ ar Roudenn" + +#: editor/animation_track_editor.cpp +msgid "Continuous" +msgstr "Kendalc'hus" + +#: editor/animation_track_editor.cpp +msgid "Discrete" +msgstr "Diskretel" + +#: editor/animation_track_editor.cpp +msgid "Trigger" +msgstr "Deraouer" + +#: editor/animation_track_editor.cpp +msgid "Capture" +msgstr "Tapout" + +#: editor/animation_track_editor.cpp +msgid "Nearest" +msgstr "Tostañ" + +#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "Lineel" + +#: editor/animation_track_editor.cpp +msgid "Cubic" +msgstr "Kubek" + +#: editor/animation_track_editor.cpp +msgid "Clamp Loop Interp" +msgstr "Herzel Interpoladur an Tro" + +#: editor/animation_track_editor.cpp +msgid "Wrap Loop Interp" +msgstr "Goloiñ Interp. an Tro" + +#: editor/animation_track_editor.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "Enlakaat Alc'hwez" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Key(s)" +msgstr "Eilskoueriañ Alc'hwez(ioù)" + +#: editor/animation_track_editor.cpp +msgid "Delete Key(s)" +msgstr "Dilemel Alc'hwez(ioù)" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Update Mode" +msgstr "Cheñch Mod Bremenadur ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Interpolation Mode" +msgstr "Cheñch Mod Interpoliñ ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Loop Mode" +msgstr "Cheñch Mod Treiñ ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Remove Anim Track" +msgstr "Dilemel ar Roudenn Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Krouiñ ur roudenn NEVEZ evit %s ha enlakaat an alc'hwez ?" + +#: editor/animation_track_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Krouiñ %d roudenn NEVEZ hag enlakaat alc'hwezioù ?" + +#: editor/animation_track_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Create" +msgstr "Krouiñ" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert" +msgstr "Enlakaat Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "AnimationPlayer can't animate itself, only other players." +msgstr "" +"AnimationPlayer n'hall ket en em lakaat de fiñval, met nemet al lennerezhioù " +"all." + +#: editor/animation_track_editor.cpp +msgid "Anim Create & Insert" +msgstr "Krouiñ & Enlakaat Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Enlakaat Roudenn & Alc'hwez er Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Key" +msgstr "Enlakaat an Alc'hwez er Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Step" +msgstr "Cheñch Pazenn ar Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Rearrange Tracks" +msgstr "Adrenkañ Roudennoù" + +#: editor/animation_track_editor.cpp +msgid "Transform tracks only apply to Spatial-based nodes." +msgstr "" +"Roudennoù treuzfurmadur ne c'hall nemet bezañ implijet gant skoulmoù " +"diazezet war Spatial." + +#: editor/animation_track_editor.cpp +msgid "" +"Audio tracks can only point to nodes of type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" +msgstr "" +"Roudennoù Audio a c'hell poentañ nemetken da skoulmoù eus tip :\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" + +#: editor/animation_track_editor.cpp +msgid "Animation tracks can only point to AnimationPlayer nodes." +msgstr "" +"Roudennoù Fiñvskeudenn a c'hell poentañ nemetken da skoulmoù AnimationPlayer." + +#: editor/animation_track_editor.cpp +msgid "An animation player can't animate itself, only other players." +msgstr "" +"Ul lennerezh fiñvskeudenn ne c'hell ket em lakaat da fiñval, nemet " +"lennerezhioù all." + +#: editor/animation_track_editor.cpp +msgid "Not possible to add a new track without a root" +msgstr "Dibosupl ouzhpenn ur roudenn nevez hep ur gwrizienn" + +#: editor/animation_track_editor.cpp +msgid "Invalid track for Bezier (no suitable sub-properties)" +msgstr "Roudenn fall evit Bezier (iz-perzh mat ebet)" + +#: editor/animation_track_editor.cpp +msgid "Add Bezier Track" +msgstr "Ouzhpenn Roudenn Bezier" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a key." +msgstr "Hentad roudenn fall, neuze eo dibosupl ouzhpenn un alc'hwez." + +#: editor/animation_track_editor.cpp +msgid "Track is not of type Spatial, can't insert key" +msgstr "N'eo ket ar roudenn deus tip Spatial, dibosupl enakaat un alc'hwez" + +#: editor/animation_track_editor.cpp +msgid "Add Transform Track Key" +msgstr "Ouzhpenn Alc'hwez Roudenn Treuzfurmadur" + +#: editor/animation_track_editor.cpp +msgid "Add Track Key" +msgstr "Ouzhpenn Alc'hwez Roudenn" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a method key." +msgstr "Hentad roudenn fall, dibosupl ouzhpenn un alc'hwez metodenn." + +#: editor/animation_track_editor.cpp +msgid "Add Method Track Key" +msgstr "Ouzhpenn Alc'hwez Roudenn Metodenn" + +#: editor/animation_track_editor.cpp +msgid "Method not found in object: " +msgstr "N'eus ket deus ar metodenn en objed : " + +#: editor/animation_track_editor.cpp +msgid "Anim Move Keys" +msgstr "Fiñval Alc'hwezioù Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "Clipboard is empty" +msgstr "Goullo ar gwask-paper" + +#: editor/animation_track_editor.cpp +msgid "Paste Tracks" +msgstr "Pegañ ar Roudennoù" + +#: editor/animation_track_editor.cpp +msgid "Anim Scale Keys" +msgstr "Cheñch Skeul Alc'hwezioù Fiñvskeudenn" + +#: editor/animation_track_editor.cpp +msgid "" +"This option does not work for Bezier editing, as it's only a single track." +msgstr "" +"An opsion-se ne dro ket evit editañ Bezier, dre eo ur roudenn nemetken." + +#: editor/animation_track_editor.cpp +msgid "" +"This animation belongs to an imported scene, so changes to imported tracks " +"will not be saved.\n" +"\n" +"To enable the ability to add custom tracks, navigate to the scene's import " +"settings and set\n" +"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks" +"\", then re-import.\n" +"Alternatively, use an import preset that imports animations to separate " +"files." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Warning: Editing imported animation" +msgstr "Diwallit : Oc'h editañ ur fiñvskeudenn emporzhiet" + +#: editor/animation_track_editor.cpp +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Choazit ur skoulm AnimationPlayer evit krouiñ hag editañ fiñvskeudennoù ." + +#: editor/animation_track_editor.cpp +msgid "Only show tracks from nodes selected in tree." +msgstr "Diskouez nemet roudennoù ar skoulmoù choazet er wezenn ." + +#: editor/animation_track_editor.cpp +msgid "Group tracks by node or display them as plain list." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Snap:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation step value." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Seconds" +msgstr "" + +#: editor/animation_track_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "FPS" +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_properties.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/plugins/tile_set_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation properties." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Copy Tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Delete Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Next Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Previous Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Pick the node that will be animated:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Use Bezier Curves" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Select Tracks to Copy" +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_log.cpp +#: editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Copy" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + +#: editor/animation_track_editor_plugins.cpp +msgid "Add Audio Track Clip" +msgstr "" + +#: editor/animation_track_editor_plugins.cpp +msgid "Change Audio Track Clip Start Offset" +msgstr "" + +#: editor/animation_track_editor_plugins.cpp +msgid "Change Audio Track Clip End Offset" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: editor/code_editor.cpp +msgid "%d replaced." +msgstr "" + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "%d match." +msgstr "" + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "%d matches." +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Whole Words" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp +#: editor/plugins/text_editor.cpp +msgid "Standard" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +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 "" + +#: 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 "" + +#: editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: editor/code_editor.cpp +msgid "Warnings" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line and column numbers." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target node must be specified." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method name must be a valid identifier." +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 "" + +#: editor/connections_dialog.cpp +msgid "Connect to Script:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "From Signal:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Scene does not contain any script." +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 "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/editor_feature_profile.cpp editor/groups_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp +msgid "Remove" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Receiver Method:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Advanced" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Defers the signal, storing it in a queue and only firing it at idle time." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnects the signal after its first emission." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Cannot connect signal" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp editor/groups_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Signal:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect all from signal: '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect..." +msgstr "" + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect a Signal to a Method" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit Connection:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Filter signals" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from this signal?" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect All" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit..." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Go To Method" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +msgid "Change" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Create New %s" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search:" +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 +msgid "Matches:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Description:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will only take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will only take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +msgid "Path" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_property_selector.cpp +#: scene/gui/file_dialog.cpp +msgid "Open" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Cannot remove:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Load failed due to missing dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Open Anyway" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Show Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Key" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Value" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: editor/editor_about.cpp +msgid "Godot Engine contributors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "" + +#. TRANSLATORS: This refers to a job title. +#. The trailing space is used to distinguish with the project list application, +#. you do not have to keep it in your translation. +#: editor/editor_about.cpp +msgid "Project Manager " +msgstr "" + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "" + +#: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "" + +#: editor/editor_about.cpp +msgid "Third-party Licenses" +msgstr "" + +#: editor/editor_about.cpp +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 "" + +#: editor/editor_about.cpp +msgid "All Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Licenses" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Error opening package file, not in ZIP format." +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "%s (Already Exists)" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Uncompressing Assets" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "And %s more files." +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Package installed successfully!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Package Contents:" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/editor_node.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Package Installer" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Speakers" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Rename Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Change Audio Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Bypass Effects" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Select Audio Bus Send" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Drag & drop to rearrange." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bypass" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +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 "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Master bus can't be deleted!" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Duplicate Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save Audio Bus Layout As..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Location for New Layout..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Open Audio Bus Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "There is no '%s' file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Error saving file: %s" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add a new Audio Bus to this layout." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Load" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load an existing Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save As" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save this Bus Layout to a file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/import_dock.cpp +msgid "Load Default" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load the default Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing built-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Keyword cannot be used as an autoload name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp +msgid "Enable" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Can't add autoload:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp +msgid "Path:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp +msgid "Name" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: editor/editor_data.cpp editor/inspector_dock.cpp +msgid "Paste Params" +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: editor/editor_data.cpp +msgid "Storing local changes..." +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating scene..." +msgstr "" + +#: editor/editor_data.cpp editor/editor_properties.cpp +msgid "[empty]" +msgstr "" + +#: editor/editor_data.cpp +msgid "[unsaved]" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Please select a base directory first." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp editor/project_manager.cpp +#: scene/gui/file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp +msgid "Name:" +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 "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: editor/editor_export.cpp +msgid "Storing File:" +msgstr "" + +#: editor/editor_export.cpp +msgid "No export template found at the expected path:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Packing" +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " +"Etc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC2' texture compression for GLES3. Enable " +"'Import Etc 2' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC' texture compression for the driver fallback " +"to GLES2.\n" +"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " +"Enabled'." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'PVRTC' texture compression for GLES2. Enable " +"'Import Pvrtc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " +"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'PVRTC' texture compression for the driver fallback " +"to GLES2.\n" +"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " +"Enabled'." +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 debug template not found." +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 "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +msgstr "" + +#: editor/editor_export.cpp +msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "3D Editor" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Script Editor" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Asset Library" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Scene Tree Editing" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Node Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "FileSystem Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Import Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Erase profile '%s'? (no undo)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Profile must be a valid filename and must not contain '.'" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Profile with this name already exists." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "(Editor Disabled, Properties Disabled)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "(Properties Disabled)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "(Editor Disabled)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Class Options:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Enable Contextual Editor" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Enabled Properties:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Enabled Features:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Enabled Classes:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "File '%s' format is invalid, import aborted." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "" +"Profile '%s' already exists. Remove it first before importing, import " +"aborted." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Error saving profile to path: '%s'." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Unset" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Current Profile:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Make Current" +msgstr "" + +#: editor/editor_feature_profile.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp +msgid "New" +msgstr "" + +#: editor/editor_feature_profile.cpp editor/editor_node.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_feature_profile.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Available Profiles:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Class Options" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "New profile name:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Erase Profile" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Godot Feature Profile" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Import Profile(s)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Export Profile" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Manage Editor Feature Profiles" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select This Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Open in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/project_manager.cpp +msgid "Show in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder..." +msgstr "" + +#: editor/editor_file_dialog.cpp editor/find_in_files.cpp +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Refresh" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp +msgid "Save" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go to previous folder." +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go to next folder." +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Go to parent folder." +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Refresh files." +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "(Un)favorite current folder." +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Toggle the visibility of hidden files." +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails." +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "View items as a list." +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp +#: editor/plugins/style_box_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "" +"There are multiple importers for different types pointing to file %s, import " +"aborted" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "(Re)Importing Assets" +msgstr "" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class:" +msgstr "" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Online Tutorials" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "override:" +msgstr "" + +#: editor/editor_help.cpp +msgid "default:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Theme Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "(value)" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Case Sensitive" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Show Hierarchy" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Method" +msgstr "" + +#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp +msgid "Signal" +msgstr "" + +#: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Property" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Property" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set Multiple:" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "" + +#: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Copy Selection" +msgstr "" + +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/property_editor.cpp editor/scene_tree_dock.cpp +#: editor/script_editor_debugger.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Clear" +msgstr "" + +#: editor/editor_log.cpp +msgid "Clear Output" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "New Window" +msgstr "" + +#: editor/editor_node.cpp +msgid "Imported resources can't be saved." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "" + +#: 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 "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while saving." +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 "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a tree root." +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 "" + +#: editor/editor_node.cpp +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 "" + +#: editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored the Default layout to its base settings." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +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 "" + +#: 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 "" +"This scene was imported, so changes to it won't be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +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 " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp editor/filesystem_dock.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Script..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Close" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to '%s' before closing?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Saved %s modified resource(s)." +msgstr "" + +#: editor/editor_node.cpp +msgid "A root node is required to save the scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "No" +msgstr "" + +#: editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a root node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a selected node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: editor/editor_node.cpp +msgid "Reload Saved Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"The current scene has unsaved changes.\n" +"Reload the saved scene anyway? This action cannot be undone." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Run Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before quitting?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +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 "" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Reopen Closed Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to enable addon plugin at: '%s' parsing of config failed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' Base type is not EditorPlugin." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s' Script is not in tool mode." +msgstr "" + +#: 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 "" + +#: 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:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: editor/editor_node.cpp editor/import_dock.cpp +#: editor/script_create_dialog.cpp +msgid "Default" +msgstr "" + +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play This Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo Close Tab" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Tabs to the Right" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close All Tabs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files or folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files" +msgstr "" + +#: editor/editor_node.cpp +msgid "Dock Position" +msgstr "" + +#: editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle distraction-free mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "Add a new scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Copy Text" +msgstr "" + +#: editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Filter Files..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save All Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Convert To..." +msgstr "" + +#: editor/editor_node.cpp +msgid "MeshLibrary..." +msgstr "" + +#: editor/editor_node.cpp +msgid "TileSet..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Undo" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +#: editor/script_create_dialog.cpp +msgid "Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project Settings..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Install Android Build Template..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Data Folder" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Tools" +msgstr "" + +#: editor/editor_node.cpp +msgid "Orphan Resource Explorer..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, using one-click deploy will make the executable " +"attempt to connect to this computer's IP so the running project can be " +"debugged.\n" +"This option is intended to be used for remote debugging (typically with a " +"mobile device).\n" +"You don't need to enable it to use the GDScript debugger locally." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network Filesystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, using one-click deploy for Android will only " +"export an executable without the project data.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploying will use the USB cable for faster performance. This " +"option speeds up testing for projects with large assets." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, collision shapes and raycast nodes (for 2D and " +"3D) will be visible in the running project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, navigation meshes and polygons will be visible " +"in the running project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Synchronize Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, any changes made to the scene in the editor " +"will be replicated in the running project.\n" +"When used remotely on a device, this is more efficient when the network " +"filesystem option is enabled." +msgstr "" + +#: editor/editor_node.cpp +msgid "Synchronize Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, any script that is saved will be reloaded in " +"the running project.\n" +"When used remotely on a device, this is more efficient when the network " +"filesystem option is enabled." +msgstr "" + +#: editor/editor_node.cpp editor/script_create_dialog.cpp +msgid "Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Settings..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Take Screenshot" +msgstr "" + +#: editor/editor_node.cpp +msgid "Screenshots are stored in the Editor Data/Settings Folder." +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle System Console" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data/Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Editor Features..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Export Templates..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp +msgid "Help" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Search" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Q&A" +msgstr "" + +#: editor/editor_node.cpp +msgid "Report a Bug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Send Docs Feedback" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: editor/editor_node.cpp +msgid "About" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause the scene execution for debugging." +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Changing the video driver requires restarting the editor." +msgstr "" + +#: editor/editor_node.cpp editor/project_settings_editor.cpp +#: editor/settings_config_dialog.cpp +msgid "Save & Restart" +msgstr "" + +#: editor/editor_node.cpp +msgid "Spins when the editor window redraws." +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Continuously" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update When Changed" +msgstr "" + +#: editor/editor_node.cpp +msgid "Hide Update Spinner" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand Bottom Panel" +msgstr "" + +#: editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Android build template is missing, please install relevant templates." +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note 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." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: editor/editor_node.cpp +msgid "Template Package" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited" +msgstr "" + +#: editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 2D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 3D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Script Editor" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "Open Asset Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the next Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the previous Editor" +msgstr "" + +#: editor/editor_node.h +msgid "Warning!" +msgstr "" + +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail..." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit Plugin" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Author:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Physics Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Calls" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Edit Text:" +msgstr "" + +#: editor/editor_properties.cpp editor/script_create_dialog.cpp +msgid "On" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Layer" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Bit %d, value %d" +msgstr "" + +#: editor/editor_properties.cpp +msgid "[Empty]" +msgstr "" + +#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp +msgid "Assign..." +msgstr "" + +#: editor/editor_properties.cpp +msgid "Invalid RID" +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"The selected resource (%s) does not match any type expected for this " +"property (%s)." +msgstr "" + +#: 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 "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "New Script" +msgstr "" + +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/editor_properties.cpp +#: 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_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Paste" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Size: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Page: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Key:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Value:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Add Key/Value Pair" +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 or define an existing preset " +"as runnable." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: editor/editor_spin_slider.cpp +msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: editor/editor_sub_scene.cpp editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Redownload" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Installed)" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Official export templates aren't available for development builds." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Missing)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Current)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Retrieving mirrors, please wait..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove template version '%s'?" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Invalid version.txt format inside templates: %s." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No version.txt found inside templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error creating path for templates:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Extracting Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Importing:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error getting the list of mirrors." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error parsing JSON of mirror list. Please report this issue!" +msgstr "" + +#: editor/export_template_manager.cpp +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 "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Request Failed." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Complete." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Cannot remove temporary file:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"Templates installation failed.\n" +"The problematic templates archives can be found at '%s'." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error requesting URL:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connecting to Mirror..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Disconnected" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Resolving" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Resolve" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Connect" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connected" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Downloading" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connection Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "SSL Handshake Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uncompressing Android Build Sources" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Current Version:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Installed Versions:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install From File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove Template" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select Template File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select mirror from list: (Shift+Click: Open in Browser)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Favorites" +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 "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move a folder into itself." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error moving:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error duplicating:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:" +msgstr "" + +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Inherited Scene" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Set As Main Scene" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scenes" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Add to Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Remove from Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Scene..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +msgid "New Script..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Resource..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Folder/File" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Folder/File" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle Split Mode" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Search files" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Scanning Files,\n" +"Please Wait..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: editor/filesystem_dock.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Overwrite" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Create Scene" +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 +msgid "Find in Files" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Folder:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Filters:" +msgstr "" + +#: editor/find_in_files.cpp +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 +msgid "Find..." +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp +msgid "Replace..." +msgstr "" + +#: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace all (no undo)" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Searching..." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group name already exists." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Invalid group name." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Rename Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Delete Group" +msgstr "" + +#: editor/groups_editor.cpp editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes Not in Group" +msgstr "" + +#: editor/groups_editor.cpp editor/scene_tree_dock.cpp +#: editor/scene_tree_editor.cpp +msgid "Filter nodes" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes in Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Empty groups will be automatically removed." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group Editor" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Manage Groups" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Single Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Importing Scene..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating Lightmaps" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating for Mesh: " +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Running Custom Script..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Error running post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Did you return a Node-derived object in the `post_import()` method?" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Saving..." +msgstr "" + +#: editor/import_dock.cpp +msgid "%d Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Set as Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Clear Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp +msgid "Preset" +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/import_dock.cpp +msgid "Save Scenes, Re-Import, and Restart" +msgstr "" + +#: editor/import_dock.cpp +msgid "Changing the type of an imported file requires editor restart." +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 "" + +#: editor/inspector_dock.cpp +msgid "Expand All Properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Collapse All Properties" +msgstr "" + +#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Save As..." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Params" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Edit Resource Clipboard" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Built-In" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Open in Help" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Object properties." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Filter properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a single node to edit its signals and groups." +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Edit a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Create a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Plugin Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Subfolder:" +msgstr "" + +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp +msgid "Language:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Script Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Activate now?" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon" +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 "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit points.\n" +"LMB: Move Point\n" +"RMB: Erase Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Erase points." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Edit Polygon" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Edit Polygon (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Polygon And Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +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 +msgid "Load..." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Move Node Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Change BlendSpace1D Limits" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Change BlendSpace1D Labels" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: 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 "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Node Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Animation Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Remove BlendSpace1D Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Move BlendSpace1D Node Point" +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 +msgid "" +"AnimationTree is inactive.\n" +"Activate to enable playback, check node warnings if activation fails." +msgstr "" + +#: 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 "" + +#: 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 "" + +#: 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 "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Point" +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 +msgid "Open Editor" +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 +msgid "Open Animation Node" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Triangle already exists." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Triangle" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Change BlendSpace2D Limits" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Change BlendSpace2D Labels" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Remove BlendSpace2D Point" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Remove BlendSpace2D Triangle" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "BlendSpace2D does not belong to an AnimationTree node." +msgstr "" + +#: 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 +msgid "Toggle Auto Triangles" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create triangles by connecting points." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Erase points and triangles." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Generate blend triangles automatically (instead of manually)" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Parameter Changed" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Output node can't be added to the blend tree." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Add Node to BlendTree" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Node Moved" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Unable to connect, port may be in use or connection may be invalid." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Nodes Connected" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Nodes Disconnected" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Set Animation" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Delete Node" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Toggle Filter On/Off" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Change Filter" +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 "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +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" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Audio Clips" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Functions" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Node Renamed" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node..." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Edit Filtered Tracks:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Enable Filtering" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Animation?" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation name already exists!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation resource on clipboard!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to edit!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Transitions..." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Open in Inspector" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning Options" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Directions" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Past" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Future" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Depth" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "1 step" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "2 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "3 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Differences Only" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Force White Modulate" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Include Gizmos (3D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pin AnimationPlayer" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +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 "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Move Node" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition exists!" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Add Transition" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Immediate" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Sync" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "At End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Travel" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Start and end nodes are needed for a sub-transition." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "No playback resource set at path: %s." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Node Removed" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition Removed" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set Start Node (Autoplay)" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"Select and move nodes.\n" +"RMB to add new nodes.\n" +"Shift+LMB to create connections." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Create new nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Connect nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Remove selected node or transition." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Toggle autoplay this animation on start, restart or seek to zero." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set the end animation. This is useful for sub-transitions." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition: " +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Play Mode:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "AnimationTree" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Import Animations..." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Filters..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Cannot save response to:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Write error." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, timeout" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Timeout." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading (%s / %s)..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Install..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "First" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Previous" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Import..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Plugins..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Loading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Can't determine a save path for lightmap images.\n" +"Save your scene (for images to be saved in the same dir), or pick a save " +"path from the BakedLightmap properties." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " +"Light' flag is on." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed creating lightmap images, make sure path is writable." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Bake Lightmaps" +msgstr "" + +#: editor/plugins/camera_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Primary Line Every:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "steps" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Horizontal and Vertical Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate CanvasItem \"%s\" to %d degrees" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem \"%s\" Anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Node2D \"%s\" to (%s, %s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Resize Control \"%s\" to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem \"%s\" to (%s, %s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem \"%s\" to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Children of containers have their anchors and margins values overridden by " +"their parent." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Presets for the anchors and margins values of a Control node." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"When active, moving Control nodes changes their anchors instead of their " +"margins." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Top" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Bottom" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Left Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Right Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "VCenter Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "HCenter Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Full Rect" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Keep Ratio" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Game Camera Override\n" +"Overrides game camera with editor viewport camera." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Game Camera Override\n" +"No game instance running." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Group Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Ungroup Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +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 +#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp +msgid "Zoom Reset" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Ruler Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Scale Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart Snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Parent" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Other Nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Guides" +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 "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +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 "" + +#: 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 "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Custom Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Always Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Preview Canvas Scale" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Translation mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert keys (based on mask)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +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 "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Auto Insert Key" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation Key and Pose Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Cannot instantiate multiple nodes without root." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: 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 "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Default Type" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Drag & drop + Shift : Add node as sibling\n" +"Drag & drop + Alt : Change node type" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Polygon3D" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Restart" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Solid Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Border Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Directed Border Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +msgid "CPUParticles" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat 0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat 1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Curve Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Add Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Left Linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right Linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Toggle Curve Linear Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Hold Shift to edit tangents individually" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + +#: editor/plugins/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +msgid "Gradient Edited" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: 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 "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Shape" +msgstr "" + +#: 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 +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 +msgid "Create Navigation Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Contained Mesh is not of type ArrayMesh." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Unwrap failed, mesh may not be manifold?" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "No mesh to debug." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Model has no UV in this layer" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +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 +msgid "Create Single Convex Collision Sibling" +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 +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 "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV2" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Unwrap UV2 for Lightmap/AO" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Channel Debug" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "" +"Update from existing scene?:\n" +"%s" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Mesh Library" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generating Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Can only set point into a ParticlesMaterial process material" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "The geometry's faces don't contain any area." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "The geometry doesn't contain any faces." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't inherit from Spatial." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't contain face geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Points:" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points+Normal (Directed)" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Source: " +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate Visibility AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Out-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove In-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Split Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Left Click: Split Segment (in curve)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Angles" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Lengths" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Out-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove In-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: editor/plugins/physical_bone_plugin.cpp +msgid "Move Joint" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"The skeleton property of the Polygon2D does not point to a Skeleton2D node" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"No texture in this polygon.\n" +"Set a texture to be able to edit UV." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"Polygon 2D has internal vertices, so it can no longer be edited in the " +"viewport." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon & UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Internal Vertex" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Internal Vertex" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Invalid Polygon (need 3 different vertices)" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Add Custom Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Custom Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint Bone Weights" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Open Polygon 2D UV editor." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Points" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygons" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Points" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Command: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Command: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create a custom polygon. Enables custom polygon rendering." +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 "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Unpaint weights with specified intensity." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Radius:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Copy Polygon to UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Copy UV to Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Settings" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Configure Grid:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones to Polygon" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "AnimationTree has no path set to an AnimationPlayer" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Path to AnimationPlayer is invalid" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Files" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close and save changes?" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error writing TextFile:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Could not load file at:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving file!" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error Saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error Importing" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New Text File..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save File As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Can't obtain the script for running." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Script failed reloading, check console for errors." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Script is not in tool mode, will not be able to run." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"To run this script, it must inherit EditorScript and be set to tool mode." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "%s Class Reference" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Filter scripts" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle alphabetical sorting of the method list." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Filter methods" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Sort" +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 "" + +#: 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 "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reopen Closed Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Copy Script Path" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +#: editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Debug with External Editor" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open Godot online documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Discard" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Results" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Scripts" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Connections to method:" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp +msgid "Source" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Target" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "" +"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "[Ignore]" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +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 "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lookup Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Capitalize" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Syntax Highlighter" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +msgid "Bookmarks" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +msgid "Go To" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Cut" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Delete Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold/Unfold Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Unfold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Evaluate Selection" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Spaces" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Tabs" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find in Files..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Bookmarks" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Line..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Breakpoint" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "" +"This shader has been modified on on disk.\n" +"What action should be taken?" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "This skeleton has no bones, create some children Bone2D nodes." +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Skeleton2D" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Make Rest Pose (From Bones)" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Bones to Rest Pose" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical bones" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Skeleton" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical skeleton" +msgstr "" + +#: editor/plugins/skeleton_ik_editor_plugin.cpp +msgid "Play IK" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translating: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Objects Drawn" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Material Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Shader Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Surface Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Draw Calls" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Vertices" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Transform with View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Rotation with View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Auto Orthogonal Enabled" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock View Rotation" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Unshaded" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Environment" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Information" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Half Resolution" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Enable Doppler" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Cinematic Preview" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Not available when using the GLES2 renderer." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Forward" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Backwards" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Speed Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +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 "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Click to toggle between visibility states.\n" +"\n" +"Open eye: Gizmo is visible.\n" +"Closed eye: Gizmo is hidden.\n" +"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Nodes To Floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Couldn't find a solid floor to snap the selection to." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Drag: Rotate\n" +"Alt+Drag: Move\n" +"Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Local Space" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Object to Floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Settings..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Nameless gizmo" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create Mesh2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Mesh2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create Polygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Polygon2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create CollisionPolygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "CollisionPolygon2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create LightOccluder2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "LightOccluder2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite is empty!" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Can't convert a sprite using animation frames to mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't replace by mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to Mesh2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create polygon." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to Polygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create collision polygon." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create CollisionPolygon2D Sibling" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create light occluder." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create LightOccluder2D Sibling" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Simplification: " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Grow (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Update Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Settings:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "No Frames Selected" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add %d Frame(s)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Unable to load images" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "New Animation" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add a Texture from File" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frames from a Sprite Sheet" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Select Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Horizontal:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Vertical:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Select/Clear All Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Create Frames from Sprite Sheet" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "SpriteFrames" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Margin" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: scene/resources/visual_shader.cpp +msgid "None" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Sep.:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "TextureRegion" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp +msgid "Remove All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Edit Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme editing menu." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create From Current Editor Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Toggle Button" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Disabled Button" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Disabled Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Named Sep." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Submenu" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Subitem 1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Subitem 2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Disabled LineEdit" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Editable Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Subtree" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has,Many,Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Style" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme File" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Fix Invalid Tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Line Draw" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket Fill" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Find Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Disable Autotile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Enable Priority" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "" +"Shift+LMB: Line Draw\n" +"Shift+Command+LMB: Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "" +"Shift+LMB: Line Draw\n" +"Shift+Ctrl+LMB: Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate Left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate Right" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip Horizontally" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip Vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear Transform" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Texture(s) to TileSet." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove selected Texture from TileSet." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Single Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Autotile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Atlas" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Next Coordinate" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select the next shape, subtile, or Tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Previous Coordinate" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select the previous shape, subtile, or Tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Region" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Collision" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Occlusion" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Navigation" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Priority" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Z Index" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Region Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Collision Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Occlusion Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Navigation Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Bitmask Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Priority Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Icon Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Z Index Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Copy bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Paste bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Erase bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create a new rectangle." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create a new polygon." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Keep polygon inside region Rect." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Enable snap and show grid (configurable via the Inspector)." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Display Tile Names (Hold Alt Key)" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene? This will overwrite all current tiles." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Texture" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "%s file(s) were not added because was already on the list." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Drag handles to edit Rect.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete selected Rect." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select current edited sub-tile.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete polygon." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: Set bit on.\n" +"RMB: Set bit off.\n" +"Shift+LMB: Set wildcard bit.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to change its priority.\n" +"Click on another Tile to edit it." +msgstr "" + +#: 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 "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Set Tile Region" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Set Tile Icon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Navigation Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Paste Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Clear Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Polygon Concave" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Polygon Convex" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Navigation Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Priority" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Z Index" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Convex" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Concave" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "This property can't be changed." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "TileSet" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Output" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add input port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add output port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change input port type" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change output port type" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change input port name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change output port name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Remove input port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Remove output port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set expression" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Resize VisualShader node" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set Uniform Name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set Input Default Port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node to Visual Shader" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Node(s) Moved" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Duplicate Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Delete Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Visual Shader Input Type Changed" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "UniformRef Name Changed" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Light" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Show resulted shader code." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Create Shader Node" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Grayscale function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts HSV vector to RGB equivalent." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts RGB vector to HSV equivalent." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sepia function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Burn operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Darken operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Difference operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Dodge operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "HardLight operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Lighten operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Overlay operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Screen operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "SoftLight operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the boolean result of the %s comparison between two parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Equal (==)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Greater Than (>)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Greater Than or Equal (>=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated vector if the provided scalars are equal, greater or " +"less." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between INF and a scalar " +"parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between NaN and a scalar " +"parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Less Than (<)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Less Than or Equal (<=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Not Equal (!=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated vector if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the boolean result of the comparison between two parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between INF (or NaN) and a " +"scalar parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for all shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Input parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex and fragment shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for fragment and light shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for fragment shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for light shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex and fragment shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "E constant (2.718282). Represents the base of the natural logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Epsilon constant (0.00001). Smallest possible scalar number." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Phi constant (1.618034). Golden ratio." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi/4 constant (0.785398) or 45 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi/2 constant (1.570796) or 90 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi constant (3.141593) or 180 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Tau constant (6.283185) or 360 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sqrt2 constant (1.414214). Square root of 2." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the absolute value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-tangent of the parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Finds the nearest integer that is greater than or equal to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Constrains a value to lie between two further values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts a quantity in radians to degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-e Exponential." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-2 Exponential." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest integer less than or equal to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Computes the fractional part of the argument." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse of the square root of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Natural logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-2 logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the greater of two values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the lesser of two values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the opposite value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 - scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the value of the first parameter raised to the power of the second." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts a quantity in degrees to radians." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 / scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest integer to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest even integer to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Clamps the value between 0.0 and 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Extracts the sign of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the square root of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if x is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( scalar(edge), scalar(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the truncated value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Adds scalar to scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Divides scalar by scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies scalar by scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the remainder of the two scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Subtracts scalar from scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Perform the cubic texture lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Perform the texture lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Cubic texture uniform lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "2D texture uniform lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "2D texture uniform lookup with triplanar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Calculate the outer product of a pair of vectors.\n" +"\n" +"OuterProduct treats the first parameter 'c' as a column vector (matrix with " +"one column) and the second parameter 'r' as a row vector (matrix with one " +"row) and does a linear algebraic matrix multiply 'c * r', yielding a matrix " +"whose number of rows is the number of components in 'c' and whose number of " +"columns is the number of components in 'r'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Composes transform from four vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Decomposes transform to four vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the determinant of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the inverse of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the transpose of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies transform by transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies vector by transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Composes vector from three scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Decomposes vector to three scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the cross product of two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the distance between two points." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the dot product of two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +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 " +"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 "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the length of a vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two vectors using scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the normalize product of vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 - vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 / vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the vector that points in the direction of reflection ( a : incident " +"vector, b : normal vector )." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the vector that points in the direction of refraction." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( vector(edge), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( scalar(edge), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Adds vector to vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Divides vector by vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies vector by vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the remainder of the two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Subtracts vector from vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Custom Godot Shader Language expression, with custom amount of input and " +"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 "" + +#: 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 "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +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 "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "A reference to an existing uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(Fragment/Light mode only) Scalar derivative function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(Fragment/Light mode only) Vector derivative function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Derivative in 'x' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Derivative in 'y' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " +"'y'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " +"'y'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "VisualShader" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Edit Visual Property" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Visual Shader Mode Changed" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Failed to export the project for platform '%s'.\n" +"Export templates seem to be missing or invalid." +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Failed to export the project for platform '%s'.\n" +"This might be due to a configuration issue in the export preset or your " +"export settings." +msgstr "" + +#: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp +msgid "The given export path doesn't exist:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Presets" +msgstr "" + +#: editor/project_export.cpp editor/project_settings_editor.cpp +msgid "Add..." +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 "" + +#: editor/project_export.cpp +msgid "Export Path" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: editor/project_export.cpp +msgid "Export all resources in the project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected scenes (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected resources (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources to export:" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "" + +#: editor/project_export.cpp +msgid "Features" +msgstr "" + +#: editor/project_export.cpp +msgid "Custom (comma-separated):" +msgstr "" + +#: editor/project_export.cpp +msgid "Feature List:" +msgstr "" + +#: editor/project_export.cpp +msgid "Script" +msgstr "" + +#: editor/project_export.cpp +msgid "Script Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Text" +msgstr "" + +#: editor/project_export.cpp +msgid "Compiled" +msgstr "" + +#: editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: editor/project_export.cpp +msgid "Invalid Encryption Key (must be 64 characters long)" +msgstr "" + +#: editor/project_export.cpp +msgid "Script Encryption Key (256-bits as hex):" +msgstr "" + +#: editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp editor/project_manager.cpp +msgid "ZIP File" +msgstr "" + +#: editor/project_export.cpp +msgid "Godot Game Pack" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +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; it doesn't contain a \"project.godot\" file." +msgstr "" + +#: 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 "" + +#: editor/project_manager.cpp +msgid "This directory already contains a Godot project." +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Installation Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Renderer:" +msgstr "" + +#: editor/project_manager.cpp +msgid "OpenGL ES 3.0" +msgstr "" + +#: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Higher visual quality\n" +"All features available\n" +"Incompatible with older hardware\n" +"Not recommended for web games" +msgstr "" + +#: editor/project_manager.cpp +msgid "OpenGL ES 2.0" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Lower visual quality\n" +"Some features not available\n" +"Works on most hardware\n" +"Recommended for web games" +msgstr "" + +#: editor/project_manager.cpp +msgid "Renderer can be changed later, but scenes may need to be adjusted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Missing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Error: Project is missing on the filesystem." +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project at '%s'." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"The following project settings file does not specify the version of Godot " +"through which it was created.\n" +"\n" +"%s\n" +"\n" +"If you proceed with opening it, it will be converted to Godot's current " +"configuration file format.\n" +"Warning: You won't be able to open the project with previous versions of the " +"engine anymore." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"The following project settings file was generated by an older engine " +"version, and needs to be converted for this version:\n" +"\n" +"%s\n" +"\n" +"Do you want to convert it?\n" +"Warning: You won't be able to open the project with previous versions of the " +"engine anymore." +msgstr "" + +#: 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 "" +"Can't run project: no main scene defined.\n" +"Please edit the project and set the main scene in the Project Settings under " +"the \"Application\" category." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: Assets need to be imported.\n" +"Please edit the project to trigger the initial import." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to run %d projects at once?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Remove %d projects from the list?\n" +"The project folders' contents won't be modified." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Remove this project from the list?\n" +"The project folder's contents won't be modified." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Remove all missing projects from the list?\n" +"The project folders' contents won't be modified." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The interface will update after restarting the editor or project manager." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Are you sure to scan %s folders for existing Godot projects?\n" +"This could take a while." +msgstr "" + +#. TRANSLATORS: This refers to the application where users manage their Godot projects. +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Projects" +msgstr "" + +#: editor/project_manager.cpp +msgid "Last Modified" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove Missing" +msgstr "" + +#: editor/project_manager.cpp +msgid "Templates" +msgstr "" + +#: editor/project_manager.cpp +msgid "Restart Now" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't run project" +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 "" + +#: editor/project_manager.cpp +msgid "" +"The search box filters projects by name and last path component.\n" +"To filter projects by name and full path, the query must contain at least " +"one `/` character." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Key " +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button" +msgstr "" + +#: editor/project_settings_editor.cpp +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 "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Action deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "All Devices" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Press a Key..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 1" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 2" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Axis Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Global Property" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Select a setting item first!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "No property '%s' exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Setting '%s' is internal, and it can't be deleted." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Delete Item" +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 "" + +#: editor/project_settings_editor.cpp +msgid "Error saving settings." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Settings saved OK." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override for Feature" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Remapped Path" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter Mode" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Project Settings (project.godot)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override For..." +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "The editor must be restarted for changes to take effect." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Localization" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resources:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locale" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show All Locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show Selected Locales Only" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Filter mode:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "AutoLoad" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: editor/property_editor.cpp +msgid "File..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Dir..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: editor/property_editor.cpp +msgid "Select Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp +msgid "Batch Rename" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Replace:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Prefix:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Suffix:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Advanced Options" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Substitute" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node's parent name, if available" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node type" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Current scene name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Root node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Sequential integer counter.\n" +"Compare counter options." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Per-level Counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "If set, the counter restarts for each group of child nodes." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Initial value for the counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Step" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Amount by which counter is incremented for each node" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Padding" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Minimum number of digits for the counter.\n" +"Missing digits are padded with leading zeros." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Post-Process" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Keep" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "PascalCase to snake_case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "snake_case to PascalCase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Lowercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Uppercase" +msgstr "" + +#: editor/rename_dialog.cpp +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 "" + +#: editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Detach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +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 "" + +#: editor/scene_tree_dock.cpp +msgid "Instantiated scenes can't become root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make node as Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete %d nodes and any children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can not perform with the root node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save New Scene As..." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: 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 "" + +#: editor/scene_tree_dock.cpp +msgid "Make Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "New Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Create Root Node:" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "2D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "3D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "User Interface" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Other Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change type of node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Sub-Resources" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Open Documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot attach a script: there are no languages registered.\n" +"This is probably because this editor was built with all language modules " +"disabled." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Expand/Collapse All" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Reparent to New Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Copy Node Path" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add/Create a New Node." +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 to the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Detach the script from the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remote" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Unlock Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Button Group" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "(Connecting From)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has %s connection(s) and %s group(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has %s connection(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in %s group(s).\n" +"Click to show groups dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Open Script:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is locked.\n" +"Click to unlock it." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Children are not selectable.\n" +"Click to make selectable." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visibility" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"AnimationPlayer is pinned.\n" +"Click to unpin." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node Configuration Warning!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is empty." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Filename is empty." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is not local." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid base path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "A directory with the same name exists." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File does not exist." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid extension." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Wrong extension chosen." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading template '%s'" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error - Could not create script in filesystem." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading script from %s" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Overrides" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script / Choose Location" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, it will be reused." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid class name." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid inherited parent name or path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script path/name is valid." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Allowed: a-z, A-Z, 0-9, _ and ." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in script (into scene file)." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Will create a new script file." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Will load an existing script file." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script file already exists." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "" +"Note: Built-in scripts have some limitations and can't be edited using an " +"external editor." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Template:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in Script:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Attach Node Script" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Remote " +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Warning:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Child process connected." +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Copy Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Export list to a CSV file" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Export measures as CSV" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Erase Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Restore Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Change Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Binding" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change AudioStreamPlayer3D Emission Angle" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Height" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Inner Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Outer Radius" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select the dynamic library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select dependencies of the library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Remove current entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Double click to create a new entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform:" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dynamic Library" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Add an architecture entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "GDNativeLibrary" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Enabled GDNative Singleton" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Disabled GDNative Singleton" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Step argument is zero!" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Object can't provide a length." +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Paste Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Paint" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Disabled" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Above" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Below" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit X Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Y Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Z Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Clear Rotation" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Paste Selects" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Settings" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Pick Distance:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Bake NavMesh" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: 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: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Signal Arguments" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Default Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Override an existing built-in function." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new function." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new variable." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new signal." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Duplicate VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +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 "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Move Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Data" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Input Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Resize Comment" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't copy the function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Clipboard is empty!" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +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 +msgid "Select at least one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Make Tool:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Nodes..." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function..." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "function_name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit its graph." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Member" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search VisualScript" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Get %s" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Set %s" +msgstr "" + +#: platform/android/export/export.cpp +msgid "Package name is missing." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Package segments must be of non-zero length." +msgstr "" + +#: platform/android/export/export.cpp +msgid "The character '%s' is not allowed in Android application package names." +msgstr "" + +#: platform/android/export/export.cpp +msgid "A digit cannot be the first character in a package segment." +msgstr "" + +#: platform/android/export/export.cpp +msgid "The character '%s' cannot be the first character in a package segment." +msgstr "" + +#: platform/android/export/export.cpp +msgid "The package must have at least one '.' separator." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp +msgid "ADB executable not configured in the Editor Settings." +msgstr "" + +#: platform/android/export/export.cpp +msgid "OpenJDK jarsigner not configured in the Editor Settings." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Debug keystore not configured in the Editor Settings nor in the preset." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Release keystore incorrectly configured in the export preset." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Custom build requires a valid Android SDK path in Editor Settings." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Invalid Android SDK path for custom build in Editor Settings." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: 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 "" + +#: platform/android/export/export.cpp +msgid "Invalid package name:" +msgstr "" + +#: platform/android/export/export.cpp +msgid "" +"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " +"project setting (changed in Godot 3.2.2).\n" +msgstr "" + +#: platform/android/export/export.cpp +msgid "\"Use Custom Build\" must be enabled to use the plugins." +msgstr "" + +#: platform/android/export/export.cpp +msgid "" +"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +"\"." +msgstr "" + +#: platform/android/export/export.cpp +msgid "" +"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." +msgstr "" + +#: platform/android/export/export.cpp +msgid "" +"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." +msgstr "" + +#: platform/android/export/export.cpp +msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Invalid filename! Android App Bundle requires the *.aab extension." +msgstr "" + +#: platform/android/export/export.cpp +msgid "APK Expansion not compatible with Android App Bundle." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Invalid filename! Android APK requires the *.apk extension." +msgstr "" + +#: 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 "" + +#: platform/android/export/export.cpp +msgid "" +"Android build version mismatch:\n" +" Template installed: %s\n" +" Godot Version: %s\n" +"Please reinstall Android build template from 'Project' menu." +msgstr "" + +#: platform/android/export/export.cpp +msgid "Building Android Project (gradle)" +msgstr "" + +#: 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 "" + +#: platform/android/export/export.cpp +msgid "Moving output" +msgstr "" + +#: platform/android/export/export.cpp +msgid "" +"Unable to copy and rename export file, check gradle project directory for " +"outputs." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "Identifier is missing." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "The character '%s' is not allowed in Identifier." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "App Store Team ID not specified - cannot configure the project." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "Invalid Identifier:" +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "Required icon is not specified in the preset." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run exported HTML in the system's default browser." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not open template for export:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read custom HTML shell:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read boot splash image file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Using default boot splash image." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package short name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package unique name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package publisher display name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid product GUID." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid publisher GUID." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid background color." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid Store Logo image dimensions (should be 50x50)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid splash screen image dimensions (should be 620x300)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the \"Frames\" property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: 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 "" + +#: scene/2d/collision_object_2d.cpp +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 "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"Polygon-based shapes are not meant be used nor edited directly through the " +"CollisionShape2D node. Please use the CollisionPolygon2D node instead." +msgstr "" + +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the \"Texture\" " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon." +msgstr "" + +#: 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 "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "" +"GPU-based particles are not supported by the GLES2 video driver.\n" +"Use the CPUParticles2D node instead. You can use the \"Convert to " +"CPUParticles\" option for this purpose." +msgstr "" + +#: 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 "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/physics_body_2d.cpp +msgid "" +"Size changes to RigidBody2D (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "This Bone2D chain should end at a Skeleton2D node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "" +"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." +msgstr "" + +#: scene/2d/tile_map.cpp +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 "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnabler2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRCamera must have an ARVROrigin node as its parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRController must have an ARVROrigin node as its parent." +msgstr "" + +#: 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 "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRAnchor must have an ARVROrigin node as its parent." +msgstr "" + +#: 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 "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVROrigin requires an ARVRCamera child node." +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Meshes: " +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Lights:" +msgstr "" + +#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp +msgid "Finishing Plot" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Lighting Meshes: " +msgstr "" + +#: scene/3d/collision_object.cpp +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 "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it." +msgstr "" + +#: 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 "" + +#: scene/3d/collision_shape.cpp +msgid "" +"ConcavePolygonShape doesn't support RigidBody in another mode than static." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial whose " +"Billboard Mode is set to \"Particle Billboard\"." +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Plotting Meshes" +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "" +"GIProbes are not supported by the GLES2 video driver.\n" +"Use a BakedLightmap instead." +msgstr "" + +#: scene/3d/interpolated_camera.cpp +msgid "" +"InterpolatedCamera has been deprecated and will be removed in Godot 4.0." +msgstr "" + +#: scene/3d/light.cpp +msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"GPU-based particles are not supported by the GLES2 video driver.\n" +"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" +"\" option for this purpose." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Nothing is visible because meshes have not been assigned to draw passes." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial whose Billboard " +"Mode is set to \"Particle Billboard\"." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "" +"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " +"parent Path's Curve resource." +msgstr "" + +#: scene/3d/physics_body.cpp +msgid "" +"Size changes to RigidBody (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + +#: scene/3d/remote_transform.cpp +msgid "" +"The \"Remote Path\" property must point to a valid Spatial or Spatial-" +"derived node to work." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "This body will be ignored until you set a mesh." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "" +"Size changes to SoftBody will be overridden by the physics engine when " +"running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the \"Frames\" property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: 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 "" + +#: scene/3d/world_environment.cpp +msgid "" +"WorldEnvironment requires its \"Environment\" property to contain an " +"Environment to have a visible effect." +msgstr "" + +#: scene/3d/world_environment.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: 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 "" + +#: scene/animation/animation_blend_tree.cpp +msgid "On BlendTree node '%s', animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "Animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "In node '%s', invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Nothing connected to input '%s' of node '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "No root AnimationNode for the graph is set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path to an AnimationPlayer node containing animations is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "The AnimationPlayer root node is not a valid node." +msgstr "" + +#: scene/animation/animation_tree_player.cpp +msgid "This node has been deprecated. Use AnimationTree instead." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "" +"Color: #%s\n" +"LMB: Set color\n" +"RMB: Remove preset" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Pick a color from the editor window." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "HSV" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Raw" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Switch between hexadecimal and code values." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset." +msgstr "" + +#: scene/gui/container.cpp +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 "" + +#: 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 "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + +#: scene/gui/popup.cpp +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 "" + +#: scene/gui/range.cpp +msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." +msgstr "" + +#: scene/gui/scroll_container.cpp +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 "" + +#: scene/gui/tree.cpp +msgid "(Other)" +msgstr "" + +#: scene/main/scene_tree.cpp +msgid "" +"Default Environment as specified in Project Settings (Rendering -> " +"Environment -> Default Environment) could not be loaded." +msgstr "" + +#: scene/main/viewport.cpp +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 "" + +#: scene/main/viewport.cpp +msgid "Viewport size must be greater than 0 to render anything." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for preview." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for shader." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid comparison function for that type." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to uniform." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Varyings can only be assigned in vertex function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Constants cannot be modified." +msgstr "" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index e930c8ea22..3019abd016 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -1,6 +1,6 @@ # Catalan translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # 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. @@ -1041,14 +1041,19 @@ msgid "Owners Of:" msgstr "Propietaris de:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Eliminar els fitxers seleccionats del projecte? (No es pot restaurar)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Els fitxers seleccionats són utilitzats per altres recursos.\n" "Voleu Eliminar-los de totes maneres? (No es pot desfer!)" @@ -1095,7 +1100,7 @@ msgstr "Navegador de Recursos Orfes" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2321,19 +2326,25 @@ msgid "Error saving TileSet!" msgstr "Error en desar el TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error en desar els canvis!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "No s'ha trobat el nom del Disseny!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "S'ha restaurat la configuració predeterminada." #: editor/editor_node.cpp @@ -3736,6 +3747,16 @@ msgid "Name contains invalid characters." msgstr "El Nom conté caràcters que no són vàlids." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Reanomenant fitxer:" @@ -3784,14 +3805,6 @@ msgstr "Edita Dependències..." msgid "View Owners..." msgstr "Mostra Propietaris..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Reanomena..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplica..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mou cap a..." @@ -3819,11 +3832,17 @@ msgid "Collapse All" msgstr "Col·lapsar tot" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Reanomena" +msgid "Duplicate..." +msgstr "Duplica..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mou l'AutoCàrrega" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Reanomena..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3858,8 +3877,11 @@ msgid "Move" msgstr "Mou" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ja hi existex un fitxer o directori amb aquest nom." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Reanomena" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3928,8 +3950,19 @@ msgid "Searching..." msgstr "Cercant..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Cerca completa" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d coincidències." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d coincidències." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d coincidències." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8502,11 +8535,26 @@ msgid "Create a new rectangle." msgstr "Crear un nou rectangle." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Pinta Rectangle" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nou polígon." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Polygon" +msgstr "Mou el Polígon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Elimina Seleccionats" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Keep polygon inside region Rect." msgstr "Mantenir polígon dins de la regió Rect." @@ -8727,11 +8775,6 @@ msgid "Error" msgstr "Error" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Manca Nom" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "No hi ha fitxers afegits a l'escenari" @@ -8798,11 +8841,6 @@ msgstr "Desa-ho Tot" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add a commit message" -msgstr "Afegir un missatge de commit" - -#: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit Changes" msgstr "Sincronitzar Canvis en Scripts" @@ -10055,6 +10093,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12422,6 +12464,10 @@ msgstr "" "la configuració de l'editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -12717,6 +12763,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -13045,6 +13111,26 @@ msgstr "" "RigidBody(Caràcter o Rígid). \n" "Modifica la mida de les Formes de Col. lisió Filles." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13207,6 +13293,11 @@ msgstr "Ep!" msgid "Please Confirm..." msgstr "Confirmeu..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Activar Ajustament" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -13292,6 +13383,26 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Les constants no es poden modificar." +#~ msgid "Search complete" +#~ msgstr "Cerca completa" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Manca Nom" + +#, fuzzy +#~ msgid "Add a commit message" +#~ msgstr "Afegir un missatge de commit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ja hi existex un fitxer o directori amb aquest nom." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error en desar els canvis!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor." + #~ msgid "Move pivot" #~ msgstr "Moure pivot" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index f5eab2658e..199112d674 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -1,6 +1,6 @@ # Czech translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Fadex <vitekpaulik@gmail.com>, 2017. # Jan 'spl!te' Kondelík <j.kondelik@centrum.cz>, 2016, 2018. @@ -22,12 +22,14 @@ # Zbyněk <zbynek.fiala@gmail.com>, 2020. # Daniel Kříž <Daniel.kriz@protonmail.com>, 2020. # VladimirBlazek <vblazek042@gmail.com>, 2020. +# kubajz22 <til.jakubesko@seznam.cz>, 2020. +# Václav Blažej <vaclavblazej@seznam.cz>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-12 00:46+0000\n" -"Last-Translator: VladimirBlazek <vblazek042@gmail.com>\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" +"Last-Translator: Václav Blažej <vaclavblazej@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" @@ -35,7 +37,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -277,9 +279,8 @@ msgid "Interpolation Mode" msgstr "Interpolační režim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "Režim ovinuté smyčky (interpolace konce se začátkem ve smyčce)" +msgstr "Režim uzavřené smyčky (Interpolace mezi koncem a začátkem smyčky)" #: editor/animation_track_editor.cpp msgid "Remove this track." @@ -291,11 +292,11 @@ msgstr "Čas (s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "Přepínací Stopa Povolena" +msgstr "Přepínací stopa povolena" #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "Nepřetržité" +msgstr "Spojité" #: editor/animation_track_editor.cpp msgid "Discrete" @@ -307,7 +308,7 @@ msgstr "Spoušť" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "Zachytit" +msgstr "Snímat" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -323,9 +324,8 @@ msgid "Cubic" msgstr "Kubická" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Režim svorkové smyčky" +msgstr "Interpolace smyčky svorkou" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" @@ -398,7 +398,7 @@ msgstr "Animace: Vložit stopu a klíč" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "Animace: vložit klíč" +msgstr "Animace: Vložit klíč" #: editor/animation_track_editor.cpp msgid "Change Animation Step" @@ -406,7 +406,7 @@ msgstr "Změnit krok animace" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "Přeskupit stopy" +msgstr "Upravit pořadí stop" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -446,7 +446,7 @@ msgstr "Přidat Bézierovu stopu" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "Cesta stopy není validní, nelze vložit klíč." +msgstr "Cesta stopy není validní, tak nelze přidat klíč." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" @@ -492,8 +492,8 @@ msgstr "Animace: změnit měřítko klíčů" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" -"Tato možnost nefunguje pro úpravy Beziérovy křivky , protože se jedná pouze " -"o jednu stopu." +"Tato možnost nefunguje pro úpravy Beziérovy křivky, protože se jedná pouze o " +"jednu stopu." #: editor/animation_track_editor.cpp msgid "" @@ -522,9 +522,9 @@ msgid "Warning: Editing imported animation" msgstr "Upozornění: Upravuje se importovaná animace" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer." +msgstr "" +"Pro přidání a úpravu animací vyberte ze stromu scény uzel AnimationPlayer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -757,7 +757,7 @@ msgstr "Zvětšit" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "Změnšit" +msgstr "Zmenšit" #: editor/code_editor.cpp msgid "Reset Zoom" @@ -797,7 +797,7 @@ msgstr "Připojit ke skriptu:" #: editor/connections_dialog.cpp msgid "From Signal:" -msgstr "Z signálu:" +msgstr "Ze signálu:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." @@ -918,9 +918,8 @@ msgid "Signals" msgstr "Signály" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrovat soubory..." +msgstr "Filtrovat signály" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -992,7 +991,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"Scéna '%s' se právě upravuje.\n" +"Scéna \"%s\" se právě upravuje.\n" "Změny se projeví po opětovném načtení." #: editor/dependency_editor.cpp @@ -1000,7 +999,7 @@ msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"Zdroj '%s' se právě používá.\n" +"Zdroj \"%s\" se právě používá.\n" "Změny se projeví po opětovném načtení." #: editor/dependency_editor.cpp @@ -1048,17 +1047,23 @@ msgid "Owners Of:" msgstr "Vlastníci:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)\n" +"Odebrané soubory budou v systémovém koši a obnovit je." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Soubory ke smazání potřebují jiné zdroje ke své činnosti.\n" -"Přesto je chcete smazat? (nelze vrátit zpět)" +"Přesto je chcete smazat? (nelze vrátit zpět)\n" +"Odebrané soubory budou v systémovém koši a obnovit je." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1102,7 +1107,7 @@ msgstr "Průzkumník osiřelých zdrojů" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1164,18 +1169,16 @@ msgid "Gold Sponsors" msgstr "Zlatí sponzoři" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Stříbrní dárci" +msgstr "Stříbrní sponzoři" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Bronzoví dárci" +msgstr "Bronzoví sponzoři" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "Malí sponzoři" +msgstr "Mini sponzoři" #: editor/editor_about.cpp msgid "Gold Donors" @@ -1211,7 +1214,7 @@ msgstr "" "Godot Engine závisí na volně dostupných a open source knihovnách od třetích " "stran; všechny jsou kompatibilní s podmínkami jeho MIT licence. Následuje " "plný výčet těchto komponent třetích stran s jejich příslušnými popisy " -"autorských práv a s licenčními podmínkami." +"autorských práv a licenčními podmínkami." #: editor/editor_about.cpp msgid "All Components" @@ -1276,39 +1279,39 @@ msgstr "Přidat efekt" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Přejmenovat Audio Bus" +msgstr "Přejmenovat zvukovou sběrnici" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "Změnit hlasitost Audio Busu" +msgstr "Změnit hlasitost zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Hraje pouze tento Audio Bus" +msgstr "Přepnout režim sólo zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Ztlumit tento Audio Bus" +msgstr "Přepnout ztlumení zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Přepnout bypass efektů na zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Vybrat přenos zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Přidat Audio Bus efekt" +msgstr "Přidat efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "Přesunout Bus efekt" +msgstr "Přesunout efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "Smazat Bus efekt" +msgstr "Smazat efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Drag & drop to rearrange." @@ -1471,7 +1474,7 @@ msgstr "Přejmenovat AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Přepnout auto-načítání globálních proměnných" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" @@ -1491,7 +1494,7 @@ msgstr "Přeskupit Autoloady" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "" +msgstr "Nelze přidat auto-načítání:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1516,7 +1519,7 @@ msgstr "Název" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "Singleton (jedináček)" +msgstr "Singleton" #: editor/editor_data.cpp editor/inspector_dock.cpp msgid "Paste Params" @@ -1578,7 +1581,7 @@ msgstr "Ukládám soubor:" #: editor/editor_export.cpp msgid "No export template found at the expected path:" -msgstr "Na očekávané cestě nebyly nalezeny žádné exportní šablony:" +msgstr "Na očekávané cestě nebyly nalezeny žádné šablony exportu:" #: editor/editor_export.cpp msgid "Packing" @@ -1613,34 +1616,31 @@ msgstr "" "Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC' pro GLES2. Povolte 'Import " -"Etc' v nastaveních projektu." +"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro GLES2. Povolte 'Import " +"Pvrtc' v nastavení projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC2' pro GLES3. Povolte 'Import " -"Etc 2' v nastaveních projektu." +"Cílová platforma vyžaduje kompresi textur 'ETC2' nebo 'PVRTC' pro GLES3. " +"Povolte 'Import Etc 2' nebo 'Import Pvrtc' v nastavení projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC' pro použití GLES2 jako " +"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro použití GLES2 jako " "zálohy.\n" -"Povolte 'Import Etc' v nastaveních projektu, nebo vypněte 'Driver Fallback " +"Povolte 'Import Pvrtc' v nastavení projektu, nebo vypněte 'Driver Fallback " "Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -1680,18 +1680,16 @@ msgid "Scene Tree Editing" msgstr "Úpravy stromu scény" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Node Dock" -msgstr "Uzel přesunut" +msgstr "Panel uzlů" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" msgstr "Souborový systém" #: editor/editor_feature_profile.cpp msgid "Import Dock" -msgstr "Importovat dok" +msgstr "Importovat panel" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1772,11 +1770,11 @@ msgstr "Nový" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "Importovat" +msgstr "Import" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" -msgstr "Exportovat" +msgstr "Export" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1795,9 +1793,8 @@ msgid "Erase Profile" msgstr "Smazat profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Godot Feature Profile" -msgstr "Spravovat exportní šablony" +msgstr "Godot feature profil" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1968,7 +1965,7 @@ msgstr "Je nutné použít platnou příponu." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "Sken zdrojů" #: editor/editor_file_system.cpp msgid "" @@ -2066,7 +2063,7 @@ msgstr "" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "Prohledat nápovědu" +msgstr "Hledat v dokumentaci" #: editor/editor_help_search.cpp msgid "Case Sensitive" @@ -2105,9 +2102,8 @@ msgid "Theme Properties Only" msgstr "Pouze vlastnosti motivu" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Členové" +msgstr "Typ člena" #: editor/editor_help_search.cpp msgid "Class" @@ -2161,7 +2157,7 @@ msgstr "Kopírovat výběr" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "Vyčistit" +msgstr "Promazat" #: editor/editor_log.cpp msgid "Clear Output" @@ -2291,6 +2287,8 @@ 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 "" +"Tato scéna nemůže být uložena, protože obsahuje cyklickou referenci.\n" +"Odstraňte ji, a poté zkuste uložit znovu." #: editor/editor_node.cpp msgid "" @@ -2321,19 +2319,29 @@ msgid "Error saving TileSet!" msgstr "Chyba při ukládání TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Chyba při pokusu uložit rozložení!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Při pokusu o uložení rozložení editoru došlo k chybě.\n" +"Ujistěte se, že cesta k uživatelským datům editoru je zapisovatelná." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Výchozí rozložení editoru přepsáno." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Výchozí rozložení editoru bylo přepsáno.\n" +"Chcete-li obnovit výchozí rozložení do výchozího nastavení, použijte možnost " +"Odstranit rozložení a odstraňte výchozí rozložení." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Jméno rozložení nenalezeno!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Obnoveno výchozí rozložení na základní nastavení." #: editor/editor_node.cpp @@ -2410,7 +2418,7 @@ msgstr "Rychle otevřít scénu..." #: editor/editor_node.cpp msgid "Quick Open Script..." -msgstr "Rychlé otevření skriptu..." +msgstr "Rychle otevřít skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -2481,10 +2489,12 @@ msgid "" "The current scene has unsaved changes.\n" "Reload the saved scene anyway? This action cannot be undone." msgstr "" +"Tato scéna obsahuje neuložené změny.\n" +"Přesto znovu načíst? Tuto akci nelze vrátit zpět." #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "Rychlé spuštění scény..." +msgstr "Rychle spustit scénu..." #: editor/editor_node.cpp msgid "Quit" @@ -2604,8 +2614,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Vybraná scéna '%s' neexistuje, vybrat platnou? \n" -"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'." +"Vybraná scéna '%s' neexistuje, vybrat platnou?\n" +"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'." #: editor/editor_node.cpp msgid "" @@ -2613,6 +2623,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Vybraná scéna '%s' není platný soubor scény. Vybrat jinou?\n" +"Můžete ji později změnit v \"Nastavení projektu\" v kategorii \"aplikace\"." #: editor/editor_node.cpp msgid "Save Layout" @@ -2722,7 +2734,7 @@ msgstr "Nová scéna" #: editor/editor_node.cpp msgid "New Inherited Scene..." -msgstr "Nová odvozená scéna..." +msgstr "Nová zděděná scéna..." #: editor/editor_node.cpp msgid "Open Scene..." @@ -2793,7 +2805,7 @@ msgstr "Exportovat..." #: editor/editor_node.cpp msgid "Install Android Build Template..." -msgstr "" +msgstr "Nainstalovat kompilační šablonu pro Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2829,14 +2841,17 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Pokud je tato možnost povolena, použití one-click deploy způsobí, že se " +"aplikace pokusí připojit k IP tohoto počítače, takže spuštěný projekt může " +"být laděn.\n" +"Tato možnost je určena pro vzdálené ladění (typicky s mobilním zařízením).\n" +"Nemusíte ji povolovat abyste mohli použít lokální ladění GDScriptu." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Minimální nasazení se síťovým FS" +msgstr "Tenké nasazení pomocí síťového souborového sistému" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2845,72 +2860,67 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"Když je tato možnost povolena, export nebo nasazení bude vytvářet minimální " -"spustitelný soubor.\n" -"Souborový systém bude poskytnut editorem projektu přes sít.\n" -"Pro nasazení na Android bude použít USB kabel pro dosažení vyššího výkonu. " -"Tato možnost urychluje testování objemných her." +"Když je tato možnost vybrána, Android Quick Deployment exportuje pouze " +"spustitelný soubor bez dat projektu.\n" +"Souborový systém bude z projektu sdílen editorem po síti.\n" +"V systému Android bude nasazení používat kabel USB pro rychlejší výkon. Tato " +"možnost výrazně zrychluje testování velkých her." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "Viditelné kolizní tvary" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Kolizní tvary a raycast uzly (pro 2D a 3D) budou viditelné během hry, po " -"aktivaci této volby." +"když je povolena tato volba, tak lze během hry vidět kolizní tvary a raycast " +"uzly (pro 2D a 3D)." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "Viditelná navigace" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"Navigační meshe a polygony budou viditelné během hry, po aktivaci této volby." +"když je povolena tato volba, tak lze během hry vidět navigační meshe a " +"polygony." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" msgstr "Synchronizovat změny scény" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Když je zapnuta tato možnost, všechny změny provedené ve scéně v editoru " -"budou replikovány v běžící hře.\n" -"Při použití se vzdáleným spuštěním je toto více efektivní při použití " -"síťového souborového systému." +"Je-li tato možnost vybrána, budou se všechny změny fáze v editoru opakovat, " +"zatímco hra běží.\n" +"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je " +"povolen síťový souborový systém." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "Synchornizace změn skriptu" +msgstr "Synchornizovat změny skriptu" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any script that is saved will be reloaded in " "the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Když je zapnuta tato volba, jakýkoliv skript, který je uložen bude znovu " -"nahrán do spuštěné hry.\n" -"Při použití se vzdáleným spuštěním je toto více efektivní při použití " -"síťového souborového systému." +"Pokud je tato možnost povolena, jakýkoli uložený skript se znovu načte, když " +"je hra spuštěna.\n" +"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je " +"povolen síťový souborový systém." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" @@ -2929,18 +2939,16 @@ msgid "Take Screenshot" msgstr "Vytvořit snímek obrazovky" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Otevřít složku s daty a nastavením editoru" +msgstr "Screenshoty jsou uložené v Editor Data/Settings Folder." #: editor/editor_node.cpp msgid "Toggle Fullscreen" msgstr "Přepnout celou obrazovku" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle System Console" -msgstr "Přepnout režim rozdělení" +msgstr "Zapnout/Vypnout systémovou konzoli" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" @@ -2955,13 +2963,12 @@ msgid "Open Editor Settings Folder" msgstr "Otevřít složku s nastavením editoru" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Spravovat exportní šablony" +msgstr "Spravovat funkce editoru..." #: editor/editor_node.cpp msgid "Manage Export Templates..." -msgstr "Spravovat exportní šablony..." +msgstr "Spravovat šablony exportu..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2990,7 +2997,7 @@ msgstr "Nahlásit chybu" #: editor/editor_node.cpp msgid "Send Docs Feedback" -msgstr "" +msgstr "Odeslat zpětnou vazbu dokumentace" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -3010,7 +3017,7 @@ msgstr "Hrát" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "" +msgstr "Pozastavit běh scény pro ladění." #: editor/editor_node.cpp msgid "Pause Scene" @@ -3071,7 +3078,7 @@ msgstr "Inspektor" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "" +msgstr "Rozšířit spodní panel" #: editor/editor_node.cpp msgid "Output" @@ -3084,6 +3091,7 @@ msgstr "Neukládat" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." msgstr "" +"Chybí kompilační šablona pro Android, prosím nainstalujte vhodnou šablonu." #: editor/editor_node.cpp msgid "Manage Templates" @@ -3099,6 +3107,13 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" +"Tato možnost připraví váš projekt na vaše vlastní sestavení pro Android " +"instalací zdrojové šablony v \"res://android/build\".\n" +"Poté můžete při exportu přidat úpravy a vytvořit si vlastní soubor APK " +"(přidání modulů, změna souboru AndroidManifest.xml, atd.)\n" +"Upozorňujeme, že pokud chcete vytvořit vlastní sestavení namísto použití " +"připraveného souboru APK, měla by být v exportním profilu Androidu povolena " +"možnost \"Použít vlastní sestavení\"." #: editor/editor_node.cpp msgid "" @@ -3107,6 +3122,9 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" +"Kompilační šablona pro Android je pro tento projekt již nainstalovaná a " +"nebude přepsána.\n" +"Odstraňte složku \"res://android/build\" před dalším pokusem o tuto operaci." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3174,7 +3192,7 @@ msgstr "Nebyly nalezeny žádné dílčí zdroje." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Vytváření náhledu modelu" #: editor/editor_plugin.cpp msgid "Thumbnail..." @@ -3239,7 +3257,7 @@ msgstr "Inkluzivní" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Tento objekt" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3259,7 +3277,7 @@ msgstr "Editovat text:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" -msgstr "" +msgstr "Zapnout" #: editor/editor_properties.cpp msgid "Layer" @@ -3304,6 +3322,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Na tomto zdroji nelze vytvořit ViewportTexture, protože není pro scénu " +"lokální.\n" +"Upravte jeho vlastnost \"lokální pro scénu\" (a všechny zdroje, které jej " +"obsahují, až po uzel)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3314,9 +3336,8 @@ msgid "New Script" msgstr "Nový skript" #: editor/editor_properties.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Otevřít skript" +msgstr "Rozšířit skript" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" @@ -3374,7 +3395,6 @@ msgid "Add Key/Value Pair" msgstr "Vložte pár klíč/hodnota" #: editor/editor_run_native.cpp -#, fuzzy msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the Export menu or define an existing preset " @@ -3382,7 +3402,8 @@ msgid "" msgstr "" "Nebylo nalezeno žádné spustilené přednastavení pro exportování na tuto " "platformu.\n" -"Přidejte prosím spustitelné přednastavení v exportovacím menu." +"Přidejte prosím spustitelné přednastavení v exportovacím menu nebo definujte " +"existující přednastavení jako spustitelné." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3409,16 +3430,14 @@ msgid "Did you forget the '_run' method?" msgstr "Nezapoměl jste metodu '_run'?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." msgstr "" -"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického " -"podpisu." +"Podržte Ctrl pro zaokrouhlení na celá čísla. Podržte Shift pro přesnější " +"úpravy." #: editor/editor_sub_scene.cpp -#, fuzzy msgid "Select Node(s) to Import" -msgstr "Vyberte uzly (Node) pro import" +msgstr "Vyberte uzly pro import" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" @@ -3451,7 +3470,7 @@ msgstr "Stáhnout" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Oficiální šablony exportu nejsou k dispozici pro vývojová sestavení." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3499,7 +3518,7 @@ msgstr "Chyba při získávání seznamu zrcadel." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "" +msgstr "Chyba parsování JSON mirror list. Prosím nahlaste tuto chybu!" #: editor/export_template_manager.cpp msgid "" @@ -3604,9 +3623,8 @@ msgid "SSL Handshake Error" msgstr "Selhání SSL handshaku" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "Dekomprese uživatelského obsahu" +msgstr "Dekomprese zdrojů sestavení pro Android" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3630,7 +3648,7 @@ msgstr "Vybrat soubor šablony" #: editor/export_template_manager.cpp msgid "Godot Export Templates" -msgstr "Exportní šablony Godotu" +msgstr "Šablony exportu Godotu" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3691,6 +3709,22 @@ msgid "Name contains invalid characters." msgstr "Jméno obsahuje neplatné znaky." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Následující soubory nebo složky jsou v konfliktu s položkami v cílovém " +"umístění '%s':\n" +"\n" +"%s\n" +"\n" +"Přejete si je přepsat?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Přejmenovávání souboru:" @@ -3708,7 +3742,7 @@ msgstr "Duplikace složky:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" -msgstr "Nová odvozená scéna" +msgstr "Nová zděděná scéna" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" @@ -3720,7 +3754,7 @@ msgstr "Otevřít scény" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "Instance:" +msgstr "Instance" #: editor/filesystem_dock.cpp msgid "Add to Favorites" @@ -3738,14 +3772,6 @@ msgstr "Upravit závislosti..." msgid "View Owners..." msgstr "Zobrazit vlastníky..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Přejmenovat..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikovat..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Přesunout do..." @@ -3773,11 +3799,16 @@ msgid "Collapse All" msgstr "Sbalit vše" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Přejmenovat" +msgid "Duplicate..." +msgstr "Duplikovat..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Přesunout do koše" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Přejmenovat..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3812,8 +3843,11 @@ msgid "Move" msgstr "Přesunout" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Soubor nebo složka se stejným názvem již na tomto místě existuje." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Přejmenovat" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3848,6 +3882,8 @@ msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" +"Zahrnout soubory s následujícími příponami. Přidejte nebo odeberte je v " +"Nastavení projektu." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3879,8 +3915,19 @@ msgid "Searching..." msgstr "Hledám..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Vyhledávání dokončeno" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d shody." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d shody." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d shody." #: editor/groups_editor.cpp msgid "Add to Group" @@ -3911,7 +3958,6 @@ msgid "Groups" msgstr "Skupiny" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Uzly nejsou ve skupině" @@ -3926,7 +3972,7 @@ msgstr "Uzly jsou ve skupině" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Prázdné skupiny budou automaticky odstraněny." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3938,43 +3984,43 @@ msgstr "Spravovat skupiny" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Importovat jako jednu scénu" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Importovat s oddělenými animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importovat s oddělenými materiály" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importujte s oddělenými objekty" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importujte s oddělenými objekty a materiály" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Importujte s oddělenými objekty a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Importujte s oddělenými materiály a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Importujte s oddělenými objekty, materiály a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Importovat jako více scén" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importovat jako více scén a materiálů" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3987,18 +4033,17 @@ msgstr "Importuji scénu..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Generování světelné mapy" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Generování pro síť: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "" +msgstr "Spouštím skript..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Couldn't load post-import script:" msgstr "Nepodařilo se načíst post-import script:" @@ -4012,7 +4057,7 @@ msgstr "Chyba při spuštění post-import scriptu:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" -msgstr "" +msgstr "Vrátili jste objekt, který dědí z Node metodou `post_import()`?" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -4035,9 +4080,8 @@ msgid "Import As:" msgstr "Importovat jako:" #: editor/import_dock.cpp -#, fuzzy msgid "Preset" -msgstr "Předvolby" +msgstr "Profil" #: editor/import_dock.cpp msgid "Reimport" @@ -4045,17 +4089,18 @@ msgstr "Znovu importovat" #: editor/import_dock.cpp msgid "Save Scenes, Re-Import, and Restart" -msgstr "" +msgstr "Uložit scény, znovu importovat a restartovat" #: editor/import_dock.cpp -#, fuzzy msgid "Changing the type of an imported file requires editor restart." -msgstr "Změna grafického ovladače vyžaduje restart editoru." +msgstr "Změna typu importovaného souboru vyžaduje restart editoru." #: editor/import_dock.cpp msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" +"VAROVÁNÍ: Existují zdroje, který tento zdroj používají. Může se stát, že se " +"přestanou správně načítat." #: editor/inspector_dock.cpp msgid "Failed to load resource." @@ -4079,9 +4124,8 @@ msgid "Copy Params" msgstr "Kopírovat parametry" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Schránka zdroje je prázdná!" +msgstr "Editovat schránku zdrojů" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4089,7 +4133,7 @@ msgstr "Kopírovat zdroj" #: editor/inspector_dock.cpp msgid "Make Built-In" -msgstr "" +msgstr "Vytvořit vestavěný" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4137,7 +4181,7 @@ msgstr "Změny mohou být ztraceny!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "MultiNode sada" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." @@ -4230,17 +4274,16 @@ msgstr "Načíst..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Move Node Point" -msgstr "Přesunout body" +msgstr "Přesunout body uzlů" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "" +msgstr "Upravit hranice BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "" +msgstr "Upravit popisky BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4250,24 +4293,21 @@ msgstr "Tento typ uzlu nelze použít. Jsou povoleny pouze kořenové uzly." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Node Point" -msgstr "Přidat uzel" +msgstr "Přidat bod uzlu" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Animation Point" -msgstr "Přidat animaci" +msgstr "Přidat bod animace" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Remove BlendSpace1D Point" -msgstr "Odstranit bod cesty" +msgstr "Odstranit bod BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "" +msgstr "Přesunout bod uzlu BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4277,11 +4317,14 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree je neaktviní.\n" +"Aktivujte ho, aby začlo přehrávání. Pokud aktivace nefunguje, tak " +"zkontrolujte varování uzlu." #: 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 "Nastavit blending pozici v prostoru" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4321,34 +4364,31 @@ msgstr "Přidat trojúhelník" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" -msgstr "" +msgstr "Upravit hranice BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Labels" -msgstr "" +msgstr "Upravit popisky BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Point" -msgstr "Odstranit bod cesty" +msgstr "Odstranit bod BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Triangle" -msgstr "Odstranit proměnnou" +msgstr "Odstranit BlendSpace2D trojúhelník" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D nepatří k AnimationTree uzlu." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Neexistují žádné trojúhelníky, takže nemůže nastat žádný blending." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Toggle Auto Triangles" -msgstr "Zobrazit oblíbené" +msgstr "Zapnout/Vypnout automatické trojúhelníky" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." @@ -4360,7 +4400,7 @@ msgstr "Odstranit body a trojúhelníky." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Vygenerovat blend trojúhelníky automaticky (ne manuálně)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4378,7 +4418,7 @@ msgstr "Editovat filtry" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Výstupní uzly nemohou být přidané do blend stromu." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" @@ -4414,7 +4454,7 @@ msgstr "Smazat uzel" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Odstranit uzel/uzly" +msgstr "Odstranit uzly" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" @@ -4426,11 +4466,11 @@ msgstr "Změnit filtr" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "Není nastavený přehrávač animací, takže nelze získat jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" +msgstr "Cesta k přehrávači je nevalidní, takže nelze získat jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4438,6 +4478,8 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Přehrávač animací nemá validní cestu ke kořenovému uzlu, takže nelze získat " +"jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Anim Clips" @@ -4511,7 +4553,7 @@ msgstr "Přejmenovat animaci" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "" +msgstr "Upraveno prolnutí na další" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" @@ -4570,9 +4612,8 @@ msgid "Animation position (in seconds)." msgstr "Pozice animace (v sekundách)." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Scale animation playback globally for the node." -msgstr "Škálovat playback animace globálně pro uzel" +msgstr "Škálovat playback animace globálně pro uzel." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4595,18 +4636,16 @@ msgid "Display list of animations in player." msgstr "Zobrazit seznam animací v přehrávači." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Autoplay on Load" -msgstr "Autoplay při načtení" +msgstr "Auto-přehrání při načtení" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "" +msgstr "Povolit Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Onion Skinning Options" -msgstr "Možnosti přichytávání" +msgstr "Onion Skinning možnosti" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -4642,16 +4681,15 @@ msgstr "Pouze rozdíly" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Vynutit bílou modulaci" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Zahrnout Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Vložit animaci" +msgstr "Připnout AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -4670,7 +4708,7 @@ msgstr "Chyba!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Blend časy:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -4678,7 +4716,7 @@ msgstr "Další (Automatická řada):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Přechodové časy prolnutí animací" #: editor/plugins/animation_state_machine_editor.cpp msgid "Move Node" @@ -4703,7 +4741,7 @@ msgstr "Konec" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Okamžité" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" @@ -4711,7 +4749,7 @@ msgstr "Synchronizovat" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Na konci" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" @@ -4719,12 +4757,11 @@ msgstr "Cestovat" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Pro pod-přechod jsou potřeba začáteční a koncové uzly." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Není v cestě ke zdroji." +msgstr "Na cestě nebyl nalezen žádný zdrojový playback: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4736,7 +4773,7 @@ msgstr "Přechod odebrán" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "" +msgstr "Nastavit počáteční uzel (Autoplay)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4744,6 +4781,9 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Vyberte a přesuňte uzly.\n" +"PTM pro přidání nových uzlů.\n" +"Shift + LTM pro vytváření spojení." #: editor/plugins/animation_state_machine_editor.cpp msgid "Create new nodes." @@ -4760,10 +4800,12 @@ msgstr "Odstranit vybraný uzel nebo přechod." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Přepnout automatické přehrávání této animace při spuštění, restartování nebo " +"přetočení zpět na nulu." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Nastavit koncovou animaci. Užitečné pro pod-přechody." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4788,25 +4830,24 @@ msgid "Scale:" msgstr "Zvětšení:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Fade In (s):" -msgstr "Zmizení do (s):" +msgstr "Objevení za (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Zmizení za (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Prolnutí" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "Mix" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Auto-restart:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" @@ -4835,7 +4876,7 @@ msgstr "Prolínání 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "X-Fade čas (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" @@ -4853,7 +4894,7 @@ msgstr "Čistý Auto-Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Nastavit auto-krok" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" @@ -4909,7 +4950,7 @@ msgstr "Importovat animace..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Editovat filtry uzlů" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4953,14 +4994,13 @@ msgstr "Odpověď nelze uložit na:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Chyba zápisu." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Požadavek se nezdařil, příliš mnoho přesměrování" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Zacyklené přesměrování." @@ -4969,9 +5009,8 @@ msgid "Request failed, timeout" msgstr "Požadavek selhal, vypršel časový limit" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Čas" +msgstr "Čas vypršel." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -5031,11 +5070,11 @@ msgstr "Stahování tohoto assetu právě probíhá!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "Naposledy upravené" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Naposledy neupravené" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" @@ -5087,7 +5126,7 @@ msgstr "Pluginy..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "Řadit:" +msgstr "Řadit podle:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -5124,16 +5163,23 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Nelze určit cestu uložení pro světelnou mapu obrázku.\n" +"Uložte scénu (obrázky se uloží do stejného adresáře) nebo vyberte cestu pro " +"uložení z vlastnosti BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" +"Žádné sítě k zapečení. Ujistěte se, že obsahují kanál UV2 a že je nastaven " +"příznak \"Zapéct světlo\"." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Při vytváření ligtmap došlo k chybě, ujistěte se, že cesta není pouze pro " +"čtení." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" @@ -5146,7 +5192,7 @@ msgstr "Náhled" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "Nastavení přichycování" +msgstr "Nastavení přichycení" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" @@ -5158,7 +5204,7 @@ msgstr "Krok mřížky:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "Hlavní řádek každý:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "steps" @@ -5173,9 +5219,8 @@ msgid "Rotation Step:" msgstr "Krok rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "Zvětšení:" +msgstr "Krok škálování:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -5207,66 +5252,63 @@ msgstr "Vytvořit vodorovná a svislá vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Nastavit CanvasItem \"%s\" offset pivota na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotovat CanvasItem" +msgstr "Rotovat %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotovat CanvasItem" +msgstr "Rotovat CanvasItem \"%s\" na %d stupňů" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit CanvasItem \"%s\" kotva" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Škálovat Node2D \"%s\" na (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Škálovat Control \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Škálovat CanvasItem" +msgstr "Škálovat %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Škálovat CanvasItem" +msgstr "Škálovat CanvasItem \"%s\" na (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." msgstr "" +"Hodnoty ukotvení a okrajů potomků uzlů kontejnerů jsou přepsány jejich " +"rodičem." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." -msgstr "" +msgstr "Přednastavení pro hodnoty ukotvení a okrajů Control ulzu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" +"Když je aktivní, pohybující se Control uzly mění svoje ukotvení, namísto " +"jejich okrajů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" @@ -5302,43 +5344,39 @@ msgstr "Uprostřed dole" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center" -msgstr "" +msgstr "Uprostřed" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" -msgstr "Pohled zleva" +msgstr "Vlevo po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" -msgstr "Pohled shora" +msgstr "Nahoře po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" -msgstr "Pohled zprava" +msgstr "Vpravo po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" -msgstr "Pohled zdola" +msgstr "Dole po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "" +msgstr "Uprostřed po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "" +msgstr "Uprostřed po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" -msgstr "" +msgstr "Celý obdélník" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Keep Ratio" -msgstr "Ponechat poměr" +msgstr "Zachovat poměr" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5358,6 +5396,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" +"Přepsat herní kameru\n" +"Herní kamera se nahradí kamerou z pohledu editoru." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5365,6 +5405,8 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" +"Přepsat herní kameru\n" +"Není spuštěna žádná instance hry." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5378,28 +5420,25 @@ msgstr "Odemčít vybraný" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Group Selected" -msgstr "Kopírovat výběr" +msgstr "Seskupit vybrané" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Ungroup Selected" -msgstr "Kopírovat výběr" +msgstr "Odskupit vybrané" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Vložit pózu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Guides" msgstr "Vymazat vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Custom Bone(s) from Node(s)" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit vlastní kosti z uzlů" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" @@ -5407,17 +5446,19 @@ msgstr "Vymazat kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "Vytvořit IK řetěz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "Zrušit IK řetěz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." msgstr "" +"Varování: Pozici a velikost potomků kontejneru nastavuje pouze jejich " +"nadřazený prvek." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -5441,11 +5482,12 @@ msgstr "Alt+Táhnutí: Přemístit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Stisknutím klávesy \"V\" se upraví pivot, stisknutím kláves \"Shift+V\" se " +"posune pivot (při pohybu)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "Alt+Pravé tlačíko myši:" +msgstr "Alt+PTM: Výběr hloubkového seznamu" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5468,63 +5510,60 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Zobrazit seznam objektů v bodě kliknutí\n" +"(stejné jako Alt+PTM v režimu výběru)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Kliknutím změníte střed otáčení objektu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Režim posouvání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Ruler Mode" msgstr "Režim pravítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle smart snapping." -msgstr "Přepnout přichycování." +msgstr "Přepnout chytré přichytávání." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Smart Snap" -msgstr "Použít chytré přichycování" +msgstr "Použít chytré přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle grid snapping." -msgstr "Přepnout přichycování." +msgstr "Přepnout mřížkové přichytávání." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Grid Snap" -msgstr "Použít přichycování" +msgstr "Použít mřížkové přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" -msgstr "Možnosti přichytávání" +msgstr "Možnosti přichycení" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "Použít rotační přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Scale Snap" -msgstr "Použít přichycování" +msgstr "Použít škálovací přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "Přichytávat relativně" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "Přichytávat na pixely" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Smart Snapping" -msgstr "Chytré přichytávání" +msgstr "Chytré přichcování" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5532,39 +5571,33 @@ msgid "Configure Snap..." msgstr "Nastavení přichytávání..." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Parent" msgstr "Přichytit k rodičovi" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Anchor" -msgstr "Přichytit ke středu uzlu" +msgstr "Přichytit k ukotvení uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Sides" msgstr "Přichytit ke stranám uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Center" msgstr "Přichytit ke středu uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Other Nodes" msgstr "Přichytit k jiným uzlům" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Guides" msgstr "Přichytit k vodítkům" #: 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 "Uzamčít vybraný objekt na místě (nemůže být přesunut)." +msgstr "Uzamknout vybraný objekt na místě (nemůže být přesunut)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5574,12 +5607,12 @@ msgstr "Uvolnit vybraný objekt (může být přesunut)." #: 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 "Zajistí, aby nebylo možné vybrat potomky objektu." #: 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 "Obnoví, aby bylo možné vybrat potomky objektu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -5591,10 +5624,9 @@ msgstr "Zobrazit kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Vytvořit kosti z uzlů" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" msgstr "Vymazat kosti" @@ -5604,9 +5636,8 @@ msgid "View" msgstr "Zobrazení" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Always Show Grid" -msgstr "Zobrazit mřížku" +msgstr "Vždy zobrazit mřížku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -5630,7 +5661,7 @@ msgstr "Zobrazit Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Zobrazit ikony skupiny a zámku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -5642,24 +5673,23 @@ msgstr "Výběr snímku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" -msgstr "" +msgstr "Náhled měřítka plátna" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." -msgstr "" +msgstr "Offset maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation mask for inserting keys." -msgstr "" +msgstr "Rotační maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale mask for inserting keys." -msgstr "" +msgstr "Škálovací maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys (based on mask)." -msgstr "Vložit klíč (existující stopy)" +msgstr "Vložit klíč (založený na masce)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5668,16 +5698,19 @@ 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 "" +"Automaticky vkládat klíče, když je objekt přesunut, otočen nebo zmenšen (na " +"základě masky).\n" +"Klíče se přidávají pouze ke stávajícím cestám, žádné nové cesty se " +"nevytvoří.\n" +"Poprvé musí být klíče vloženy ručně." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Auto Insert Key" -msgstr "Animace: vložit klíč" +msgstr "Automaticky vložit klíč" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Animační klíč vložen." +msgstr "Animační klíč a možnosti pozice" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5693,16 +5726,15 @@ msgstr "Vymazat pózu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Vynásobit krok mřížky dvěma" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Vydělit krok mřížky dvěma" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Pohled zezadu" +msgstr "Přesunout pohled" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -5714,7 +5746,7 @@ msgstr "Přidávám %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Bez kořenového uzlu nelze vytvořit více uzlů." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5727,7 +5759,6 @@ msgid "Error instancing scene from %s" msgstr "Chyba instancování scény z %s" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Default Type" msgstr "Změnit výchozí typ" @@ -5736,6 +5767,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" +"Přetažení + Shift: Přidat uzel jako souseda\n" +"Přetažení + Alt: Změnit typu uzlu" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" @@ -5751,7 +5784,7 @@ msgstr "Upravit polygon (Odstranit bod)" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Nastavit úchyt" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5762,9 +5795,8 @@ msgstr "Načíst emisní masku" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Restart" -msgstr "Restartovat nyní" +msgstr "Restartovat" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5790,28 +5822,27 @@ msgstr "Emisní maska" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Solid Pixels" -msgstr "" +msgstr "Pevné pixely" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Border Pixels" -msgstr "" +msgstr "Hraniční pixely" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Složky a soubory:" +msgstr "Pixely ohraničení" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "Snímání z pixelu" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "Emisní barvy" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" @@ -5820,46 +5851,44 @@ msgstr "CPUParticles (částice)" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Vytvořit emisní body ze sítě" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Vytvořit emisní body z uzlu" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 0" -msgstr "Flat0" +msgstr "Plocha 0" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 1" -msgstr "Flat1" +msgstr "Plocha 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" -msgstr "" +msgstr "Pozvolný vchod" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease Out" -msgstr "" +msgstr "Pozvolný odchod" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Plynulý krok" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "" +msgstr "Upravit bod křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "" +msgstr "Upravit tečnu křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" -msgstr "" +msgstr "Načíst předdefinovanou křivku" #: editor/plugins/curve_editor_plugin.cpp msgid "Add Point" @@ -5870,19 +5899,16 @@ msgid "Remove Point" msgstr "Odstranit bod" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left Linear" -msgstr "Lineární" +msgstr "Levé lineární" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right Linear" -msgstr "Pohled zprava" +msgstr "Pravé lineární" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Preset" -msgstr "Načíst preset" +msgstr "Načíst přednastavení" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" @@ -5890,24 +5916,23 @@ msgstr "Odstranit bod křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Přepne lineární tečnu křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Podržením Shift změníte tečny jednotlivě" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right click to add point" -msgstr "Pravý klik: Smazat bod" +msgstr "Pravý klik pro přidání bodu" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Zapéct GI probe" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" -msgstr "" +msgstr "Gradient upraven" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -5930,49 +5955,44 @@ msgid "Mesh is empty!" msgstr "Mesh je prázdný!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Couldn't create a Trimesh collision shape." -msgstr "Nelze vytvořit složku." +msgstr "Vytvoření Trimesh kolizního tvaru se nezdařilo." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Vytvořit statické Trimesh Body" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" msgstr "Toto v kořenu scény nefunguje!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Trimesh Static Shape" -msgstr "Vytvořit Trimesh Shape" +msgstr "Vytvořit statický Trimesh tvar" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." -msgstr "" +msgstr "Pro kořen scény nelze vytvořit jediný konvexní kolizní tvar." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a single convex collision shape." -msgstr "" +msgstr "Vytvoření jediného konvexního kolizního tvaru se nezdařilo." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Shape" -msgstr "Vytvořit Convex Shape" +msgstr "Vytvořit jediný konvexní tvar" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." -msgstr "" +msgstr "Pro kořen scény nelze vytvořit více konvexních tvarů kolize." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Couldn't create any collision shapes." -msgstr "Nelze vytvořit složku." +msgstr "Nelze vytvořit žádný z konvexních tvarů kolize." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Shapes" -msgstr "Vytvořit Convex Shape" +msgstr "Vytvořit více konvexních tvarů kolize" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5984,7 +6004,7 @@ msgstr "Obsažená mesh není typu ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "Rozbalení UV se nezdařilo, možná je nesprávně síť?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." @@ -6004,7 +6024,7 @@ msgstr "Mesh némá povrch z jakého vytvořit obrysy!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Typ primitivní sítě není PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -6020,7 +6040,7 @@ msgstr "Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Vytvořit statické Trimesh tělo" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6028,42 +6048,49 @@ msgid "" "automatically.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" +"Vytvoří uzel StaticBody a automaticky mu přiřadí kolizní tvar na základě " +"polygonu.\n" +"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Vytvořit sourozence Trimesh kolize" #: 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 "" +"Vytvoří polygonový kolizní tvar.\n" +"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Collision Sibling" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit jediného konvexního kolizního sourozence" #: 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 "" +"Vytvoří jeden konvexní kolizní tvar.\n" +"Toto je nejrychlejší (ale nejméně přesná) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Collision Siblings" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit více konvexních kolizních sourozenců" #: 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 "" +"Vytvoří polygonový kolizní tvar.\n" +"Toto je kompromis výkonu a přesnosti z dvou možností uvedených výše." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." -msgstr "" +msgstr "Vytvořit obrysovou mřížku..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6072,6 +6099,10 @@ msgid "" "This can be used instead of the SpatialMaterial Grow property when using " "that property isn't possible." msgstr "" +"Vytvoří statickou obrysovou síť. Obrysové síťi se automaticky převrátí " +"normály.\n" +"To lze použít namísto vlastnosti Grow ve SpatialMaterial, když vlastnost " +"Grow nelze použít." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -6086,9 +6117,8 @@ msgid "Unwrap UV2 for Lightmap/AO" msgstr "Rozbalit UV2 pro Lightmapu/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Outline Mesh" -msgstr "Vytvořit mesh obrysu" +msgstr "Vytvořit síť obrysu" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" @@ -6096,7 +6126,7 @@ msgstr "Velikost obrysu:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "" +msgstr "Ladění UV kanálu" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" @@ -6111,9 +6141,8 @@ msgstr "" "%s" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Mesh Library" -msgstr "MeshLibrary..." +msgstr "Knihovna síťí" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6155,31 +6184,31 @@ msgstr "Zdroj meshe je neplatný (neobsahuje žádný Mesh zdroj)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Zdroj povrchu není nastaven." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Zdroj povrchu je neplatný (neplatná cesta)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Zdroj povrchu je neplatný (žádná geometrie)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Povrch je neplatný (žádné stěny)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Vyberte zdrojovou síť:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Vyberte cílový povrch:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Zaplnit povrch" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -6207,7 +6236,7 @@ msgstr "Osa Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "" +msgstr "Osa mřížky nahoru:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -6236,17 +6265,16 @@ msgid "Convert to CPUParticles" msgstr "Převést na CPUParticles" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Generování C# projektu..." +msgstr "Generování obdélníku viditelnosti" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Vygenerovat obdélník viditelnosti" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "Bod lze vložit pouze do process materiálu ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6255,60 +6283,59 @@ msgstr "Čas generování (sec):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Stěny geometrie neobsahují žádnou oblast." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Scéna neobsahuje žádný skript." +msgstr "Geometrie neobsahuje žádné stěny." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" nedědí ze Spatial." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain geometry." -msgstr "" +msgstr "\"%s\" neobsahuje geometrii." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain face geometry." -msgstr "" +msgstr "\"%s\" neobsahuje geometrii stěn." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Vytvořit Emitter" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "Emisní body:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "Povrchové body" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Povrchové body+Normály (orientované)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Hlasitost" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "Zdroje emisí: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Je vyžadován materiál pro typ \"ParticlesMaterial\"." #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "" +msgstr "Generování AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "Generovat viditelnostní AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" @@ -6320,11 +6347,11 @@ msgstr "Odstranit bod z křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "" +msgstr "Odstranit odchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "Odstranit příchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6341,11 +6368,11 @@ msgstr "Přesunout bod v křivce" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Odstranit vnitřní kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Přesunout odchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6354,9 +6381,8 @@ msgstr "Vybrat body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Shift+Drag: Select Control Points" -msgstr "Shift+Táhnutí:" +msgstr "Shift+Táhnutí: Vybrat kontrolní body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6374,12 +6400,12 @@ msgstr "Pravý klik: Smazat bod" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "" +msgstr "Vybrat kontrolní body křivky (Shift+Drag)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "" +msgstr "Přidat bod (na prázdném místě)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6400,12 +6426,12 @@ msgstr "Možnosti" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Zrcadlit úhly úchytů" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Zrcadlit délku úchytů" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -6417,12 +6443,11 @@ msgstr "Nastavit pozici bodu křivky" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "Nastavit křivku na pozici" +msgstr "Nastavit bod do křivky" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Odstranit signál" +msgstr "Nastavit bod z křivky" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6433,27 +6458,25 @@ msgid "Remove Path Point" msgstr "Odstranit bod cesty" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Odstranit funkci" +msgstr "Odebrat výstupní kontrolní body" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "" +msgstr "Odebrat vstupní kontrolní body" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" msgstr "Rozdělit segment (v křivce)" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move Joint" -msgstr "Přesunout bod" +msgstr "Přesunout kloub" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Vlastnost kostry v Polygon2D neukazuje na Skeleton2D uzel" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6464,6 +6487,8 @@ msgid "" "No texture in this polygon.\n" "Set a texture to be able to edit UV." msgstr "" +"Tento polygon nemá textury.\n" +"Nastav texturu aby se dalo editovat UV." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -6473,7 +6498,7 @@ msgstr "Vytvořit UV mapu" msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "" +msgstr "Polygon 2D má vnitřní vrcholy, a proto nelze editovat ve viewport." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6509,16 +6534,15 @@ msgstr "Transformovat polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" -msgstr "" +msgstr "Změnit hmotnost kostí" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Open Polygon 2D UV editor." -msgstr "Otevřít 2D editor" +msgstr "Otevřít editor 2D UV polygonu." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "Polygon 2D UV Editor" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6541,18 +6565,16 @@ msgid "Move Points" msgstr "Přesunout body" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Táhnutí: Otočit" +msgstr "Příkaz: Otočit" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Přesunout vše" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Změnit měřítko" +msgstr "Shift+Příkaz: Škálovat" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6588,25 +6610,23 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." -msgstr "" +msgstr "Změnit hmotnost se zadanou intenzitou." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Unpaint weights with specified intensity." -msgstr "" +msgstr "Odebrat hmotnost se zadanou intnzitou." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" msgstr "Poloměr:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Vytvořit polygon a UV" +msgstr "Kopírovat polygon do UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Přesunout polygon" +msgstr "Kopírovat UV do polygonu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6653,9 +6673,8 @@ msgid "Grid Step Y:" msgstr "Krok mřížky Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Změnit měřítko mnohoúhelníku" +msgstr "Synchronizovat kosti do polygonu" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -6685,7 +6704,7 @@ msgstr "Vložit zdroj" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "Instance" +msgstr "Instance:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp @@ -6765,20 +6784,22 @@ msgstr "Uložit soubor jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "Neexistuje žádný skript ke spuštění." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "Načtení skriptu se nezdařilo, zkontrolujte chyby v konzoli." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "Skript není v režimu nástroje, nelze jej spustit." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"Chcete-li spustit tento skript, musí zdědit EditorScript a musí být nastaven " +"do režimu editoru." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6983,9 +7004,8 @@ msgid "Clear Recent Scripts" msgstr "Vymazat nedávné skripty" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Connections to method:" -msgstr "Připojit k uzlu:" +msgstr "Připojení k metodě:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -6993,18 +7013,16 @@ msgstr "Zdroj" #: editor/plugins/script_text_editor.cpp msgid "Target" -msgstr "" +msgstr "Cíl" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "Odpojit '%s' od '%s'" +msgstr "Chybí metoda '%s' napojená na signál '%s' z uzlu '%s' do uzlu '%s'." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "[Ignore]" -msgstr "(ignorovat)" +msgstr "[Ignorovat]" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -7016,16 +7034,16 @@ msgstr "Přejít na funkci" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Sem lze přesunout pouze zdroje ze souborového systému." #: 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 "Nelze zrušit uzly, protože skript \"%s\" se v této scéně nepoužívá." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "" +msgstr "Vyhledat symbol" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -7054,17 +7072,16 @@ msgstr "Zvýrazňovač syntaxe" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Bookmarks" -msgstr "" +msgstr "Záložky" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Breakpoints" -msgstr "Vytvořit body." +msgstr "Breakpointy" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "" +msgstr "Přejít na" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -7106,16 +7123,15 @@ msgstr "Rozložit všechny řádky" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "" +msgstr "Duplikovat dolů" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "" +msgstr "Kompletní symbol" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Změnit měřítko výběru" +msgstr "Vyhodnoť vybraný výraz" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -7142,24 +7158,20 @@ msgid "Contextual Help" msgstr "Kontextová nápověda" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Toggle Bookmark" -msgstr "Přepnout volný pohled" +msgstr "Vypnout/Zapnout záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Bookmark" -msgstr "Přejít na další breakpoint" +msgstr "Přejít na další záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Bookmark" -msgstr "Přejít na předchozí breakpoint" +msgstr "Přejít na předchozí záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Remove All Bookmarks" -msgstr "Odstranit všechny položky" +msgstr "Odstranit všechny zálóžky" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." @@ -7200,16 +7212,15 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Kostra nemá žádné kosti, vytvoř nějaké potomky Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Create Rest Pose from Bones" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit klidovou pózu z kostí" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" -msgstr "" +msgstr "Nastavit kosti podle klidové pózy" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" @@ -7217,11 +7228,11 @@ msgstr "Skeleton2D (Kostra 2D)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Vytvořit klidovou pózu (z kostí)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Umístit kosti do klidové pózy" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7265,7 +7276,7 @@ msgstr "Změnit osu Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Zobrazit transformaci roviny." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7281,7 +7292,7 @@ msgstr "Rotuji %s stupňů." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "" +msgstr "Klíčování je deaktivováno (není vložen žádný klíč)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." @@ -7289,11 +7300,11 @@ msgstr "Animační klíč vložen." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" -msgstr "" +msgstr "Stoupání" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Náklon" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -7364,48 +7375,44 @@ msgid "Rear" msgstr "Zadní" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "Zarovnat s výhledem" +msgstr "Zarovnat se zobrazením" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" -msgstr "Zarovnat výběr s pohledem" +msgstr "Zarovnat rotaci se zobrazením" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Neexistuje žádný rodič, u kterého by se vytvořila instance potomka." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Tato operace vyžaduje jeden vybraný uzel." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Auto Orthogonal Enabled" -msgstr "Ortogonální" +msgstr "Auto-ortogonalizace zapnutá" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Zobrazit informace" +msgstr "Uzamknout rotaci pohledu" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Normální pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Drátový pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Rentgen pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "Bezestínový pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -7413,7 +7420,7 @@ msgstr "Zobrazit prostředí" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" -msgstr "" +msgstr "Zobrazit Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -7429,20 +7436,19 @@ msgstr "Poloviční rozlišení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Posluchač zvuku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Povolit filtrování" +msgstr "Povolit Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" -msgstr "" +msgstr "Filmový náhled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "" +msgstr "Není k dispozici při použití vykreslovacího modulu GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7473,20 +7479,20 @@ msgid "Freelook Speed Modifier" msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Slow Modifier" -msgstr "Rychlost volného pohledu" +msgstr "Zpomalení volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "Zobrazit informace" +msgstr "Rotace pohledu uzamknuta" #: editor/plugins/spatial_editor_plugin.cpp 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 "" +"Poznámka: Zobrazená hodnota FPS pochází z editoru.\n" +"Nelze jej použít jako spolehlivý ukazatel výkonu ve hře." #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -7500,15 +7506,19 @@ msgid "" "Closed eye: Gizmo is hidden.\n" "Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")." msgstr "" +"Kliknutím přepnete mezi stavy viditelnosti.\n" +"\n" +"Otevřené oko: Gizmo je viditelný.\n" +"Zavřené oko: Gizmo je skrytý.\n" +"Polootevřené oko: Gizmo je viditelné přes neprůhledné (rentgenové) povrchy." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes To Floor" -msgstr "Přichytit k mřížce" +msgstr "Přichytit uzly k podlaze" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Nelze najít pevnou podlahu, na kterou by se přichytil výběr." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7522,11 +7532,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "" +msgstr "Použít místní prostor" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "Použít přichycování" +msgstr "Použít přichycení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7553,7 +7563,6 @@ msgid "Right View" msgstr "Pohled zprava" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Switch Perspective/Orthogonal View" msgstr "Přepnout perspektivní/ortogonální pohled" @@ -7576,16 +7585,15 @@ msgstr "Přepnout volný pohled" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "" +msgstr "Transformace" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Object to Floor" -msgstr "Přichytit k mřížce" +msgstr "Přichytit objekt k podlaze" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." -msgstr "" +msgstr "Transformační dialog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -7613,7 +7621,7 @@ msgstr "4 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "" +msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -7625,9 +7633,8 @@ msgstr "Zobrazit mřížku" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Nastavení" +msgstr "Nastavení..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7635,18 +7642,17 @@ msgstr "Nastavení přichycení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Přichycení transformace:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "Přichycení rotaze (stupně):" +msgstr "Přichycení rotace (stupně):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "Přichycení zvětšení (%):" +msgstr "Škálovací přichytávání (%):" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Viewport Settings" msgstr "Nastavení viewportu" @@ -7656,11 +7662,11 @@ msgstr "Perspektivní FOV (stupně):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "" +msgstr "Pohled Z-blízko:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "" +msgstr "Pohled Z-daleko:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -7692,46 +7698,39 @@ msgstr "Po" #: editor/plugins/spatial_editor_plugin.cpp msgid "Nameless gizmo" -msgstr "" +msgstr "Gizmo beze jména" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Mesh2D" -msgstr "Vytvořit 2D mesh" +msgstr "Vytvořit Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Náhled" +msgstr "Náhled Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Polygon2D" msgstr "Vytvořit Polygon3D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "" +msgstr "Náhled Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "CollisionPolygon2D Preview" -msgstr "Vytvořit navigační polygon" +msgstr "Náhled CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create LightOccluder2D" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "LightOccluder2D Preview" -msgstr "Vytvořit Occluder Polygon" +msgstr "Náhled LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7739,59 +7738,55 @@ msgstr "Sprite je prázdný!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "Nelze převést sprite pomocí animačních snímků na síť." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Neplatná geometrie, nelze nahradit sítí." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to Mesh2D" -msgstr "Konvertovat na 2D mesh" +msgstr "Konvertovat na Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit polygon." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to Polygon2D" -msgstr "Přesunout polygon" +msgstr "Konvertovat na Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit kolizní polygon." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D Sibling" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit sourozence CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit light occluder." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create LightOccluder2D Sibling" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit sourozence LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" -msgstr "" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Zjednodušení: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Shrink (Pixels): " -msgstr "" +msgstr "Zmenšení (pixely): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "Zvětšení (pixely): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -7802,23 +7797,20 @@ msgid "Settings:" msgstr "Nastavení:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "No Frames Selected" -msgstr "Výběr snímku" +msgstr "Nebyly vybrány žádné snímky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add %d Frame(s)" -msgstr "Přidat snímek" +msgstr "Přidat %d snímků" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" msgstr "Přidat snímek" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Unable to load images" -msgstr "Selhalo nahrání zdroje." +msgstr "Selhalo nahrání obrázků" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -7826,7 +7818,7 @@ msgstr "CHYBA: Nelze načíst zdroj snímku!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "" +msgstr "Schránka zdrojů je prázdná nebo to není textura!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -7857,9 +7849,8 @@ msgid "New Animation" msgstr "Nová animace" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Rychlost (FPS):" +msgstr "Rychlost:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -7870,13 +7861,12 @@ msgid "Animation Frames:" msgstr "Snímky animace:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add a Texture from File" -msgstr "Přidat uzel(y) ze stromu" +msgstr "Přidat texturu ze souboru" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" -msgstr "" +msgstr "Přidat rámečky ze Sprite Sheet" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -7899,40 +7889,36 @@ msgid "Select Frames" msgstr "Vybrat snímky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Horizontal:" -msgstr "Převrátit horizontálně" +msgstr "Horizonálně:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Vertical:" -msgstr "Vrcholy" +msgstr "Vertikálně:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select/Clear All Frames" -msgstr "Vybrat vše" +msgstr "Vybrat všechny/žádné rámečky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Create Frames from Sprite Sheet" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit rámečky ze Sprite Sheet" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "" +msgstr "SpriteFrames" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" -msgstr "" +msgstr "Nastavit oblast textury" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Margin" -msgstr "" +msgstr "Nastavit okraj" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "" +msgstr "Režim přichycení:" #: editor/plugins/texture_region_editor_plugin.cpp #: scene/resources/visual_shader.cpp @@ -7941,15 +7927,15 @@ msgstr "Žádné" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "" +msgstr "Přichycení na pixely" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "" +msgstr "Přichycení na mřížku" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" -msgstr "" +msgstr "Automatický řez" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Offset:" @@ -7961,10 +7947,9 @@ msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Oddělovač:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Oblast textury" @@ -8013,71 +7998,64 @@ msgid "Create From Current Editor Theme" msgstr "Vytvořit ze současného motivu editoru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Toggle Button" -msgstr "Tlačítko myši" +msgstr "Přepínatelné tlačítko" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Button" -msgstr "Prostřední tlačítko" +msgstr "Deaktivované tlačítko" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" msgstr "Položka" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Item" -msgstr "Zakázáno" +msgstr "Deaktivovaná položka" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Check Item" -msgstr "Zkontrolovat položku" +msgstr "Zaškrtávátko" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "" +msgstr "Zaškrtávací položka" #: editor/plugins/theme_editor_plugin.cpp msgid "Radio Item" -msgstr "" +msgstr "Položka volby" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Radio Item" -msgstr "" +msgstr "Přepínatelná položka volby" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "Nazvaný oddělovač" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" -msgstr "" +msgstr "Podmenu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Položka" +msgstr "Podpoložka 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Položka" +msgstr "Podpoložka 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "Má" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "Mnoho" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled LineEdit" -msgstr "Zakázáno" +msgstr "Deaktivovaný LineEdit" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -8092,13 +8070,12 @@ msgid "Tab 3" msgstr "Tab 3" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editable Item" -msgstr "Upravit proměnnou" +msgstr "Upravitelná položka" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" -msgstr "" +msgstr "Podstrom" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" @@ -8139,13 +8116,12 @@ msgstr "Opravit neplatné dlaždice" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Vycentrovat výběr" +msgstr "Výběr řezu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Nakreslit TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -8153,11 +8129,11 @@ msgstr "Nakreslit čáru" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" -msgstr "" +msgstr "Vyplnit barvou" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -8173,37 +8149,39 @@ msgstr "Transponovat" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" -msgstr "" +msgstr "Deaktivovat Autotile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Enable Priority" -msgstr "Editovat filtry" +msgstr "Zapnout priority" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Filter tiles" -msgstr "Filtrovat soubory..." +msgstr "Filtrovat dlaždice" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." -msgstr "" +msgstr "Přidejte TileSet zdroj tomuto TileMap, aby mohl použít jeho dlaždice." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "" +msgstr "Nakreslit dlaždici" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" +"Shift+LTM: Nakreslit čáru\n" +"Shift+Příkaz+LMB: Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" +"Shift+LTM: Nakreslit čáru\n" +"Shift+Ctrl+LTM: Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -8226,14 +8204,12 @@ msgid "Flip Vertically" msgstr "Převrátit vertikálně" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear Transform" -msgstr "Animace: změna transformace" +msgstr "Promazat transformaci" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet." -msgstr "Přidat uzel(y) ze stromu" +msgstr "Přidat textury do TileSet." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." @@ -8249,69 +8225,59 @@ msgstr "Sloučit ze scény" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" -msgstr "" +msgstr "Nová dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Autotile" -msgstr "Nový textový soubor" +msgstr "Nové auto-kachličky" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Atlas" -msgstr "Nový %s" +msgstr "Nový Atlas" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Next Coordinate" -msgstr "Další skript" +msgstr "Další koordináta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the next shape, subtile, or Tile." -msgstr "" +msgstr "Vybrat další tvar, dílčí dlaždici nebo dlaždici." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Previous Coordinate" -msgstr "Předchozí skript" +msgstr "Předchozí koordináta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the previous shape, subtile, or Tile." -msgstr "" +msgstr "Vybrat předchozí tvar, dílčí dlaždici nebo dlaždici." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Režim otáčení" +msgstr "Oblast" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Interpolační režim" +msgstr "Kolize" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion" -msgstr "Editovat polygon" +msgstr "Okluze" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" msgstr "Navigace" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "Režim otáčení" +msgstr "Bitmaska" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Expertní režim:" +msgstr "Priority" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "Index:" +msgstr "Z-Index" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8322,9 +8288,8 @@ msgid "Collision Mode" msgstr "Kolizní režim" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion Mode" -msgstr "Editovat polygon" +msgstr "Režim okluze" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" @@ -8335,9 +8300,8 @@ msgid "Bitmask Mode" msgstr "Režim bitové masky" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "Expertní režim:" +msgstr "Prioritní mód" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Icon Mode" @@ -8345,7 +8309,7 @@ msgstr "Režim ikony" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" -msgstr "" +msgstr "Režim Z-indexu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -8360,30 +8324,43 @@ msgid "Erase bitmask." msgstr "Vymazat bitovou masku." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "Vytvořit nové uzly." +msgstr "Vytvořit nový obdélník." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nový obdélník" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Vytvořit nový polygon." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nový polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Smazat vybraný tvar" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "" +msgstr "Udržovat mnohoúhelník uvnitř obdélníku." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "" +msgstr "Zapnout přichycení a zobrazit mřížku (konfigurovatelnou v inspektoru)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" -msgstr "" +msgstr "Zobrazit názvy dlaždic (podržet Alt)" #: 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 "" +"Přidejte nebo vyberte texturu v levém podokně a upravte k ní připojené " +"dlaždice." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." @@ -8397,7 +8374,7 @@ msgstr "Nevybrali jste texturu k odstranění." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "" +msgstr "Vytvořit ze scény? Aktuální dlaždice budou přepsány." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -8409,38 +8386,43 @@ msgstr "Odstranit texturu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "" +msgstr "%s soubory nebyly přidány, protože již byly v seznamu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Přetažením úchytů upravte obdélník.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete selected Rect." -msgstr "Odstranit vybrané soubory?" +msgstr "Smazat vybraný obdélník." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"Vyberte aktuálně upravovanou pod-dlaždici.\n" +"Kliknutím na jinou dlaždici pro její úpravu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." msgstr "Smazat polygon." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"LTM: Zapnout bit.\n" +"PTM: Vypnout bit.\n" +"Shift+LTM: Nastavit wildcard bit.\n" +"Klikněte na další Dlaždici pro úpravu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8448,24 +8430,29 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" +"Vyberte dílčí dlaždici, kterou chcete použít jako ikonu. Bude také použita " +"pro nesprávně nastavené automatické dlaždice.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" +"Vyberte dílčí dlaždici a změňte její prioritu.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"Vybrat pod-dlaždici pro změnu jejího indexu.\n" +"Klikněte na další dlaždici pro úpravu." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Set Tile Region" -msgstr "Oblast textury" +msgstr "Nastavit oblast textury" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Tile" @@ -8473,26 +8460,23 @@ msgstr "Vytvořit dlaždici" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" -msgstr "" +msgstr "Nastavit ikonu dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Bitmask" msgstr "Upravit bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Collision Polygon" -msgstr "Upravit existující polygon:" +msgstr "Upravit polygon kolize" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Occlusion Polygon" -msgstr "Editovat polygon" +msgstr "Editovat okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Navigation Polygon" -msgstr "Vytvořit navigační polygon" +msgstr "Upravit navigační polygon" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste Tile Bitmask" @@ -8500,64 +8484,55 @@ msgstr "Vložit bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Clear Tile Bitmask" -msgstr "" +msgstr "Odebrat bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Concave" -msgstr "Přesunout polygon" +msgstr "Změnit polygon na konkávní" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Convex" -msgstr "Přesunout polygon" +msgstr "Změnit polygon na konvexní" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" msgstr "Odstranit dlaždici" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Collision Polygon" -msgstr "Odstranit polygon a bod" +msgstr "Odstranit kolizní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Occlusion Polygon" -msgstr "Vytvořit Occluder Polygon" +msgstr "Odebrat okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Navigation Polygon" -msgstr "Vytvořit navigační polygon" +msgstr "Odstranit navigační polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Priority" -msgstr "Editovat filtry" +msgstr "Upravit prioritu dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" -msgstr "" +msgstr "Upravit Z Index dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" -msgstr "Přesunout polygon" +msgstr "Změnit na konvexní" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" -msgstr "Přesunout polygon" +msgstr "Změnit na konkávní" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" msgstr "Vytvořit kolizní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Occlusion Polygon" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." @@ -8568,92 +8543,72 @@ msgid "TileSet" msgstr "TileSet (Sada dlaždic)" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No VCS addons are available." -msgstr "Jméno rodiče uzlu, pokud dostupné" +msgstr "K dispozici nejsou žádná VCS rozšíření." #: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Chyba" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Nebylo poskytnuto žádné jméno" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" -msgstr "" +msgstr "Zádné soubory nebyly přidány k zápisu" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit" -msgstr "Komunita" +msgstr "Commit" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "" +msgstr "VCS rozšíření nejní inicializováno" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" -msgstr "" +msgstr "Verzování (VCS)" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" -msgstr "Velká písmena" +msgstr "Inicializovat" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" -msgstr "" +msgstr "K zápsání" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Vytvořit nové uzly." +msgstr "Detekovat nové změny" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Changes" -msgstr "Změnit" +msgstr "Změny" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Úpravy" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Renamed" -msgstr "Přejmenovat" +msgstr "Přejmenování" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Deleted" -msgstr "Odstranit" +msgstr "Odstraněny" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Typechange" -msgstr "Změnit" +msgstr "Změnit typ" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Stage Selected" -msgstr "Smazat vybraný" +msgstr "Připravit vybrané k zapsání" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Stage All" -msgstr "Uložit vše" +msgstr "Připravit k zapsání vše" #: 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 "Synchornizace změn skriptu" +msgstr "Commitnout změny" #: editor/plugins/version_control_editor_plugin.cpp #: modules/gdnative/gdnative_library_singleton_editor.cpp @@ -8662,15 +8617,15 @@ msgstr "Status" #: editor/plugins/version_control_editor_plugin.cpp msgid "View file diffs before committing them to the latest version" -msgstr "" +msgstr "Podívat se na rozdíly, než se commitnou jako nejnovější verze" #: editor/plugins/version_control_editor_plugin.cpp msgid "No file diff is active" -msgstr "" +msgstr "Žádné aktivní porovnání změn" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" -msgstr "" +msgstr "Zjistit změny v souborech" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" @@ -8694,79 +8649,67 @@ msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "" +msgstr "Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "Přidat vstup" +msgstr "Přidat vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" -msgstr "" +msgstr "Přidat výstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port type" -msgstr "Změnit výchozí typ" +msgstr "Změnit typ vstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port type" -msgstr "Změnit výchozí typ" +msgstr "Změnit typ vystupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port name" -msgstr "Změnit název vstupu" +msgstr "Změnit název vstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port name" -msgstr "Změnit název vstupu" +msgstr "Změnit název výstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove input port" -msgstr "Odstranit bod" +msgstr "Odstranit vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove output port" -msgstr "Odstranit bod" +msgstr "Odstranit výstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Set expression" -msgstr "Změnit výraz" +msgstr "Nastavit výraz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Resize VisualShader node" -msgstr "VisualShader" +msgstr "Škálovat uzel VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "" +msgstr "Nastavit uniformní jméno" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" -msgstr "" +msgstr "Nastavit výchozí vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node to Visual Shader" -msgstr "VisualShader" +msgstr "Přidat uzel do VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "Uzel přesunut" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Duplicate Nodes" -msgstr "Duplikovat uzel/uzly" +msgstr "Duplikovat uzly" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp @@ -8774,18 +8717,16 @@ msgid "Paste Nodes" msgstr "Vložit uzly" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Nodes" -msgstr "Smazat uzel" +msgstr "Smazat uzly" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" -msgstr "" +msgstr "Typ vstupu Visual Shader změněn" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Změna transformace" +msgstr "Název UniformRef byl změněn" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -8800,198 +8741,191 @@ msgid "Light" msgstr "Světlo" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Vytvořit uzel" +msgstr "Zobrazit výsledný kód shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Create Shader Node" -msgstr "Vytvořit uzel" +msgstr "Vytvořit shader uzel" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color function." -msgstr "Přejít na funkci" +msgstr "Funkce obarvení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." -msgstr "" +msgstr "Operátor barvy." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Grayscale function." -msgstr "Vytvořit funkci" +msgstr "Funkce stupně šedi." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." -msgstr "" +msgstr "Převede vektor HSV na ekvivalentní RGB." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts RGB vector to HSV equivalent." -msgstr "" +msgstr "Převede vektor RGB na ekvivalentní HSV." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Sepia function." -msgstr "Přejmenovat funkci" +msgstr "Funkce sépie." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Burn operator." -msgstr "" +msgstr "Operátor vypálení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Darken operator." -msgstr "" +msgstr "Operátor ztmavení." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Difference operator." -msgstr "Pouze rozdíly" +msgstr "Operátor rozdílu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Dodge operator." -msgstr "" +msgstr "Operátor uhnutí." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "HardLight operator." -msgstr "Změnit skalární operátor" +msgstr "Operátor tvrdého světla." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Lighten operator." -msgstr "" +msgstr "Operátor zesvětlení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Overlay operator." -msgstr "" +msgstr "Operátor překrytí." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Screen operator." -msgstr "" +msgstr "Operátor screen." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "SoftLight operator." -msgstr "" +msgstr "Operátor měkkého světla." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color constant." -msgstr "Konstantní" +msgstr "Konstantní barva." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color uniform." -msgstr "Animace: změna transformace" +msgstr "Uniformní barva." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the boolean result of the %s comparison between two parameters." -msgstr "Vrátí inverzní odmocninu z parametru." +msgstr "Vrátí booleovský výsledek %s porovnání mezi dvěma parametry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "Rovnost (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "Větší než (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "Větší nebo rovno (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided scalars are equal, greater or " "less." msgstr "" +"Vrátí přidružený vektor, pokud jsou dané skaláry stejné, větší nebo menší." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "" +msgstr "Vrátí booleovský výsledek srovnání mezi INF a skalárním parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." -msgstr "" +msgstr "Vrátí booleovský výsledek srovnání mezi NaN a skalárním parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "Menší než (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "Menší nebo rovno (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "Není rovno (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." msgstr "" +"Vrátí přidružený vektor, pokud je daná logická hodnota true nebo false." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated scalar if the provided boolean value is true or false." msgstr "" +"Vrátí přidružený skalár, pokud je daná logická hodnota true nebo false." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the boolean result of the comparison between two parameters." -msgstr "Vrátí tangens parametru." +msgstr "Vrátí booleovský výsledek porovnání mezi dvěma parametry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF (or NaN) and a " "scalar parameter." msgstr "" +"Vrátí booleovský výsledek srovnání mezi INF (nebo NaN) a skalárním " +"parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean constant." -msgstr "" +msgstr "Booleovská konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean uniform." -msgstr "" +msgstr "Bool uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." -msgstr "" +msgstr "Zadejte parametr \"%s\" pro všechny režimy shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Input parameter." -msgstr "Přichytit k rodičovi" +msgstr "Vstupní parametr." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "" +msgstr "Vstupní parametr \"%s\" pro režimy shaderu vrcholů a fragmentů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." -msgstr "" +msgstr "Zadejte parametr \"%s\" pro fragmentový a světelný shader." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." -msgstr "" +msgstr "Vstupní parametr \"%s\" pro režim shaderu fragmentu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for light shader mode." -msgstr "'%s' vstupní parametr pro mód světelného shaderu." +msgstr "\"%s\" vstupní parametr pro mód světelného shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "'%s' vstupní parametr pro mód vertexového shaderu." +msgstr "\"%s\" vstupní parametr pro mód vertexového shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "'%s' vstupní parametr pro mód vertexového a fragmentového shaderu." +msgstr "\"%s\" vstupní parametr pro mód vertexového a fragmentového shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -9184,6 +9118,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), skalár(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší " +"než \"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9191,6 +9130,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( skalár(hrana), skalár(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než hrana, jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -9201,9 +9143,8 @@ msgid "Returns the hyperbolic tangent of the parameter." msgstr "Vrátí hyperbolický tangens parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Finds the truncated value of the parameter." -msgstr "Vrátí absolutní hodnotu parametru." +msgstr "Vrátí zkrácenou hodnotu parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds scalar to scalar." @@ -9219,46 +9160,43 @@ msgstr "Vynásobí skalár skalárem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two scalars." -msgstr "" +msgstr "Vrátí zbytek dvou skalárů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." -msgstr "" +msgstr "Odečte skalár od skaláru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar constant." -msgstr "Změnit skalární konstantu" +msgstr "Konstantní skalár." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "Animace: změna transformace" +msgstr "Uniformní skalár." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." -msgstr "" +msgstr "Provést vyhledání kubické textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the texture lookup." -msgstr "" +msgstr "Provést vyhledávání textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." -msgstr "" +msgstr "Uniformní vyhledání kubické textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup." -msgstr "" +msgstr "Uniformní vyhledání 2D textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup with triplanar." -msgstr "" +msgstr "Uniformní vyhledání 2D textury s triplanar mapováním." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "Transformovat polygon" +msgstr "Funkce transformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9270,73 +9208,76 @@ 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 "" +"Vypočte dyadický součin dvojice vektorů.\n" +"\n" +"OuterProduct vezme první parametr \"c\" jako vektor sloupce (matice s jedním " +"sloupcem) a druhý parametr \"r\" jako vektor řádku (matice s jedním řádkem) " +"a provede násobení matice \"c * r\", což má za výsledek matici s počtem " +"řádků stejný jako v \"c\" a počet sloupců stejný jako v \"r\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "" +msgstr "Složí transformaci ze čtyř vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "" +msgstr "Rozloží transformaci na čtyři vektory." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "" +msgstr "Vypočítá determinant transformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." -msgstr "" +msgstr "Počítá inverzní transformaci." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "" +msgstr "Vypočítá transpozici tranformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "" +msgstr "Pronásobí transformaci transformací." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "" +msgstr "Pronásobí vektor transformací." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform constant." -msgstr "Transformace zrušena." +msgstr "Transformační konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform uniform." -msgstr "Transformace zrušena." +msgstr "Uniformní transformace." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector function." -msgstr "Přejít na funkci..." +msgstr "Vektorová funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector operator." -msgstr "" +msgstr "Vektorový operátor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes vector from three scalars." -msgstr "" +msgstr "Skládá vektor ze tří skalárů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes vector to three scalars." -msgstr "" +msgstr "Rozloží vektor na tři skaláry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the cross product of two vectors." -msgstr "" +msgstr "Spočítá vektorový produkt dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the distance between two points." -msgstr "" +msgstr "Vrátí vzdálenost mezi dvěma body." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the dot product of two vectors." -msgstr "" +msgstr "Vypočítá skalární součin dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9345,41 +9286,46 @@ 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 "" +"Vrátí vektor, který ukazuje ve stejném směru referenční vektor. Funkce má " +"tři vektorové parametry: orientovaný vektor N, sousední vektor I a " +"referenční vektor Nref. Pokud je skalární součin I a Nref menší než nula, " +"vrátí se N. Jinak se vrátí -N." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." -msgstr "" +msgstr "Spočítá délku vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two vectors." -msgstr "" +msgstr "Lineární interpolace mezi dvěma vektory." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Lineární interpolace mezi dvěma skaláry." +msgstr "Lineární interpolace mezi dvěma vektory pomocí skaláru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." -msgstr "" +msgstr "Spočítá normalizovaný vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - vector" -msgstr "" +msgstr "1.0 - vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / vector" -msgstr "" +msgstr "1.0 / vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" +"Vrátí vektor směřující ve směru odrazu ( a : vektor dopadu, b : normálový " +"vektor )." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the vector that points in the direction of refraction." -msgstr "" +msgstr "Vrátí vektor ve směru lomu světla." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9389,6 +9335,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu ( vektor(edge0), vektor(edge1), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud x je větší než " +"\"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9398,6 +9349,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší " +"než \"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9405,6 +9361,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( vektor(hrana), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9412,34 +9371,37 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( skalár(hrana), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." -msgstr "" +msgstr "Přičte vektor k vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides vector by vector." -msgstr "" +msgstr "Vydělí vektor vektorem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by vector." -msgstr "" +msgstr "Pronásobí vektor vektorem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two vectors." -msgstr "" +msgstr "Vrátí zbytek po dělení dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts vector from vector." -msgstr "" +msgstr "Odečte vektor od vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector constant." -msgstr "" +msgstr "Konstantní vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector uniform." -msgstr "" +msgstr "Uniformní vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9447,12 +9409,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 "" +"Vlastní výraz v jazyce shaderu Godot s vlastním počtem vstupních a " +"výstupních portů. Toto je přímé vkládání kódu do funkcí vrcholů/fragmentů/" +"osvětlení, nepoužívat k deklaraci funkcí." #: 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 "" +"Vrátí sklon na základě skalárního součinu normály povrchu a směru pohledu " +"kamery (zde zadejte vstup)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9461,68 +9428,82 @@ msgid "" "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" +"Vlastní výraz v jazyce shaderu Godot, který bude umístěn nad výsledek " +"shaderu. Uvnitř můžete vytvořit různé definice funkcí a později je volat " +"pomocí Expressions. Můžete také deklarovat proměnné, \"uniforms\" a " +"konstanty." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Reference na existující uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "" +msgstr "(Pouze pro režim Fragment/Light) Skalární derivace funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "" +msgstr "(Pouze pro režim Fragment/Light) Vektorová derivace funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"x\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalární) Derivace podle \"x\" pomocí " +"místní variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"y\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalár) Derivace podle \"y\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Součet absolutní derivace podle \"x" +"\" a \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalár) Součet absolutní derivace podle \"x" +"\" a \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property" -msgstr "Editovat filtry" +msgstr "Upravit vizuální vlastnost" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Visual Shader Mode Changed" -msgstr "Změny shaderu" +msgstr "Změnit režim vizuálního shaderu" #: editor/project_export.cpp msgid "Runnable" @@ -9537,6 +9518,8 @@ msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" +"Export projektu pro platformu \"%s\" se nezdařil.\n" +"Zdá se, že šablony exportu chybí nebo jsou neplatné." #: editor/project_export.cpp msgid "" @@ -9544,6 +9527,9 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" +"Export projektu pro platformu \"%s\" se nezdařil.\n" +"Může to být způsobeno problémem s konfigurací v export profilu nebo v " +"nastavení exportu." #: editor/project_export.cpp msgid "Release" @@ -9554,13 +9540,12 @@ msgid "Exporting All" msgstr "Exportování všeho" #: editor/project_export.cpp -#, fuzzy msgid "The given export path doesn't exist:" -msgstr "Cesta neexistuje." +msgstr "Zadaná cesta pro export neexistuje:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "Exportní šablony pro tuto platformu chybí nebo jsou poškozené:" +msgstr "Šablony exportu pro tuto platformu chybí nebo jsou poškozené:" #: editor/project_export.cpp msgid "Presets" @@ -9575,6 +9560,8 @@ 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 "" +"Když je zaškrtlé, tak bude profil k dispozici pro rychlé nasazení.\n" +"Pouze jeden profil na platformě může být označen jako spuštěný." #: editor/project_export.cpp msgid "Export Path" @@ -9609,12 +9596,16 @@ msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Filtry pro export souborů/složek, které nejsou zdroji\n" +"(oddělené čárkou, např. *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Filtry pro vynechání souborů/složek z projektu\n" +"(oddělené čárkou, např. *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Features" @@ -9678,49 +9669,45 @@ msgstr "Soubor ZIP" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "" +msgstr "Hrací balíček Godot" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "Exportní šablony pro tuto platformu chybí:" +msgstr "Šablony exportu pro tuto platformu chybí:" #: editor/project_export.cpp msgid "Manage Export Templates" -msgstr "Spravovat exportní šablony" +msgstr "Spravovat šablony exportu" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "" +msgstr "Exportovat s laděním" #: editor/project_manager.cpp -#, fuzzy msgid "The path specified doesn't exist." -msgstr "Cesta neexistuje." +msgstr "Zadaná cesta neexistuje." #: editor/project_manager.cpp -#, 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." +msgstr "Chyba při otevírání balíčku (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'." +msgstr "" +"Neplatný soubor projektu \".zip\"; neobsahuje soubor \"project.godot\"." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Zvolte prosím prázdnou složku." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a \"project.godot\" or \".zip\" file." -msgstr "Zvolte prosím soubor 'project.godot' nebo '.zip'." +msgstr "Vyberte prosím soubor \"project.godot\" nebo \".zip\"." #: editor/project_manager.cpp -#, fuzzy msgid "This directory already contains a Godot project." -msgstr "Složka již obsahuje projekt Godotu." +msgstr "Složka již obsahuje Godot projekt." #: editor/project_manager.cpp msgid "New Game Project" @@ -9815,6 +9802,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Nepodporováno vašimi ovladači GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9929,18 +9920,20 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Nelze spustit projekt: Musí být importovány zdroje.\n" +"Otevřete projekt, aby se spustilo prvotní importování." #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run %d projects at once?" -msgstr "Jste si jisti, že chcete spustit více než jeden projekt?" +msgstr "Jste si jisti, že chcete spustit %d projektů najednou?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotčen)" +msgstr "" +"Odebrat %d projekty ze seznamu?\n" +"Obsah složek projektů zůstane nedotčen." #: editor/project_manager.cpp msgid "" @@ -9951,23 +9944,28 @@ msgstr "" "Obsah složky zůstane nedotčen." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotčen)" +msgstr "" +"Odstranit všechny chybějící projekty ze seznamu?\n" +"Obsah složek projektů zůstane nedotčen." #: editor/project_manager.cpp msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" +"Jazyk byl změněn.\n" +"Rozhraní se aktualizuje po restartování editoru nebo projektového manažera." #: editor/project_manager.cpp msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" +"Opravdu hledat projekty Godot ve složce %s?\n" +"Může to chvíli trvat." #. TRANSLATORS: This refers to the application where users manage their Godot projects. #: editor/project_manager.cpp @@ -9980,7 +9978,7 @@ msgstr "Projekty" #: editor/project_manager.cpp msgid "Last Modified" -msgstr "" +msgstr "Datum modifikace" #: editor/project_manager.cpp msgid "Scan" @@ -10024,6 +10022,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Vyhledávací lišta filtruje projekty podle názvu a poslední komponenty " +"cesty.\n" +"Chcete-li filtrovat podle názvu a celé cesty, musí dotaz obsahovat alespoň " +"jeden znak \"/\"." #: editor/project_settings_editor.cpp msgid "Key " @@ -10055,16 +10057,15 @@ msgstr "Akce s názvem \"%s\" již existuje." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "" +msgstr "Přejmenovat událost vstupní akce" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Změnit hodnotu slovníku" +msgstr "Změnit mrtvou zónu akce" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "" +msgstr "Přidat událost vstupní akce" #: editor/project_settings_editor.cpp msgid "All Devices" @@ -10103,28 +10104,24 @@ msgid "Wheel Down Button" msgstr "Kolečko dolů" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Kolečko nahoru" +msgstr "Levé tlačítko kolečka" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Pravé tlačítko" +msgstr "Pravé tlačítko kolečka" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Tlačítko č. 6" +msgstr "Tlačítko X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Tlačítko č. 6" +msgstr "Tlačítko X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" -msgstr "" +msgstr "Index osy Joypadu:" #: editor/project_settings_editor.cpp msgid "Axis" @@ -10132,16 +10129,15 @@ msgstr "Osa" #: editor/project_settings_editor.cpp msgid "Joypad Button Index:" -msgstr "" +msgstr "Index tlačítka joysticku:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Změnit měřítko výběru" +msgstr "Vymazat vstupní akce" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "" +msgstr "Vymazat událost vstupní akce" #: editor/project_settings_editor.cpp msgid "Add Event" @@ -10149,7 +10145,7 @@ msgstr "Přidat akci" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Button" +msgstr "Tlačítko" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -10177,7 +10173,7 @@ msgstr "Přidat globální vlastnost" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "Nejprve vyberte nastavení ze seznamu!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -10185,7 +10181,7 @@ msgstr "Vlastnost '%s' neexistuje." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "Nastavení \"%s\" je integrované a nemůže být smazáno." #: editor/project_settings_editor.cpp msgid "Delete Item" @@ -10201,7 +10197,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "" +msgstr "Přidat vstupní akci" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -10212,13 +10208,12 @@ msgid "Settings saved OK." msgstr "Nastavení úspěšně uloženo." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Moved Input Action Event" -msgstr "Změnit měřítko výběru" +msgstr "Přesunutá událost vstupní akce" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Přepsání vlastnosti" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -10230,32 +10225,31 @@ msgstr "Odstranit překlad" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Přidat přemapovanou cestu" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Přidat přemapování zdroje" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Změnit jazyk přemapování zdrojů" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Odebrat přemapování zdroje" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Odebrat možnost přemapování zdroje" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Změnit typ hodnot pole" +msgstr "Upravený filtr lokalizace" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "" +msgstr "Změněn režim filtru pro nastavení jazyka" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" @@ -10267,15 +10261,15 @@ msgstr "Všeobecné" #: editor/project_settings_editor.cpp msgid "Override For..." -msgstr "" +msgstr "Přepsání čeho..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "" +msgstr "Pro projevení změn, je nutné restartovat editor." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Mapování vstupů" #: editor/project_settings_editor.cpp msgid "Action:" @@ -10287,7 +10281,7 @@ msgstr "Akce" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Mrtvá zóna" #: editor/project_settings_editor.cpp msgid "Device:" @@ -10319,25 +10313,23 @@ msgstr "Zdroje:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Mapování na základě jazyku:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "Jazyky" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "" +msgstr "Filtr jazyků" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "Zobrazit kosti" +msgstr "Zobrazit všechny jazyky" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "Pouze výběr" +msgstr "Zobrazit pouze vybrané jazyky" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -10345,11 +10337,11 @@ msgstr "Režim filtru:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "" +msgstr "Jazyky:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "" +msgstr "Autoload" #: editor/project_settings_editor.cpp msgid "Plugins" @@ -10365,11 +10357,11 @@ msgstr "Nula" #: editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "Hladký vstup-výstup" #: editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "Hladký výstup-vstup" #: editor/property_editor.cpp msgid "File..." @@ -10389,7 +10381,7 @@ msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "" +msgstr "Chyba při načítání souboru: Žádný zdroj!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10397,7 +10389,7 @@ msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bit %d, hodnota %d." #: editor/property_selector.cpp msgid "Select Property" @@ -10416,33 +10408,28 @@ msgid "Batch Rename" msgstr "Dávkové přejmenování" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Nahradit: " +msgstr "Nahradit:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "Prefix" +msgstr "Prefix:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "Sufix" +msgstr "Sufix:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Use Regular Expressions" -msgstr "Regulární výrazy" +msgstr "Použít regulární výrazy" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" msgstr "Pokročilé možnosti" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Nahradit" #: editor/rename_dialog.cpp msgid "Node name" @@ -10469,14 +10456,16 @@ msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Sekvenční počítadlo celých čísel.\n" +"Porovnat možnosti počítadla." #: editor/rename_dialog.cpp msgid "Per-level Counter" -msgstr "" +msgstr "Samostatné počítadlo pro každou úroveň" #: editor/rename_dialog.cpp msgid "If set, the counter restarts for each group of child nodes." -msgstr "" +msgstr "Když je zapnuté, počítadlo se resetuje pro každou skupinu potomků." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10488,7 +10477,7 @@ msgstr "Krok" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Hodnota, o kterou se počítadlo zvýší za každý uzel" #: editor/rename_dialog.cpp msgid "Padding" @@ -10504,23 +10493,23 @@ msgstr "" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "Následné zpracování" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Zachovat" #: editor/rename_dialog.cpp msgid "PascalCase to snake_case" -msgstr "PascalCase na snake_case" +msgstr "CamelCase na snake_case" #: editor/rename_dialog.cpp msgid "snake_case to PascalCase" -msgstr "snake_case na PascalCase" +msgstr "snake_case na CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Notace" #: editor/rename_dialog.cpp msgid "To Lowercase" @@ -10535,9 +10524,8 @@ msgid "Reset" msgstr "Resetovat" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Chyba regulárního výrazu" +msgstr "Chyba regulárního výrazu:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -10545,23 +10533,23 @@ msgstr "Na znaku %s" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "Změnit rodiče uzlu" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "" +msgstr "Změnit rodiče lokace (Vybrat nového rodiče):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Zachovat globální transformaci" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "" +msgstr "Upravit rodiče" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Režim spouštění:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -10577,7 +10565,7 @@ msgstr "Argumenty hlavní scény:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Nastavení spuštění scény" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." @@ -10592,19 +10580,19 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Scénu \"%s\" nelze vytvořit, protože aktuální scéna je jedním z jejích uzlů." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" msgstr "Scéna/Scény instance" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Replace with Branch Scene" -msgstr "Uložit větev jako scénu" +msgstr "Nahradit větev scénou" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Přidat instanci scény" #: editor/scene_tree_dock.cpp msgid "Detach Script" @@ -10612,7 +10600,7 @@ msgstr "Odpojit skript" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +msgstr "Tuto operaci nelze provést v kořenovém uzlu stromu." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" @@ -10629,23 +10617,23 @@ msgstr "Duplikovat uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"Nadřazené uzly ve zděděné scéně nelze změnit. Pořadí uzlů nelze změnit." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Uzel musí patřit do editované scény, aby se stal kořenem." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "Instance scény se nemohou stát kořenem" #: editor/scene_tree_dock.cpp msgid "Make node as Root" msgstr "Nastavit uzel jako zdrojový" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes and any children?" -msgstr "Smazat %d uzlů?" +msgstr "Smazat %d uzlů a všechny potomky?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -10653,11 +10641,11 @@ msgstr "Smazat %d uzlů?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "Smazat kořenový uzel \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "Smazat uzel \"%s\" a jeho potomky?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -10665,11 +10653,11 @@ msgstr "Smazat uzel \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Toto nelze provést s kořenovým uzlem." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Tuto operaci nelze provést na instanci scény." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -10680,17 +10668,21 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Zakázání \"upravitelné instance“ obnoví výchozí nastavení všech vlastností " +"uzlu." #: 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 "" +"Povolení možnosti \"Načíst jako placeholder\" zakáže možnost \"Upravitelní " +"potomci\" a způsobí, že všechny vlastnosti uzlu budou vráceny na výchozí " +"hodnoty." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "Místní" +msgstr "Změnit na lokální" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -10718,11 +10710,11 @@ msgstr "Jiný uzel" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Nelze manipulovat s uzly z cizí scény!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "Nelze pracovat na uzlech, ze kterých dědí aktuální scéna!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -10733,15 +10725,15 @@ msgid "Remove Node(s)" msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Změnit název vstupu" +msgstr "Změnit typ uzlů" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Scénu se nepodařilo uložit. Některé závislosti pravděpodobně nejsou splněny." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -10749,7 +10741,7 @@ msgstr "Chyba při ukládání scény." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Chyba ukládání duplikace scény." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -10757,15 +10749,15 @@ msgstr "Dílčí zdroje" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Vymazat dědičnost" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "Upravitelní potomci" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Načíst jako placeholder" #: editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -10777,24 +10769,25 @@ msgid "" "This is probably because this editor was built with all language modules " "disabled." msgstr "" +"Nelze připojit skript: nejsou zaregistrovány žádné jazyky.\n" +"Je to pravděpodobně proto, že tento editor byl vytvořen s vypnutými " +"jazykovými moduly." #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Přidat podřízený uzel" +msgstr "Přidat uzel" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Sbalit vše" +msgstr "Rozbalit/Sbalit vše" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Změnit typ" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Přidat/Vytvořit nový uzel" +msgstr "Změnit rodiče na nový uzel" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10825,16 +10818,16 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Přidat instanci scény jako uzel. Pokud neexistuje kořenový uzel, tak vytvoří " +"zděděnou scénu." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script to the selected node." msgstr "Připojit nový, nebo existující skript k vybranému uzlu." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Detach the script from the selected node." -msgstr "Připojit nový, nebo existující skript k vybranému uzlu." +msgstr "Odpojit skript od vybraného uzlu." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10846,10 +10839,9 @@ msgstr "Místní" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Vymazat dědičnost? (Nelze vrátit zpět!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Přepnout viditelnost" @@ -10858,14 +10850,12 @@ msgid "Unlock Node" msgstr "Odemknout uzel" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Button Group" -msgstr "Tlačítko č. 7" +msgstr "Skupina tlačítek" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Chyba připojení" +msgstr "(Připojování z)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" @@ -10876,18 +10866,24 @@ msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" +"Uzel má %s připojení a %s skupin.\n" +"Kliknutím zobrazíte panel signálů." #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" +"Uzel má %s připojení.\n" +"Kliknutím zobrazíte panel signálů." #: editor/scene_tree_editor.cpp msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" +"Uzel je v %s skupinách.\n" +"Kliknutím zobrazíte panel skupin." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10906,6 +10902,8 @@ msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" +"Děti nelze vybrat.\n" +"Kliknutím umožníte jejich vybrání." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -10916,6 +10914,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer je připnutý.\n" +"Kliknutím odepnete." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -10982,9 +10982,8 @@ msgid "Error loading script from %s" msgstr "Chyba nahrávání skriptu z %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Přepsat" +msgstr "Přepisuje" #: editor/script_create_dialog.cpp msgid "N/A" @@ -11011,23 +11010,20 @@ msgid "Invalid class name." msgstr "Neplatné jméno třídy." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "Neplatné jméno vlastnosti." +msgstr "Neplatný název nebo cesta zděděné třídy." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script path/name is valid." -msgstr "Skript je validní." +msgstr "Cesta a jméno skriptu jsou validní." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." msgstr "Povoleno: a-z, A-Z, 0-9, _ a ." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)." -msgstr "Možností scén." +msgstr "Vestavěný skript (v souboru scény)." #: editor/script_create_dialog.cpp msgid "Will create a new script file." @@ -11046,6 +11042,8 @@ msgid "" "Note: Built-in scripts have some limitations and can't be edited using an " "external editor." msgstr "" +"Poznámka: Vestavěné skripty mají určitá omezení a nelze je upravovat pomocí " +"externího editoru." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -11061,7 +11059,7 @@ msgstr "Vestavěný skript:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "" +msgstr "Připojit script k uzlu" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -11101,16 +11099,15 @@ msgstr "Zdroj C++:" #: editor/script_editor_debugger.cpp msgid "Stack Trace" -msgstr "" +msgstr "Trasování zásobníku" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Chyby" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Child process connected." -msgstr "Odpojené uzly" +msgstr "Připojen proces potomka." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -11121,21 +11118,20 @@ msgid "Video RAM" msgstr "Video RAM" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Skip Breakpoints" -msgstr "Vytvořit body." +msgstr "Přeskočit breakpointy" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Zkontrolovat předchozí instanci" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Zkontrolovat následující instanci" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "" +msgstr "Rámce zásobníku" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -11147,7 +11143,7 @@ msgstr "Síťový profiler" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Monitor" #: editor/script_editor_debugger.cpp msgid "Value" @@ -11155,24 +11151,23 @@ msgstr "Hodnota" #: editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Monitory" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgstr "Vyberte jednu nebo více položek ze seznamu pro zobrazení grafu." #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Spotřeba video paměti dle zdroje:" #: editor/script_editor_debugger.cpp msgid "Total:" msgstr "Celkem:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportovat profil" +msgstr "Exportovat seznam do CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11196,38 +11191,35 @@ msgstr "Různé" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Klikací ovládací prvek:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Typ klikacího prvku:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Kořen živých úprav:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "Nastavit ze stromu" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "Exportovat měření do CSV" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Erase Shortcut" -msgstr "Zkratky" +msgstr "Smazat zkratky" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Restore Shortcut" -msgstr "Zkratky" +msgstr "Obnovit zkratky" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Change Shortcut" -msgstr "Upravit kotvy" +msgstr "Upravit zkratky" #: editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -11239,7 +11231,7 @@ msgstr "Zkratky" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Vazba" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -11247,7 +11239,7 @@ msgstr "Změnit rádius světla" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Změnit úhel vysílání uzlu AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -11259,68 +11251,63 @@ msgstr "Změnit velikost kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "" +msgstr "Změnit AABB Notifier" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Změnit částice AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "" +msgstr "Změnit rozsahy Probe" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "" +msgstr "Změnit poloměr Sphere Shape" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "" +msgstr "Změnit rozsahy Box Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Změnit poloměr Capsule Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Změnit výšku Capsule Shape" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit poloměr Cylinder Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Height" -msgstr "" +msgstr "Změnit výšku Cylinder Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Změnit délku Ray Shape" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit poloměr Cylinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Změnit velikost kamery" +msgstr "Změnit výšku Cylinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit vnitřní poloměr Torus" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit vnější poloměr Torus" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Vybrat dynamickou knihovnu pro tento záznam" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" @@ -11348,7 +11335,7 @@ msgstr "Dynamická knihovna" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Přidat záznam architektury" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" @@ -11356,12 +11343,11 @@ msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "Zapnutý GDNative Singleton" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "Vypnout aktualizační kolečko" +msgstr "Vypnutý GDNative Singleton" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -11376,7 +11362,6 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Step argument is zero!" msgstr "Argument kroku je nula!" @@ -11413,30 +11398,28 @@ msgid "Object can't provide a length." msgstr "Objekt nemůže poskytnout délku." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "Další záložka" +msgstr "Další rovina" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Předchozí záložka" +msgstr "Předchozí rovina" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "Rovina:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "" +msgstr "Další patro" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" -msgstr "" +msgstr "Předchozí patro" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" -msgstr "" +msgstr "Patro:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Delete Selection" @@ -11456,24 +11439,23 @@ msgstr "Vykreslit GridMap" #: 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 "Přichytit pohled" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Vypnuto" +msgstr "Vypnout ořezávání" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Oříznout nahoře" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Oříznout dole" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" @@ -11489,36 +11471,35 @@ msgstr "Editovat osu Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "X otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "Y otočení kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "Z otočení kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Zpětné X otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Zpětné Y otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Zpětné Z otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Zrušit otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "Vymazat označené" +msgstr "Vložit výběr" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" @@ -11542,7 +11523,7 @@ msgstr "Filtrovat meshe" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "" +msgstr "Přiřaďte uzlu GridMap zdroj MeshLibrary k použití jeho sítě." #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -11550,70 +11531,69 @@ msgstr "Název třídy nemůže být rezervované klíčové slovo" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "Konec zásobníku trasování vnitřní výjimky" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Zapéct NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Vymazat navigační síť." #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." -msgstr "" +msgstr "Nastavuji konfiguraci..." #: modules/recast/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "" +msgstr "Počítám velikost mřížky..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Vytvářím výškové pole..." #: modules/recast/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "" +msgstr "Vyznačuji průchozí trojúhelníky..." #: modules/recast/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Konstruuji kompaktní výškové pole..." #: modules/recast/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Eroduji průchozí oblast..." #: modules/recast/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "" +msgstr "Rozděluji..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Vytvářím kontury..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Vytvářím polymesh..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Převádím na nativní navigační mřížku..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Nastavení generátoru navigační sítě:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Parsuji geometrii..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" msgstr "Hotovo!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" @@ -11622,14 +11602,12 @@ msgstr "" "jak správně používat yield!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "Uzel zavolal yield, ale nevrátil stav funkce v první pracovní paměti." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." @@ -11678,10 +11656,8 @@ msgid "Add Output Port" msgstr "Přidat výstupní port" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "" -"Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu." +msgstr "Nahradit všechny existující vestavěné funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Create a new function." @@ -11765,29 +11741,25 @@ msgstr "" "Podržte %s k uvolnění getteru. Podržte Shift k uvolnění generického podpisu." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického " -"podpisu." +"Podržte Ctrl k vložení getteru. Podržte Shift k vložení generické signatury." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." msgstr "Podržte %s k uvolnění jednoduché reference na uzel." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold Ctrl to drop a simple reference to the node." msgstr "Podržte Ctrl k uvolnění jednoduché reference na uzel." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Variable Setter." -msgstr "Podržte %s k uvolnění jednoduché reference na uzel." +msgstr "Podržte %s k uvolnění setteru proměnné." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "" +msgstr "Podržte Ctrl k uvolnění setteru proměnné." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" @@ -11802,6 +11774,8 @@ msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" +"Nelze uvolnit vlastnosti, protože skript \"%s\" není použit ve scéně.\n" +"Přestaňte držet \"Shift\", pro zkopírování jeho signatury." #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -11832,14 +11806,12 @@ msgid "Disconnect Nodes" msgstr "Odpojit uzly" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Připojit uzly" +msgstr "Připojit data uzlů" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Připojit uzly" +msgstr "Připojit sekvenci uzlů" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -11855,7 +11827,7 @@ msgstr "Změnit velikost komentáře" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Nelze zkopírovat uzel funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -11867,24 +11839,23 @@ msgstr "Vložit VisualScript uzly" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "" +msgstr "Nelze vytvořit funkci s uzlem funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "" +msgstr "Nelze vytvořit funkci uzlů z uzlů více funkcí." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." -msgstr "" +msgstr "Vyberte alespoň jeden uzel s portem sekvencí." #: modules/visual_script/visual_script_editor.cpp msgid "Try to only have one sequence input in selection." -msgstr "" +msgstr "Zkus mít ozančenu pouze jednu vstupní sekvenci." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create Function" -msgstr "Přejmenovat funkci" +msgstr "Vytvořit funkci" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" @@ -11907,9 +11878,8 @@ msgid "Editing Signal:" msgstr "Úprava signálu:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Tool:" -msgstr "Místní" +msgstr "Editační nástroj:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -11932,9 +11902,8 @@ msgid "function_name" msgstr "název_funkce" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select or create a function to edit its graph." -msgstr "Pro úpravu grafu vyber nebo vytvoř funkci" +msgstr "Vyber nebo vytvoř funkci pro úpravu jejího grafu." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -12021,41 +11990,40 @@ msgstr "" "posloupnost), nebo řetězec (chyba)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Odstranit VisualScript uzel" +msgstr "Hledat VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Přijmi %d" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "Nastav %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "" +msgstr "Chybí jméno balíčku." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "" +msgstr "Jméno balíčku musí být neprázdné." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "" +msgstr "Znak '%s' není povolen v názvu balíčku Android aplikace." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "" +msgstr "Číslice nemůže být prvním znakem segmentu balíčku." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "" +msgstr "Znak '%s' nemůže být prvním znakem segmentu balíčku." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "" +msgstr "Balíček musí mít alespoň jeden '.' oddělovač." #: platform/android/export/export.cpp msgid "Select device from the list" @@ -12063,90 +12031,113 @@ msgstr "Vyberte zařízení ze seznamu" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "" +msgstr "Spustitelný ADB není nakonfigurovaný v Nastavení Editoru." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "" +msgstr "OpenJDK jarsigner není nakonfigurovaný v Nastavení Editoru." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" +"Úložiště klíčů k ladění není nakonfigurováno v Nastavení editoru nebo v " +"export profilu." #: platform/android/export/export.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" +"Úložiště klíčů pro vydání je nakonfigurováno nesprávně v profilu exportu." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"Vlastní sestavení vyžaduje správnou cestu k sadě Android SDK v nastavení " +"editoru." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "" +msgstr "Nesprávná cesta Android SDK pro vlastní sestavení v Nastavení editoru." + +#: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Chybí složka \"platform-tools\"!" #: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" +"Šablona sestavení Androidu není pro projekt nainstalována. Nainstalujte jej " +"z nabídky Projekt." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "" +msgstr "Neplatný veřejný klíč pro rozšíření APK." #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "Neplatné jméno třídy" +msgstr "Neplatné jméno balíčku:" #: platform/android/export/export.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" +"Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / moduly" +"\" (změněno v Godot 3.2.2).\n" #: platform/android/export/export.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" +"Chcete-li používat doplňky, musí být povoleno \"použít vlastní build\"." #: platform/android/export/export.cpp msgid "" "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" "\"." msgstr "" +"\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus " +"Mobile VR\"." #: platform/android/export/export.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" +"\"Hand Tracking\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " +"\"Oculus Mobile VR\"." #: platform/android/export/export.cpp msgid "" "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" +"\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " +"\"Oculus Mobile VR\"." #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" je validní pouze v případě, že je povolena možnost \"Použít " +"vlastní sestavu\"." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Neplatné jméno souboru! Android App Bundle vyžaduje příponu *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Rozšíření APK není kompatibilní s Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Neplatné jméno souboru! Android APK vyžaduje příponu *.apk." #: 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 "" +"Pokus o sestavení z vlastní šablony, ale neexistují pro ni žádné informace o " +"verzi. Přeinstalujte jej z nabídky \"Projekt\"." #: platform/android/export/export.cpp msgid "" @@ -12155,52 +12146,58 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"Neshoda verzí Android buildu:\n" +" Šablona nainstalována: %s\n" +" Verze Godot: %s\n" +"Přeinstalujte šablonu pro sestavení systému Android z nabídky \"Projekt\"." #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Buildování projektu pro Android (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 "" +"Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n" +"Případně navštivte dokumentaci o build pro Android na docs.godotengine.org." #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Přesunout výstup" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Nelze kopírovat či přejmenovat exportovaný soubor, zkontrolujte výstupy v " +"adresáři projektu gradle." #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "" +msgstr "Chybí identifikátor." #: platform/iphone/export/export.cpp -#, fuzzy msgid "The character '%s' is not allowed in Identifier." -msgstr "Jméno není platný identifikátor:" +msgstr "Znak '%s' není dovolen v identifikátoru." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "" +msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat." #: platform/iphone/export/export.cpp -#, fuzzy msgid "Invalid Identifier:" -msgstr "Jméno není platný identifikátor:" +msgstr "Neplatný identifikátor:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." -msgstr "" +msgstr "V profilu není nastavena požadovaná ikona." #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "" +msgstr "Zastavit HTTP Server" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -12223,34 +12220,28 @@ msgid "Invalid export template:" msgstr "Neplatná šablona pro export:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Nelze vytvořit složku." +msgstr "Nebylo možné přečíst HTML shell:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Nelze vytvořit složku." +msgstr "Nebylo možné načíst soubor splash obrázku:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Nelze vytvořit složku." +msgstr "Používám výchozí splash obrázek." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "Neplatné jméno třídy" +msgstr "Neplatné krátké jméno balíčku." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "Neplatný unikátní název." +msgstr "Neplatný unikátní název balíčku." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "Neplatný unikátní název." +msgstr "Neplatný unikátní název vydavatele balíčku." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12293,13 +12284,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "Neplatné rozměry obrázku uvítací obrazovky (měly by být 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 "" "Aby AnimatedSprite mohl zobrazovat snímky, zdroj SpriteFrames musí být " -"vytvořen nebo nastaven v vlastnosti 'Frames'." +"vytvořen nebo nastaven v vlastnosti \"Frames\"." #: scene/2d/canvas_modulate.cpp msgid "" @@ -12348,30 +12338,53 @@ msgstr "" "jejich tvaru." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" -msgstr "CollisionShape2D musí obsahovat tvar. Prosím vytvořte zdrojový tvar." +msgstr "" +"CollisionShape2D funkce musí obsahovat tvar. Prosím vytvořte zdrojový tvar!" #: scene/2d/collision_shape_2d.cpp msgid "" "Polygon-based shapes are not meant be used nor edited directly through the " "CollisionShape2D node. Please use the CollisionPolygon2D node instead." msgstr "" +"Polygonové tvary nejsou určeny k použití nebo úpravám přímo prostřednictvím " +"uzlu CollisionShape2D. Použijte uzel CollisionPolygon2D." #: scene/2d/cpu_particles_2d.cpp msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animace CPUParticles2D vyžaduje použití CanvasItemMaterial se zapnutým " +"\"Particles Animation\"." + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Uzel A a uzel B musí být PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Uzel A musí být PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Uzel B musí být PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Kloub není připojen ke dvěma PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Uzel A a uzel B musí být různé PhysicsBody2D" #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "Textura světla musí být nastavena vlastností 'texture'." +msgstr "Textura tvaru světla musí být nastavena vlastností 'texture'." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12381,7 +12394,7 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "" +msgstr "Stínový polygon pro toto stínítko je prázdný. Nakreslete polygon." #: scene/2d/navigation_polygon.cpp msgid "" @@ -12411,18 +12424,24 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" +"Grafický ovladač GLES2 nepodporuje částice založené na GPU.\n" +"Použijte uzel CPUParticles2D. Na převod lze použít \"Převést na CPUParticles" +"\"." #: 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 "" +"Nebyl přiřazen žádný materiál pro zpracování částic, takže nebudou viditelné." #: scene/2d/particles_2d.cpp msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animace Particles2D vyžaduje použití CanvasItemMaterial se zapnutou funkcí " +"\"Animace částic\"." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -12434,6 +12453,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Změny velikosti v RigidBody2D (ve znakovém nebo rigidním režimu) budou za " +"běhu přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -12442,65 +12464,68 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Tento Bone2D řetěz by měl končit uzlem Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Uzel Bone2D funguje pouze s nadřazeným uzlem Skeleton2D nebo jiným Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Této kosti chybí správná klidová póza. Přejděte na uzel Skeleton2D a " +"nastavte jej." #: 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 "" -"CollisionPolygon2D slouží pouze jako kontejner tvarů objektu " -"CollissionObject2D a od něj odvozených uzlů. Použijte ho pouze jako potomka " -"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a dalších, pro určení " -"jejich tvaru." +"TileMap \"Use Parent\" potřebuje nadřazený CollisionObject2D uzel. Použijte " +"ho pouze jako potomka Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a " +"dalších, pro určení jejich tvaru." #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnable2D funguje nejlépe, když je nastaven jako rodič editované " -"scény." +"VisibilityEnable2D funguje nejlépe, když je přímo pod kořenem aktuálně " +"upravované scény." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRCamera musí mít uzel ARVROrigin jako rodiče." #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRController musí mít uzel ARVROrigin jako rodiče." #: 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 ovladače nemůže být 0, jinak nebude ovladač přiřazen žádnému skutečnému " +"ovladači." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRAnchor musí mít uzel ARVROrigin jako rodiče." #: 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 kotvy nemůže být 0, jinak tato kotva nebude přiřazena skutečné kotvě." #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "" +msgstr "ARVROrigin musí mít uzel ARVRCamera jako potomka." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12512,19 +12537,19 @@ msgstr "(Zbývající čas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "" +msgstr "Vykreslení mřížek: " #: scene/3d/baked_lightmap.cpp msgid "Plotting Lights:" -msgstr "" +msgstr "Vykreslení světel:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "" +msgstr "Dokončování vykreslení" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " -msgstr "" +msgstr "Osvětlení sítí: " #: scene/3d/collision_object.cpp msgid "" @@ -12562,53 +12587,58 @@ msgstr "" "a KinematicBody, abyste jim dali tvar." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" "Aby CollisionShape mohl fungovat, musí mu být poskytnut tvar. Vytvořte mu " -"prosím zdroj tvar!" +"prosím zdroj tvar." #: 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 "" +"Tvary Plane nepracují dobře a budou v budoucím vydání odstraněny. " +"Nepoužívejte je." #: scene/3d/collision_shape.cpp msgid "" "ConcavePolygonShape doesn't support RigidBody in another mode than static." -msgstr "" +msgstr "ConcavePolygonShape nepodporuje uzel RigidBody v nestatickém režimu." #: scene/3d/cpu_particles.cpp msgid "Nothing is visible because no mesh has been assigned." -msgstr "" +msgstr "Nic není zobrazeno, protože nebyla přiřazena žádná mřížka." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." msgstr "" +"Animace CPUParticles vyžaduje použití SpatialMaterial, jehož režim Billboard " +"je nastaven na \"Particle Billboard\"." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "" +msgstr "Vykreslení sítí" #: scene/3d/gi_probe.cpp msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" +"Video driver GLES2 nepodporuje GIProby.\n" +"Místo toho použijte BakedLightmap." #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "Uzel InterpolatedCamera je zastaralý a bude odstraněn v Godot 4.0." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." -msgstr "" +msgstr "SpotLight s úhlem širším než 90 stupňů nemůže vrhat stíny." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -12630,17 +12660,23 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" +"Video driver GLES2 nepodporuje částice na GPU.\n" +"Místo toho použijte uzel CPUParticles. K převodu můžete použít \"Převést na " +"CPUParticles\"." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Nic není viditelné, protože mřížky nebyly přiřazeny do vykreslovací fronty." #: scene/3d/particles.cpp msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" +"Animace částic vyžaduje použití SpatialMaterial, kde režim Billboard je " +"nastaven na \"Částicový billboard\"." #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." @@ -12651,6 +12687,8 @@ msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" +"Vlastnost ROTATION_ORIENTED uzlu PathFollow vyžaduje povolení \"Up Vector\" " +"ve zdroji Curve nadřazeného uzlu Path." #: scene/3d/physics_body.cpp msgid "" @@ -12658,19 +12696,41 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Změny velikosti v RigidBody (ve znakovém nebo rigidním režimu) budou za běhu " +"přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Uzel A a uzel B musí být PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Uzel A musí být PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Uzel B musí být PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Kloub není připojen k PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Uzel A a uzel B musí být odlišné PhysicsBody" #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Aby ParticleAttractor2D fungoval, musí vlastnost path ukazovat na platný " -"uzel Particles2D." +"Vlastnost \"Remote Path\" musí ukazovat na platný Spatial nebo Spatial-" +"derived uzel." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "" +msgstr "Toto tělo bude ignorováno dokud nenastavíte síť." #: scene/3d/soft_body.cpp msgid "" @@ -12678,16 +12738,15 @@ msgid "" "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Změny velikosti SoftBody budou za běhu přepsány fyzikálním enginem.\n" -"Změňte místo něho velikost kolizních tvarů potomků." +"Změny velikosti v SoftBody budou za běhu přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." #: 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 "" -"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti 'Frames', " +"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti \"Frames\", " "aby mohl AnimatedSprite3D zobrazit rámečky." #: scene/3d/vehicle_body.cpp @@ -12703,6 +12762,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"WorldEnvironment vyžaduje nastavenou vlastnost \"Prostředí\", aby měl " +"viditelný efekt." #: scene/3d/world_environment.cpp msgid "" @@ -12716,10 +12777,12 @@ 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 "" +"Tento WorldEnvironment je ignorován. Buď přidejte kameru (pro 3D scény) nebo " +"nastavte plátnu tohoto prostředí Režim pozadí (pro 2D scény)." #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "Na uzlu BlendTree \"%s\" nebyla nalezena animace: \"%s\"" #: scene/animation/animation_blend_tree.cpp msgid "Animation not found: '%s'" @@ -12734,31 +12797,28 @@ msgid "Invalid animation: '%s'." msgstr "Neplatná animace: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Odpojit '%s' od '%s'" +msgstr "Nic není připojeno do vstupu '%s' uzlu '%s'." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "" +msgstr "Není nastaven žádný kořen grafu AnimationNode." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer." +msgstr "Cesta k uzlu AnimationPlayer obsahující animace není nastavena." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." -msgstr "" +msgstr "Cesta k AnimationPlayer nevede k uzlu AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." -msgstr "Strom animace je neplatný." +msgstr "Kořenový uzel AnimationPlayer není platný uzel." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "" +msgstr "Podpora tohoto uzlu byla ukončena. Použijte místo něho AnimationTree." #: scene/gui/color_picker.cpp msgid "" @@ -12766,11 +12826,13 @@ msgid "" "LMB: Set color\n" "RMB: Remove preset" msgstr "" +"Barva: #%s\n" +"LTM: Nastavit barvu\n" +"PTM: Odstranit přednastavení" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Pick a color from the editor window." -msgstr "Vyberte barvu z obrazovky." +msgstr "Vyberte barvu z okna editoru." #: scene/gui/color_picker.cpp msgid "HSV" @@ -12794,12 +12856,18 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" +"Kontejner sám o sobě neslouží žádnému účelu, pokud nějaký skript " +"nenakonfiguruje nastavení podřízených uzlů.\n" +"Pokud se chystáte přidat skript, použijte běžný ovládací uzel." #: 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 "" +"Tip nápovědy se nezobrazí, protože filtr myši je nastaven na \"Ignorovat\". " +"Chcete-li tento problém vyřešit, nastavte filtr myši na \"Stop\" nebo \"Pass" +"\"." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12809,8 +12877,12 @@ msgstr "Pozor!" msgid "Please Confirm..." msgstr "Potvrďte prosím..." -#: scene/gui/popup.cpp +#: scene/gui/graph_edit.cpp #, fuzzy +msgid "Enable grid minimap." +msgstr "Povolit přichytávání" + +#: scene/gui/popup.cpp 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 " @@ -12821,9 +12893,9 @@ msgstr "" "budou skryty." #: scene/gui/range.cpp -#, fuzzy msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "Pokud má exp_edit hodnotu true, pak min_value musí být > 0." +msgstr "" +"Pokud má \"Exp Edit\" hodnotu true, pak \"Min Value\" musí být větší než 0." #: scene/gui/scroll_container.cpp msgid "" @@ -12831,13 +12903,15 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" +"ScrollContainer je navržen tak, aby běžel s jedním ovládacím potomkem.\n" +"Použijte kontejner (VBox, HBox atd.) nebo uzel Control jako potomka a " +"nastavte minimální velikost ručně." #: scene/gui/tree.cpp msgid "(Other)" msgstr "(Ostatní)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." @@ -12871,9 +12945,8 @@ msgid "Invalid source for shader." msgstr "Neplatný zdroj pro shader." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Neplatný zdroj pro shader." +msgstr "Neplatná funkce pro porovnání tohoto typu." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -12891,6 +12964,39 @@ msgstr "Odlišnosti mohou být přiřazeny pouze ve vertex funkci." msgid "Constants cannot be modified." msgstr "Konstanty není možné upravovat." +#~ msgid "Search complete" +#~ msgstr "Vyhledávání dokončeno" + +#~ msgid "No commit message was provided" +#~ msgstr "Nebyla poskytnuta commit message" + +#~ msgid "Add a commit message" +#~ msgstr "Přidat zprávu commitu" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Soubor nebo složka se stejným názvem již na tomto místě existuje." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Chybí složka \"build-tools\"!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Nelze najít nástroj zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Zarovnávání APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Nelze dokončit zarovnání APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nelze odstranit nezarovnané APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Chyba při pokusu uložit rozložení!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Výchozí rozložení editoru přepsáno." + #~ msgid "Move pivot" #~ msgstr "Přemístit pivot" diff --git a/editor/translations/da.po b/editor/translations/da.po index 86e6965237..5de9c37510 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -1,6 +1,6 @@ # Danish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Dankse Memes <purplelops@gmail.com>, 2018. # David Lamhauge <davidlamhauge@gmail.com>, 2016, 2018. @@ -1081,14 +1081,18 @@ msgstr "Ejere af:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Fjern de valgte filer fra projektet? (ej fortrydes)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "De filer der fjernes er nødvendige for, at andre ressourcer kan fungere.\n" "Fjern dem alligevel? (ej fortrydes)" @@ -1136,7 +1140,7 @@ msgstr "Forældreløs ressource udforsker" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2393,19 +2397,25 @@ msgid "Error saving TileSet!" msgstr "Fejl, kan ikke gemme TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fejl, under forsøg på at gemme layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard editor layout overskrevet." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layout navn er ikke fundet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Gendannet standardlayout til grundindstillinger." #: editor/editor_node.cpp @@ -3799,6 +3809,16 @@ msgid "Name contains invalid characters." msgstr "Navnet indeholder ugyldige karakterer." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Omdøb fil:" @@ -3853,15 +3873,6 @@ msgstr "Rediger Afhængigheder..." msgid "View Owners..." msgstr "Vis Ejere..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Omdøb..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplikere" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Flyt Til..." @@ -3894,11 +3905,18 @@ msgid "Collapse All" msgstr "Klap alle sammen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Omdøb" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplikere" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flyt Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Omdøb..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3937,9 +3955,11 @@ msgid "Move" msgstr "Flyt" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mappe med dette navn findes allerede." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Omdøb" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4015,8 +4035,18 @@ msgstr "Gemmer..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Søg Tekst" +msgid "%d match in %d file." +msgstr "Ingen Match" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Ingen Match" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Ingen Match" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8595,10 +8625,25 @@ msgstr "Opret Ny %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Opret Poly" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Rediger Poly" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Slet Valgte" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8812,11 +8857,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Intet navn angivet" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8881,10 +8921,6 @@ msgid "Stage All" msgstr "Vælg alle" #: 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 "Synkroniser Script Ændringer" @@ -10050,6 +10086,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12340,6 +12380,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12621,6 +12665,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12914,6 +12978,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13059,6 +13143,10 @@ msgstr "Advarsel!" msgid "Please Confirm..." msgstr "Bekræft venligst..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -13139,6 +13227,24 @@ msgid "Constants cannot be modified." msgstr "Konstanter kan ikke ændres." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Søg Tekst" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Intet navn angivet" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mappe med dette navn findes allerede." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fejl, under forsøg på at gemme layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard editor layout overskrevet." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Fjern punkt" diff --git a/editor/translations/de.po b/editor/translations/de.po index ef5f8499ef..016d676ee4 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -1,6 +1,6 @@ # German translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Alexander Mahr <alex.mahr@gmail.com>, 2016, 2019. # Andreas Esau <andreasesau@gmail.com>, 2016. @@ -61,12 +61,13 @@ # Leon Marz <leon.marz@kabelmail.de>, 2020. # Patric Wust <patric.wust@gmx.de>, 2020. # Jonathan Hassel <jonathan.hassel@icloud.com>, 2020. +# Artur Schönfeld <schoenfeld.artur@ymail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-07 14:20+0000\n" -"Last-Translator: Günther Bohn <ciscouser@gmx.de>\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" +"Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -74,7 +75,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1088,20 +1089,27 @@ msgid "Owners Of:" msgstr "Besitzer von:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Ausgewählte Dateien aus dem Projekt entfernen? (Kann nicht rückgängig " -"gemacht werden)" +"gemacht werden.)\n" +"Die Dateien können möglicherweise aus dem Papierkorb des Betriebssystems " +"wiederhergestellt werden." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Andere Ressourcen benötigen die zu entfernenden Dateien, um richtig zu " "funktionieren.\n" -"Trotzdem entfernen? (Kann nicht rückgängig gemacht werden)" +"Trotzdem entfernen? (Kann nicht rückgängig gemacht werden.)\n" +"Die Dateien können möglicherweise aus dem Papierkorb des Betriebssystems " +"wiederhergestellt werden." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1146,7 +1154,7 @@ msgstr "Unbenutzte Dateien ansehen" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1656,34 +1664,32 @@ msgstr "" "Fallback Enabled‘ ausschalten." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Die Zielplattform benötigt ‚ETC‘-Texturkompression für GLES2. Bitte in den " -"Projekteinstellungen ‚Import Etc‘ aktivieren." +"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für GLES2. Bitte in den " +"Projekteinstellungen ‚Import Pvrtc‘ aktivieren." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Die Zielplattform benötigt ‚ETC2‘-Texturkompression für GLES2. Bitte in den " -"Projekteinstellungen aktivieren." +"Die Zielplattform benötigt ‚ETC2‘- oder ‚PVRTC’-Texturkompression für GLES2. " +"Bitte in den Projekteinstellungen ‚Import Etc 2‘ oder ‚Import Pvrtc‘ " +"aktivieren." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Die Zielplattform benötigt ‚ETC‘-Texturkompression für den Treiber-Fallback " -"auf GLES2. \n" -"Bitte ‚Import Etc‘ in den Projekteinstellungen aktivieren oder ‚Driver " +"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für den Treiber-" +"Fallback auf GLES2. \n" +"Bitte ‚Import Pvrtc‘ in den Projekteinstellungen aktivieren oder ‚Driver " "Fallback Enabled‘ ausschalten." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2369,20 +2375,31 @@ msgid "Error saving TileSet!" msgstr "Fehler beim Speichern des TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fehler beim Speichern des Layouts!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ein Fehler ist beim Speichern des Editorlayouts aufgetreten.\n" +"Möglicherweise ist der Ordner für persönliche Einstellungen des Editors " +"nicht schreibbar." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard-Editorlayout überschrieben." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Standardlayout wurde überschrieben.\n" +"Um das Standardlayout auf Werkseinstellungen zurückzusetzen, sollte das " +"Standardlayout über die Option „Layout löschen“ gelöscht werden." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layout-Name nicht gefunden!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt." +msgid "Restored the Default layout to its base settings." +msgstr "Standardlayout wurde auf Werkseinstellungen zurückgesetzt." #: editor/editor_node.cpp msgid "" @@ -3770,6 +3787,22 @@ msgid "Name contains invalid characters." msgstr "Name enthält ungültige Zeichen." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Die folgenen Dateien oder Ordner stehen im Konflikt mit Objekten im Zielpfad " +"‚%s‘:\n" +"\n" +"%s\n" +"\n" +"Soll überschrieben werden?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Benenne Datei um:" @@ -3817,14 +3850,6 @@ msgstr "Abhängigkeiten bearbeiten..." msgid "View Owners..." msgstr "Zeige Besitzer..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Umbenennen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplizieren..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Verschiebe zu..." @@ -3852,11 +3877,16 @@ msgid "Collapse All" msgstr "Alle einklappen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Umbenennen" +msgid "Duplicate..." +msgstr "Duplizieren..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "In Papierkorb werfen" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Umbenennen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3891,10 +3921,11 @@ msgid "Move" msgstr "Verschieben" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Es existiert bereits eine Datei oder ein Ordner an diesem Pfad mit dem " -"angegebenen Namen." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Umbenennen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3962,8 +3993,19 @@ msgid "Searching..." msgstr "Am suchen..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Suche abgeschlossen" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d Übereinstimmungen gefunden." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d Übereinstimmungen gefunden." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d Übereinstimmungen gefunden." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5299,50 +5341,43 @@ msgstr "Neue horizontale und vertikale Hilfslinien erstellen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Pivot-Offset des CanvasItems „%s“ auf (%d, %d) setzen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem rotieren" +msgstr "%d CanvasItems rotieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem rotieren" +msgstr "CanvasItem „%s“ auf %d Grad rotieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItem verschieben" +msgstr "Anker des CanvasItems „%s“ verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D „%s“ auf (%s, %s) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control „%s“ auf (%d, %d) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "CanvasItem skalieren" +msgstr "%d CanvasItems skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "CanvasItem skalieren" +msgstr "CanvasItem „%s“ auf (%s, %s) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItem verschieben" +msgstr "%d CanvasItems verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItem verschieben" +msgstr "CanvasItem „%s“ zu (%d, d%) verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5754,11 +5789,11 @@ 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 "" -"Füge automatisiert Schlüsselbilder ein wenn Objekte verschoben, rotiert oder " -"skaliert werden (basierend auf Maske).\n" +"Füge automatisiert Schlüsselbilder ein, wenn Objekte verschoben, rotiert " +"oder skaliert werden (basierend auf Maske).\n" "Schlüsselbilder werden nur in existierende Spuren eingefügt, es werden keine " "neuen Spuren angelegt.\n" -"Das erste mal müssen Schlüsselbilder manuell eingefügt werden." +"Das erste Mal müssen Schlüsselbilder manuell eingefügt werden." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Auto Insert Key" @@ -6301,7 +6336,7 @@ msgstr "Aufwärts-Achse des Meshs:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "Zufällige Rotation:" +msgstr "Zufälliges Drehen:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" @@ -6309,7 +6344,7 @@ msgstr "Zufälliges Kippen:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "Zufällige Skalierung:" +msgstr "Zufälliges Skalieren:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -6631,16 +6666,14 @@ msgid "Move Points" msgstr "Punkte Verschieben" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Ziehen = Rotieren" +msgstr "Strg: Rotieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Alle verschieben" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" msgstr "Shift+Strg: Skalieren" @@ -6689,14 +6722,12 @@ msgid "Radius:" msgstr "Radius:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Polygon und UV erstellen" +msgstr "Polygon zu UV kopieren" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Zu Polygon2D umwandeln" +msgstr "Polygon zu UV kopieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8251,13 +8282,12 @@ msgid "Paint Tile" msgstr "Kachel zeichnen" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Umsch+RMT: Linie zeichnen\n" -"Umsch+Strg+RMT: Rechteck bemalen" +"Umsch+LMT: Linie zeichnen\n" +"Umsch+Strg+LMT: Rechteck bemalen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8412,10 +8442,22 @@ msgid "Create a new rectangle." msgstr "Neues Rechteck erstellen." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Neues Rechteck" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Neues Polygon erstellen." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Neues Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Ausgewählte Form löschen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Polygon im Rechteck Bereich halten." @@ -8625,10 +8667,6 @@ msgid "Error" msgstr "Fehler" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Es wurde keine Protokollnachricht angegeben" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Es wurden keine Dateien zum protokollieren vorgemerkt" @@ -8685,10 +8723,6 @@ msgid "Stage All" msgstr "Alles zum speichern vormerken" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Protokollnachricht hinzufügen" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Änderungen als Speicherpunkt sichern" @@ -8788,9 +8822,8 @@ msgid "Add Node to Visual Shader" msgstr "Visual Shader-Node hinzufügen" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Node verschoben" +msgstr "Node(s) verschoben" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8810,9 +8843,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual-Shader-Eingabetyp geändert" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Uniform-Name festlegen" +msgstr "UniformRef-Name geändert" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9512,9 +9544,8 @@ msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" -"Gibt den Abfall basierend auf dem Punktprodukt der Oberflächennormalen und " -"der Blickrichtung der Kamera zurück (übergeben Sie die zugehörigen Eingaben " -"an diese)." +"Gibt den Abfall abgeleitet aus dem Skalarprodukt zwischen Flächennormale und " +"Kamerablickrichtung zurück (zugeordnete Eingänge müssen übergeben werden)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9531,7 +9562,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Eine Referenz zu einem existierenden Uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9898,6 +9929,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Nicht unterstützt durch gegenwärtigen GPU-Treiber." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10550,7 +10585,7 @@ msgstr "Aktueller Szenenname" #: editor/rename_dialog.cpp msgid "Root node name" -msgstr "Name des Root-Nodes" +msgstr "Name des Wurzel-Nodes" #: editor/rename_dialog.cpp msgid "" @@ -10758,7 +10793,7 @@ msgstr "Node „%s“ löschen?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "Lässt sich nicht an Root-Node ausführen." +msgstr "Lässt sich nicht an Wurzel-Node ausführen." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -10924,7 +10959,7 @@ msgid "" "exists." msgstr "" "Instantiiere eine Szenendatei als Node. Erzeugt eine geerbte Szene falls " -"kein Root-Node existiert." +"kein Wurzel-Node existiert." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script to the selected node." @@ -12180,6 +12215,10 @@ msgstr "" "Ungültiger Android-SDK-Pfad für eigene Builds in den Editoreinstellungen." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "‚platform-tools‘-Verzeichnis fehlt!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12232,19 +12271,22 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Ungültiger Dateiname. Android App Bundles benötigen .aab als " +"Dateinamenendung." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK-Expansion ist nicht kompatibel mit Android App Bundles." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung." #: platform/android/export/export.cpp msgid "" @@ -12283,13 +12325,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Verschiebe Ausgabe" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Exportdatei kann nicht kopiert und umbenannt werden. Fehlermeldungen sollten " +"im Gradle Projektverzeichnis erscheinen." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12479,6 +12523,26 @@ msgstr "" "CPUParticles2D-Animationen benötigen ein CanvasItemMaterial mit der " "Eigenschaft „Particles Animation“ aktiviert." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A und Node B müssen PhysicsBody2D-Nodes sein" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A muss ein PhysicsBody2D-Node sein" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B muss ein PhysicsBody2D-Node sein" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Das Gelenk ist nicht mit zwei PhysicsBody2D-Nodes verbunden" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A und Node B müssen unterschiedliche PhysicsBody2D-Nodes sein" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12822,6 +12886,26 @@ msgstr "" "Die Größe der entsprechenden Collisionshape-Unterobjekte sollte stattdessen " "geändert werden." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A und Node B müssen PhysicsBody-Nodes sein" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A muss ein PhysicsBody-Node sein" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B muss ein PhysicsBody-Node sein" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Gelenk ist nicht mit einem PhysicsBody-Node verbunden" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A und Node B müssen unterschiedliche PhysicsBody-Nodes sein" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12990,6 +13074,11 @@ msgstr "Warnung!" msgid "Please Confirm..." msgstr "Bitte bestätigen..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Einrasten aktivieren" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13075,6 +13164,41 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." msgid "Constants cannot be modified." msgstr "Konstanten können nicht verändert werden." +#~ msgid "Search complete" +#~ msgstr "Suche abgeschlossen" + +#~ msgid "No commit message was provided" +#~ msgstr "Es wurde keine Protokollnachricht angegeben" + +#~ msgid "Add a commit message" +#~ msgstr "Protokollnachricht hinzufügen" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Es existiert bereits eine Datei oder ein Ordner an diesem Pfad mit dem " +#~ "angegebenen Namen." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "‚build-tools‘-Verzeichnis fehlt!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Das zipalign Hilfswerkzeug konnte nicht gefunden werden." + +#~ msgid "Aligning APK..." +#~ msgstr "Richte APK aus..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK konnte nicht ausgerichtet werden." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nicht ausgerichtetes APK konnte nicht gelöscht werden." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fehler beim Speichern des Layouts!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard-Editorlayout überschrieben." + #~ msgid "Move pivot" #~ msgstr "Pivotpunkt bewegen" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index f32995d2e6..900a74d158 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -1,6 +1,6 @@ # LANGUAGE translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. @@ -995,14 +995,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1047,7 +1050,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2227,11 +2230,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2239,7 +2247,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3518,6 +3526,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3565,14 +3583,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3600,10 +3610,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3637,7 +3652,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3704,7 +3722,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8023,10 +8049,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8215,10 +8253,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8275,10 +8309,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9397,6 +9427,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11554,6 +11588,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11806,6 +11844,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12066,6 +12124,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12200,6 +12278,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/el.po b/editor/translations/el.po index b006707169..b49fd28cbf 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -1,6 +1,6 @@ # Greek translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # George Tsiamasiotis <gtsiam@windowslive.com>, 2017-2018, 2019, 2020. # Georgios Katsanakis <geo.elgeo@gmail.com>, 2019. @@ -1040,14 +1040,19 @@ msgid "Owners Of:" msgstr "Ιδιοκτήτες του:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Αφαίρεση επιλεγμένων αρχείων από το έργο; (Αδυναμία αναίρεσης)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Τα αρχεία που αφαιρούνται απαιτούνται από άλλους πόρους για να δουλέψουν.\n" "Να αφαιρεθούν; (Αδύνατη η αναίρεση)" @@ -1094,7 +1099,7 @@ msgstr "Εξερευνητής αχρησιμοποίητων πόρων" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!" msgstr "Σφάλμα κατά την αποθήκευση TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Σφάλμα κατά την αποθήκευση διάταξης!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Η προεπιλεγμένη διάταξη του editor έχει παρακαμφθεί." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Το όνομα της διάταξης δεν βρέθηκε!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Επαναφορά της προεπιλεγμένης διάταξης στις βασικές ρυθμίσεις." #: editor/editor_node.cpp @@ -3720,6 +3731,16 @@ msgid "Name contains invalid characters." msgstr "Το όνομα περιέχει άκυρους χαρακτήρες." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Μετονομασία αρχείου:" @@ -3767,14 +3788,6 @@ msgstr "Επεξεργασία εξαρτήσεων..." msgid "View Owners..." msgstr "Προβολή ιδιοκτητών..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Μετονομασία..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Αναπαραγωγή..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Μετακίνηση σε..." @@ -3802,11 +3815,17 @@ msgid "Collapse All" msgstr "Σύμπτυξη Όλων" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Μετονομασία" +msgid "Duplicate..." +msgstr "Αναπαραγωγή..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Μετακίνηση AutoLoad" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Μετονομασία..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3841,8 +3860,11 @@ msgid "Move" msgstr "Μετακίνηση" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Υπάρχει ήδη αρχείο ή φάκελος με το ίδιο όνομα στη διαδρομή." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Μετονομασία" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3910,8 +3932,19 @@ msgid "Searching..." msgstr "Αναζήτηση..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Ολοκλήρωση αναζήτησης" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d αποτελέσματα." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d αποτελέσματα." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d αποτελέσματα." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8366,10 +8399,25 @@ msgid "Create a new rectangle." msgstr "Δημιουργία νέου ορθογωνίου." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Χρωματοσμός ορθογωνίου" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Δημιουργία νέου πολυγώνου." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Μετακίνηση πολυγώνου" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Διαγραφή επιλεγμένου" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Διατήρηση πολυγώνου μέσα σε ορθογώνια περιοχή." @@ -8579,10 +8627,6 @@ msgid "Error" msgstr "Σφάλμα" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Κανένα δεσμευμένο μήνυμα δεν παρασχέθηκε" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Κανένα αρχείο δεν προστέθηκε στο στάδιο" @@ -8639,10 +8683,6 @@ msgid "Stage All" msgstr "Διεξαγωγή Όλων" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Προσθέστε ένα μήνυμα δέσμευσης" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Αλλαγές Δέσμευσης" @@ -9848,6 +9888,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12137,6 +12181,10 @@ msgstr "" "Επεξεργαστή." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12435,6 +12483,26 @@ msgstr "" "Η κίνηση CPUParticles2D απαιτεί την χρήση CanvasItemMaterial με το " "«Particles Animation» ενεργό." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12770,6 +12838,26 @@ msgstr "" "αντικατασταθούνε από την μηχανή φυσικής κατά την εκτέλεση.\n" "Αλλάξτε μέγεθος στα σχήματα σύγκρουσης των παιδιών." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12931,6 +13019,11 @@ msgstr "Ειδοποίηση!" msgid "Please Confirm..." msgstr "Παρακαλώ επιβεβαιώστε..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Ενεργοποίηση κουμπώματος" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13016,6 +13109,24 @@ msgstr "Τα «varying» μπορούν να ανατεθούν μόνο στη msgid "Constants cannot be modified." msgstr "Οι σταθερές δεν μπορούν να τροποποιηθούν." +#~ msgid "Search complete" +#~ msgstr "Ολοκλήρωση αναζήτησης" + +#~ msgid "No commit message was provided" +#~ msgstr "Κανένα δεσμευμένο μήνυμα δεν παρασχέθηκε" + +#~ msgid "Add a commit message" +#~ msgstr "Προσθέστε ένα μήνυμα δέσμευσης" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Υπάρχει ήδη αρχείο ή φάκελος με το ίδιο όνομα στη διαδρομή." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Σφάλμα κατά την αποθήκευση διάταξης!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Η προεπιλεγμένη διάταξη του editor έχει παρακαμφθεί." + #~ msgid "Move pivot" #~ msgstr "Μετακίνηση πηγαίου σημείου" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 3e99fade73..8f17041a39 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -1,6 +1,6 @@ # Esperanto translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Scott Starkey <yekrats@gmail.com>, 2019. # AlexHoratio <yukithetupper@gmail.com>, 2019. @@ -9,18 +9,19 @@ # Alejandro Sánchez Medina <alejandrosanchzmedina@gmail.com>, 2019. # Sr Half <flavio05@outlook.com>, 2020. # Cristian Yepez <cristianyepez@gmail.com>, 2020. +# BinotaLIU <me@binota.org>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-05-22 21:01+0000\n" -"Last-Translator: Cristian Yepez <cristianyepez@gmail.com>\n" +"PO-Revision-Date: 2020-11-20 23:08+0000\n" +"Last-Translator: BinotaLIU <me@binota.org>\n" "Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/" "godot/eo/>\n" "Language: eo\n" "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 4.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -135,56 +136,51 @@ msgstr "Movi Bezier-punktojn" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animado Duplikati Ŝlosilojn" +msgstr "Duplikati Ŝlosilojn de Animado" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Animado Forigi Ŝlosilojn" +msgstr "Forigi Ŝlosilojn de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Animado Aliigi Kernakadron Fojon" +msgstr "Aliigi Kernakadron Fojon de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Animado Aliigi Transiron" +msgstr "Aliigi Transiron de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Animado Aliigi Transformon" +msgstr "Aliigi Transformon de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animado Aliigi Kernakadron Valoron" +msgstr "Aliigi Kernakadron Valoron de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Animado Aliigi Alvokon" +msgstr "Aliigi Alvokon de Animado" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Animado Aliigi Kernakadron Fojon" +msgstr "Aliigi Kernakadron Fojon de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Animado Aliigi Transiron" +msgstr "Aliigi Transiron de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Animado Aliigi Transformon" +msgstr "Aliigi Transformon de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Animado Aliigi Kernakadron Valoron" +msgstr "Aliigi Kernakadron Valoron de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Animado Aliigi Alvokon" +msgstr "Aliigi Alvokon de Animadoj" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -1035,14 +1031,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1087,7 +1086,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2292,20 +2291,24 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -#, fuzzy -msgid "Default editor layout overridden." -msgstr "Automatan aranĝon de editilo transpasis." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3627,6 +3630,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3675,14 +3688,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3710,11 +3715,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomi" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3747,8 +3757,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomi" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3816,8 +3829,19 @@ msgid "Searching..." msgstr "Serĉas..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Serĉo finiĝis" +#, fuzzy +msgid "%d match in %d file." +msgstr "Trovis %d matĉo(j)n." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Trovis %d matĉo(j)n." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Trovis %d matĉo(j)n." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8158,10 +8182,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Nova sceno" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Forigi Elektita(j)n Ŝlosilo(j)n" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8351,10 +8389,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8416,10 +8450,6 @@ msgid "Stage All" msgstr "Elektaro ĉiuj" #: 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 "Ŝanĝu" @@ -9540,6 +9570,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "" "Higher visual quality\n" @@ -11734,6 +11768,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11987,6 +12025,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12247,6 +12305,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12381,6 +12459,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12451,6 +12533,13 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstantoj ne povas esti modifitaj." +#~ msgid "Search complete" +#~ msgstr "Serĉo finiĝis" + +#, fuzzy +#~ msgid "Default editor layout overridden." +#~ msgstr "Automatan aranĝon de editilo transpasis." + #, fuzzy #~ msgid "Pack File" #~ msgstr "Malfermi dosieron" diff --git a/editor/translations/es.po b/editor/translations/es.po index ceaf9b9c7b..38f16e8da7 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -1,6 +1,6 @@ # Spanish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Addiel Lucena Perez <addiell2017@gmail.com>, 2017. # Aleix Sanchis <aleixsanchis@hotmail.com>, 2017, 2018. @@ -52,11 +52,14 @@ # Jonatan <arandajonatan94@tuta.io>, 2020. # ACM <albertocm@tuta.io>, 2020. # José Manuel Jurado Bujalance <darkbird@vivaldi.net>, 2020. +# Skarline <lihue-molina@hotmail.com>, 2020. +# Oxixes <oxixes@protonmail.com>, 2020. +# David Aroca Rojas <arocarojasdavid@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 17:26+0000\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -65,7 +68,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -630,7 +633,7 @@ msgstr "Ir al Siguiente Paso" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "Ir al Anterior Paso" +msgstr "Ir al Paso Anterior" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -650,7 +653,7 @@ msgstr "Usar Curvas Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "Optimizar Animación" +msgstr "Optimizador de Animación" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" @@ -1085,19 +1088,26 @@ msgid "Owners Of:" msgstr "Propietarios De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)" +"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n" +"Puedes encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Otros recursos necesitan los archivos que estás intentando quitar para " "funcionar.\n" -"¿Eliminarlos de todos modos? (irreversible)" +"¿Eliminarlos de todos modos? (irreversible)\n" +"Puedes encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1141,7 +1151,7 @@ msgstr "Explorador de Recursos Huérfanos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1651,35 +1661,32 @@ msgstr "" "Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para GLES2. " -"Activa 'Import Etc' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'PVRTC' para GLES2. " +"Activa 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC2' para GLES3. " -"Activa 'Import Etc 2' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'ETC2' o 'PVRTC' " +"para GLES3. Activa 'Import Etc 2' o 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para usar " -"GLES2 como controlador de respaldo.\n" -"Activa 'Import Etc' en Ajustes del Proyecto, o desactiva 'Driver Fallback " -"Enabled'." +"La plataforma del objetivo requiere compresión de texturas 'PVRTC' para el " +"driver fallback de GLES2.\n" +"Activa Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2364,20 +2371,31 @@ msgid "Error saving TileSet!" msgstr "¡Error al guardar el TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "¡Error al guardar el layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Un error ha ocurrido mientras se intentaba guardar el diseño del editor.\n" +"Asegurate de que se puede escribir en la ubicación de datos del editor del " +"usuario." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Se ha sobreescrito el layout del editor por defecto." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout por defecto del editor sobreescrita.\n" +"Para recuperar el layout por defecto, utiliza la opción Eliminar Layout y " +"borra el Layout por defecto." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "¡Nombre de layout no encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Se restauró el layout por defecto a su configuración básica." +msgid "Restored the Default layout to its base settings." +msgstr "Se restauró el diseño por defecto a su configuración básica." #: editor/editor_node.cpp msgid "" @@ -3770,6 +3788,22 @@ msgid "Name contains invalid characters." msgstr "El nombre contiene caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Los siguientes archivos o carpetas entran en conflicto con los elementos de " +"la ubicación del objetivo '%s':\n" +"\n" +"%s\n" +"\n" +"¿Deseas sobrescribirlos?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renombrar archivo:" @@ -3817,14 +3851,6 @@ msgstr "Editar Dependencias..." msgid "View Owners..." msgstr "Ver Propietarios..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover a..." @@ -3852,11 +3878,16 @@ msgid "Collapse All" msgstr "Colapsar Todo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renombrar" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover a la papelera" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3891,8 +3922,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renombrar" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3960,8 +3994,19 @@ msgid "Searching..." msgstr "Buscando..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Búsqueda completa" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d coincidencias." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d coincidencias." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d coincidencias." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5297,50 +5342,43 @@ msgstr "Crear Guías Horizontales y Verticales" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ajusta el Offset del pivote del CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotar CanvasItem" +msgstr "Rotar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotar CanvasItem" +msgstr "Rotar CanvasItem \"%s\" a %d grados" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover Ancla del CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5359,8 +5397,8 @@ msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" -"Cuando está activo, el movimiento de los nodos de Control cambian sus " -"anclajes en lugar de sus márgenes." +"Cuando está activo, al mover los nodos de Control se cambian sus anclajes en " +"lugar de sus márgenes." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" @@ -6629,18 +6667,16 @@ msgid "Move Points" msgstr "Mover Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastrar: Rotar" +msgstr "Command: Rotar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift + Ctrl: Escalar" +msgstr "Shift+Command: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6689,14 +6725,12 @@ msgid "Radius:" msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crear Polígono y UV" +msgstr "Copiar Polígono a UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir a Polygon2D" +msgstr "Copiar UV al Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8243,13 +8277,12 @@ msgid "Paint Tile" msgstr "Dibujar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic izq: Dibujar línea\n" -"Shift + Ctrl + Clic izq: Pintar Rectángulo" +"Shift+Clic izq: Dibujar línea\n" +"Shift+Command+Clic der: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8404,10 +8437,22 @@ msgid "Create a new rectangle." msgstr "Cree un nuevo rectángulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuevo Rectángulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nuevo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuevo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Eliminar Formas Seleccionadas" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantener el polígono dentro del region Rect." @@ -8615,10 +8660,6 @@ msgid "Error" msgstr "Error" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "No se indicó ningún mensaje de confirmación" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "No se agregaron archivos al stage" @@ -8675,10 +8716,6 @@ msgid "Stage All" msgstr "Hacer Staging de Todo" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Añadir un mensaje de confirmación" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Confirmar Cambios" @@ -8766,7 +8803,7 @@ msgstr "Redimensionar nodo VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "Establecer Nombre Uniforme" +msgstr "Establecer Nombre de Uniform" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" @@ -8777,9 +8814,8 @@ msgid "Add Node to Visual Shader" msgstr "Añadir Nodo al Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Movido" +msgstr "Nodo(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8799,9 +8835,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Cambiar Tipo de Entrada del Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Establecer Nombre Uniforme" +msgstr "Cambio de Nombre de UniformRef" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9522,7 +9557,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Una referencia a un uniform existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9890,6 +9925,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "No es soportado por los controladores de tu GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11598,7 +11637,7 @@ msgstr "Eliminar Rotación del Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Paste Selects" -msgstr "Pegar Seleccionados" +msgstr "Pegar Selecciona" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" @@ -12174,6 +12213,10 @@ msgstr "" "Configuración del Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "¡No se encontró el directorio 'platform-tools'!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12225,18 +12268,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "La Expansión APK no es compatible con Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export.cpp msgid "" @@ -12275,13 +12320,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Moviendo salida" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"No se puede copiar y renombrar el archivo de exportación, comprueba el " +"directorio del proyecto de gradle para ver los resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12483,6 +12530,26 @@ msgstr "" "La animación CPUParticles2D requiere el uso de un CanvasItemMaterial con " "\"Particles Animation\" activado." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "El nodo A y el nodo B deben ser PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "El nodo A debe ser un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "El nodo B debe ser un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "La unión no está conectada a dos PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "El Nodo A y el Nodo B deben ser diferentes PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12817,6 +12884,26 @@ msgstr "" "anulado por el motor de la física cuando esté ejecutándose.\n" "En su lugar, cambia el tamaño en las formas de colisión de los hijos." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "El nodo A y el nodo B deben ser PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "El nodo A debe ser un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "El nodo B debe ser un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "La unión no está conectada a ningún PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "El nodo A y el nodo B deben ser diferentes PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12979,6 +13066,11 @@ msgstr "¡Alerta!" msgid "Please Confirm..." msgstr "Por favor, Confirma..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Activar Snap" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13062,6 +13154,36 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Search complete" +#~ msgstr "Búsqueda completa" + +#~ msgid "No commit message was provided" +#~ msgstr "No se indicó ningún mensaje de confirmación" + +#~ msgid "Add a commit message" +#~ msgstr "Añadir un mensaje de confirmación" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "¡No se encontró el directorio 'build-tools'!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "No se pudo encontrar la herramienta zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Alineando APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "No se pudo completar el alineamiento del APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "¡Error al guardar el layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Se ha sobreescrito el layout del editor por defecto." + #~ msgid "Move pivot" #~ msgstr "Mover pivote" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 899e5e8557..2a736acee0 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -1,6 +1,6 @@ # Spanish (Argentina) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Diego López <diegodario21@gmail.com>, 2017. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2018, 2019, 2020. @@ -15,12 +15,14 @@ # Francisco José Carllinni <panchopepe@protonmail.com>, 2019. # Nicolas Zirulnik <nicolaszirulnik@gmail.com>, 2020. # Cristian Yepez <cristianyepez@gmail.com>, 2020. +# Skarline <lihue-molina@hotmail.com>, 2020. +# Joakker <joaquinandresleon108@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-07-31 03:47+0000\n" -"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" +"PO-Revision-Date: 2020-12-29 15:03+0000\n" +"Last-Translator: Skarline <lihue-molina@hotmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -28,12 +30,13 @@ 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 4.2-dev\n" +"X-Generator: Weblate 4.4.1-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 "Argumento de tipo incorrecto en convert(), utilizá constantes TYPE_*." +msgstr "" +"Tipo de argumento inválido para 'convert()', utiliza constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -915,9 +918,8 @@ msgid "Signals" msgstr "Señales" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrar tiles" +msgstr "Filtrar señales" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1045,19 +1047,26 @@ msgid "Owners Of:" msgstr "Dueños De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)" +"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n" +"Podés encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Los archivos que se están removiendo son requeridos por otros recursos para " "funcionar.\n" -"Quitarlos de todos modos? (imposible deshacer)" +"¿Eliminarlos de todos modos? (irreversible)\n" +"Podés encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1101,7 +1110,7 @@ msgstr "Explorador de Recursos Huérfanos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1163,14 +1172,12 @@ msgid "Gold Sponsors" msgstr "Sponsor Oro" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Donantes Plata" +msgstr "Patrocinadores Nivel Plata" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Donantes Bronce" +msgstr "Patrocinadores Nivel Bronce" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1612,35 +1619,32 @@ msgstr "" "Respaldo Activado\"." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para GLES2. " -"Activá 'Import Etc' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'PVRTC' para GLES2. " +"Activá 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC2' para GLES3. " -"Activá 'Importar Etc 2' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'ETC2' o 'PVRTC' " +"para GLES3. Activá 'Import Etc 2' o 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para usar " -"GLES2 como controlador de respaldo.\n" -"Activá 'Importar Etc' en Ajustes del Proyecto, o desactivá \"Controlador de " -"Respaldo Activado\"." +"La plataforma del objetivo requiere compresión de texturas 'PVRTC' para el " +"driver fallback de GLES2.\n" +"Activá Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1684,9 +1688,8 @@ msgid "Node Dock" msgstr "Dock de Nodos" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Sistema de Archivos" +msgstr "Panel de Sistema de Archivos" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -2326,20 +2329,31 @@ msgid "Error saving TileSet!" msgstr "Error guardando TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error al tratar de guardar el layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocurrió un error mientras se intentaba guardar el layout del editor.\n" +"Chequeá que la ruta de datos de usuario del editor tenga permisos de " +"escritura." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Se ha sobreescrito el layout del editor por defecto." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Se sobreescribió el layout de editor Por Defecto.\n" +"Para restaurar el layout Por Defecto a su configuración de base, usá la " +"opcion Eliminar Layout y eliminá el layout Por Defecto." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nombre de layout no encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Se restauró el layout por defecto a su configuración básica." +msgid "Restored the Default layout to its base settings." +msgstr "Se restauró el layout Por Defecto a su configuración básica." #: editor/editor_node.cpp msgid "" @@ -2851,14 +2865,18 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Cuando esta opción está activada, al utilizar el deploy en un click, el " +"ejecutable intentará conectarse a la IP de este equipo para que el proyecto " +"en ejecución pueda ser depurado.\n" +"Esta opción está pensada para ser usada en la depuración remota (normalmente " +"con un dispositivo móvil).\n" +"No es necesario habilitarla para usar el depurador GDScript localmente." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Deploy Pequeño con recursos en red" +msgstr "Deploy Reducido con el Sistema de Archivos en Red" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2867,74 +2885,68 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"Cuando esta opción está activa, exportar o hacer deploy producirá un " -"ejecutable mínimo.\n" -"El sistema de archivos sera proveído desde el proyecto por el editor sobre " -"la red.\n" -"En Android, deploy usará el cable USB para mejor performance. Esta opción " -"acelera el testeo para juegos con footprint grande." +"Cuando esta opción está activada, al usar deploy en un click para Android " +"sólo se exportará un ejecutable sin los datos del proyecto.\n" +"El sistema de archivos será proporcionado desde el proyecto por el editor a " +"través de la red.\n" +"En Android, el deploy usará el cable USB para un rendimiento más rápido. " +"Esta opción acelera las pruebas de los proyectos con recursos grandes." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "Collision Shapes Visibles" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Los Collision shapes y nodos raycast (para 2D y 3D) serán visibles durante " -"la ejecución del juego cuando esta opción queda activada." +"Cuando esta opción está activada, las formas de colisión y los nodos de " +"raycast (para 2D y 3D) serán visibles en el proyecto en ejecución." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "Navegación Visible" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"Los meshes de navegación y los polígonos serán visibles durante la ejecución " -"del juego si esta opción queda activada." +"Cuando esta opción está activada, las mallas de navegación y los polígonos " +"serán visibles en el proyecto en ejecución." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" msgstr "Sincronizar Cambios de Escena" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Cuando esta opción esté encendida, cualquier cambio hecho a la escena en el " -"editor será replicado en el juego en ejecución.\n" -"Cuando se usa remotamente en un dispositivo, esto es más eficiente con un " -"sistema de archivos remoto." +"Cuando esta opción esté activada, cualquier cambio hecho a la escena en el " +"editor será replicado en el proyecto en ejecución.\n" +"Cuando se usa remotamente en un dispositivo, esto es más eficiente cuando el " +"sistema la opción de sistema de archivos de redes esta activada." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" msgstr "Sincronizar Cambios en Scripts" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any script that is saved will be reloaded in " "the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Cuando esta opción está activa, cualquier script que se guarde sera vuelto a " -"cargar en el juego en ejecución.\n" -"Cuando se use remotamente en un dispositivo, esto es más eficiente con un " -"sistema de archivos de red." +"Cuando esta opción está activada, cualquier script que se guarde se " +"recargará en el proyecto en ejecución.\n" +"Cuando se utiliza de forma remota en un dispositivo, esto es más eficiente " +"cuando la opción de sistema de archivos en red está activada." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" @@ -3412,7 +3424,6 @@ msgid "Add Key/Value Pair" msgstr "Agregar Par Clave/Valor" #: editor/editor_run_native.cpp -#, fuzzy msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the Export menu or define an existing preset " @@ -3420,7 +3431,8 @@ msgid "" msgstr "" "No se encontró ningún preset de exportación ejecutable para esta " "plataforma.\n" -"Por favor agregue un preset ejecutable en el menú de exportación." +"Por favor agregá un preset ejecutable en el menú Exportar o definí un preset " +"como ejecutable." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3538,7 +3550,7 @@ msgstr "Error al obtener la lista de mirrors." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" msgstr "" -"Error al parsear el JSON de la lista de mirrors. Por favor reportá este " +"Error al parsear el JSON de la lista de mirrors. ¡Por favor reportá este " "problema!" #: editor/export_template_manager.cpp @@ -3731,6 +3743,22 @@ msgid "Name contains invalid characters." msgstr "El nombre indicado contiene caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Los siguientes archivos o carpetas entran en conflicto con los elementos de " +"la ubicación del objetivo '%s':\n" +"\n" +"%s\n" +"\n" +"¿Querés sobrescribirlos?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renombrando archivo:" @@ -3778,14 +3806,6 @@ msgstr "Editar Dependencias..." msgid "View Owners..." msgstr "Ver Dueños..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover A..." @@ -3813,11 +3833,16 @@ msgid "Collapse All" msgstr "Colapsar Todos" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renombrar" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover a La Papelera" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3852,8 +3877,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renombrar" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3921,8 +3949,19 @@ msgid "Searching..." msgstr "Buscando..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Búsqueda completa" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d coincidencias." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d coincidencias." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d coincidencias." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5258,50 +5297,43 @@ msgstr "Crear Guías Horizontales y Verticales" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ajustar el Offfset del Pivote del CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotar CanvasItem" +msgstr "Rotar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotar CanvasItem" +msgstr "Rotar CanvasItem \"%s\" a %d grados" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover Ancla del CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6584,18 +6616,16 @@ msgid "Move Points" msgstr "Mover Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastrar: Rotar" +msgstr "Command: Rotar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover Todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escalar" +msgstr "Shift+Command: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6644,14 +6674,12 @@ msgid "Radius:" msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crear Polígono y UV" +msgstr "Copiar Polígono a UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir a Polygon2D" +msgstr "Copiar UV al Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -7878,9 +7906,8 @@ msgid "New Animation" msgstr "Nueva Animación" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Velocidad (FPS):" +msgstr "Velocidad:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -8198,13 +8225,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic izq: Dibujar línea\n" -"Shift + Ctrl + Clic izq: Pintar Rectángulo" +"Shift+Click izq: Dibujar línea\n" +"Shift+Command+Click der: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8359,10 +8385,22 @@ msgid "Create a new rectangle." msgstr "Crear un rectángulo nuevo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuevo Rectángulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nuevo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuevo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Eliminar Formas Seleccionadas" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantener el polígono dentro del region Rect." @@ -8569,10 +8607,6 @@ msgid "Error" msgstr "Error" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "No se indicó ningún mensaje de commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "No se agregaron archivos al stage" @@ -8629,10 +8663,6 @@ msgid "Stage All" msgstr "Hacer Staging de Todo" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Agregar mensaje de commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Commitear Cambios" @@ -8730,9 +8760,8 @@ msgid "Add Node to Visual Shader" msgstr "Agregar Nodo al Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Movido" +msgstr "Nodo(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8752,9 +8781,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Se cambió el Tipo de Entrada de Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Asignar Nombre a Uniform" +msgstr "Nombre de UniformRef Cambiado" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9474,7 +9502,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Una referencia a un uniform existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9844,6 +9872,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "No soportado por tus drivers de GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10453,19 +10485,16 @@ msgid "Batch Rename" msgstr "Renombrar en Masa" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Reemplazar: " +msgstr "Reemplazar:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "Prefijo" +msgstr "Prefijo:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "Sufijo" +msgstr "Sufijo:" #: editor/rename_dialog.cpp msgid "Use Regular Expressions" @@ -10512,9 +10541,9 @@ msgid "Per-level Counter" msgstr "Contador Por Nivel" #: editor/rename_dialog.cpp -#, fuzzy msgid "If set, the counter restarts for each group of child nodes." -msgstr "Si esta activo el contador reinicia por cada grupo de nodos hijos" +msgstr "" +"Si está activado, el contador se reinicia por cada grupo de nodos hijos." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10573,9 +10602,8 @@ msgid "Reset" msgstr "Resetear" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Error de Expresión Regular" +msgstr "Error de Expresión Regular:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -12131,6 +12159,10 @@ msgstr "" "Configuración del Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "¡No se encontró el directorio 'platform-tools'!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12182,18 +12214,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "La Expansión APK no es compatible con Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export.cpp msgid "" @@ -12232,13 +12266,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Moviendo salida" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"No se puede copiar y renombrar el archivo de exportación, comprobá el " +"directorio del proyecto de gradle para ver los resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12307,7 +12343,7 @@ msgstr "Nombre único de paquete inválido." #: platform/uwp/export/export.cpp msgid "Invalid package publisher display name." -msgstr "Nombre de paquete de publisher inválido." +msgstr "Nombre de paquete de editor inválido." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12437,6 +12473,26 @@ msgstr "" "Animar CPUParticles2D requiere el uso de un CanvasItemMaterial con " "\"Particles Animation\" activado." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "El nodo A y el nodo B deben ser PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "El nodo A debe ser un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "El nodo B debe ser un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "La unión no está conectada a dos PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "El Nodo A y el Nodo B deben ser diferentes PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12701,7 +12757,7 @@ msgstr "" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "InterpolatedCamera ha sido deprecado y será eliminado en Godot 4.0." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12769,6 +12825,26 @@ msgstr "" "sobreescritos por el motor de física al ejecutar.\n" "Cambiá el tamaño de los collision shapes hijos." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "El nodo A y el nodo B deben ser PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "El nodo A debe ser un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "El nodo B debe ser un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "La unión no está conectada a ningún PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "El nodo A y el nodo B deben ser diferentes PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12931,6 +13007,11 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirmá, por favor..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Activar Ajuste" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13011,6 +13092,24 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Search complete" +#~ msgstr "Búsqueda completa" + +#~ msgid "No commit message was provided" +#~ msgstr "No se indicó ningún mensaje de commit" + +#~ msgid "Add a commit message" +#~ msgstr "Agregar mensaje de commit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error al tratar de guardar el layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Se ha sobreescrito el layout del editor por defecto." + #~ msgid "Move pivot" #~ msgstr "Mover pivote" diff --git a/editor/translations/et.po b/editor/translations/et.po index 0059926322..0c8f6e7de6 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -1,6 +1,6 @@ # Estonian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Jens <arrkiin@gmail.com>, 2019. # Mattias Aabmets <mattias.aabmets@gmail.com>, 2019. @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-09-01 10:38+0000\n" +"PO-Revision-Date: 2020-12-02 09:52+0000\n" "Last-Translator: StReef <streef.gtx@gmail.com>\n" "Language-Team: Estonian <https://hosted.weblate.org/projects/godot-engine/" "godot/et/>\n" @@ -17,7 +17,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 4.2.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1009,14 +1009,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1061,7 +1064,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2274,11 +2277,16 @@ msgid "Error saving TileSet!" msgstr "Viga TileSeti salvestamisel!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Viga paigutuse salvestamisel!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2286,7 +2294,8 @@ msgid "Layout name not found!" msgstr "Paigutuse nime ei leitud!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Taastati vaikepaigutus baasseadetesse." #: editor/editor_node.cpp @@ -2557,7 +2566,7 @@ msgstr "Vaikimisi" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp msgid "Show in FileSystem" -msgstr "" +msgstr "Kuva failikuvajas" #: editor/editor_node.cpp msgid "Play This Scene" @@ -3573,6 +3582,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3620,14 +3639,6 @@ msgstr "Redigeeri sõltuvusi..." msgid "View Owners..." msgstr "Kuva omanikud..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Muuda nime..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikeeri..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Teisalda..." @@ -3655,11 +3666,16 @@ msgid "Collapse All" msgstr "Ahenda kõik" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Nimeta ümber" +msgid "Duplicate..." +msgstr "Duplikeeri..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Muuda nime..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3692,8 +3708,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Nimeta ümber" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3759,7 +3778,15 @@ msgid "Searching..." msgstr "Otsin..." #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -3948,7 +3975,7 @@ msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Save As..." -msgstr "" +msgstr "Salvest kui..." #: editor/inspector_dock.cpp msgid "Copy Params" @@ -5270,7 +5297,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "" +msgstr "Valimisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5291,17 +5318,17 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Liigutamisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Pööramisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "" +msgstr "Skaleerimisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5336,7 +5363,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Grid Snap" -msgstr "" +msgstr "Kasuta ruudustiku naksamist" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" @@ -5394,7 +5421,7 @@ 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 "Lukusta valitud objekt praegusele kohale (seda ei saa liigutada)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6542,7 +6569,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." -msgstr "" +msgstr "Uus tekstifail..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6550,7 +6577,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "" +msgstr "Salvesta fail kui..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." @@ -6583,7 +6610,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "" +msgstr "Salvesta teema kui..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" @@ -6637,19 +6664,19 @@ msgstr "Eelmine skript" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Fail" #: editor/plugins/script_editor_plugin.cpp msgid "Open..." -msgstr "" +msgstr "Ava..." #: editor/plugins/script_editor_plugin.cpp msgid "Reopen Closed Script" -msgstr "" +msgstr "Taasava suletud skript" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Salvesta kõik" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -7164,11 +7191,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Kuva tavaliselt" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Kuva traadiraamina" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" @@ -7176,7 +7203,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "Kuva varjutamata" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -7192,7 +7219,7 @@ msgstr "Kuva informatsioon" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" -msgstr "" +msgstr "Kuva kaardisagedus" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7200,7 +7227,7 @@ msgstr "Poolresolutioon" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Heli kuulaja" #: editor/plugins/spatial_editor_plugin.cpp msgid "Enable Doppler" @@ -7286,11 +7313,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "" +msgstr "Kasuta kohalikku ruumi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "Kasuta naksamist" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8078,10 +8105,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Uus stseen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Kustuta valitud võti (võtmed)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8270,10 +8311,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8332,10 +8369,6 @@ msgid "Stage All" msgstr "Vali Kõik" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9454,6 +9487,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9963,7 +10000,7 @@ msgstr "" #: editor/property_editor.cpp msgid "File..." -msgstr "" +msgstr "Fail..." #: editor/property_editor.cpp msgid "Dir..." @@ -10254,7 +10291,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "" +msgstr "Salvesta uus stseen kui..." #: editor/scene_tree_dock.cpp msgid "" @@ -10463,7 +10500,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Open Script:" -msgstr "" +msgstr "Ava skript:" #: editor/scene_tree_editor.cpp msgid "" @@ -10479,7 +10516,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Sea nähtavus sisse/välja" #: editor/scene_tree_editor.cpp msgid "" @@ -11613,6 +11650,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11865,6 +11906,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12125,6 +12186,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12259,6 +12340,10 @@ msgstr "" msgid "Please Confirm..." msgstr "Palun kinnita..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12327,5 +12412,8 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstante ei saa muuta." +#~ msgid "Error trying to save layout!" +#~ msgstr "Viga paigutuse salvestamisel!" + #~ msgid "Not in resource path." #~ msgstr "Ei ole ressursiteel." diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 7e4389b87b..dff34d3f00 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -1,6 +1,6 @@ # Basque translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Julen Irazoki <rktzbkr.julen@gmail.com>, 2019. # Osoitz <oelkoro@gmail.com>, 2019, 2020. @@ -1000,15 +1000,20 @@ msgid "Owners Of:" msgstr "Hauen jabeak:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Kendu hautatutako fitxategiak proiektutik? (Ezin izango da berreskuratu)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Kendu beharreko fitxategiak beste baliabide batzuek behar dituzte funtziona " "dezaten.\n" @@ -1056,7 +1061,7 @@ msgstr "Baliabide umezurtzen arakatzailea" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2239,11 +2244,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2251,7 +2261,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3533,6 +3543,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3580,14 +3600,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3615,10 +3627,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3654,7 +3671,10 @@ msgid "Move" msgstr "Mugitu" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3721,7 +3741,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8042,10 +8070,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ezabatu hautatutako gakoak" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8235,10 +8276,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8295,10 +8332,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9417,6 +9450,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11582,6 +11619,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11834,6 +11875,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12094,6 +12155,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12228,6 +12309,11 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Gaitu atxikitzea" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/extract.py b/editor/translations/extract.py index 93124ec30c..8702ac664c 100755 --- a/editor/translations/extract.py +++ b/editor/translations/extract.py @@ -36,8 +36,8 @@ unique_loc = {} ctx_group = {} # Store msgctx, msg, and locations. main_po = """ # LANGUAGE translation of the Godot Engine editor. -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 1ed888fded..a97774e993 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -1,6 +1,6 @@ # Persian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # alabd14313 <alabd14313@yahoo.com>, 2016. # Dante Marshal <Marshal.Devilhunter@gmail.com>, 2018. @@ -17,12 +17,14 @@ # Farshad Faemiyi <ffaemiyi@gmail.com>, 2020. # Pikhosh <pikhosh@gmail.com>, 2020. # MSKF <walkingdeadstudio@outlook.com>, 2020. +# Ahmad Maftoun <CarCedo.Pro@gmail.com>, 2020. +# ItzMiad44909858f5774b6d <maidggg@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" -"Last-Translator: Pikhosh <pikhosh@gmail.com>\n" +"PO-Revision-Date: 2020-11-08 10:26+0000\n" +"Last-Translator: MSKF <walkingdeadstudio@outlook.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" @@ -30,7 +32,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 4.3.1-dev\n" +"X-Generator: Weblate 4.3.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -443,7 +445,7 @@ msgstr "مسیر قطعه نامعتبر، پس نمیتوان یک کلید #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "آهنگ از نوع مکانی نیست ، نمی تواند کلید را وارد کند" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -670,11 +672,11 @@ 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" @@ -735,7 +737,7 @@ 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 @@ -790,7 +792,7 @@ 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 @@ -833,6 +835,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" @@ -840,7 +844,7 @@ msgstr "تک نما" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +msgstr "سیگنال را پس از اولین انتشار آن قطع می کند." #: editor/connections_dialog.cpp msgid "Cannot connect signal" @@ -907,13 +911,12 @@ msgid "Signals" msgstr "سیگنالها" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "صافی کردن گرهها" +msgstr "صافی کردن گرههاسیگنال ها را فیلتر کنید" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "آیا مطمئن هستید که می خواهید همه اتصالات را از این سیگنال حذف کنید؟" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -1037,14 +1040,19 @@ msgid "Owners Of:" msgstr "مالکانِ:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "آیا پروندههای انتخاب شده از طرح حذف شوند؟ (نمیتوان بازیابی کرد)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "پروندههایی که میخواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار " "کنند.\n" @@ -1092,7 +1100,7 @@ msgstr "پویندهی منبع جدا افتاده" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1154,14 +1162,12 @@ msgid "Gold Sponsors" msgstr "حامیان طلایی (درجه ۲)" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "اهداکنندگان نقرهای" +msgstr "حامیان نقره ای" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "اهداکنندگان برنزی" +msgstr "اهداکنندگان برنزیحامیان مالی" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1316,7 +1322,6 @@ msgid "Bypass" msgstr "گذرگاه فرعی" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus options" msgstr "گزینه های اتوبوس" @@ -1364,27 +1369,27 @@ msgstr "انتقال صدای خطی" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "" +msgstr "ذخیره طرح اتوبوس صوتی به عنوان ..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." -msgstr "" +msgstr "مکان برای طرح جدید ..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "چیدمان اتوبوس صوتی را باز کنید" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "" +msgstr "پرونده '٪ s' وجود ندارد." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" -msgstr "" +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" @@ -1392,11 +1397,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 "یک Audio Bus جدید به این طرح اضافه کنید." #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp @@ -1406,7 +1411,7 @@ msgstr "بارگیری" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "چیدمان اتوبوس موجود را بارگیری کنید." #: editor/editor_audio_buses.cpp msgid "Save As" @@ -1414,7 +1419,7 @@ msgstr "ذخیره در" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "این طرح Bus را در یک پرونده ذخیره کنید." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1422,11 +1427,11 @@ 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." @@ -1467,23 +1472,23 @@ 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 editor/editor_plugin_settings.cpp msgid "Enable" -msgstr "" +msgstr "روشن" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "تنظیم مجدد بارهای خودکار" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "" +msgstr "اضافه کردن خودکار امکان پذیر نیست:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1512,19 +1517,19 @@ msgstr "سینگلتون" #: editor/editor_data.cpp editor/inspector_dock.cpp msgid "Paste Params" -msgstr "" +msgstr "چسباندن پارام ها" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "صحنه به روز می شود" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "" +msgstr "ذخیره تغییرات محلی ..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "" +msgstr "صحنه به روز می شود ..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1532,15 +1537,15 @@ msgstr "[پوچ]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[ذخیره نشده]" #: editor/editor_dir_dialog.cpp 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 @@ -1562,7 +1567,7 @@ msgstr "ناتوان در ساختن پوشه." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "انتخاب کنید" #: editor/editor_export.cpp msgid "Storing File:" @@ -2281,11 +2286,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2293,7 +2303,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3614,6 +3624,16 @@ msgid "Name contains invalid characters." msgstr "کاراکترهای معتبر:" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "تغییر متغیر" @@ -3668,15 +3688,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "تغییر نام..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "انتخاب شده را به دو تا تکثیر کن" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3708,11 +3719,18 @@ msgid "Collapse All" msgstr "بستن" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "تغییر نام" +#, fuzzy +msgid "Duplicate..." +msgstr "انتخاب شده را به دو تا تکثیر کن" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "بارگیری خودکار را انجام دهید" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "تغییر نام..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3749,8 +3767,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "تغییر نام" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3826,8 +3847,18 @@ msgstr "جستجو" #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "جستجوی متن" +msgid "%d match in %d file." +msgstr "%d همخوانی." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d همخوانی." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d همخوانی." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8337,9 +8368,8 @@ msgid "Occlusion" msgstr "ویرایش سیگنال" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "گره انیمیشن" +msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" @@ -8414,10 +8444,25 @@ msgstr "ساختن %s جدید" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "صحنه جدید" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "انتخاب شده را تغییر مقیاس بده" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "ویرایش سیگنال" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "حذف انتخاب شده" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8630,10 +8675,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8698,10 +8739,6 @@ msgid "Stage All" 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 "تغییر بده" @@ -8928,9 +8965,8 @@ msgid "SoftLight operator." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color constant." -msgstr "ثابت" +msgstr "مقدار ثابت رنگ" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8943,15 +8979,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "مساوی (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "بزرگتر از (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "بزرگتر یا برابر (=<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8973,15 +9009,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "کمتر از (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "کمتر یا مساوی (=>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "نا مساوی (=!)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9017,7 +9053,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Input parameter." -msgstr "" +msgstr "پارامتر ورودی." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." @@ -9668,7 +9704,7 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "" +msgstr "ویژگیها" #: editor/project_export.cpp msgid "Custom (comma-separated):" @@ -9871,6 +9907,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10383,7 +10423,7 @@ msgstr "AutoLoad" #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "پلاگین ها" +msgstr "افزونهها" #: editor/property_editor.cpp msgid "Preset..." @@ -12087,11 +12127,11 @@ 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: " @@ -12129,11 +12169,11 @@ msgstr "حذف گره اسکریپتِ دیداری" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "گرفتن %s" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "تنظیم %s" #: platform/android/export/export.cpp msgid "Package name is missing." @@ -12188,6 +12228,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12471,6 +12515,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12765,6 +12829,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12873,7 +12957,7 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." -msgstr "" +msgstr "یک رنگ از پنجره ویرایشگر بردارید" #: scene/gui/color_picker.cpp msgid "HSV" @@ -12912,6 +12996,10 @@ msgstr "هشدار!" msgid "Please Confirm..." msgstr "لطفاً تأیید کنید…" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -12925,7 +13013,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "" +msgstr "اگر \"Exp ویرایش\" فعال است, \"حداقل داده\" باید بزرگتر از 0 باشد." #: scene/gui/scroll_container.cpp msgid "" @@ -12992,6 +13080,10 @@ msgid "Constants cannot be modified." msgstr "ثوابت قابل تغییر نیستند." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "جستجوی متن" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "برداشتن نقطه" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 6531c986c9..4ff9685447 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -1,6 +1,6 @@ # Finnish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # basse <basse@roiske.org>, 2017. # Bastian Salmela <bastian.salmela@gmail.com>, 2017, 2018. @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-03 15:29+0000\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -24,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1029,18 +1029,25 @@ msgid "Owners Of:" msgstr "Omistajat kohteelle:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Poista valitut tiedostot projektista? (Ei voida palauttaa)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Poista valitut tiedostot projektista? (ei voida kumota)\n" +"Löydät poistetut tiedostot järjestelmän roskakorista, mikäli haluat " +"palauttaa ne." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Poistettavaksi merkittyjä tiedostoja tarvitaan muiden resurssien " -"toimivuuteen.\n" -"Poistetaanko silti? (ei mahdollisuutta kumota)" +"Poistettavia tiedostoja tarvitaan muiden resurssien toimivuuteen.\n" +"Poistetaanko silti? (ei voida kumota)\n" +"Löydät poistetut tiedostot järjestelmän roskakorista, mikäli haluat " +"palauttaa ne." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1084,7 +1091,7 @@ msgstr "Irrallisten resurssien hallinta" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1595,34 +1602,31 @@ msgstr "" "Enabled' asetus." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"GLES2 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc' " -"päälle projektin asetuksista." +"GLES2 tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta. Kytke 'Import " +"Pvrtc' päälle projektin asetuksista." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"GLES3 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc " -"2' päälle projektin asetuksista." +"GLES3 tarvitsee kohdealustalla 'ETC2' tai 'PVRTC' tekstuuripakkausta. Kytke " +"'Import Etc 2' tai 'Import Pvrtc' päälle projektin asetuksista." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"GLES2 vara-ajuri tarvitsee kohdealustalla 'ETC' tekstuuripakkausta.\n" -"Kytke 'Import Etc' päälle projektin asetuksista tai poista 'Driver Fallback " -"Enabled' asetus." +"GLES2 vara-ajuri tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta.\n" +"Kytke 'Import Pvrtc' päälle projektin asetuksista tai poista 'Driver " +"Fallback Enabled' asetus." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2305,19 +2309,29 @@ msgid "Error saving TileSet!" msgstr "Virhe tallennettaessa laattavalikoimaa!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Virhe tallennettaessa asettelua!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Editorin asettelua tallentaessa tapahtui virhe.\n" +"Varmista, että editorin käyttäjädatapolku on kirjoituskelpoinen." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Editorin oletusasettelu ylikirjoitettu." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Ylikirjoitettiin editorin oletusasettelu.\n" +"Palauttaaksesi oletusasettelun alkuperäisiin asetuksiinsa, käytä Poista " +"asettelu -valintaa ja poista oletusasettelu." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Asettelun nimeä ei löytynyt!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Palautettiin oletusasettelu alkuperäisiin asetuksiinsa." #: editor/editor_node.cpp @@ -3686,6 +3700,22 @@ msgid "Name contains invalid characters." msgstr "Nimi sisältää virheellisiä kirjainmerkkejä." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Seuraavat tiedostot tai kansiot ovat ristiriidassa kohdesijainnissa '%s' " +"olevien kanssa:\n" +"\n" +"%s\n" +"\n" +"Haluatko ylikirjoittaa ne?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Nimetään tiedosto uudelleen:" @@ -3733,14 +3763,6 @@ msgstr "Muokkaa riippuvuuksia..." msgid "View Owners..." msgstr "Tarkastele omistajia..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Nimeä uudelleen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Kahdenna..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Siirrä..." @@ -3768,11 +3790,16 @@ msgid "Collapse All" msgstr "Tiivistä kaikki" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Nimeä uudelleen" +msgid "Duplicate..." +msgstr "Kahdenna..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Siirrä roskakoriin" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Nimeä uudelleen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3807,8 +3834,11 @@ msgid "Move" msgstr "Siirrä" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Tästä sijainnista löytyy jo samanniminen tiedosto tai kansio." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Nimeä uudelleen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3876,8 +3906,19 @@ msgid "Searching..." msgstr "Haetaan..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Haku valmis" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d osumaa." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d osumaa." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d osumaa." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5211,50 +5252,43 @@ msgstr "Luo vaaka- ja pystysuorat apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Aseta CanvasItem \"%s\" keskiöksi (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Kierrä CanvasItemiä" +msgstr "Kierrä %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Kierrä CanvasItemiä" +msgstr "Kierrä CanvasItem \"%s\":ä %d astetta" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä CanvasItem \"%s\":n ankkuri" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Skaalaa Node2D \"%s\" kokoon (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Muuta Control \"%s\" kokoon (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Skaalaa CanvasItemiä" +msgstr "Skaalaa %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Skaalaa CanvasItemiä" +msgstr "Skaalaa CanvasItem \"%s\" kokoon (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä CanvasItem \"%s\" koordinaattiin (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6535,18 +6569,16 @@ msgid "Move Points" msgstr "Siirrä pisteitä" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Vedä: Kierrä" +msgstr "Komentonäppäin: Kierrä" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Siirrä kaikkia" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Skaalaa" +msgstr "Shift+komentonäppäin: Skaalaa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6594,14 +6626,12 @@ msgid "Radius:" msgstr "Säde:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Luo polygoni ja UV" +msgstr "Kopioi polygoni UV:hen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Muunna Polygon2D solmuksi" +msgstr "Kopioi UV Polygon solmulle" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8149,13 +8179,12 @@ msgid "Paint Tile" msgstr "Maalaa laatta" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+Hiiren vasen: Piirrä viiva\n" -"Shift+Ctrl+Hiiren vasen: Suorakaidemaalaus" +"Shift+Hiiren vasen: Viivanpiirto\n" +"Shift+Komentonäppäin+Hiiren vasen: Suorakaidemaalaus" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8310,10 +8339,22 @@ msgid "Create a new rectangle." msgstr "Luo uusi suorakulmio." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Uusi suorakaide" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Luo uusi polygoni." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Uusi polygoni" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Poista valittu muoto" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Pidä polygoni alueen suorakulmion sisällä." @@ -8520,10 +8561,6 @@ msgid "Error" msgstr "Virhe" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Muutosviestiä ei annettu" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Tiedostoja ei ole lisätty valmisteluun" @@ -8580,10 +8617,6 @@ msgid "Stage All" msgstr "Valmistele kaikki" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Lisää muutosviesti" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Vahvista muutokset" @@ -8683,9 +8716,8 @@ msgid "Add Node to Visual Shader" msgstr "Lisää solmu Visual Shaderiin" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Solmu siirretty" +msgstr "Solmu(t) siirretty" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8705,9 +8737,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual Shaderin syötteen tyyppi vaihdettu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Aseta uniformin nimi" +msgstr "UniformRef nimi muutettu" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9420,7 +9451,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Viittaus olemassa olevaan uniformiin." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9789,6 +9820,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Ei ole tuettu asennettujen GPU-ajureiden kanssa." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12060,6 +12095,10 @@ msgstr "" "asetuksissa." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "'platform-tools' hakemisto puuttuu!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12114,18 +12153,23 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" on käyttökelpoinen vain, kun \"Use Custom Build\" asetus on " +"päällä." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Virheellinen tiedostonimi! Android App Bundle tarvitsee *.aab " +"tiedostopäätteen." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion ei ole yhteensopiva Android App Bundlen kanssa." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen." #: platform/android/export/export.cpp msgid "" @@ -12162,13 +12206,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Siirretään tulostetta" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Vientitiedoston kopiointi ja uudelleennimeäminen ei onnistu, tarkista " +"tulosteet gradle-projektin hakemistosta." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12356,6 +12402,26 @@ msgstr "" "CPUParticles2D animaatio edellyttää CanvasItemMaterial käyttöä niin että " "\"Particles Animation\" on kytketty päälle." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Solmujen A ja B tulee olla PhysicsBody2D tyyppisiä" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Solmun A tulee olla PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Solmun B tulee olla PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Liitos ei ole yhdistetty kahteen PhysicsBody2D solmuun" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Solmujen A ja B tulee olla eri PhysicsBody2D solmut" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12686,6 +12752,26 @@ msgstr "" "jäykkätilassa) ajon aikana.\n" "Muuta sen sijaan solmun alla olevia törmäysmuotoja." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Solmujen A ja B tulee olla PhysicsBody tyyppisiä" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Solmun A tulee olla PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Solmun B tulee olla PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Liitos ei ole yhdistetty mihinkään PhysicsBody solmuun" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Solmujen A ja B tulee olla eri PhysicsBody solmut" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12846,6 +12932,11 @@ msgstr "Huomio!" msgid "Please Confirm..." msgstr "Ole hyvä ja vahvista..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Käytä tarttumista" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12927,6 +13018,39 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." msgid "Constants cannot be modified." msgstr "Vakioita ei voi muokata." +#~ msgid "Search complete" +#~ msgstr "Haku valmis" + +#~ msgid "No commit message was provided" +#~ msgstr "Muutosviestiä ei annettu" + +#~ msgid "Add a commit message" +#~ msgstr "Lisää muutosviesti" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Tästä sijainnista löytyy jo samanniminen tiedosto tai kansio." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "'build-tools' hakemisto puuttuu!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "zipalign työkalua ei löydy." + +#~ msgid "Aligning APK..." +#~ msgstr "Tasataan APK:ta..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK:n tasausta ei saatu suoritettua loppuun." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Tasaamattoman APK:n poisto ei onnistu." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Virhe tallennettaessa asettelua!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Editorin oletusasettelu ylikirjoitettu." + #~ msgid "Move pivot" #~ msgstr "Siirrä keskikohtaa" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 2db2e9676c..b024a86272 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -1,6 +1,6 @@ # Filipino translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Marco Santos <enum.scima@gmail.com>, 2019. # Amado Wilkins <epicalert68@gmail.com>, 2019. @@ -1009,14 +1009,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1061,7 +1064,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2242,11 +2245,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2254,7 +2262,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3535,6 +3543,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3582,14 +3600,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3617,10 +3627,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3654,7 +3669,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3721,7 +3739,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8046,10 +8072,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Burahin ang (mga) Napiling Key" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8238,10 +8277,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8299,10 +8334,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9422,6 +9453,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11585,6 +11620,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11837,6 +11876,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12097,6 +12156,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12231,6 +12310,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 75d4c1cfea..6b43079359 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -1,6 +1,6 @@ # French translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Antoine Carrier <ac.g392@gmail.com>, 2017-2018. # ARocherVj <a.rocher.vj@gmail.com>, 2017. @@ -75,12 +75,14 @@ # Julien Humbert <julroy67@gmail.com>, 2020. # Nathan <bonnemainsnathan@gmail.com>, 2020. # Léo Vincent <l009.vincent@gmail.com>, 2020. +# Joseph Boudou <joseph.boudou@matabio.net>, 2020. +# Vincent Foulon <vincent.foulon80@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-28 11:18+0000\n" -"Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n" +"PO-Revision-Date: 2020-12-16 09:41+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" @@ -88,7 +90,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1107,19 +1109,26 @@ msgid "Owners Of:" msgstr "Propriétaires de :" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Supprimer les fichiers sélectionnés du projet ? (restauration impossible)" +"Supprimer les fichiers sélectionnés du projet ? (annulation impossible)\n" +"Vous pouvez retrouver les fichiers supprimés dans la corbeille du système " +"pour les restaurer." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Les fichiers qui vont être supprimés sont utilisés par d'autres ressources " "pour leur fonctionnement.\n" -"Les supprimer tout de même ? (annulation impossible)" +"Les supprimer tout de même ? (annulation impossible)\n" +"Vous pouvez retrouver les fichiers supprimés dans la corbeille du système " +"pour les restaurer." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1163,7 +1172,7 @@ msgstr "Explorateur de ressources orphelines" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1674,34 +1683,31 @@ msgstr "" "Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plate-forme cible nécessite une compression de texture 'ETC' pour GLES2. " -"Activez 'Import Etc' dans les paramètres du projet." +"La plate-forme cible nécessite une compression de texture « ETC » pour " +"GLES2. Activez « Import Etc » dans les paramètres du projet." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plate-forme cible nécessite une compression de texture 'ETC2' pour GLES3. " -"Activez 'Import Etc 2' dans les Paramètres du projet." +"La plate-forme cible nécessite une compression de texture « ETC2 » pour " +"GLES3. Activez « Import Etc 2 » dans les Paramètres du projet." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plate-forme cible nécessite une compression de texture ' ETC ' pour le " +"La plate-forme cible nécessite une compression de texture ' PVRTC ' pour le " "fallback pilote de GLES2.\n" -"Activez 'Import Etc' dans les paramètres du projet, ou désactivez 'Driver " +"Activez 'Import Pvrtc' dans les paramètres du projet, ou désactivez 'Driver " "Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2384,20 +2390,33 @@ msgid "Error saving TileSet!" msgstr "Erreur d'enregistrement du TileSet !" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erreur d'enregistrement de la disposition !" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Une erreur s'est produite lors de l'enregistrement de la disposition de " +"l'éditeur.\n" +"Assurez-vous que le chemin de données utilisateur de l'éditeur est " +"accessible en écriture." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Disposition de l'éditeur par défaut remplacée." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Mise en page par défaut de l'éditeur modifiée.\n" +"Pour rétablir la mise en page par défaut dans ses paramètres de base, " +"utilisez l'option Supprimer la mise en page et supprimez la mise en page par " +"défaut." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nom de la disposition non trouvé !" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Disposition par défaut remise à zéro." +msgid "Restored the Default layout to its base settings." +msgstr "Disposition par défaut remise à ses paramètres de base." #: editor/editor_node.cpp msgid "" @@ -3796,6 +3815,22 @@ msgid "Name contains invalid characters." msgstr "Le nom contient des caractères invalides." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Les fichiers ou dossiers suivants entrent en conflit avec des éléments de la " +"destination '%s' :\n" +"\n" +"%s\n" +"\n" +"Souhaitez-vous les écraser ?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renommer le fichier :" @@ -3843,14 +3878,6 @@ msgstr "Modifier les dépendances…" msgid "View Owners..." msgstr "Voir les propriétaires…" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renommer..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dupliquer…" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Déplacer vers…" @@ -3878,11 +3905,16 @@ msgid "Collapse All" msgstr "Réduire tout" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renommer" +msgid "Duplicate..." +msgstr "Dupliquer…" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Déplacer vers la corbeille" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renommer..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3917,9 +3949,11 @@ msgid "Move" msgstr "Déplacer" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Il existe déjà un fichier ou un dossier ayant le même nom à cet emplacement." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renommer" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3987,8 +4021,16 @@ msgid "Searching..." msgstr "Recherche…" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Recherche terminée" +msgid "%d match in %d file." +msgstr "%d correspondance dans %d fichier." + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "%d correspondances dans %d fichier." + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." +msgstr "%d correspondances dans %d fichiers." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5328,50 +5370,43 @@ msgstr "Créer de nouveaux guides horizontaux et verticaux" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Décalage pivot du CanvasItem « %s » défini à (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Pivoter l'élément de canevas" +msgstr "Pivoter %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Pivoter l'élément de canevas" +msgstr "Pivoter le CanvasItem \"%s\" de %d degrés" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer l'ancre du CanvasItem « %s »" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Mettre à l'échelle le Node2D « %s » vers (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionner le Contrôle « %s » vers (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Mise à l'échelle de CanvasItem" +msgstr "Mettre à l'échelle le CanvasItem %d" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Mise à l'échelle de CanvasItem" +msgstr "Mettre à l'échelle le CanvasItem « %s » vers (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer le CanvasItem « %s » vers (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6667,18 +6702,16 @@ msgid "Move Points" msgstr "Déplacer de points" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Glisser : tourner" +msgstr "Commande : Rotation" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Maj : Tout déplacer" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Maj+Contrôle : Mettre à l'échelle" +msgstr "Shift + Commande : Mettre à l'échelle" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6726,14 +6759,12 @@ msgid "Radius:" msgstr "Rayon :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Créer un polygone & UV" +msgstr "Copier le polygone dans l'UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir en Polygon2D" +msgstr "Copier l'UV dans le polygone" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8285,13 +8316,12 @@ msgid "Paint Tile" msgstr "Peindre la tuile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic gauche : Dessiner une ligne\n" -"Shift + Ctrl + Clic gauche : Dessiner un rectangle" +"Maj + Clic droit : Dessiner une ligne\n" +"Maj + Commande + Clic droit : Dessiner un rectangle" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8446,12 +8476,24 @@ msgid "Create a new rectangle." msgstr "Créer un nouveau rectangle." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nouveau rectangle" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Créer un nouveau polygone." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nouveau polygone" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Supprimer la forme sélectionée" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "Circonscrire le polygone dans le Rect de région." +msgstr "Circonscrire le polygone dans le rectangle de région." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." @@ -8658,10 +8700,6 @@ msgid "Error" msgstr "Erreur" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Aucun message de livraison n'a été fourni" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Aucun fichier à ajouter" @@ -8718,10 +8756,6 @@ msgid "Stage All" msgstr "Tout ajouter" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Ajouter un message de livraison" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Commiter les changements" @@ -8821,9 +8855,8 @@ msgid "Add Node to Visual Shader" msgstr "Ajouter un nœud au Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nœud déplacé" +msgstr "Nœud(s) déplacé(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8843,9 +8876,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Type d’entrée Visual Shader changée" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Définir le nom de l'uniforme" +msgstr "Nom UniformRef modifié" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9567,7 +9599,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Une référence à un uniform existant." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9938,6 +9970,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Non supporté par les drivers de votre carte graphique." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12227,6 +12263,10 @@ msgstr "" "paramètres de l'éditeur." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Dossier « platform-tools » manquant !" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12279,18 +12319,26 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"« Export AAB » est valide uniquement lorsque l'option « Use Custom Build » " +"est activée." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nom de fichier invalide ! Le bundle d'application Android nécessite " +"l'extension *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" +"L'expansion de fichier APK n'est pas compatible avec le bundle d'application " +"Android." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Nom de fichier invalide ! Les fichiers APK d'Android nécessitent l'extension " +"*.apk." #: platform/android/export/export.cpp msgid "" @@ -12329,13 +12377,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Déplacement du résultat" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Impossible de copier et de renommer le fichier d'export, vérifiez le dossier " +"du projet gradle pour les journaux." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12534,6 +12584,26 @@ msgstr "" "L'animation de CPUParticles2D a besoin d'un CanvasItemMaterial avec " "« Particles Animation » activé." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A et Node B doivent être des PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A doit être un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B doit être un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Le Joint n'est pas connecté à deux PhysicsBody2Ds" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A et Node B doivent être des PhysicsBody2D différents" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12874,6 +12944,26 @@ msgstr "" "rigide) seront remplacées par le moteur physique lors de l'exécution.\n" "Modifiez la taille dans les formes de collision enfant à la place." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A et Node B doivent être des PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A doit être un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B doit être un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Le joint n'est connecté à aucun PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A et Node B doivent être des PhysicsBody différents" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13037,6 +13127,11 @@ msgstr "Alerte !" msgid "Please Confirm..." msgstr "Veuillez confirmer…" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Activer l'alignement" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13121,6 +13216,41 @@ 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 "Search complete" +#~ msgstr "Recherche terminée" + +#~ msgid "No commit message was provided" +#~ msgstr "Aucun message de livraison n'a été fourni" + +#~ msgid "Add a commit message" +#~ msgstr "Ajouter un message de livraison" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Il existe déjà un fichier ou un dossier ayant le même nom à cet " +#~ "emplacement." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Dossier « build-tools » manquant !" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Impossible de trouver l'outil zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Alignement de l'APK…" + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Impossible d'effectuer l'alignement de l'APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Impossible de supprimer l'APK non aligné." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erreur d'enregistrement de la disposition !" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Disposition de l'éditeur par défaut remplacée." + #~ msgid "Move pivot" #~ msgstr "Déplacer le pivot" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 17b0134def..f9fab95696 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -1,6 +1,6 @@ # Irish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Rónán Quill <ronan085@gmail.com>, 2019, 2020. msgid "" @@ -1002,14 +1002,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1054,7 +1057,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2236,11 +2239,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2248,7 +2256,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3528,6 +3536,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3575,14 +3593,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3610,10 +3620,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3647,7 +3662,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3715,7 +3733,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8041,10 +8067,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8233,10 +8271,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8295,10 +8329,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9418,6 +9448,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11582,6 +11616,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11834,6 +11872,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12094,6 +12152,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12228,6 +12306,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/he.po b/editor/translations/he.po index 1a4c5ee05d..57746c75b0 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -1,6 +1,6 @@ # Hebrew translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Daniel <lorddaniel09@gmail.com>, 2018. # Ben Golan <golanben4@gmail.com>, 2017. @@ -17,12 +17,13 @@ # Ziv D <wizdavid@gmail.com>, 2020. # yariv benj <yariv4400@gmail.com>, 2020. # Guy Dadon <guydadon14@gmail.com>, 2020. +# bruvzg <bruvzg13@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" -"Last-Translator: Guy Dadon <guydadon14@gmail.com>\n" +"PO-Revision-Date: 2020-12-03 19:28+0000\n" +"Last-Translator: Ziv D <wizdavid@gmail.com>\n" "Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/" "godot/he/>\n" "Language: he\n" @@ -31,7 +32,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -50,7 +51,7 @@ 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)" @@ -58,7 +59,7 @@ msgstr "'self' לא ניתן לשימוש כי המופע הינו 'null' ( לא #: 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" @@ -70,7 +71,7 @@ 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':" @@ -1040,14 +1041,17 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "להסיר את הקבצים הנבחרים מהמיזם? (אי אפשר לשחזר)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1094,7 +1098,7 @@ msgstr "דפדפן משאבים יתומים" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1740,7 +1744,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." -msgstr "שגיאה בשמירת פרופיל לנתיב 's%'." +msgstr "שגיאה בשמירת פרופיל לנתיב '%s'." #: editor/editor_feature_profile.cpp msgid "Unset" @@ -2046,8 +2050,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"כרגע אין תיאור למאפיין זה. בבקשה עזור לנו על-ידי [/color][/url]כתיבת " -"תיאור[url=$url][color=$color]!" +"כרגע אין תיאור למאפיין זה. בבקשה עזור לנו על-ידי [color=$color][url=" +"$url]כתיבת תיאור[/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2058,8 +2062,8 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"כרגע אין תיאור למתודה זו. בבקשה עזור לנו על-ידי [/url][/color]כתיבת תיאור " -"[color=$color][url=$url]!" +"כרגע אין תיאור למתודה זו. בבקשה עזור לנו על-ידי [color=$color][url=" +"$url]כתיבת תיאור [/url][/color]!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2248,11 +2252,11 @@ 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'." -msgstr "שגיאה בפענוח 's%'." +msgstr "שגיאה בפענוח '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." @@ -2260,11 +2264,11 @@ 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'." -msgstr "שגיאה בטעינת 's%'." +msgstr "שגיאה בטעינת '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -2317,19 +2321,25 @@ msgid "Error saving TileSet!" msgstr "שגיאה בשמירת TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "שמירת הפריסה נכשלה!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "ברירת המחדל של עורך הפריסה נדרסה." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "שם הפריסה לא נמצא!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "פריסת ברירת המחדל שוחזרה להגדרות הבסיס." #: editor/editor_node.cpp @@ -3049,7 +3059,7 @@ msgstr "מערכת קבצים" #: editor/editor_node.cpp msgid "Inspector" -msgstr "חוקר" +msgstr "מפקח" #: editor/editor_node.cpp msgid "Expand Bottom Panel" @@ -3673,6 +3683,16 @@ msgid "Name contains invalid characters." msgstr "השם מכיל תווים שגויים." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "שינוי שם הקובץ:" @@ -3724,14 +3744,6 @@ msgstr "עריכת תלויות…" msgid "View Owners..." msgstr "צפייה בבעלים…" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "שינוי שם…" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "שכפול…" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "העברה אל…" @@ -3764,11 +3776,17 @@ msgid "Collapse All" msgstr "לצמצם הכול" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "שינוי שם" +msgid "Duplicate..." +msgstr "שכפול…" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "הזזת טעינה אוטומטית" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "שינוי שם…" #: editor/filesystem_dock.cpp #, fuzzy @@ -3807,9 +3825,11 @@ msgid "Move" msgstr "העברה" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "כבר קיימים קובץ או תיקייה בשם הזה." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "שינוי שם" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3881,8 +3901,18 @@ msgstr "שמירה…" #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "חיפוש טקסט" +msgid "%d match in %d file." +msgstr "%d התאמות." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d התאמות." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d התאמות." #: editor/groups_editor.cpp msgid "Add to Group" @@ -4592,180 +4622,171 @@ msgstr "ניגון ההנפשה שנבחרה מהמיקום הנוכחי. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +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" -msgstr "" +msgstr "כלי הנפשה" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "הנפשה" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "מעברונים" +msgstr "עריכת מעברים..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "חוקר" +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" -msgstr "" +msgstr "הפעלת שכבות בצל" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Onion Skinning Options" -msgstr "הגדרות הצמדה" +msgstr "הגדרות שכבות בצל" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "" +msgstr "כיוונים" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "עבר" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "עתיד" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +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 "הכללת גיזמו (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "שם הנפשה חדשה:" +msgstr "הצמדת AnimationPlayer" #: 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 -#, fuzzy msgid "Move Node" -msgstr "מצב הזזה (W)" +msgstr "הזזת מפרק" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition exists!" 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 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." -msgstr "" +msgstr "יש צורך במפרקי התחלה וסוף למעברון משנה." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "לא בנתיב המשאב." +msgstr "לא נקבע משאב לניגון בנתיב: %s." #: 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)" -msgstr "" +msgstr "קביעת מפרק התחלה (ניגון אוטומטי)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4773,334 +4794,324 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"בחירת והזזת מפרקים.\n" +"RMB להוספת מפרקים חדשים.\n" +"Shift + LMB ליצירת חיבורים." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "יצירת %s חדש" +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." -msgstr "" +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 "מעברון: " #: 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 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 +#, fuzzy msgid "Fade In (s):" -msgstr "" +msgstr "דהייה/יות:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Fade Out (s):" -msgstr "" +msgstr "עמעום/ים:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "מיזוג" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "עירבוב" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "התחלה מחדש אוטומטית:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "התחלה(ות) מחדש:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "התחלה(ות) מחדש באקראי:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "התחלה!" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "" +msgstr "כמות:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "מיזוג 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "מיזוג 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "זמן עמעום/ים (X-Fade):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "נוכחי:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: 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" -msgstr "" +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" -msgstr "" +msgstr "מפרק הנפשה" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "מפרק חד-פעמי" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "מפרק ערבוב" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "מפרק Blend2" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "מפרק Blend3" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "מפרק Blend4" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "מפרק TimeScale" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "מפרק TimeSeek" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "מפרק מעברון" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Import Animations..." -msgstr "" +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..." -msgstr "" +msgstr "מסננים..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "תוכן:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +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:" -msgstr "" +msgstr "לא ניתן להתחבר למארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "אין תגובה מהמארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "" +msgstr "לא נמצאה כתובת המארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "בקשה נכשלה, הוחזר קוד:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "הבקשה נכשלה." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "לא ניתן להסיר:" +msgstr "לא ניתן לשמור התגובה ל:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "שגיאת כתיבה." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "הבקשה נכשלה, יותר מדי הפניות מחדש" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "לולאת הפניות." +msgstr "לולאת הפניות מחדש." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "הבקשה נכשלה." +msgstr "הבקשה נכשלה, עבר הזמן" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "זמן" +msgstr "עבר הזמן." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "" +msgstr "ההאש (hash) שירד לא טוב, כנראה שהקובץ שונה." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "צפוי:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "התקבל:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "בדיקת האש sha256 נכשלה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "שגיאת הורדת נכס:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "מתבצעת הורדה" +msgstr "הורדה (%s% / s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy 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" -msgstr "" +msgstr "סרק" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy 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" -msgstr "" +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" -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)" -msgstr "" +msgstr "שם (א-ת)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (Z-A)" -msgstr "" +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" -msgstr "" +msgstr "ראשון" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "הלשונית הקודמת" +msgstr "הקודם" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -5108,59 +5119,56 @@ msgstr "הבא" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "אחרון" #: editor/plugins/asset_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "הכל" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "אין תוצאות עבור \"%s\"." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Import..." -msgstr "ייבוא" +msgstr "ייבוא..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Plugins..." -msgstr "" +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 msgid "Category:" -msgstr "" +msgstr "קטגוריה:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "אתר:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "ייבוא" +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 msgid "Loading..." -msgstr "טעינה" +msgstr "בטעינה…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "קובץ ZIP של נכסים" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5168,58 +5176,60 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"אין אפשרות לקבוע נתיב שמירה עבור תמונות lightmap.\n" +"שמור/י את הסצינה שלך (כדי שתמונות יישמרו באותה תיקייה), או בחר/י נתיב שמירה " +"ממאפייני BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." -msgstr "" +msgstr "אין רשתות לאפייה. ודא/י שהם מכילים ערוץ UV2 והדגל 'Bake Light' מאופשר." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." -msgstr "" +msgstr "יצירת תמונות lightmap נכשלה, ודא/י שהנתיב ניתן לכתיבה." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "" +msgstr "אפיית Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "תצוגה מקדימה" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "הגדרת הצמדה" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "היסט רשת:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "שלב רשת:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "קו ראשי כל:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "steps" -msgstr "" +msgstr "צעדים" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "היסט סיבוב:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "צעד סיבוב:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "יחס מתיחה:" +msgstr "צעד קנה מידה:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -8443,10 +8453,25 @@ msgstr "יצירת %s חדש" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "סצנה חדשה" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "יצירת מצולע" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "הזזת מצולע" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "מחיקת הנבחר" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8654,11 +8679,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "לא צוין שם" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8724,10 +8744,6 @@ msgid "Stage All" 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 "סנכרון השינויים בסקריפט" @@ -9883,6 +9899,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12101,6 +12121,10 @@ msgstr "" "נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12386,6 +12410,26 @@ msgstr "" "הנפשת CPUParticles2D מחייבת שימוש ב-CanvasItemMaterial עם \"הנפשת חלקיקים\" " "מאופשרת." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12689,6 +12733,26 @@ msgstr "" "הפיזיקה בזמן ריצה.\n" "במקום זאת יש לשנות את גודל צורות ההתנגשות של הצאצאים." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12842,6 +12906,11 @@ msgstr "אזהרה!" msgid "Please Confirm..." msgstr "נא לאשר…" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "הפעלת הצמדה" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12921,6 +12990,24 @@ msgid "Constants cannot be modified." msgstr "אי אפשר לשנות קבועים." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "חיפוש טקסט" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "לא צוין שם" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "כבר קיימים קובץ או תיקייה בשם הזה." + +#~ msgid "Error trying to save layout!" +#~ msgstr "שמירת הפריסה נכשלה!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "ברירת המחדל של עורך הפריסה נדרסה." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "העברה למעלה" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 26513d484f..7c3f2834ad 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -1,6 +1,6 @@ # Hindi translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 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, 2020. @@ -11,12 +11,14 @@ # Devashishsingh98 <devashishsingh98@gmail.com>, 2019. # Shirious <sad3119823@gmail.com>, 2020. # Abhay Patel <Traumaticbean@protonmail.com>, 2020. +# Bishwajeet Parhi <bishwajeet.techmaster@gmail.com>, 2020. +# l4KKY <greenforcesave@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-24 06:48+0000\n" -"Last-Translator: Shirious <sad3119823@gmail.com>\n" +"PO-Revision-Date: 2020-12-19 04:29+0000\n" +"Last-Translator: l4KKY <greenforcesave@gmail.com>\n" "Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/" "hi/>\n" "Language: hi\n" @@ -24,7 +26,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 4.0.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1029,14 +1031,19 @@ msgid "Owners Of:" msgstr "के स्वामी:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "परियोजना से चयनित फ़ाइलों को हटा दें? (बहाल नहीं किया जा सकता है)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "निकाली गई फ़ाइलों को दूसरे संसाधनों द्वारा उनके लिए काम करने के लिए आवश्यक है\n" "वैसे भी उन्हें निकालें? (कोई पूर्ववत नहीं)" @@ -1083,7 +1090,7 @@ msgstr "अनाथ संसाधन एक्सप्लोरर" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1145,9 +1152,8 @@ msgid "Gold Sponsors" msgstr "गोल्ड प्रायोजक" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "रजत दाताओं" +msgstr "रजत प्रायोजक" #: editor/editor_about.cpp #, fuzzy @@ -2293,19 +2299,25 @@ msgid "Error saving TileSet!" msgstr "त्रुटि बचत टाइलसेट!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "लेआउट को बचाने की कोशिश कर रहा त्रुटि!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "डिफ़ॉल्ट संपादक लेआउट अभिभूत।" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "लेआउट नाम नहीं मिला!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "आधार सेटिंग्स के लिए डिफ़ॉल्ट लेआउट बहाल।" #: editor/editor_node.cpp @@ -3658,6 +3670,16 @@ msgid "Name contains invalid characters." msgstr "नाम मे अमान्य अक्षर मौजूद." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "फ़ाइल का नाम बदल रहे है:" @@ -3705,14 +3727,6 @@ msgstr "निर्भरित फ़ाइलें संपादित क msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "डुप्लिकेट..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3740,10 +3754,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "डुप्लिकेट..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "औटोलोड हिलाइये" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3777,7 +3797,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3844,8 +3867,19 @@ msgid "Searching..." msgstr "खोज..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d मिल गया।" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d मिल गया।" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d मिल गया।" #: editor/groups_editor.cpp msgid "Add to Group" @@ -6633,14 +6667,12 @@ msgid "Error Saving" msgstr "लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error importing theme." -msgstr "लोड होने मे त्रुटि:" +msgstr "थिम लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error Importing" -msgstr "लोड होने मे त्रुटि:" +msgstr "इंपोर्ट लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." @@ -6867,9 +6899,8 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "खोज कर:" +msgstr "खोज के परिणाम" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -6899,9 +6930,8 @@ msgid "[Ignore]" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "रेखा:" +msgstr "रेखा" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -8218,10 +8248,25 @@ msgstr "एक नया बनाएं" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "नया दृश्य" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "सदस्यता बनाएं" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "सदस्यता बनाएं" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "चयनित फ़ाइलें हटाएं" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8424,10 +8469,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8489,10 +8530,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -8518,9 +8555,8 @@ msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "पसंदीदा:" +msgstr "परिणाम डालो" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8539,9 +8575,8 @@ msgid "Sampler" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "पसंदीदा:" +msgstr "ऐड इनपुट पोर्ट" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" @@ -9439,7 +9474,7 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "" +msgstr "सुविधाऐं" #: editor/project_export.cpp msgid "Custom (comma-separated):" @@ -9633,6 +9668,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11836,6 +11875,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12095,6 +12138,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12355,6 +12418,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12491,6 +12574,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12562,6 +12649,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Error trying to save layout!" +#~ msgstr "लेआउट को बचाने की कोशिश कर रहा त्रुटि!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "डिफ़ॉल्ट संपादक लेआउट अभिभूत।" + #, fuzzy #~ msgid "Add initial export..." #~ msgstr "पसंदीदा:" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index f5d71148a5..d429c51904 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -1,6 +1,6 @@ # Croatian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Unlimited Creativity <marinosah1@gmail.com>, 2019. # Patik <patrikfs5@gmail.com>, 2019. @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" +"PO-Revision-Date: 2020-11-17 11:07+0000\n" "Last-Translator: LeoClose <leoclose575@gmail.com>\n" "Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/" "godot/hr/>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1011,14 +1011,19 @@ msgid "Owners Of:" msgstr "Vlasnici:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ukloni odabrane datoteke iz projekta? (Neće ih biti moguće vratiti)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Datoteke koje se uklanjaju su nužne drugim resursima kako bi ispravno " "radili.\n" @@ -1066,7 +1071,7 @@ msgstr "Istraživač napuštenih resursa" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1644,15 +1649,15 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "" +msgstr "(Editor Onemogućen, Svojstva Onemogućena)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" -msgstr "" +msgstr "(Svojstva Onemogućena)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "" +msgstr "(Editor Onemogućen)" #: editor/editor_feature_profile.cpp msgid "Class Options:" @@ -1660,15 +1665,15 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "" +msgstr "Omogući Kontekstni Editor" #: editor/editor_feature_profile.cpp msgid "Enabled Properties:" -msgstr "" +msgstr "Omogućena Svojstva:" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "" +msgstr "Omogućene Značajke:" #: editor/editor_feature_profile.cpp msgid "Enabled Classes:" @@ -1676,13 +1681,14 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "Format datoteke \"%s\" je nevažeći, uvoženje prekinuto." #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" +"Profil '% s' već postoji. Prvo ga uklonite prije uvoza, uvoz je prekinut." #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." @@ -1694,54 +1700,54 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Current Profile:" -msgstr "" +msgstr "Trenutni Profil:" #: editor/editor_feature_profile.cpp msgid "Make Current" -msgstr "" +msgstr "Učini Aktualnim" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/version_control_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Novo" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Uvoz" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Izvoz" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" -msgstr "" +msgstr "Dostupni Profili:" #: editor/editor_feature_profile.cpp msgid "Class Options" -msgstr "" +msgstr "Opcije Klase" #: editor/editor_feature_profile.cpp msgid "New profile name:" -msgstr "" +msgstr "Novi naziv profila:" #: editor/editor_feature_profile.cpp msgid "Erase Profile" -msgstr "" +msgstr "Brisanje Profila" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "" +msgstr "Godot Značajke Profila" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" -msgstr "" +msgstr "Uvoz Profila" #: editor/editor_feature_profile.cpp msgid "Export Profile" -msgstr "" +msgstr "Izvoz Profila" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" @@ -2246,11 +2252,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2258,7 +2269,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3537,6 +3548,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3584,14 +3605,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3619,10 +3632,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Premjesti Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3656,7 +3675,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3723,8 +3745,19 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d pojavljivanja." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d pojavljivanja." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d pojavljivanja." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8045,10 +8078,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Brisanje Odabranih Ključeva" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8237,10 +8283,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8303,10 +8345,6 @@ msgid "Stage All" msgstr "Zamijeni sve" #: 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 "Promijeni" @@ -9428,6 +9466,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11593,6 +11635,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11845,6 +11891,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12105,6 +12171,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12239,6 +12325,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 9f62027231..fe5b5741ef 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -1,6 +1,6 @@ # Hungarian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Árpád Horváth <horvatha4@googlemail.com>, 2018. # Nagy Lajos <neutron9707@gmail.com>, 2017. @@ -12,12 +12,14 @@ # sztrovacsek <magadeve@gmail.com>, 2019. # Ács Zoltán <acszoltan111@gmail.com>, 2020. # cefrebevalo <szmarci711@gmail.com>, 2020. +# thekeymethod <csokan.andras87@protonmail.ch>, 2020. +# Czmorek Dávid <czmdav.soft@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-22 03:23+0000\n" -"Last-Translator: Ács Zoltán <acszoltan111@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Czmorek Dávid <czmdav.soft@gmail.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\n" @@ -25,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -34,9 +36,8 @@ msgstr "" "Érvénytelen típusargumentum 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 "Egy hosszúságú karaktersorozat szükséges." +msgstr "Szöveg elvárt hossza 1 ( egy karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -58,7 +59,7 @@ msgstr "Érvénytelen operandusok az %s, %s és %s operátorhoz." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Érvénytelen %s típusú index %s típusú alaphoz" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -66,7 +67,7 @@ msgstr "Érvénytelen nevezett index '%s' %s alaptípushoz" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Érvénytelen argumentumok a(z) '%s' építőben" #: core/math/expression.cpp msgid "On call to '%s':" @@ -122,127 +123,120 @@ msgstr "Érték:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "Kulcs beszúrása" +msgstr "Kulcs Beszúrása Ide" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "Kiválasztott kulcs(ok) megkettőzése" +msgstr "Kiválasztott Kulcs(ok) Megkettőzése" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Kiválasztott kulcs(ok) törlése" +msgstr "Kiválasztott Kulcs(ok) Törlése" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "Bézier pont hozzáadása" +msgstr "Bézier Pont Hozzáadása" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "Bézier pontok áthelyezése" +msgstr "Bézier Pontok Mozgatása" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animáció kulcsok megkettőzése" +msgstr "Animáció - Kulcsok Megkettőzése" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Animáció kulcsok törlése" +msgstr "Animáció - Kulcsok Törlése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animáció kulcsképkocka idő változtatás" +msgstr "Animáció - Kulcskép Idő Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Animáció átmenet változtatása" +msgstr "Animáció - Átmenet Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Animáció transzformáció változtatás" +msgstr "Animáció - Transzformáció Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animáció kulcsképkocka érték változtatás" +msgstr "Animáció - Kulcskép Érték Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Animáció hívás változtatás" +msgstr "Animáció - Hívás Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Animáció kulcsképkocka idő változtatás" +msgstr "Animáció - Több Kulcskép Idő Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Animáció átmenet változtatása" +msgstr "Animáció - Több Átmenet Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Animáció transzformáció változtatás" +msgstr "Animáció - Több Transzformáció Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Animáció kulcsképkocka érték változtatás" +msgstr "Animáció - Több Kulcskép Érték Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Animáció hívás változtatás" +msgstr "Animáció - Több Hívás Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Length" -msgstr "Animáció hosszának változtatása" +msgstr "Animáció Hosszának Változtatása" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "Animációs ciklus változtatása" +msgstr "Animáció Ismétlésének Változtatása" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "Tulajdonságkövetés" +msgstr "Tulajdonság Sáv" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "" +msgstr "3D Transzform Sáv" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "Hívás módszer követése" +msgstr "Metódus Hívás Sáv" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "Bézier görbe nyomvonal" +msgstr "Bézier Görbe Sáv" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Playback Track" -msgstr "Hang lejátszás követése" +msgstr "Hang Lejátszás Sáv" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "Animáció Lejátszás Sáv" #: editor/animation_track_editor.cpp msgid "Animation length (frames)" -msgstr "Animáció hossza (képkockákban)" +msgstr "Animáció hossza (képkockák)" #: editor/animation_track_editor.cpp msgid "Animation length (seconds)" -msgstr "Animáció hossza (másodpercben)" +msgstr "Animáció hossza (másodpercek)" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "Nyomvonal hozzáadása" +msgstr "Sáv Hozzáadása" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "Animáció ismétlése" +msgstr "Animáció Ismétlése" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -250,39 +244,36 @@ msgid "Functions:" msgstr "Függvények:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Audió klipek:" +msgstr "Hang Klipek:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "Animáció klipek:" +msgstr "Animáció Klipek:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "" +msgstr "Sáv Útvonal Változtatás" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "A sáv ki/be kapcsolása." +msgstr "Jelen sáv ki/be kapcsolása." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Frissítés Módja (Hogyan van ez a tulajdonság beállítva)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "Interpolációs mód" +msgstr "Interpolálás Módja" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Összefűzés Módja (Vége és kezdete interpolálása ismétlés esetén)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Kiválasztott nyomvonal eltávolítása." +msgstr "Jelen sáv eltávolítása." #: editor/animation_track_editor.cpp msgid "Time (s): " @@ -290,7 +281,7 @@ msgstr "Idő (mp): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Sáv Engedélyezés Kapcsolása" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -298,7 +289,7 @@ msgstr "Folyamatos" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "Diszkrét" +msgstr "Pontozott" #: editor/animation_track_editor.cpp msgid "Trigger" @@ -323,48 +314,48 @@ msgstr "Köbös" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Átmenet Nélküli Interpoláció" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Folytatólagos Interpoláció" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Kulcs beszúrása" +msgstr "Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "Kulcs(ok) megkettőzése" +msgstr "Kulcs(ok) Megkettőzése" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "Kulcs(ok) törlése" +msgstr "Kulcs(ok) Törlése" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" -msgstr "Animáció frissítés módjának megváltoztatása" +msgstr "Animáció Frissítés Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Interpolation Mode" -msgstr "" +msgstr "Animáció Interpolálás Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Loop Mode" -msgstr "Animáció hurok mód változtatása" +msgstr "Animáció Összefűzés Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "Animáció nyomvonal eltávolítás" +msgstr "Animáció Sáv Eltávolítása" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "ÚJ nyomvonalat hoz létre a következőhöz: %s, és beszúrja a kulcsot?" +msgstr "Létrehoz ÚJ sávot a következőhöz: %s, és beszúrja a kulcsot?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "Létrehoz %d ÚJ nyomvonalat és beszúrja a kulcsokat?" +msgstr "Létrehoz %d ÚJ sávot és beszúrja a kulcsokat?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -380,36 +371,39 @@ msgstr "Létrehozás" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "Animáció beszúrása" +msgstr "Animáció - Beszúrás" #: editor/animation_track_editor.cpp -#, fuzzy msgid "AnimationPlayer can't animate itself, only other players." -msgstr "Az AnimationPlayer nem tudja animálni önmagát, csak más játékosokat." +msgstr "" +"AnimationPlayer nem tudja önmagát animálni, csak más AnimationPlayer " +"elemeket." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "Animáció létrehozása és beillesztése" +msgstr "Animáció - Létrehozás és Beillesztés" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Animáció nyomvonal és kulcs beszúrása" +msgstr "Animáció - Sáv és Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "Animáció kulcs beillesztés" +msgstr "Animáció - Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Change Animation Step" -msgstr "Animáció léptékének megváltoztatása" +msgstr "Animáció Léptékének Változtatása" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "" +msgstr "Sávok Újrarendezése" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"A transzform sávok csak a Spatial típusú vagy azt bővítő elemekre " +"vonatkoznak." #: editor/animation_track_editor.cpp msgid "" @@ -418,59 +412,64 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Hang sávok csak a következő típusú node-ra mutathatnak:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animáció sávok csak AnimationPlayer node-ra mutathatnak." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Egy AnimationPlayer nem tudja önmagát animálni, csak más AnimationPlayer " +"node-okat." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Új sáv hozzáadása nem lehetséges gyökér nélkül" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "Érvénytelen sáv Bezier számára (nincs megfelelő al-tulajdonság)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" -msgstr "" +msgstr "Beizer Sáv Hozzáadása" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Sáv elérési útja helytelen, kulcs hozzáadása nem lehetséges." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Sáv típusa nem Spatial, kulcs hozzáadása nem lehetséges" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" -msgstr "" +msgstr "Transzform Sáv Kulcs hozzáadása" #: editor/animation_track_editor.cpp msgid "Add Track Key" -msgstr "Nyomvonal kulcs hozzáadása" +msgstr "Sáv Kulcs Hozzáadása" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Sáv elérési útja helytelen, kulcs hozzáadása nem lehetséges." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" -msgstr "Metódus nyomvonal kulcs beillesztése" +msgstr "Metódus Sáv Kulcs Hozzáadása" #: editor/animation_track_editor.cpp msgid "Method not found in object: " msgstr "A metódus nem található az objektumban: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Move Keys" -msgstr "Animáció kulcsok mozgatása" +msgstr "Animáció - Kulcsok Mozgatása" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" @@ -478,17 +477,17 @@ msgstr "A vágólap üres" #: editor/animation_track_editor.cpp msgid "Paste Tracks" -msgstr "Nyomvonalak beillesztése" +msgstr "Sávok beillesztése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Scale Keys" -msgstr "Animáció kulcsok nyújtás" +msgstr "Animáció - Kulcsok Nyújtása" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Ez az opció nem működik Bezier szerkesztésre, mert ez csak egyetlen sáv." #: editor/animation_track_editor.cpp msgid "" @@ -502,6 +501,15 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" +"Ez az animáció egy importált jelenethez tartozik, ezért az importált sávok " +"módosításai nem lesznek mentve.\n" +"\n" +"Egyedi sávok hozzáadásának engedélyezéséhez navigáljon a jelenet importálás " +"beállításaihoz, állítsa be\n" +"\"Animation > Storage\" értékét \"Files\"-ra, engedélyezze a(z) \"Animation " +"> Keep Custom Tracks\" opciót, majd importálja újra.\n" +"Egy másik megoldás, ha olyan import előbeállítást használ, ami az " +"animációkat külön fájlba importálja." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" @@ -515,11 +523,12 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Csak a fában kiválosztott node-ok sávjainak megjelenítése." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." msgstr "" +"Sávok csoportosítása node-ok szerint, vagy megjelenítés egyszerű listaként." #: editor/animation_track_editor.cpp msgid "Snap:" @@ -554,44 +563,43 @@ msgstr "Animáció tulajdonságok." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "Nyomvonalak másolása" +msgstr "Sávok Másolása" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "Kijelölés átméretezése" +msgstr "Kijelölés Nyújtása" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "Átméretezés a kurzortól" +msgstr "Nyújtás a Kurzortól" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Kijelölés megkettőzése" +msgstr "Kijelölés Megkettőzése" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "Áthelyezettek megkettőzése" +msgstr "Áthelyezettek Megkettőzése" #: editor/animation_track_editor.cpp msgid "Delete Selection" -msgstr "Kijelölés törlése" +msgstr "Kijelölés Törlése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Ugrás a következő lépésre" +msgstr "Ugrás a Következő Lépésre" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "Ugrás az előző lépésre" +msgstr "Ugrás az Előző Lépésre" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "Animáció optimalizálása" +msgstr "Animáció Optimalizálása" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" -msgstr "Animáció tisztítása" +msgstr "Animáció Tisztítása" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" @@ -1037,14 +1045,19 @@ msgid "Owners Of:" msgstr "Tulajdonosai:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Eltávolítja a kiválasztott fájlokat a projektből? (nem visszavonható)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Az eltávolítandó fájlokat szükségelik más források a működésükhöz.\n" "Eltávolítja őket ennek ellenére? (nem visszavonható)" @@ -1091,7 +1104,7 @@ msgstr "Árva Forrás Kezelő" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2293,19 +2306,25 @@ msgid "Error saving TileSet!" msgstr "Hiba TileSet mentésekor!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Hiba történt az elrendezés mentésekor!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Alapértelmezett szerkesztő elrendezés felülírva." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Elrendezés neve nem található!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "" "Az alapértelmezett elrendezés vissza lett állítva az alap beállításokra." @@ -3393,7 +3412,7 @@ msgstr "Nem sikerült a szkript futtatása:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "Nem felejtette el a '_run' metódust?" +msgstr "Elfelejtette a '_run' metódust?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." @@ -3514,7 +3533,7 @@ msgstr "A kérés sikertelen." #: editor/export_template_manager.cpp msgid "Redirect Loop." -msgstr "Átirányítási Hurok." +msgstr "Ciklus átiránítása." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3676,6 +3695,16 @@ msgid "Name contains invalid characters." msgstr "A név érvénytelen karaktereket tartalmaz." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Fájl átnevezése:" @@ -3723,14 +3752,6 @@ msgstr "Függőségek Szerkesztése..." msgid "View Owners..." msgstr "Tulajdonosok Megtekintése..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Átnevezés..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Megkettőzés..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Áthelyezés..." @@ -3758,11 +3779,17 @@ msgid "Collapse All" msgstr "Összes becsukása" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Átnevezés" +msgid "Duplicate..." +msgstr "Megkettőzés..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "AutoLoad Áthelyezése" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Átnevezés..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3797,8 +3824,11 @@ msgid "Move" msgstr "Áthelyezés" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ezen a helyen már van azonos nevű fájl vagy mappa." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Átnevezés" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3864,8 +3894,19 @@ msgid "Searching..." msgstr "Keresés…" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "A keresés kész" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d egyezés." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d egyezés." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d egyezés." #: editor/groups_editor.cpp msgid "Add to Group" @@ -3934,15 +3975,15 @@ msgstr "Importálás Külön Anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "Importálás Külön Objektumokkal" +msgstr "Importálás külön objektumokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "Importálás Külön Objektumokkal És Anyagokkal" +msgstr "Importálás külön objektumokkal és anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "Importálás Külön Objektumokkal És Animációkkal" +msgstr "Importálás külön objektumokkal és animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" @@ -3950,7 +3991,7 @@ msgstr "Importálás Külön Anyagokkal És Animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "Importálás Külön Objektumokkal, Anyagokkal És Animációkkal" +msgstr "Importálás külön objektumokkal, anyagokkal és animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" @@ -4098,15 +4139,15 @@ msgstr "A jelenleg szerkesztett erőforrás elmentése." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "Ugrás az előzőleg módosított objektumra a történelemben." +msgstr "Ugrás az előzőleg módosított objektumra az előzményekben." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "Ugrás a következő módosított objektumra a történelemben." +msgstr "Ugrás a következő módosított objektumra az előzményekben." #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "A nemrég módosított objektumok történelme." +msgstr "A nemrég módosított objektumok előzményei." #: editor/inspector_dock.cpp msgid "Object properties." @@ -4935,7 +4976,7 @@ msgstr "Kérés sikertelen, túl sok átirányítás" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect loop." -msgstr "Hurok átirányítása." +msgstr "Ciklus átirányítása." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, timeout" @@ -5445,8 +5486,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Lista mutatási minden objektumról a kattintás helye alatt\n" -"(ugyanaz, mint Alt + Jobb Egérgomb Kiválasztó Módban)." +"Lista megjelenítése minden objektumról a kattintás helyénél\n" +"(ugyanaz, mint Alt + jobb egérgomb kiválasztó módban)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -5532,12 +5573,12 @@ msgstr "Illesztés segédvonalakhoz" #: 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 "A kiválasztott objektum zárolása (mozgathatatlanná tétele)." +msgstr "A kiválasztott objektum zárolása (nem lesz mozgatható)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "A kiválasztott objektum feloldása (mozgathatóvá tétele)." +msgstr "A kiválasztott objektum feloldása (mozgatható lesz)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6757,12 +6798,13 @@ msgid "Filter scripts" msgstr "Szkriptek szűrése" #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Ábécészerinti rendezés változtatása a metóduslistában." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" -msgstr "" +msgstr "Metódusok szűrése" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -6926,7 +6968,7 @@ msgstr "Legutóbbi szkriptek törlése" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" -msgstr "" +msgstr "Kapcsolatok a metódushoz:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -7228,7 +7270,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Rajzolt objektumok" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" @@ -7764,7 +7806,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "Ciklus" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy @@ -8242,10 +8284,25 @@ msgid "Create a new rectangle." msgstr "Új téglalap létrehozása." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Új Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Új sokszög létrehozása." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Sokszög Mozgatása" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Kijelöltek törlése" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8434,10 +8491,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8454,7 +8507,6 @@ msgid "Version Control System" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" msgstr "Inicializálás" @@ -8472,7 +8524,7 @@ msgstr "Változások" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Módosított" #: editor/plugins/version_control_editor_plugin.cpp msgid "Renamed" @@ -8495,10 +8547,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9633,6 +9681,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9774,9 +9826,8 @@ msgid "Scan" msgstr "Keresés" #: editor/project_manager.cpp -#, fuzzy msgid "Select a Folder to Scan" -msgstr "Válasszon egy beolvasandó mappát" +msgstr "Válassza ki a mappát a kereséshez" #: editor/project_manager.cpp msgid "New Project" @@ -9796,7 +9847,7 @@ msgstr "Újraindítás most" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "Nem lehet futtatni a projektet" +msgstr "A projekt futtatása nem sikerült" #: editor/project_manager.cpp msgid "" @@ -9817,11 +9868,11 @@ msgstr "Kulcs " #: editor/project_settings_editor.cpp msgid "Joy Button" -msgstr "" +msgstr "Joy gomb" #: editor/project_settings_editor.cpp msgid "Joy Axis" -msgstr "" +msgstr "Joy tengely" #: editor/project_settings_editor.cpp msgid "Mouse Button" @@ -9859,7 +9910,7 @@ msgstr "Eszköz" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." -msgstr "Nyomj meg egy gombot..." +msgstr "Nyomjon le egy billentyűt" #: editor/project_settings_editor.cpp #, fuzzy @@ -9969,7 +10020,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "" +msgstr "Elem törlése" #: editor/project_settings_editor.cpp msgid "" @@ -10180,20 +10231,19 @@ msgstr "" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "" +msgstr "Virtuális metódus kiválasztása" #: editor/property_selector.cpp msgid "Select Method" -msgstr "" +msgstr "Metódus kiválasztása" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" msgstr "Csoportos átnevezés" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Csere: " +msgstr "Csere:" #: editor/rename_dialog.cpp msgid "Prefix:" @@ -10304,9 +10354,8 @@ msgid "Reset" msgstr "Visszaállítás" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Reguláris kifejezés használata" +msgstr "Reguláris Kifejezési Hiba:" #: editor/rename_dialog.cpp #, fuzzy @@ -11129,7 +11178,7 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Nem alapul szkripten" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a resource file" @@ -11137,19 +11186,21 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Érvénytelen példány szótár formátum (hiányzó @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" +"Érvénytelen példány szótár formátum (nem lehet kódot betölteni a @path " +"helyén)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "Érvénytelen példány szótár formátum (hibás kód a @path helyén)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "" +msgstr "Érvénytelen példány szótár (érvénytelen alosztályok)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." @@ -11445,7 +11496,7 @@ msgstr "A név nem érvényes azonosító:" #: modules/visual_script/visual_script_editor.cpp msgid "Name already in use by another func/var/signal:" -msgstr "" +msgstr "A nevet már használja egy függvény/változó/jelzés:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" @@ -11485,7 +11536,7 @@ msgstr "Kimeneti port eltávolítása" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" -msgstr "Kifejezés módosítása" +msgstr "Kifejezés változtatása" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" @@ -11521,11 +11572,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "" +msgstr "Előre betöltött node hozzáadása" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "" +msgstr "Node(ok) hozzáadása a fáról" #: modules/visual_script/visual_script_editor.cpp msgid "" @@ -11663,11 +11714,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "Kijelöltek törlése" +msgstr "Kiválasztottak törlése" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "" +msgstr "Node típus keresése" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -11808,6 +11859,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12064,6 +12119,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12324,6 +12399,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12458,6 +12553,11 @@ msgstr "Figyelem!" msgid "Please Confirm..." msgstr "Kérjük erősítse meg..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Illesztés Engedélyezése" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12531,6 +12631,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Search complete" +#~ msgstr "A keresés kész" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ezen a helyen már van azonos nevű fájl vagy mappa." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Hiba történt az elrendezés mentésekor!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Alapértelmezett szerkesztő elrendezés felülírva." + #~ msgid "Move pivot" #~ msgstr "Forgatási pont áthelyezése" diff --git a/editor/translations/id.po b/editor/translations/id.po index f27203f1d7..98a8f19b60 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -1,6 +1,6 @@ # Indonesian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016. # Andevid Dynmyn <doyan4forum@gmail.com>, 2016. @@ -27,12 +27,13 @@ # zephyroths <ridho.hikaru@gmail.com>, 2020. # Richard Urban <redasuio1@gmail.com>, 2020. # yusuf afandi <afandi.yusuf.04@gmail.com>, 2020. +# Habib Rohman <revolusi147id@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-03 15:29+0000\n" -"Last-Translator: zephyroths <ridho.hikaru@gmail.com>\n" +"PO-Revision-Date: 2020-11-13 22:59+0000\n" +"Last-Translator: Habib Rohman <revolusi147id@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -40,7 +41,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1051,14 +1052,19 @@ msgid "Owners Of:" msgstr "Pemilik Dari:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Hapus berkas yang dipilih dari proyek? (tidak bisa dibatalkan)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat " "bekerja.\n" @@ -1106,7 +1112,7 @@ msgstr "Penjelajah Resource Orphan" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1172,7 +1178,6 @@ msgid "Silver Sponsors" msgstr "Donatur Perak" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Donatur Perunggu" @@ -2325,19 +2330,25 @@ msgid "Error saving TileSet!" msgstr "Error menyimpan TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error mencoba untuk menyimpan layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Tata letak baku editor ditimpa." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nama layout tidak ditemukan!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal." #: editor/editor_node.cpp @@ -3721,6 +3732,16 @@ msgid "Name contains invalid characters." msgstr "Nama mengandung karakter tidak valid." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Mengubah nama berkas dengan:" @@ -3768,14 +3789,6 @@ msgstr "Sunting Dependensi..." msgid "View Owners..." msgstr "Tampilkan Pemilik Berkas..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Ubah Nama..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Gandakan..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Pindahkan ke..." @@ -3803,11 +3816,17 @@ msgid "Collapse All" msgstr "Lipat Semua" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Ubah Nama" +msgid "Duplicate..." +msgstr "Gandakan..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Pindahkan Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Ubah Nama..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3842,8 +3861,11 @@ msgid "Move" msgstr "Pindahkan" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Sudah ada nama berkas atau folder seperti itu di lokasi ini." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Ubah Nama" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3911,8 +3933,19 @@ msgid "Searching..." msgstr "Mencari..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Pencarian selesai" +#, fuzzy +msgid "%d match in %d file." +msgstr "Ditemukan %d kecocokan." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Ditemukan %d kecocokan." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Ditemukan %d kecocokan." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8333,10 +8366,25 @@ msgid "Create a new rectangle." msgstr "Buat persegi panjang baru." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Cat Persegi Panjang" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Buat poligon baru." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Geser Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Hapus yang Dipilih" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Jaga poligon agar tetap di dalam wilayah Rect." @@ -8546,10 +8594,6 @@ msgid "Error" msgstr "Galat" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Tidak ada pesan komit yang diberikan" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Tidak ada berkas yang ditambahkan ke staging" @@ -8606,10 +8650,6 @@ msgid "Stage All" msgstr "Stage Semua" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Tambahkan pesan komit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Komit Perubahan" @@ -9822,6 +9862,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12105,6 +12149,10 @@ msgstr "" "Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12394,6 +12442,26 @@ msgstr "" "Animasi CPUParticles2D membutuhkan penggunaan CanvasItemMaterial dengan " "\"Animasi Partikel\" diaktifkan." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12711,6 +12779,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12869,6 +12957,11 @@ msgstr "Peringatan!" msgid "Please Confirm..." msgstr "Mohon konfirmasi..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Aktifkan Pengancingan" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12953,6 +13046,24 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." +#~ msgid "Search complete" +#~ msgstr "Pencarian selesai" + +#~ msgid "No commit message was provided" +#~ msgstr "Tidak ada pesan komit yang diberikan" + +#~ msgid "Add a commit message" +#~ msgstr "Tambahkan pesan komit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Sudah ada nama berkas atau folder seperti itu di lokasi ini." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error mencoba untuk menyimpan layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Tata letak baku editor ditimpa." + #~ msgid "Move pivot" #~ msgstr "Pindahkan poros" diff --git a/editor/translations/is.po b/editor/translations/is.po index 446b94d017..87a23006cc 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -1,16 +1,16 @@ # Icelandic translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. -# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017, 2018. +# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017, 2018, 2020. # Kaan Gül <qaantum@hotmail.com>, 2018. # Einar Magnús Einarsson <einar.m.einarsson@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-16 11:03+0000\n" -"Last-Translator: Einar Magnús Einarsson <einar.m.einarsson@gmail.com>\n" +"PO-Revision-Date: 2020-11-20 23:08+0000\n" +"Last-Translator: Jóhannes G. Þorsteinsson <johannesg@johannesg.com>\n" "Language-Team: Icelandic <https://hosted.weblate.org/projects/godot-engine/" "godot/is/>\n" "Language: is\n" @@ -18,12 +18,12 @@ 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 4.0.1-dev\n" +"X-Generator: Weblate 4.4-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 "Ógild breyta send til convert(), notaðu TYPE_ * fasti." +msgstr "Ógild breytutegund send til convert(), notaðu TYPE_ * fasta." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -1036,14 +1036,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1089,7 +1092,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2273,11 +2276,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2285,7 +2293,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3570,6 +3578,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3617,15 +3635,6 @@ msgstr "Breyta" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Hreyfimynd Tvöfalda Lykla" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3653,10 +3662,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Hreyfimynd Tvöfalda Lykla" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Hreyfa Viðbótar Lykil" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3690,7 +3706,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3757,7 +3776,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8128,10 +8155,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Breyta Viðbót" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Afrita val" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8328,10 +8369,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8391,10 +8428,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9521,6 +9554,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11704,6 +11741,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11956,6 +11997,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12216,6 +12277,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12350,6 +12431,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/it.po b/editor/translations/it.po index 435789e66e..d87bb71712 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -1,6 +1,6 @@ # Italian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Alessio Corridori <alessiocorridori@hotmail.com>, 2018. # Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017. @@ -59,8 +59,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-28 11:18+0000\n" -"Last-Translator: Mirko <miknsop@gmail.com>\n" +"PO-Revision-Date: 2020-12-22 21:12+0000\n" +"Last-Translator: Lorenzo Cerqua <lorenzocerqua@tutanota.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -68,12 +68,12 @@ 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 4.3-dev\n" +"X-Generator: Weblate 4.4.1-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 "Argomento tipo non valido per convert(), usare le costanti TYPE_*." +msgstr "Tipo dell'argomento di convert() non valido, usa le costanti TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -83,17 +83,15 @@ msgstr "Prevista una stringa di lunghezza 1 (un singolo carattere)." #: 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 "" -"Non ci sono abbastanza byte per riuscire a decodificarli, oppure il formato " -"non è valido." +msgstr "Byte insufficienti per decodificarli o formato non valido." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "Input non valido %i (assente) nell'espressione" +msgstr "Input %i non valido (assente) nell'espressione" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self non può essere usato perché l'istanza è nulla (non passata)" +msgstr "self non può essere utilizzato perché l'istanza è nulla (non passata)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -105,7 +103,7 @@ msgstr "Indice di tipo %s non valido per il tipo base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "Nome indice '%s' non valido per il tipo base %s" +msgstr "Nome dell'indice '%s' non valido per il tipo base %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" @@ -145,15 +143,15 @@ msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Libero" +msgstr "Libere" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "Bilanciato" +msgstr "Bilanciate" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "Rifletti" +msgstr "Specchiate" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -165,120 +163,129 @@ msgstr "Valore:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "Inserisci chiave" +msgstr "Inserisci una chiave" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "Duplicare la(e) chiave selezionata(e)" +msgstr "Duplica le chiavi selezionate" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Eliminare la(e) chiave(i) selezionata(e)" +msgstr "Elimina le chiavi selezionate" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "Aggiungi punto Bézier" +msgstr "Inserisci un punto di controllo di Bézier" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "Sposta punto Bézier" +msgstr "Sposta dei punti di controllo di Bézier" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Duplica chiavi d'animazione" +msgstr "Duplica delle chiavi d'animazione" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Elimina chiavi d'animazione" +msgstr "Elimina delle chiavi d'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Cambia Tempo Keyframe" +msgstr "Cambia il tempo di un fotogramma chiave" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Cambia transizione dell'animazione" +msgstr "Cambia la transizione di un'animazione" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Cambia trasformazione dell'animazione" +msgstr "Cambia la trasformazione di un'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Cambia valore fotogramma chiave dell'animazione" +msgstr "Cambia il valore del fotogramma chiave di un'animazione" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Cambia chiamata animazione" +msgstr "Cambia la chiamata di un'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Anim Cambio Multiplo Tempo Keyframe" +msgstr "Cambia il tempo di più fotogrammi chiave" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Animazione Cambio Multiplo Transizione" +msgstr "Cambia la transizione di più animazioni" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Animazione Cambio Multiplo Trasformazione" +msgstr "Cambia le trasformazioni di più animazioni" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Animazione Cambio Multiplo Valore Keyframe" +msgstr "Cambia il valore di più fotogrammi chiave di un'Animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Multi Change Call" -msgstr "Animazione Cambio Multiplo Chiamata" +msgstr "Cambia la chiamata di metodo di più animazioni" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Change Animation Length" -msgstr "Cambia lunghezza dell'animazione" +msgstr "Cambia la lunghezza di un'animazione" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Change Animation Loop" -msgstr "Modifica ciclicità animazione" +msgstr "Commuta ciclicità animazione" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "Traccia proprietà" +msgstr "Traccia di proprietà" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "Traccia trasformazione 3D" +msgstr "Traccia di trasformazioni 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "Traccia chiamata metodo" +msgstr "Traccia di chiamate di metodo" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "Traccia curva di Bézier" +msgstr "Traccia di curve di Bézier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "Traccia Riproduzione Audio" +msgstr "Traccia di riproduzione audio" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "Traccia di riproduzione animazione" +msgstr "Traccia di riproduzione di animazioni" #: editor/animation_track_editor.cpp msgid "Animation length (frames)" -msgstr "Durata animazione (fotogrammi)" +msgstr "Durata dell'animazione (fotogrammi)" #: editor/animation_track_editor.cpp msgid "Animation length (seconds)" -msgstr "Durata Animazione (secondi)" +msgstr "Durata dell'animazione (secondi)" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "Aggiungi Traccia" +msgstr "Aggiungi una traccia" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "Ripeti Ciclicamente Animazione" +msgstr "Ciclicità animazione" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -287,31 +294,32 @@ msgstr "Funzioni:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "Clip Audio:" +msgstr "Clip audio:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "Clip Animazione:" +msgstr "Clip animazione:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "Cambia percorso traccia" +msgstr "Cambia il percorso della traccia" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "Attiva/disattiva la traccia." +msgstr "Attiva/Disattiva questa traccia." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "Modalità di aggiornamento (Come viene impostata questa proprietà)" +msgstr "Modalità di aggiornamento (come viene impostata questa proprietà)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "Modalità Interpolazione" +msgstr "Modalità d'interpolazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "Modalità Ciclo ad Anello (Interpola la fine con l'inizio del ciclo)" +msgstr "Modalità ciclo ad anello (interpola la fine con l'inizio del ciclo)" #: editor/animation_track_editor.cpp msgid "Remove this track." @@ -323,25 +331,28 @@ msgstr "Tempo (s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "Abilita/disabilita tracce" +msgstr "Abilita/Disabilita una traccia" #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "Continuo" +msgstr "Continua" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "Discreto" +msgstr "Discreta" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Trigger" msgstr "Attivazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Capture" msgstr "Cattura" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Nearest" msgstr "Più vicino" @@ -352,52 +363,59 @@ msgstr "Lineare" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "Cubico" +msgstr "Cubica" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Clamp Loop Interp" -msgstr "Blocca interpolazione ciclo" +msgstr "Blocca l'interpolazione d'un ciclo" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Wrap Loop Interp" -msgstr "Continua interpolazione ciclo" +msgstr "Continua l'interpolazione d'un ciclo" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Insert Key" -msgstr "Inserisci chiave" +msgstr "Inserisci un fotogramma chiave" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplica chiave(i)" +msgstr "Duplica i fotogrammi chiave selezionati" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Delete Key(s)" -msgstr "Elimina chiave(i)" +msgstr "Elimina i fotogrammi chiave selezionati" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" -msgstr "Cambia modalità di aggiornamento animazione" +msgstr "Cambia la modalità d'aggiornamento di un'animazione" #: editor/animation_track_editor.cpp msgid "Change Animation Interpolation Mode" -msgstr "Cambia modalità di interpolazione animazione" +msgstr "Cambia la modalità d'interpolazione di un'animazione" #: editor/animation_track_editor.cpp msgid "Change Animation Loop Mode" -msgstr "Cambia modalità di ciclo animazione" +msgstr "Cambia la modalità del ciclo di un'animazione" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "Rimuovi traccia animazione" +msgstr "Rimuovi la traccia di un'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Create NEW track for %s and insert key?" -msgstr "Crea NUOVA traccia per %s e inserire la chiave?" +msgstr "Creare una NUOVA traccia per %s e inserirci il fotogramma chiave?" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Create %d NEW tracks and insert keys?" -msgstr "Creare %d NUOVE tracce e inserire la chiave?" +msgstr "Creare %d NUOVE tracce e inserirci i fotogrammi chiavi?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -413,23 +431,27 @@ msgstr "Crea" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "Inserisci Animazione" +msgstr "Inserisci un'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "AnimationPlayer can't animate itself, only other players." -msgstr "AnimationPlayer non può animare se stesso, solo altri nodi." +msgstr "AnimationPlayer non può animarsi, solo altri nodi." #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Create & Insert" -msgstr "Crea e inserisci un'animazione" +msgstr "Crea un'animazione e inserisci un fotogramma chiave" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Insert Track & Key" -msgstr "Inserisci traccia e chiave animazione" +msgstr "Inserisci un traccia con un fotogramma chiave in un'animazione" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Insert Key" -msgstr "Inserisci una chiave d'animazione" +msgstr "Inserisci un fotogramma chiave in un'animazione" #: editor/animation_track_editor.cpp msgid "Change Animation Step" @@ -437,13 +459,16 @@ msgstr "Cambia passo animazione" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "Riordina tracce" +msgstr "Riordina delle tracce" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "Le tracce Transform si applicano solo a nodi di tipo Spatial." +msgstr "" +"Le tracce di trasformazioni 3D si applicano solo a nodi di tipo Spatial." #: editor/animation_track_editor.cpp +#, fuzzy msgid "" "Audio tracks can only point to nodes of type:\n" "-AudioStreamPlayer\n" @@ -457,15 +482,19 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "Le tracce Animation possono puntare solo a nodi AnimationPlayer." +msgstr "" +"Le tracce di riproduzione di animazioni possono puntare solo a nodi di tipo " +"AnimationPlayer." #: editor/animation_track_editor.cpp +#, fuzzy msgid "An animation player can't animate itself, only other players." -msgstr "Un AnimationPlayer non può animare se stesso, solo altri oggetti." +msgstr "Un AnimationPlayer non può animare se stesso, solo altri riproduttori." #: editor/animation_track_editor.cpp +#, fuzzy msgid "Not possible to add a new track without a root" -msgstr "Non è possibile aggiungere una nuova traccia senza un nodo root" +msgstr "Non è possibile aggiungere una nuova traccia senza un nodo radice" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" @@ -1080,18 +1109,24 @@ msgid "Owners Of:" msgstr "Proprietari di:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Rimuovere i file selezionati dal progetto? (Non può essere annullato)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Rimuovere i file selezionati dal progetto? (Non può essere annullato)\n" +"Puoi trovare i file rimossi nel cestino di sistema per ripristinarli." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"I file che stanno per essere rimossi sono richiesti da altre risorse perché " -"esse funzionino.\n" -"Rimuoverli comunque? (non annullabile)" +"I file che stanno per essere rimossi sono richiesti per il funzionamento di " +"altre risorse.\n" +"Rimuoverli comunque? (non annullabile)\n" +"Puoi trovare i file rimossi nel cestino di sistema per ripristinarli." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1135,7 +1170,7 @@ msgstr "Esplora risorse orfane" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1646,34 +1681,32 @@ msgstr "" "'Driver Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC' delle texture " -"per GLES2. Attiva 'Import Etc' nelle impostazioni del progetto." +"La piattaforma di destinazione richiede la compressione 'PVRTC' delle " +"texture per GLES2. Attiva 'Import Pvrtc' nelle impostazioni del progetto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC2' delle texture " -"per GLES3. Attiva 'Import Etc 2' nelle impostazioni del progetto." +"La piattaforma di destinazione richiede la compressione 'ETC2' o 'PVRTC' " +"delle texture per GLES3. Attiva 'Import Etc 2' oppure 'Import Pvrtc' nelle " +"impostazioni del progetto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC' delle texture " -"per il fallback del driver a GLES2.\n" -"Attivare 'Import Etc' nelle impostazioni del progetto, oppure disattivare " +"La piattaforma di destinazione richiede la compressione 'PVRTC' delle " +"texture per il fallback del driver a GLES2.\n" +"Attiva 'Import Pvrtc' nelle impostazioni del progetto, oppure disattiva " "'Driver Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2358,20 +2391,31 @@ msgid "Error saving TileSet!" msgstr "Errore di salvataggio del TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Errore nel salvataggio della disposizione!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Si è verificato un errore mentre si stava provando a salvare il layout " +"dell'editor.\n" +"Assicurati che il percorso dati dell'editor dell'utente sia scrivibile." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Disposizione predefinita dell'editor sovrascritta." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout predefinito dell'editor sovrascritto.\n" +"Per ripristinare il layout predefinito alle impostazioni di base, usa " +"l'opzione elimina layout ed elimina il layout predefinito." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome della disposizione non trovato!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Ripristinata la disposizione predefinita alle impostazioni originali." +msgid "Restored the Default layout to its base settings." +msgstr "Ripristinato il layout default alle impostazioni base." #: editor/editor_node.cpp msgid "" @@ -3760,6 +3804,22 @@ msgid "Name contains invalid characters." msgstr "Il nome contiene caratteri non validi." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"I seguenti file o cartelle vanno in conflitto con gli oggetti nel percorso " +"di destinazione '%s':\n" +"\n" +"%s\n" +"\n" +"Desideri sovrascriverli?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Rinomina file:" @@ -3807,14 +3867,6 @@ msgstr "Modifica Dipendenze..." msgid "View Owners..." msgstr "Vedi Proprietari..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Rinomina..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplica..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Sposta in..." @@ -3842,11 +3894,16 @@ msgid "Collapse All" msgstr "Comprimi Tutto" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Rinomina" +msgid "Duplicate..." +msgstr "Duplica..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Sposta nel cestino" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Rinomina..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3881,8 +3938,11 @@ msgid "Move" msgstr "Sposta" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "C'è già un file o una cartella con lo stesso nome in questo percorso." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Rinomina" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3950,8 +4010,19 @@ msgid "Searching..." msgstr "Ricerca..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Ricerca completata" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d corrispondenza/e." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d corrispondenza/e." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d corrispondenza/e." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5288,50 +5359,43 @@ msgstr "Crea Guide Orizzontali e Verticali" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Imposta Pivot Offset CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Ruota CanvasItem" +msgstr "Ruota %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Ruota CanvasItem" +msgstr "Ruota CanvasItem \"%s\" a %d gradi" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Sposta CanvasItem" +msgstr "Sposta Ancora CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Scala Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Ridimensiona Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Scala CanvasItem" +msgstr "Scala %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Scala CanvasItem" +msgstr "Scala CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Sposta CanvasItem" +msgstr "Sposta %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Sposta CanvasItem" +msgstr "Sposta CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6522,11 +6586,11 @@ msgstr "Rimuovi Punto In-Control" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "Spezza Segmento (in curva)" +msgstr "Dividere segmento (in curva)" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" -msgstr "Sposta articolazione" +msgstr "Spostare il giunto" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -6535,7 +6599,7 @@ msgstr "La proprietà scheletro del Polygon2D non punta ad un nodo Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" -msgstr "Sincronizza Ossa" +msgstr "Sincronizza ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -6543,51 +6607,51 @@ msgid "" "Set a texture to be able to edit UV." msgstr "" "Nessuna texture in questo poligono.\n" -"Imposta una texture per poter modificare UV." +"Impostare una texture per poter modificare UV." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "Crea UV Map" +msgstr "Creare mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." msgstr "" -"Polygon2D possiede vertici interni, non può più essere modificato dalla " -"finestra principale." +"Polygon2D ha vertici interni, quindi non può più essere modificato nella " +"vista." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" -msgstr "Crea Poligono e UV" +msgstr "Crea poligono e UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Internal Vertex" -msgstr "Crea Vertice Interno" +msgstr "Crea vertice interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "Rimuovi Vertice Interno" +msgstr "Rimuovi vertice interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" -msgstr "Poligono Non Valido (sono necessari 3 vertici non coincidenti)" +msgstr "Poligono non valido (sono necessari 3 vertici differenti)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Add Custom Polygon" -msgstr "Aggiungi Poligono Personalizzato" +msgstr "Aggiungi poligono personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "Rimuovi Poligono Personalizzato" +msgstr "Rimuovi poligono personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Trasla UV Map" +msgstr "Trasforma la mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform Polygon" -msgstr "Trasforma Poligono" +msgstr "Trasforma il poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" @@ -6595,11 +6659,11 @@ msgstr "Dipingi peso delle ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "Apri editor Poligono 2D UV." +msgstr "Apri l'editor UV di Polygon2D." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "Polygon 2D UV Editor" +msgstr "Editor UV Polygon 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6619,21 +6683,19 @@ msgstr "Ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Points" -msgstr "Sposta Punti" +msgstr "Sposta punti" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Trascina: Ruota" +msgstr "Command: Ruota" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: Muovi Tutti" +msgstr "Shift: Muovi tutti" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Scala" +msgstr "Shift+Command: Scala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6645,15 +6707,15 @@ msgstr "Shift+Ctrl: Scala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "Sposta Poligono" +msgstr "Sposta poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "Ruota Poligono" +msgstr "Ruota poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "Scala Poligono" +msgstr "Scala poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." @@ -6671,25 +6733,23 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." -msgstr "Colora i pesi con l'intensità specificata." +msgstr "Dipingi i pesi con l'intensità specificata." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Unpaint weights with specified intensity." -msgstr "Rimuovi i pesi con le intensità specificate." +msgstr "Rimuovi i pesi con l'intensità specificata." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" msgstr "Raggio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crea Poligono e UV" +msgstr "Copia il poligono su UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converti in Polygon2D" +msgstr "Copia l'UV sul poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6697,7 +6757,7 @@ msgstr "Cancella UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Settings" -msgstr "Impostazioni Griglia" +msgstr "Impostazioni griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Snap" @@ -6713,19 +6773,19 @@ msgstr "Griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "Mostra Griglia" +msgstr "Mostra la griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" -msgstr "Configura Griglia:" +msgstr "Configura la griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset X:" -msgstr "Offset X Griglia:" +msgstr "Scostamento X della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset Y:" -msgstr "Offset Y Griglia:" +msgstr "Scostamento Y della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step X:" @@ -6737,32 +6797,32 @@ msgstr "Passo Y della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones to Polygon" -msgstr "Sincronizza Ossa a Poligono" +msgstr "Sincronizza le ossa al poligono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ERROERE: Impossibile caricare la risorsa!" +msgstr "ERRORE: Non è stato possibile caricare la risorsa!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "Aggiungi Risorsa" +msgstr "Aggiungi risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "Rinomina Risorsa" +msgstr "Rinomina risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "Elimina Risorsa" +msgstr "Elimina risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "Clipboard risorse vuota!" +msgstr "La clipboard delle risorse è vuota!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "Incolla Risorsa" +msgstr "Incolla risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp @@ -6779,11 +6839,11 @@ msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "Apri nell Editor" +msgstr "Apri nell'editor" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Load Resource" -msgstr "Carica Risorsa" +msgstr "Carica risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" @@ -6795,11 +6855,11 @@ msgstr "AnimationTree non ha nessun percorso impostato ad un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" -msgstr "Percorso per AnimationPlayer non è valido" +msgstr "Il percorso per AnimationPlayer non è valido" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "Elimina File recenti" +msgstr "Elimina i file recenti" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" @@ -6811,11 +6871,11 @@ msgstr "Errore scrittura TextFile:" #: editor/plugins/script_editor_plugin.cpp msgid "Could not load file at:" -msgstr "Impossibile caricare il file:" +msgstr "Non è stato possibile caricare il file a:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" -msgstr "Errore nel salvataggio file!" +msgstr "Errore nel salvataggio del file!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme." @@ -6823,7 +6883,7 @@ msgstr "Errore durante il salvataggio del tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Saving" -msgstr "Errore di Salvataggio" +msgstr "Errore di salvataggio" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme." @@ -6831,19 +6891,19 @@ msgstr "Errore di importazione del tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Importing" -msgstr "Errore di Importazione" +msgstr "Errore di importazione" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." -msgstr "Nuovo Text File…" +msgstr "Nuovo file di testo..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" -msgstr "Apri File" +msgstr "Apri file" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "Salva File Come..." +msgstr "Salva file come..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." @@ -6851,7 +6911,8 @@ msgstr "Impossibile ottenere lo script per l'esecuzione." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "Ricaricando lo script fallito, controlla la console per gli errori." +msgstr "" +"Ricaricamento dello script fallito, controlla la console per gli errori." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." @@ -6861,12 +6922,12 @@ msgstr "Lo script non è in modalità tool, non sarà possibile eseguirlo." msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" -"Per eseguire questo script, bisogna ereditare EditorScript ed impostarlo in " -"modalità tool." +"Per eseguire questo script, esso deve ereditare EditorScript ed essere " +"impostato in modalità tool." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "Importa Tema" +msgstr "Importa tema" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -6878,11 +6939,11 @@ msgstr "Errore di salvataggio" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "Salva Tema Come..." +msgstr "Salva tema come..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" -msgstr "%s Riferimento di Classe" +msgstr "%s Riferimento di classe" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -6896,11 +6957,11 @@ msgstr "Trova precedente" #: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "Filtra script" +msgstr "Filtra gli script" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "Ordina in ordine alfabetico la lista dei metodi." +msgstr "Abilita/Disabilita l'ordinamento alfabetico della lista dei metodi." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" @@ -6914,13 +6975,13 @@ msgstr "Ordina" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "Sposta in su" +msgstr "Sposta su" #: 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 "Sposta in giù" +msgstr "Sposta giù" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6928,7 +6989,7 @@ msgstr "Script successivo" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "Script Precedente" +msgstr "Script precedente" #: editor/plugins/script_editor_plugin.cpp msgid "File" @@ -6948,11 +7009,11 @@ msgstr "Salva tutto" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Ricarica Soft Script" +msgstr "Ricarica parziale dello script" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "Copia Percorso Script" +msgstr "Copia il percorso dello script" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" @@ -6960,7 +7021,7 @@ msgstr "Cronologia Precedente" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "Cronologia Successiva" +msgstr "Cronologia successiva" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6969,23 +7030,23 @@ msgstr "Tema" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme..." -msgstr "Importa Tema..." +msgstr "Importa tema..." #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "Ricarica Tema" +msgstr "Ricarica tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "Salva Tema" +msgstr "Salva tema" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "Chiudi Tutto" +msgstr "Chiudi tutto" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "Chiudi Documentazione" +msgstr "Chiudi la documentazione" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" @@ -7010,11 +7071,11 @@ msgstr "Continua" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "Mantieni Debugger Aperto" +msgstr "Mantieni il debugger aperto" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" -msgstr "Debug con Editor Esterno" +msgstr "Debug con un editor esterno" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." @@ -7060,7 +7121,7 @@ msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp msgid "Search Results" -msgstr "Cerca Risultati" +msgstr "Cerca risultati" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -7082,11 +7143,11 @@ msgstr "Target" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"Manca il metodo '%s' connesso per il segnale '%s' dal nodo '%s' al nodo '%s'." +"Manca il metodo connesso '%s' per il segnale '%s' dal nodo '%s' al nodo '%s'." #: editor/plugins/script_text_editor.cpp msgid "[Ignore]" -msgstr "[ignora]" +msgstr "[Ignora]" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -7104,15 +7165,16 @@ msgstr "Solo le risorse dal filesystem possono essere eliminate." #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" -"Impossibile lasciare i nodi perché lo script '%s' non è usato nella scena." +"Impossibile rilasciare i nodi perché lo script '%s' non è usato in questa " +"scena." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "Ricerca Simbolo" +msgstr "Ricerca simbolo" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "Scegli Colore" +msgstr "Scegli un colore" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" @@ -7128,11 +7190,11 @@ msgstr "Minuscolo" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "Rendi prima lettera maiuscola" +msgstr "Rendi la prima lettera maiuscola" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "Evidenziatore di Sintassi" +msgstr "Evidenziatore di sintassi" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -7141,7 +7203,7 @@ msgstr "Segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Breakpoints" -msgstr "Breakpoint" +msgstr "Punti di interruzione" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -7164,27 +7226,27 @@ msgstr "Elimina linea" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "Indenta Sinistra" +msgstr "Indenta a sinistra" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "Indenta Destra" +msgstr "Indenta a destra" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Commuta commento" +msgstr "Attiva/Disattiva Commento" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "Espandi/comprimi linea" +msgstr "Espandi/Comprimi linea" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "Piegare Tutte le Linee" +msgstr "Comprimi tutte le linee" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "Dispiegare Tutte le Linee" +msgstr "Espandi tutte le linee" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" @@ -7192,7 +7254,7 @@ msgstr "Clona sotto" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "Completa simbolo" +msgstr "Completa il simbolo" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" @@ -7216,7 +7278,7 @@ msgstr "Indenta automaticamente" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." -msgstr "Cerca nei File..." +msgstr "Trova nei file..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -7224,44 +7286,44 @@ msgstr "Aiuto contestuale" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" -msgstr "Abilita/Disabilita segnalibri" +msgstr "Abilita/Disabilita i segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Bookmark" -msgstr "Va' al segnalibro successivo" +msgstr "Vai al segnalibro successivo" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Bookmark" -msgstr "Va' al segnalibro precedente" +msgstr "Vai al segnalibro precedente" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" -msgstr "Rimuovi tutti i Segnalibri" +msgstr "Rimuovi tutti i segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." -msgstr "Vai a Funzione..." +msgstr "Vai alla funzione..." #: editor/plugins/script_text_editor.cpp msgid "Go to Line..." -msgstr "Vai a Linea..." +msgstr "Vai alla linea..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "Commuta breakpoint" +msgstr "Attiva/Disattiva Punto D'Interruzione" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Rimuovi tutti i breakpoint" +msgstr "Rimuovi tutti i punti di interruzione" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "Vai al breakpoint successivo" +msgstr "Vai al punto di interruzione successivo" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "Vai al breakpoint precedente" +msgstr "Vai al punto di interruzione precedente" #: editor/plugins/shader_editor_plugin.cpp msgid "" @@ -7277,7 +7339,7 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "Questo scheletro non ha ossa, crea dei figli nodo Bone2D." +msgstr "Questo scheletro non ha ossa, crea dei nodi figlio Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" @@ -7289,7 +7351,7 @@ msgstr "Imposta Ossa in Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" -msgstr "Scheletro2D" +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" @@ -7329,19 +7391,19 @@ msgstr "Transform Abortito." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "Transform Asse-X." +msgstr "Trasformazione asse X." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "Transform Asse-Y." +msgstr "Trasformazione asse Y." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "Transform Asse-Z." +msgstr "Trasformazione asse Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Visualizza Tranform del Piano." +msgstr "Visualizza la trasformazione del piano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7349,7 +7411,7 @@ msgstr "Scalatura: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "Spostamento: " +msgstr "Traslazione: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -7357,11 +7419,11 @@ msgstr "Ruotando di %s gradi." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "Keying disabilitato (nessun key inserito)." +msgstr "Inserimento di chiavi disabilitato (nessuna chiave inserita)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "Key d'Animazione Inserito." +msgstr "Chiave d'animazione inserita." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" @@ -7373,19 +7435,19 @@ msgstr "Imbardata" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "Oggetti Disegnati" +msgstr "Oggetti disegnati" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "Cambiamenti dei Materiali" +msgstr "Cambiamenti dei materiali" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" -msgstr "Cambiamenti delle Shader" +msgstr "Cambiamenti degli shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" -msgstr "Cambiamenti delle Superfici" +msgstr "Cambiamenti delle superfici" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -7397,11 +7459,11 @@ msgstr "Vertici" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Vista dall'Alto." +msgstr "Vista dall'alto." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Vista dal Basso." +msgstr "Vista dal basso." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -7409,7 +7471,7 @@ msgstr "Basso" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Vista Sinistra." +msgstr "Vista da sinistra." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -7417,7 +7479,7 @@ msgstr "Sinistra" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Vista Destra." +msgstr "Vista da destra." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -7425,7 +7487,7 @@ msgstr "Destra" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Vista Frontale." +msgstr "Vista frontale." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -7433,7 +7495,7 @@ msgstr "Fronte" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Vista dal Retro." +msgstr "Vista dal retro." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -7441,11 +7503,11 @@ msgstr "Retro" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "Allinea trasformazione con la vista" +msgstr "Allinea la trasformazione con la vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" -msgstr "Allinea rotazione con la vista" +msgstr "Allinea la rotazione con la vista" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -8238,13 +8300,12 @@ msgid "Paint Tile" msgstr "Disegna tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + LMB: Traccia una linea\n" -"Shift + Ctrl + LMB: Colora il rettangolo" +"Shift + LMB: Disegna Linea\n" +"Shift + Ctrl + LMB: Disegna Rettangolo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8399,10 +8460,22 @@ msgid "Create a new rectangle." msgstr "Crea un nuovo rettangolo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuovo Rettangolo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crea un nuovo poligono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuovo Poligono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Elimina Forma Selezionata" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantieni il poligono all'interno dell'area del rettangolo." @@ -8612,10 +8685,6 @@ msgid "Error" msgstr "Errore" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Non è stato inserito alcun messaggio di commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Nessun file aggiunto allo stage" @@ -8672,10 +8741,6 @@ msgid "Stage All" msgstr "Stage Tutto" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Aggiungi un messaggio di commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Commit Cambiamenti" @@ -8775,9 +8840,8 @@ msgid "Add Node to Visual Shader" msgstr "Aggiungi Nodo a Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Spostato" +msgstr "Nodo(i) Spostato(i)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8797,9 +8861,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Tipo di Input Visual Shader Cambiato" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Imposta Nome Uniforme" +msgstr "Nome UniformRef Modificato" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9520,7 +9583,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Un riferimento ad una uniform esistente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9890,6 +9953,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Non supportato dai tuoi driver GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12166,6 +12233,10 @@ msgstr "" "dell'editor non è valido." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Cartella 'platform-tools' inesistente!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12218,18 +12289,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "L'estensione APK non è compatibile con il Bundle Android App." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk." #: platform/android/export/export.cpp msgid "" @@ -12268,13 +12340,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Spostando l'output" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Impossibile copiare e rinominare il file di esportazione, controlla la " +"directory del progetto gradle per gli output." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12477,6 +12551,26 @@ msgstr "" "L'animazione CPUParticles2D richiede l'utilizzo di un CanvasItemMaterial con " "\"Animazione Particelle\" abilitata." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Nodo A e Nodo B devono essere PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Nodo A deve essere un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Nodo B deve essere un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Il giunto non è collegato a due PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Il Nodo A e il Nodo B devono essere PhysicsBody2D diversi" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12810,6 +12904,26 @@ msgstr "" "rigide) saranno sovrascritti dal motore fisico quando in esecuzione.\n" "Modifica invece la dimensione in sagome di collisione figlie." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Il Nodo A deve essere un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Il Nodo B deve essere un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Il giunto non è collegato a dei PhysicsBodies" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies diversi" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12970,6 +13084,11 @@ msgstr "Attenzione!" msgid "Please Confirm..." msgstr "Per Favore Conferma..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Abilita Snap" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13046,12 +13165,32 @@ msgstr "Assegnazione all'uniforme." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "Varyings può essere assegnato soltanto nella funzione del vertice." +msgstr "" +"Le variabili possono essere assegnate soltanto in funzione del vertice." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "Le constanti non possono essere modificate." +#~ msgid "Search complete" +#~ msgstr "Ricerca completata" + +#~ msgid "No commit message was provided" +#~ msgstr "Non è stato inserito alcun messaggio di commit" + +#~ msgid "Add a commit message" +#~ msgstr "Aggiungi un messaggio di commit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "C'è già un file o una cartella con lo stesso nome in questo percorso." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Errore nel salvataggio della disposizione!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Disposizione predefinita dell'editor sovrascritta." + #~ msgid "Move pivot" #~ msgstr "Sposta pivot" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 8282aa0de2..4b80b73525 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -1,6 +1,6 @@ # Japanese translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # akirakido <achts.y@gmail.com>, 2016-2017, 2018, 2019. # D_first <dntk.daisei@gmail.com>, 2017, 2018. @@ -18,7 +18,7 @@ # sugusan <sugusan.development@gmail.com>, 2018, 2019. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2018. # nyanode <akaruooyagi@yahoo.co.jp>, 2018. -# nitenook <admin@alterbaum.net>, 2018, 2019. +# nitenook <admin@alterbaum.net>, 2018, 2019, 2020. # Rob Matych <robertsmatych@gmail.com>, 2018. # Hidetsugu Takahashi <manzyun@gmail.com>, 2019. # Wataru Onuki <watonu@magadou.com>, 2019. @@ -36,8 +36,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" -"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n" +"PO-Revision-Date: 2020-12-27 02:25+0000\n" +"Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" @@ -45,7 +45,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 4.3.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -54,7 +54,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 @@ -68,15 +68,15 @@ msgstr "式中の無効な入力 %i (渡されていません)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "インスタンスがnull(渡されない)であるため、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" @@ -120,7 +120,7 @@ msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "解放" +msgstr "自由" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -278,7 +278,7 @@ msgstr "このトラックの オン/オフ を切り替え。" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "Update モード(このプロパティの設定方法)" +msgstr "Update モード (このプロパティの設定方法)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" @@ -286,7 +286,7 @@ 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." @@ -1056,17 +1056,23 @@ msgid "Owners Of:" msgstr "次のオーナー:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "選択したファイルをプロジェクトから削除しますか?(元に戻せません)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"選択したファイルをプロジェクトから削除しますか?(取り消しはできません)\n" +"削除されたファイルは、システムのゴミ箱にあるので復元できます。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "除去しようとしているファイルは他のリソースの動作に必要です。\n" -"無視して除去しますか?(元に戻せません)" +"無視して除去しますか?(取り消しはできません)\n" +"削除されたファイルは、システムのゴミ箱にあるので復元できます。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1110,7 +1116,7 @@ msgstr "孤立リソース エクスプローラー" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1619,35 +1625,33 @@ msgstr "" "にしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"対象プラットフォームではGLES2のために'ETC'テクスチャ圧縮が必要です。プロジェ" -"クト設定より 'Import Etc' をオンにしてください。" +"対象プラットフォームではGLES2のために'PVRTC'テクスチャ圧縮が必要です。プロ" +"ジェクト設定より 'Import Pvrtc' をオンにしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"対象プラットフォームではGLES3のために'ETC2'テクスチャ圧縮が必要です。プロジェ" -"クト設定より 'Import Etc 2' をオンにしてください。" +"対象プラットフォームではGLES3のために 'ETC2' あるいは 'PVRTC' テクスチャ圧縮" +"が必要です。プロジェクト設定より 'Import Etc 2' あるいは 'Import Pvrtc' をオ" +"ンにしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"対象プラットフォームではGLES2へフォールバックするために'ETC'テクスチャ圧縮が" -"必要です。\n" -"プロジェクト設定より 'Import Etc' をオンにするか、'Fallback To Gles 2' をオフ" -"にしてください。" +"対象プラットフォームではGLES2へフォールバックするために 'PVRTC' テクスチャ圧" +"縮が必要です。\n" +"プロジェクト設定より 'Import Pvrtc' をオンにするか、'Driver Fallback " +"Enabled' をオフにしてください。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1700,7 +1704,7 @@ 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 '.'" @@ -1982,7 +1986,7 @@ msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" msgstr "" -"ファイル%sをポイントしている異なるタイプの複数のインポータがあります。イン" +"ファイル %s をポイントしている異なるタイプの複数のインポータがあります。イン" "ポートは中断されました" #: editor/editor_file_system.cpp @@ -2306,7 +2310,7 @@ msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"シーンを保存できませんでした。 おそらく、依存関係(インスタンスまたは継承)を" +"シーンを保存できませんでした。 おそらく、依存関係 (インスタンスまたは継承) を" "満たせませんでした。" #: editor/editor_node.cpp editor/scene_tree_dock.cpp @@ -2330,20 +2334,30 @@ msgid "Error saving TileSet!" msgstr "タイルセットの保存エラー!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "レイアウトの保存エラー!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"エディタのレイアウトを保存しようとした際にエラーが発生しました。\n" +"エディタのユーザーデータ用パスが書き込み可能であることを確認してください。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "デフォルトのエディタ レイアウトを上書きしました。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"既定のエディタレイアウトが上書きされました。\n" +"既定のレイアウトを基本設定に戻すには、[レイアウトの削除] オプションを使用し" +"て、既定のレイアウトを削除します。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "レイアウト名が見つかりません!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "デフォルトのレイアウトを基本設定に戻しました。" +msgid "Restored the Default layout to its base settings." +msgstr "既定のレイアウトを基本設定に戻しました。" #: editor/editor_node.cpp msgid "" @@ -3115,13 +3129,13 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" -"この操作は \"res://android/build\" にソーステンプレートをインストールし、アン" -"ドロイドのカスタムビルドを設定します。\n" +"この操作は \"res://android/build\" にソーステンプレートをインストールし、" +"Androidのカスタムビルドを設定します。\n" "後から設定に変更を加えたり、エクスポート時にカスタムAPKをビルドできます (モ" "ジュールを追加する、AndroidManifest.xmlを変更する等)。\n" -"APKビルドの初期設定の代わりにカスタムビルド設定を使うためには、アンドロイドの" -"エクスポート設定の「Use Custom Build (カスタムビルドを使用する)」のオプション" -"が有効化されている必要があることに注意してください。" +"APKビルドの初期設定の代わりにカスタムビルド設定を使うためには、Androidのエク" +"スポート設定の「Use Custom Build (カスタムビルドを使用する)」のオプションが有" +"効化されている必要があることに注意してください。" #: editor/editor_node.cpp msgid "" @@ -3714,6 +3728,22 @@ msgid "Name contains invalid characters." msgstr "名前に使用できない文字が含まれています。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"以下のファイルまたはフォルダは、対象の場所 '%s' にある項目と競合していま" +"す。\n" +"\n" +"%s\n" +"\n" +"上書きしますか?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "ファイル名を変更:" @@ -3761,14 +3791,6 @@ msgstr "依存関係の編集..." msgid "View Owners..." msgstr "オーナーを見る..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "名前を変更..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "複製..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移動..." @@ -3796,11 +3818,16 @@ msgid "Collapse All" msgstr "すべて折りたたむ" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "名前の変更" +msgid "Duplicate..." +msgstr "複製..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "ごみ箱へ移動" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "名前を変更..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3835,8 +3862,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "このパスには、既に同名のファイルかフォルダがあります。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "名前の変更" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3903,8 +3933,19 @@ msgid "Searching..." msgstr "検索中..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "検索完了" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d件の一致が見つかりました。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d件の一致が見つかりました。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d件の一致が見つかりました。" #: editor/groups_editor.cpp msgid "Add to Group" @@ -5232,50 +5273,43 @@ msgstr "水平垂直ガイドを作成" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" の Pivot Offset を (%d, %d) に設定します" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItemを回転" +msgstr "%d 個のCanvasItemを回転" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItemを回転" +msgstr "CanvasItem \"%s\" を %d 度回転" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItemを移動" +msgstr "CanvasItem \"%s\" のアンカーを移動" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\" を (%s, %s) にスケールします" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control \"%s\" を (%d, %d) にリサイズします" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "キャンバスアイテムの拡大/縮小" +msgstr "%d 個の CanvasItem を拡大 / 縮小" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "キャンバスアイテムの拡大/縮小" +msgstr "CanvasItem \"%s\" を (%s, %s) に拡大 / 縮小" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItemを移動" +msgstr "%d 個の CanvasItem を移動" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItemを移動" +msgstr "CanvasItem \"%s\" を (%d, %d) に移動" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6552,18 +6586,16 @@ msgid "Move Points" msgstr "ポイントを移動" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "ドラッグ: 回転" +msgstr "Command: 回転" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: すべて移動" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: スケール" +msgstr "Shift+Command: スケール" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6610,14 +6642,12 @@ msgid "Radius:" msgstr "半径:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "ポリゴンとUVを生成" +msgstr "PolygonをUVにコピー" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Polygon2Dに変換する" +msgstr "UVをPolygon2Dにコピー" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -7011,7 +7041,7 @@ msgstr "ターゲット" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"メソッド'%s' (シグナル'%s'用) が見つかりません、これはノード'%s'からノー" +"メソッド'%s' (シグナル'%s'用) が見つかりません、これはノード'%s'からノー" "ド'%s'へのシグナル用です。" #: editor/plugins/script_text_editor.cpp @@ -8166,13 +8196,12 @@ msgid "Paint Tile" msgstr "タイルをペイント" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+左マウスボタン: 直線に描く\n" -"Shift+Ctrl+左マウスボタン: 長方形ペイント" +"Shift+Command+左マウスボタン: 長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8327,12 +8356,24 @@ msgid "Create a new rectangle." msgstr "新しく長方形を作成。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新規長方形" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "新規ポリゴンを生成。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新規ポリゴン" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +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)." @@ -8539,10 +8580,6 @@ msgid "Error" msgstr "エラー" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "コミットメッセージは提供されませんでした" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "ステージに追加されているファイルがありません" @@ -8599,10 +8636,6 @@ msgid "Stage All" msgstr "すべてをステージする" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "コミットメッセージを追加する" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "変更をコミットする" @@ -8700,9 +8733,8 @@ msgid "Add Node to Visual Shader" msgstr "ビジュアルシェーダにノードを追加" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "ノードを移動" +msgstr "ノードの移動" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8722,9 +8754,8 @@ msgid "Visual Shader Input Type Changed" msgstr "ビジュアルシェーダの入力タイプが変更されました" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "統一名を設定" +msgstr "UniformRef の名称変更" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9431,7 +9462,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "既存の uniform への参照です。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9607,7 +9638,7 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "特徴" +msgstr "機能" #: editor/project_export.cpp msgid "Custom (comma-separated):" @@ -9802,6 +9833,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "お使いのGPUドライバではサポートされていません。" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10178,7 +10213,7 @@ 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" @@ -11017,7 +11052,7 @@ msgstr "スクリプトのパス/名前は有効です。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "使用可能: a-z、A-Z、0-9及び_。" +msgstr "使用可能: a-z、A-Z、0-9、_ 及び ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." @@ -11782,8 +11817,8 @@ 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" +"このシーンではスクリプト '%s'が使用されていないため、プロパティを削除できませ" +"ん。\n" "「Shift」を押しながらドロップすると、署名がコピーされます。" #: modules/visual_script/visual_script_editor.cpp @@ -12063,6 +12098,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "エディタ設定のカスタムビルドのAndroid SDKパスが無効です。" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "'platform-tools' ディレクトリがありません!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12117,18 +12156,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" は \"Use Custom Build\" が有効である場合にのみ有効になります。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"無効なファイル名です! Android App Bundle には拡張子 *.aab が必要です。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion は Android App Bundle とは互換性がありません。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "無効なファイル名です! Android APKには拡張子 *.apk が必要です。" #: platform/android/export/export.cpp msgid "" @@ -12166,13 +12207,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "出力結果の移動中" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"エクスポートファイルのコピーと名前の変更ができません。出力結果をみるには" +"gradleのプロジェクトディレクトリを確認してください。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12335,7 +12378,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2Dは、CollisionObject2D派生ノードにコリジョンシェイプを提供する" -"場合にのみ機能します。シェイプを追加する場合は、Area2D、staticBody2D、" +"場合にのみ機能します。シェイプを追加する場合は、Area2D、StaticBody2D、" "RigidBody2D、KinematicBody2Dなどの子として使用してください。" #: scene/2d/collision_shape_2d.cpp @@ -12343,8 +12386,8 @@ msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"関数に対して CollisionShape2D の形状(シェイプ)を指定する必要があります。その" -"ためのシェイプリソースを作成してください!" +"関数に対して CollisionShape2D の形状 (シェイプ) を指定する必要があります。そ" +"のためのシェイプリソースを作成してください!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12362,6 +12405,26 @@ msgstr "" "CPUParticles2Dアニメーションでは、 \"Particles Animation\" を有効にした" "CanvasItemMaterialを使用する必要があります。" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node AとNode Bは PhysicsBody2D でなければなりません" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A は PhysicsBody2D でなければなりません" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B は PhysicsBody2D でなければなりません" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Joint が2つの PhysicsBody2D に接続されてません" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A と Node B は異なる PhysicsBody2D でなければなりません" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12385,8 +12448,8 @@ 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 "" @@ -12690,6 +12753,26 @@ msgstr "" "物理エンジンによってオーバーライドされます。\n" "代わりに、子の衝突シェイプのサイズを変更してください。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A と Node B は PhysicsBody でなければなりません" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A は PhysicsBody でなければなりません" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B は PhysicsBody でなければなりません" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Joint と接続している PhysicsBody がありません" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A と Node B は異なる PhysicsBody でなければなりません" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12753,7 +12836,7 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "BlendTreeノード '%s' では、アニメーションが見つかりません: '%s'" +msgstr "BlendTreeノード '%s' では、アニメーションが見つかりません: '%s'" #: scene/animation/animation_blend_tree.cpp msgid "Animation not found: '%s'" @@ -12769,7 +12852,7 @@ 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." @@ -12851,6 +12934,11 @@ msgstr "警告!" msgid "Please Confirm..." msgstr "確認..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "スナップを有効にする" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12931,6 +13019,39 @@ msgstr "Varying変数は頂点関数にのみ割り当てることができま msgid "Constants cannot be modified." msgstr "定数は変更できません。" +#~ msgid "Search complete" +#~ msgstr "検索完了" + +#~ msgid "No commit message was provided" +#~ msgstr "コミットメッセージは提供されませんでした" + +#~ msgid "Add a commit message" +#~ msgstr "コミットメッセージを追加する" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "このパスには、既に同名のファイルかフォルダがあります。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "'build-tools' ディレクトリがありません!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "zipalign ツールが見つかりません。" + +#~ msgid "Aligning APK..." +#~ msgstr "APKを最適化..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APKの最適化を完了できません。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "未最適化のAPKを削除できません。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "レイアウトの保存エラー!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "デフォルトのエディタ レイアウトを上書きしました。" + #~ msgid "Move pivot" #~ msgstr "ピボットを移動" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index da05c4d847..f25c96166c 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -1,6 +1,6 @@ # Georgian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Giorgi Beriashvili <giorgi.beriashvili@outlook.com>, 2018. # George Dzavashvili <dzavashviligeorge@gmail.com>, 2018. @@ -1076,14 +1076,18 @@ msgstr "მფლობელები:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "მოვაშოროთ მონიშნული ფაილები პროექტიდან? (უკან დაბრუნება შეუძლებელია)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "ფაილები რომლებსაც შლით საჭიროა სხვა რესურსებისთვის რომ იმუშაონ.\n" "წავშალოთ ამის მიუხედავად? (შეუძლებელია უკან დაბრუნება)" @@ -1132,7 +1136,7 @@ msgstr "ობოლი რესურსების მაძიებელ #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2350,11 +2354,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2362,7 +2371,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3660,6 +3669,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3710,14 +3729,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3748,10 +3759,15 @@ msgid "Collapse All" msgstr "ყველას ჩანაცვლება" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3786,7 +3802,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3857,8 +3876,19 @@ msgid "Searching..." msgstr "ძებნა:" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "" +#, fuzzy +msgid "%d match in %d file." +msgstr "არ არსებობს ტოლი" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "არ არსებობს ტოლი" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "არ არსებობს ტოლი" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8304,10 +8334,25 @@ msgstr "ახალი %s შექმნა" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "ახალი %s შექმნა" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "შექმნა" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "შექმნა" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "წავშალოთ მონიშნული ფაილები?" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8510,10 +8555,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8577,10 +8618,6 @@ msgid "Stage All" 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 "ცვლილება" @@ -9723,6 +9760,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11935,6 +11976,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12194,6 +12239,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12454,6 +12519,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12592,6 +12677,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 267d5682be..2568545544 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -1,6 +1,6 @@ # Korean translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Ch <ccwpc@hanmail.net>, 2017. # paijai 송 (fivejobi) <xotjq237@gmail.com>, 2018. @@ -20,12 +20,13 @@ # Doyun Kwon <caen4516@gmail.com>, 2020. # Jun Hyung Shin <shmishmi79@gmail.com>, 2020. # Yongjin Jo <wnrhd114@gmail.com>, 2020. +# Yungjoong Song <yungjoong.song@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-05 01:02+0000\n" -"Last-Translator: Yongjin Jo <wnrhd114@gmail.com>\n" +"PO-Revision-Date: 2020-10-31 23:15+0000\n" +"Last-Translator: Yungjoong Song <yungjoong.song@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -33,7 +34,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 4.3-dev\n" +"X-Generator: Weblate 4.3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -746,17 +747,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" @@ -1043,14 +1044,19 @@ msgid "Owners Of:" msgstr "소유자:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "프로젝트에서 선택한 파일을 삭제할까요? (되돌릴 수 없습니다)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "삭제하려는 파일은 다른 리소스가 동작하기 위해 필요한 파일입니다.\n" "무시하고 삭제할까요? (되돌릴 수 없습니다)" @@ -1097,7 +1103,7 @@ msgstr "미사용 리소스 탐색기" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1605,34 +1611,31 @@ msgstr "" "Enabled' 설정을 비활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"대상 플랫폼에서 GLES2 용 'ETC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc' 설정을 켜세요." +"대상 플랫폼에서 GLES2 용 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " +"'Import Pvrt' 를 활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"대상 플랫폼에서 GLES3 용 'ETC2' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc 2' 설정을 켜세요." +"대상 플랫폼은 GLES3 용 'ETC2' 나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 " +"설정에서 'Import Etc 2' 나 'Import Pvrtc' 를 활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요합니" -"다.\n" -"프로젝트 설정에서 'Import Etc' 설정을 활성화 하거나, 'Driver Fallback " +"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'PVRTC' 텍스처 압축이 필요합" +"니다.\n" +"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화 하거나, 'Driver Fallback " "Enabled' 설정을 비활성화 하세요." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2158,7 +2161,7 @@ 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 @@ -2311,19 +2314,25 @@ msgid "Error saving TileSet!" msgstr "타일셋 저장 중 오류!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "레이아웃 저장 중 오류!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "기본 편집기 레이아웃을 덮어씁니다." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "레이아웃 이름을 찾을 수 없습니다!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "기본 레이아웃을 초기화하였습니다." #: editor/editor_node.cpp @@ -2822,14 +2831,17 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"이 옵션이 활성화 된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 " +"할 수 있도록이 컴퓨터의 IP에 연결을 시도합니다.\n" +"이 옵션은 원격 디버깅 (일반적으로 모바일 장치 사용)에 사용하기위한 것입니" +"다.\n" +"GDScript 디버거를 로컬에서 사용하기 위해 활성화 할 필요는 없습니다." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" msgstr "네트워크 파일 시스템을 사용하여 작게 배포" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2838,60 +2850,55 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"이 설정을 켜면, 내보내거나 배포할 때 최소한의 실행 파일을 만듭니다.\n" -"이 경우, 실행 파일이 네트워크 너머에 있는 편집기의 파일 시스템을 사용합니" -"다.\n" -"Android의 경우, 배포 시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" -"은 용량이 큰 게임의 테스트 배포 속도를 향상시킬 수 있습니다." +"이 옵션을 활성화하고 Android 용 원 클릭 배포를 사용하면 프로젝트 데이터없이 " +"실행 파일만 내 보냅니다.\n" +"파일 시스템은 네트워크를 통해 편집기에 의해 프로젝트에서 제공됩니다.\n" +"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" +"은 용량이 큰 게임의 테스트 속도를 향상시킵니다." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "충돌 모양 보이기" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"이 설정을 켜면 게임을 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast 노드" -"가 보이게 됩니다." +"이 설정을 켜면 프로젝트를 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast " +"노드가 보이게 됩니다." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "내비게이션 보이기" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"이 설정을 켜면, 게임을 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩니" -"다." +"이 설정을 켜면,프로젝트를 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩" +"니다." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" -msgstr "씬 변경 사항 동기화" +msgstr "씬 변경사항 동기화" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행 중인 게임에도 반영됩니" -"다.\n" -"원격 장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율" -"적입니다." +"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행중인 프로젝트에 반영됩" +"니다.\n" +"원격장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율적" +"입니다." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "스크립트 변경 사항 동기화" +msgstr "스크립트 변경사항 동기화" #: editor/editor_node.cpp #, fuzzy @@ -3005,7 +3012,7 @@ msgstr "디버깅을 하기 위해 씬 실행을 중단합니다." #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "씬 멈추기" +msgstr "씬 일시정지" #: editor/editor_node.cpp msgid "Stop the scene." @@ -3025,7 +3032,7 @@ msgstr "씬을 지정해서 실행합니다" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "맞춤 씬 실행하기" +msgstr "커스텀 씬 실행" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." @@ -3062,7 +3069,7 @@ msgstr "인스펙터" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "하단 패널 펼치기" +msgstr "하단 패널 확장" #: editor/editor_node.cpp msgid "Output" @@ -3686,6 +3693,16 @@ msgid "Name contains invalid characters." msgstr "이름에 잘못된 문자가 있습니다." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "파일 이름 바꾸기:" @@ -3733,14 +3750,6 @@ msgstr "종속 관계 편집..." msgid "View Owners..." msgstr "소유자 보기..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "이름 바꾸기..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "복제..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "여기로 이동..." @@ -3768,11 +3777,17 @@ msgid "Collapse All" msgstr "모두 접기" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "이름 바꾸기" +msgid "Duplicate..." +msgstr "복제..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "오토로드 이동" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "이름 바꾸기..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3807,8 +3822,11 @@ msgid "Move" msgstr "이동" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있습니다." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "이름 바꾸기" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3876,8 +3894,19 @@ msgid "Searching..." msgstr "검색 중..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "검색 완료" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d개 일치." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d개 일치." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d개 일치." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5201,7 +5230,7 @@ msgstr "수평 및 수직 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" Pivot Offset (%d, %d)로 설정" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5414,12 +5443,12 @@ msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결 #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "배율 초기화" +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" @@ -5440,17 +5469,17 @@ msgstr "Alt+우클릭: 겹친 목록 선택" #: 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 msgid "Scale Mode" -msgstr "크기 조절 모드" +msgstr "크기조절 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -8221,7 +8250,7 @@ msgstr "어클루전" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" -msgstr "내비게이션" +msgstr "네비게이션" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" @@ -8284,10 +8313,25 @@ msgid "Create a new rectangle." msgstr "새로운 사각형을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "사각 영역 칠하기" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "새로운 폴리곤을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "폴리곤 이동" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "선택 항목 삭제" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "사각형 내부에 폴리곤을 유지." @@ -8493,10 +8537,6 @@ msgid "Error" msgstr "오류" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "커밋 메시지를 제공하지 않았습니다" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "스테이지에 추가된 파일이 없습니다" @@ -8553,10 +8593,6 @@ msgid "Stage All" msgstr "모두 스테이지로 보내기" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "커밋 메시지 추가" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "커밋 변경 사항" @@ -9379,7 +9415,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "기존 유니폼에 대한 참조입니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9736,6 +9772,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10335,19 +10375,16 @@ msgid "Batch Rename" msgstr "일괄 이름 바꾸기" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "바꾸기: " +msgstr "바꾸기:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "접두사" +msgstr "접두사:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "접미사" +msgstr "접미사:" #: editor/rename_dialog.cpp msgid "Use Regular Expressions" @@ -10394,9 +10431,8 @@ msgid "Per-level Counter" msgstr "단계별 카운터" #: editor/rename_dialog.cpp -#, fuzzy msgid "If set, the counter restarts for each group of child nodes." -msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다" +msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10455,9 +10491,8 @@ msgid "Reset" msgstr "되돌리기" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "정규 표현식 오류" +msgstr "정규 표현식 오류:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -11988,6 +12023,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "편집기 설정에서 맞춤 빌드에 잘못된 안드로이드 SDK 경로입니다." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12038,19 +12077,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화 된 경우에만 유효합니다." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "잘못된 파일명! Android App Bundle에는 * .aab 확장자가 필요합니다." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK 확장은 Android App Bundle과 호환되지 않습니다." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "잘못된 파일명! Android APK는 *.apk 확장자가 필요합니다." #: platform/android/export/export.cpp msgid "" @@ -12276,6 +12315,26 @@ msgstr "" "CPUParticles2D 애니메이션에는 \"Particles Animation\"이 켜진 " "CanvasItemMaterial을 사용해야 합니다." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12529,7 +12588,7 @@ msgstr "" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "InterpolatedCamera는 더 이상 사용되지 않으며 Godot 4.0에서 제거됩니다." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12593,6 +12652,26 @@ msgstr "" "큰 부담이 됩니다.\n" "대신 자식 충돌 모양의 크기를 변경하세요." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12751,6 +12830,11 @@ msgstr "경고!" msgid "Please Confirm..." msgstr "확인해주세요..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "스냅 켜기" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12830,6 +12914,24 @@ msgstr "Varying은 꼭짓점 함수에만 지정할 수 있습니다." msgid "Constants cannot be modified." msgstr "상수는 수정할 수 없습니다." +#~ msgid "Search complete" +#~ msgstr "검색 완료" + +#~ msgid "No commit message was provided" +#~ msgstr "커밋 메시지를 제공하지 않았습니다" + +#~ msgid "Add a commit message" +#~ msgstr "커밋 메시지 추가" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있습니다." + +#~ msgid "Error trying to save layout!" +#~ msgstr "레이아웃 저장 중 오류!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "기본 편집기 레이아웃을 덮어씁니다." + #~ msgid "Move pivot" #~ msgstr "피벗 이동" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index ce1f7b4a6a..53f9b83536 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -1,6 +1,6 @@ # Lithuanian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Ignas Kiela <ignaskiela@super.lt>, 2017. # Kornelijus <kornelijus.github@gmail.com>, 2017, 2018. @@ -1042,14 +1042,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1094,7 +1097,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2303,11 +2306,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2315,7 +2323,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3621,6 +3629,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3673,15 +3691,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplikuoti" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3710,10 +3719,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplikuoti" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mix Nodas" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3749,7 +3765,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3819,7 +3838,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8277,10 +8304,25 @@ msgstr "Sukurti Naują" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Sukurti Naują" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Keisti Poligono Skalę" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Keisti Poligono Skalę" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ištrinti pasirinktus raktažodžius" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8486,10 +8528,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8551,10 +8589,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9700,6 +9734,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11906,6 +11944,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12165,6 +12207,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12427,6 +12489,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12566,6 +12648,10 @@ msgstr "Įspėjimas!" msgid "Please Confirm..." msgstr "Prašome Patvirtinti..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 6fc7c196e7..7c30135407 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -1,18 +1,19 @@ # Latvian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Gustavs Porietis (pg829-) <porietisgustavs@gmail.com>, 2018. # Martch Zagorski <martchzagorski@gmail.com>, 2018, 2020. # Jānis Ondzuls <janisond@inbox.lv>, 2020. # Anonymous <noreply@weblate.org>, 2020. # StiLins <aigars.skilins@gmail.com>, 2020. +# Rihards Kubilis <oldcar@inbox.lv>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-06-04 18:34+0000\n" -"Last-Translator: StiLins <aigars.skilins@gmail.com>\n" +"PO-Revision-Date: 2020-11-15 12:43+0000\n" +"Last-Translator: Rihards Kubilis <oldcar@inbox.lv>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot/lv/>\n" "Language: lv\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1032,14 +1033,19 @@ msgid "Owners Of:" msgstr "Īpašnieki:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Vai noņemt izvēlētos failus no projekta? (Netiks atjaunoti)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Faili, kurus Jūs vēlaties noņemt ir nepieciešami citiem resursiem lai tie " "varētu strādāt.\n" @@ -1087,7 +1093,7 @@ msgstr "Bāreņu Resursu Pārlūks" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1996,7 +2002,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Konstantes" #: editor/editor_help.cpp msgid "Property Descriptions" @@ -2275,11 +2281,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2287,7 +2298,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3567,6 +3578,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3614,14 +3635,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3649,10 +3662,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3686,7 +3704,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3753,8 +3774,19 @@ msgid "Searching..." msgstr "Meklē..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d sakritības." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d sakritības." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d sakritības." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8115,10 +8147,25 @@ msgid "Create a new rectangle." msgstr "Izveidot jaunu taisnstūri." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Izveidot jaunu taisnstūri." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Izveidot jaunu daudzstūri." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Izveidot" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izdzēst Izvēlēto(ās) Atslēgu(as)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8320,10 +8367,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8386,10 +8429,6 @@ msgid "Stage All" 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 "Nomainīt" @@ -9517,6 +9556,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11703,6 +11746,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11961,6 +12008,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12221,6 +12288,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12356,6 +12443,10 @@ msgstr "Brīdinājums!" msgid "Please Confirm..." msgstr "Lūdzu Apstipriniet..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/mi.po b/editor/translations/mi.po index cfa15d7032..2da7379e71 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -1,6 +1,6 @@ -# LANGUAGE translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Māori translation of the Godot Engine editor +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # follower <follower@rancidbacon.com>, 2019. msgid "" @@ -993,14 +993,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1045,7 +1048,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2225,11 +2228,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2237,7 +2245,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3516,6 +3524,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3563,14 +3581,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3598,10 +3608,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3635,7 +3650,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3702,7 +3720,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8021,10 +8047,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8213,10 +8251,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8273,10 +8307,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9395,6 +9425,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11552,6 +11586,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11804,6 +11842,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12064,6 +12122,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12198,6 +12276,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 0fc2207a60..e3ed585a4a 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -1,6 +1,6 @@ # Malayalam translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # christy james <jkuttu@gmail.com>, 2018. # Lakshmi-Jayakumar <lakshmi.jayakumar.tkm@gmail.com>, 2019. @@ -1003,14 +1003,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1055,7 +1058,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2237,11 +2240,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2249,7 +2257,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3528,6 +3536,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3575,14 +3593,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3610,10 +3620,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3647,7 +3662,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3714,7 +3732,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8037,10 +8063,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "സൂചികകൾ നീക്കം ചെയ്യുക" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8229,10 +8268,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8289,10 +8324,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9411,6 +9442,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11569,6 +11604,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11821,6 +11860,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12081,6 +12140,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12215,6 +12294,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/mr.po b/editor/translations/mr.po index 8a4f7da346..e9a759c4d8 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -1,21 +1,21 @@ # Marathi translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Prachi Joshi <josprachi@yahoo.com>, 2019, 2020. # Shirious <sad3119823@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-05-05 14:01+0000\n" -"Last-Translator: Shirious <sad3119823@gmail.com>\n" +"PO-Revision-Date: 2020-12-23 22:57+0000\n" +"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n" "Language-Team: Marathi <https://hosted.weblate.org/projects/godot-engine/" "godot/mr/>\n" "Language: mr\n" "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 4.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1000,14 +1000,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1052,7 +1055,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2244,7 +2252,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -2846,11 +2854,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "समुदाय" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "आमच्या बद्दल" #: editor/editor_node.cpp msgid "Play the project." @@ -3523,6 +3531,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3570,14 +3588,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3605,10 +3615,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3642,7 +3657,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3709,7 +3727,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8028,10 +8054,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8220,10 +8258,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8280,10 +8314,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9403,6 +9433,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9804,7 +9838,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "सामान्य" #: editor/project_settings_editor.cpp msgid "Override For..." @@ -11560,6 +11594,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11812,6 +11850,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12072,6 +12130,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12206,6 +12284,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/ms.po b/editor/translations/ms.po index fcafe6a26c..f2f18b9a22 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -1,6 +1,6 @@ # Malay translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Sam Vanguard <syafz119@gmail.com>, 2018. # Shaqir Rafiq <moshamoradev@gmail.com>, 2018. @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-15 07:17+0000\n" +"PO-Revision-Date: 2020-12-02 09:52+0000\n" "Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n" "Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" "ms/>\n" @@ -22,7 +22,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -904,9 +904,8 @@ msgid "Signals" msgstr "Isyarat" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Dari Isyarat:" +msgstr "Tapis isyarat" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1035,18 +1034,26 @@ msgid "Owners Of:" msgstr "Pemilik:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Alih keluar fail terpilih dari projek? (Tidak dapat dipulihkan)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Alih keluar fail terpilih dari projek? (Tidak boleh buat asal)\n" +"Anda boleh mencari fail yang dikeluarkan dalam tong sampah untuk " +"memulihkannya." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Fail yang akan dikeluarkan diperlukan oleh sumber lain agar dapat " "berfungsi.\n" -"Masih mahu keluarkan fail tersebut? (tidak boleh buat asal)" +"Masih mahu keluarkan fail tersebut? (tidak boleh buat asal)\n" +"Anda boleh mencari fail yang dikeluarkan dalam tong sampah untuk " +"memulihkannya." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1090,7 +1097,7 @@ msgstr "Penjelajah Sumber Yatim" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1152,12 +1159,10 @@ msgid "Gold Sponsors" msgstr "Penaja Emas" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" msgstr "Penderma Perak" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Penderma Gangsa" @@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!" msgstr "Ralat semasa menyimpan TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Ralat semasa menyimpan susun atur!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Susun atur lalai telah diganti." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nama susun atur tidak dijumpai!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Tata letak lalai telah dipulihkan ke tetapan asas." #: editor/editor_node.cpp @@ -3626,6 +3637,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3673,14 +3694,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3708,10 +3721,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Pindah Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3745,7 +3764,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3812,8 +3834,19 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d padan." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d padan." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d padan." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8151,10 +8184,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Semua Pilihan" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Padam Kunci Terpilih" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8343,10 +8390,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8407,10 +8450,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9532,6 +9571,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11700,6 +11743,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11952,6 +11999,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12212,6 +12279,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12346,6 +12433,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12414,6 +12505,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Error trying to save layout!" +#~ msgstr "Ralat semasa menyimpan susun atur!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Susun atur lalai telah diganti." + #~ msgid "Move Anim Track Up" #~ msgstr "Ubah Trek Anim Ke Atas" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index f8862919b2..86a6c618b6 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -1,6 +1,6 @@ # Norwegian Bokmål translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Allan Nordhøy <epost@anotheragency.no>, 2017-2018, 2019, 2020. # Anonymous <GentleSaucepan@protonmail.com>, 2017. @@ -1088,14 +1088,18 @@ msgstr "Eiere Av:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Fjerne valgte filer fra prosjektet? (kan ikke angres)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Filene som fjernes kreves for at andre ressurser skal virke.\n" "Fjern dem likevel? (kan ikke angres)" @@ -1144,7 +1148,7 @@ msgstr "Foreldreløs ressursutforsker" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2439,19 +2443,25 @@ msgid "Error saving TileSet!" msgstr "Error ved lagring av TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error ved lagring av layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard editor layout overskrevet." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layoutnavn ikke funnet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Gjenoppretter standard layout til grunninnstillinger." #: editor/editor_node.cpp @@ -3879,6 +3889,16 @@ msgid "Name contains invalid characters." msgstr "Navn inneholder ugyldige tegn." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Endrer filnavn:" @@ -3933,15 +3953,6 @@ msgstr "Endre Avhengigheter..." msgid "View Owners..." msgstr "Vis Eiere..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Endre Navn..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplisér" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Flytt Til..." @@ -3974,11 +3985,18 @@ msgid "Collapse All" msgstr "Kollaps alle" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Endre navn" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplisér" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flytt Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Endre Navn..." #: editor/filesystem_dock.cpp #, fuzzy @@ -4017,9 +4035,11 @@ msgid "Move" msgstr "Flytt" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mappe med dette navnet eksisterer allerede." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Endre navn" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4093,8 +4113,18 @@ msgstr "Lagrer..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Søk Tekst" +msgid "%d match in %d file." +msgstr "Ingen Treff" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Ingen Treff" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Ingen Treff" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8782,10 +8812,25 @@ msgstr "Lag ny %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Lag en ny polygon fra bunnen." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Flytt Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Slett Valgte" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9000,11 +9045,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Ingen navn gitt" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -9070,10 +9110,6 @@ msgid "Stage All" msgstr "Lagre Alle" #: 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 "Synkroniser Skriptforandringer" @@ -10241,6 +10277,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12561,6 +12601,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12826,6 +12870,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -13086,6 +13150,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13225,6 +13309,11 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Aktiver Snap" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13296,6 +13385,24 @@ msgid "Constants cannot be modified." msgstr "Konstanter kan ikke endres." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Søk Tekst" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Ingen navn gitt" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mappe med dette navnet eksisterer allerede." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error ved lagring av layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard editor layout overskrevet." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Flytt Pivot" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index f8289c4c55..15a47ab682 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -1,6 +1,6 @@ # Dutch translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # aelspire <aelspire@gmail.com>, 2017. # Aram Nap <xyphex.aram@gmail.com>, 2017. @@ -47,7 +47,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-08-28 13:09+0000\n" +"PO-Revision-Date: 2020-12-25 12:29+0000\n" "Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" @@ -56,7 +56,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 4.2.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -940,9 +940,8 @@ msgid "Signals" msgstr "Signalen" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filter tegels" +msgstr "Signalen filteren" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1071,20 +1070,27 @@ msgid "Owners Of:" msgstr "Eigenaren van:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Geselecteerde bestanden uit het project verwijderen? (Kan niet ongedaan " -"gemaakt worden)" +"gemaakt worden)\n" +"De bestanden kunnen mogelijk vanuit de prullenbak van het systeem hersteld " +"worden." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "De bestanden die verwijderd worden zijn nodig om andere bronnen te laten " "werken.\n" -"Toch verwijderen? (Onomkeerbaar)" +"Toch verwijderen? (Onomkeerbaar)\n" +"De bestanden kunnen mogelijk vanuit de prullenbak van het systeem hersteld " +"worden." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1128,7 +1134,7 @@ msgstr "Weesbronnen bekijken" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1190,14 +1196,12 @@ msgid "Gold Sponsors" msgstr "Gouden Sponsors" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Zilveren Donors" +msgstr "Zilveren Sponsoren" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Bronzen Donors" +msgstr "Bronzen Sponsoren" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1710,9 +1714,8 @@ msgid "Node Dock" msgstr "Knooptabblad" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Bestandssysteem" +msgstr "Bestandssysteempaneel" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -2350,20 +2353,30 @@ msgid "Error saving TileSet!" msgstr "Error bij het opslaan van TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fout bij het opslaan van indeling!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Fout tijdens het opslaan van de editorindeling.\n" +"Zorg dat er naar het pad voor editorgebruikgegevens beschrijfbaar is." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standaardeditorindeling overschreven." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Standaardindeling overschreven.\n" +"Om de oorspronkelijke instellingen van de standaardindeling te herstellen, " +"moet je de standaardindeling verwijderen met de optie 'Indeling verwijderen'." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Indelingsnaam niet gevonden!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Standaardindeling teruggezet naar basisinstellingen." +msgid "Restored the Default layout to its base settings." +msgstr "Standaardindeling teruggezet naar oorspronkelijke instellingen." #: editor/editor_node.cpp msgid "" @@ -2856,7 +2869,7 @@ msgstr "Debuggen" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Opstarten met debugging op afstand" +msgstr "Uitrollen met debugging op afstand" #: editor/editor_node.cpp msgid "" @@ -2867,11 +2880,15 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Als deze optie geactiveerd is, zal één-klik uitrol het programma proberen " +"een verbinding te sarten met het IP-adres van deze computer.\n" +"Deze optie is bedoeld om op afstand fouten op te sporen (gewoonlijk met een " +"mobiel toestel).\n" +"Je hebt dit niet nodig om het draaiende programma lokaal te inspecteren." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Klein uitvoerbaar bestand opstarten met netwerk bestandsserver" +msgstr "Kleine uitrol met netwerkbestandssysteem" #: editor/editor_node.cpp #, fuzzy @@ -2917,12 +2934,10 @@ msgstr "" "deze optie aanstaat." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" -msgstr "Scèneveranderingen synchroniseren" +msgstr "Veranderingen in de scène synchroniseren" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" @@ -2930,14 +2945,13 @@ msgid "" "filesystem option is enabled." msgstr "" "Wanneer deze optie aanstaat, wordt elke verandering gemaakt in de editor " -"toegepast op het draaiend spel.\n" +"toegepast op het lopende spel.\n" "Wanneer dit op afstand wordt gebruikt op een andere machine, is dit " "efficiënter met het netwerk bestandssysteem." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "Scriptveranderingen synchroniseren" +msgstr "Veranderingen in scripts synchroniseren" #: editor/editor_node.cpp #, fuzzy @@ -3744,6 +3758,16 @@ msgid "Name contains invalid characters." msgstr "Naam bevat ongeldige tekens." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Bestand hernoemen:" @@ -3791,14 +3815,6 @@ msgstr "Afhankelijkheden aanpassen..." msgid "View Owners..." msgstr "Bekijk eigenaren..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Hernoemen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dupliceren..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Verplaats Naar..." @@ -3826,11 +3842,16 @@ msgid "Collapse All" msgstr "Alles inklappen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Naam wijzigen" +msgid "Duplicate..." +msgstr "Dupliceren..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Naar prullenbak verplaatsen" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Hernoemen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3865,8 +3886,11 @@ msgid "Move" msgstr "Verplaatsen" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Er is al een bestand of map met dezelfde naam op dit pad." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Naam wijzigen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3934,8 +3958,19 @@ msgid "Searching..." msgstr "Aan het zoeken..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Zoek Compleet" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d overeenkomst(en) gevonden." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d overeenkomst(en) gevonden." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d overeenkomst(en) gevonden." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5269,27 +5304,24 @@ msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem roteren" +msgstr "%d CanvasItems roteren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem roteren" +msgstr "CanvasItem \"%s\" roteren tot %d graden" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Verplaats CanvasItem" +msgstr "Verplaats Anker van CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\" verschalen naar (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control \"%s\" vergrootten tot (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -7240,7 +7272,7 @@ msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" msgstr "" -"Deze Shader is aangepast op de schijf.\n" +"Deze shader is aangepast op de schijf.\n" "Welke actie moet worden genomen?" #: editor/plugins/shader_editor_plugin.cpp @@ -7889,9 +7921,8 @@ msgid "New Animation" msgstr "Niewe animatie" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Snelheid (FPS):" +msgstr "Snelheid:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -8370,10 +8401,25 @@ msgid "Create a new rectangle." msgstr "Creëer nieuwe driehoek." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Teken Driehoek" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Nieuwe veelhoek aanmaken." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Beweeg Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Geselecteerde Verwijderen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Houd de veelhoek binnen het rechthoekige gebied." @@ -8581,10 +8627,6 @@ msgid "Error" msgstr "Fout" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Geen commitbericht was gegeven" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Geen bestanden toegevoegd aan stage" @@ -8641,10 +8683,6 @@ msgid "Stage All" msgstr "Stage Alles" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Voeg een vastleggingsbericht toe" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Commit veranderingen" @@ -8861,7 +8899,7 @@ msgstr "Kleur uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." msgstr "" -"Geeft de booleaanse resultaat van de %s-vergelijking tussen twee parameters." +"Geeft het booleaanse resultaat van de %s-vergelijking tussen twee parameters." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" @@ -9862,6 +9900,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12138,6 +12180,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "Ongeldig Android SDK pad voor custom build in Editor Settings." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12434,6 +12480,26 @@ msgstr "" "CPUParticles2D vereist een CanvasItemMaterial met \"Particles Animation\" " "ingeschakeld." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12764,6 +12830,26 @@ msgstr "" "overschreven worden door de physics engine als het spel start.\n" "Verander in plaats daarvan de grootte van CollisionShapes in de kinderen." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12924,6 +13010,11 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "Bevestig alstublieft..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Aan raster kleven" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13005,6 +13096,24 @@ msgstr "Varyings kunnen alleen worden toegewezenin vertex functies." msgid "Constants cannot be modified." msgstr "Constanten kunnen niet worden aangepast." +#~ msgid "Search complete" +#~ msgstr "Zoek Compleet" + +#~ msgid "No commit message was provided" +#~ msgstr "Geen commitbericht was gegeven" + +#~ msgid "Add a commit message" +#~ msgstr "Voeg een vastleggingsbericht toe" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Er is al een bestand of map met dezelfde naam op dit pad." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fout bij het opslaan van indeling!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standaardeditorindeling overschreven." + #~ msgid "Move pivot" #~ msgstr "Draaipunt verplaatsen" diff --git a/editor/translations/or.po b/editor/translations/or.po index 1144d93efd..9c03d588f9 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -1,6 +1,6 @@ # Odia translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Pro Neon <proneon267@gmail.com>, 2019. msgid "" @@ -999,14 +999,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1051,7 +1054,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2231,11 +2234,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2243,7 +2251,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3522,6 +3530,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3569,14 +3587,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3604,10 +3614,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3641,7 +3656,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3708,7 +3726,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8027,10 +8053,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8219,10 +8257,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8279,10 +8313,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9401,6 +9431,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11558,6 +11592,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11810,6 +11848,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12070,6 +12128,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12204,6 +12282,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 114e37d50a..0d525439eb 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -1,6 +1,6 @@ # Polish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # 8-bit Pixel <dawdejw@gmail.com>, 2016. # Adam Wolanski <adam.wolanski94@gmail.com>, 2017. @@ -44,11 +44,12 @@ # Roman Skiba <romanskiba0@gmail.com>, 2020. # Piotr Grodzki <ziemniakglados@gmail.com>, 2020. # Dzejkop <jakubtrad@gmail.com>, 2020. +# Mateusz Grzonka <alpinus4@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -58,7 +59,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 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1067,17 +1068,23 @@ msgid "Owners Of:" msgstr "Właściciele:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Usunąć wybrane pliki z projektu? (Nie można ich przywrócić)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Usunąć wybrane pliki z projektu? (nie można tego cofnąć)\n" +"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Usuwany plik jest wymagany przez inne zasoby do działania.\n" -"Usunąć mimo to? (Nie można tego cofnąć)" +"Usuwane pliki są wymagane przez inne zasoby, żeby mogły one działać.\n" +"Usunąć mimo to? (nie można tego cofnąć)\n" +"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1121,7 +1128,7 @@ msgstr "Eksplorator osieroconych zasobów" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1630,34 +1637,31 @@ msgstr "" "Enabled\"." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Platforma docelowa wymaga dla GLES2 kompresji tekstur \"ETC\". Włącz " -"\"Import Etc\" w Ustawieniach Projektu." +"Platforma docelowa wymaga dla GLES2 kompresji tekstur \"PVRTC\". Włącz " +"\"Import Pvrtc\" w Ustawieniach Projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\". Włącz " -"\"Import Etc 2\" w Ustawieniach Projektu." +"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\" lub \"PVRTC" +"\". Włącz \"Import Etc 2\" lub \"Import Pvrtc\" w Ustawieniach Projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Platforma docelowa wymaga kompresji tekstur \"ETC\", by sterownik awaryjny " +"Platforma docelowa wymaga kompresji tekstur \"PVRTC\", by sterownik awaryjny " "GLES2 mógł zadziałać.\n" -"Włącz \"Import Etc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback " +"Włącz \"Import Pvrtc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback " "Enabled\"." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2335,20 +2339,30 @@ msgid "Error saving TileSet!" msgstr "Błąd podczas zapisywania TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Błąd podczas zapisu układu!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Wystąpił błąd podczas próby zapisu układu edytora.\n" +"Upewnij się, że ścieżka ustawień użytkownika edytora ma możliwość zapisu." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Domyślny układ edytora został nadpisany." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Domyślny układ edytora nadpisany.\n" +"By przywrócić Domyślny układ do bazowych ustawień, użyj opcji Usuń układ i " +"usuń Domyślny układ." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nie znaleziono nazwy układu!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Przywrócono domyślny układ do ustawień bazowych." +msgid "Restored the Default layout to its base settings." +msgstr "Przywrócono Domyślny układ do ustawień bazowych." #: editor/editor_node.cpp msgid "" @@ -3720,6 +3734,22 @@ msgid "Name contains invalid characters." msgstr "Nazwa zawiera niedozwolone znaki." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Następujące pliki lub foldery konfliktują z pozycjami w lokalizacji " +"docelowej \"%s\":\n" +"\n" +"%s\n" +"\n" +"Czy chcesz je nadpisać?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Zmiana nazwy pliku:" @@ -3767,14 +3797,6 @@ msgstr "Edytuj zależności..." msgid "View Owners..." msgstr "Pokaż właścicieli..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Zmień nazwę..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikuj..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Przenieś do..." @@ -3802,11 +3824,16 @@ msgid "Collapse All" msgstr "Zwiń wszystko" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Zmień nazwę" +msgid "Duplicate..." +msgstr "Duplikuj..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Przenieś do kosza" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Zmień nazwę..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3841,8 +3868,11 @@ msgid "Move" msgstr "Przenieś" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "W tej lokalizacji istnieje już plik lub folder o podanej nazwie." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Zmień nazwę" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3910,8 +3940,19 @@ msgid "Searching..." msgstr "Wyszukiwanie..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Wyszukiwanie zakończone" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d dopasowań." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d dopasowań." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d dopasowań." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5244,50 +5285,43 @@ msgstr "Utwórz poziomą i pionową prowadnicę" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ustaw Pivot Offset dla CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Obróć CanvasItem" +msgstr "Obróć %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Obróć CanvasItem" +msgstr "Obróć CanvasItem \"%s\" do %d stopni" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń Anchor dla CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Przeskaluj Node2D \"%s\" do (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Zmień rozmiar Control \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Skaluj CanvasItem" +msgstr "Przeskaluj %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Skaluj CanvasItem" +msgstr "Przeskaluj CanvasItem \"%s\" do (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6569,18 +6603,16 @@ msgid "Move Points" msgstr "Przesuń punkty" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Przeciągnij: Obróć" +msgstr "Command: Obróć" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Przesuń wszystko" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Skaluj" +msgstr "Shift+Command: Skaluj" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6627,14 +6659,12 @@ msgid "Radius:" msgstr "Promień:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Utwórz wielokąt i UV" +msgstr "Kopiuj wielokąt do UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Zamień na Polygon2D" +msgstr "Kopiuj UV do wielokąta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8182,13 +8212,12 @@ msgid "Paint Tile" msgstr "Maluj kafelek" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LPM: Rysowanie linii\n" -"Shift+Ctrl+LPM: Malowanie prostokąta" +"Shift+Command+LPM: Malowanie prostokąta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8343,10 +8372,22 @@ msgid "Create a new rectangle." msgstr "Utwórz nowy prostokąt." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nowy prostokąt" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Utwórz nowy wielokąt." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nowy Wielokąt" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Usuń Zaznaczony Kształt" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Trzymaj wielokąt wewnątrz regionu Prostokąta." @@ -8553,10 +8594,6 @@ msgid "Error" msgstr "Błąd" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Nie podano wiadomości commitu" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Brak plików dodanych do stage'a" @@ -8613,10 +8650,6 @@ msgid "Stage All" msgstr "Stage'uj wszystko" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Dodaj wiadomość comittu" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Commituj zmiany" @@ -8714,9 +8747,8 @@ msgid "Add Node to Visual Shader" msgstr "Dodaj Węzeł do Wizualnego Shadera" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Węzeł przesunięty" +msgstr "Węzeł/y przesunięte" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8736,9 +8768,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Typ wejścia shadera wizualnego zmieniony" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Ustaw nazwę uniformu" +msgstr "Nazwa UniformRef zmieniona" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9455,7 +9486,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Referencja do istniejącego uniformu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9822,6 +9853,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Nie obsługiwany przez twój sterownik GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12091,6 +12126,10 @@ msgstr "" "Edytora." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Folder \"platform-tools\" nie istnieje!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12143,18 +12182,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Eksportuj AAB\" jest ważne tylko gdy \"Use Custom Build\" jest włączone." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nieprawidłowa nazwa pliku! Android App Bundle wymaga rozszerzenia *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion nie jest kompatybilne z Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nieprawidłowa nazwa pliku! APK Androida wymaga rozszerzenia *.apk." #: platform/android/export/export.cpp msgid "" @@ -12191,13 +12232,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Przesuwam wyjście" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Nie udało się skopiować i przemianować pliku eksportu, sprawdź folder " +"projektu gradle po informacje." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12394,6 +12437,26 @@ msgstr "" "Animacja CPUParticles2D wymaga użycia CanvasItemMaterial z włączonym " "\"Particles Animation\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A i Node B muszą być węzłami PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A musi być węzłem PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B musi być węzłem PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Złącze nie jest połączone do dwóch węzłów PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A i Node B muszą być różnymi węzłami PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12725,6 +12788,26 @@ msgstr "" "nadpisane przez silnik fizyki podczas działania.\n" "Zamiast tego, zmień rozmiary kształtów kolizji w węzłach podrzędnych." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A i Node B muszą być węzłami PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A musi być węzłem PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B musi być węzłem PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Złącze nie jest połączone z żadnym węzłem PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A i Node B muszą być różnymi węzłami PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12884,6 +12967,11 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "Proszę potwierdzić..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Włączyć przyciąganie" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12964,6 +13052,39 @@ 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 "Search complete" +#~ msgstr "Wyszukiwanie zakończone" + +#~ msgid "No commit message was provided" +#~ msgstr "Nie podano wiadomości commitu" + +#~ msgid "Add a commit message" +#~ msgstr "Dodaj wiadomość comittu" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "W tej lokalizacji istnieje już plik lub folder o podanej nazwie." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Brakuje folderu \"build-tools\"!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Nie udało się znaleźć narzędzia zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Uzgadnianie APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Nie udało się ukończyć uzgadniania APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nie udało się usunąć nieuzgodnionego APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Błąd podczas zapisu układu!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Domyślny układ edytora został nadpisany." + #~ msgid "Move pivot" #~ msgstr "Przesuń oś" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index b66652b18b..3f83414fb6 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -1,6 +1,6 @@ # Pirate translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Calum Knott <calum@calumk.com>, 2017. # Zion Nimchuk <zionnimchuk@gmail.com>, 2016-2017. @@ -1043,14 +1043,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1095,7 +1098,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2311,11 +2314,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2323,7 +2331,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3639,6 +3647,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "Rename Variable" @@ -3690,14 +3708,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3725,10 +3735,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Forge yer Node!" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3765,7 +3781,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3835,7 +3854,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8307,10 +8334,25 @@ msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Ye be fixin' Signal:" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8518,10 +8560,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8584,10 +8622,6 @@ msgid "Stage All" 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 "Change" @@ -9728,6 +9762,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11988,6 +12026,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12247,6 +12289,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12507,6 +12569,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12642,6 +12724,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/pt.po b/editor/translations/pt.po index e22a5e7818..772e3858b7 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -1,6 +1,6 @@ # Portuguese translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # Carlos Vieira <carlos.vieira@gmail.com>, 2017. @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot/pt/>\n" @@ -31,7 +31,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 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -695,7 +695,7 @@ msgstr "Mudar valor do Array" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Vai para linha" +msgstr "Vai para Linha" #: editor/code_editor.cpp msgid "Line Number:" @@ -740,7 +740,7 @@ msgstr "Padrão" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Alternar painel de Scripts" +msgstr "Alternar Painel de Scripts" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -1043,18 +1043,24 @@ msgid "Owners Of:" msgstr "Proprietários de:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Remover ficheiros selecionados do Projeto? (Sem desfazer)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Remover ficheiros selecionados do Projeto? (sem desfazer)\n" +"Pode encontrar os ficheiros removidos na Reciclagem do sistema." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Os ficheiros a serem removidos são necessários para que outros recursos " "funcionem.\n" -"Remover mesmo assim? (sem anular)" +"Remover mesmo assim? (sem desfazer)\n" +"Pode encontrar os ficheiros removidos na Reciclagem do sistema." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1098,7 +1104,7 @@ msgstr "Explorador de Recursos Órfãos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1327,7 +1333,7 @@ msgstr "Opções de barramento" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "Duplicado" +msgstr "Duplicar" #: editor/editor_audio_buses.cpp msgid "Reset Volume" @@ -1608,35 +1614,32 @@ msgstr "" "Recurso ativo'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC' para GLES2. Ative " -"'Importar Etc' nas Configurações do Projeto." +"Plataforma Alvo exige compressão de textura 'PVRTC' para GLES2. Ative " +"'Importar Pvrtc' nas Configurações do Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC2' para GLES3. Ative " -"'Importar Etc 2' nas Configurações do Projeto." +"Plataforma Alvo exige compressão de textura 'ETC2' ou 'PVRTC' para GLES3. " +"Ative 'Importar Etc 2' ou 'Importar Pvrtc' nas Configurações do Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC' para o driver de recurso " +"Plataforma Alvo exige compressão de textura 'PVRTC' para o driver de recurso " "em GLES2.\n" -"Ative 'Importar Etc' nas Configurações do Projeto, ou desative 'Driver de " -"Recurso ativo'." +"Ative 'Importar Pvrtc' nas Configurações do Projeto, ou desative 'Driver de " +"Recurso Ativo'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1888,19 +1891,19 @@ msgstr "Subir" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "Alternar Ficheiros escondidos" +msgstr "Alternar Ficheiros Escondidos" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Alternar favorito" +msgstr "Alternar Favorito" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "Alternar modo" +msgstr "Alternar Modo" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "Focar Caminho" +msgstr "Caminho de Foco" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -2317,20 +2320,30 @@ msgid "Error saving TileSet!" msgstr "Erro ao guardar TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erro ao tentar guardar o Modelo!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocorreu um erro ao tentar guardar o layout do editor.\n" +"Confirme que o caminho dos dados do utilizador é gravável." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "O modelo do editor predefinido foi substituído." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout predefinido do editor anulado.\n" +"Para restaurar o layout predefinido nas configurações base, use a opção " +"Apagar Layout e remova o layout Predefinido." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome do Modelo não encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Modelo predefinido restaurado para as configurações base." +msgid "Restored the Default layout to its base settings." +msgstr "Modelo Predefinido restaurado para as configurações base." #: editor/editor_node.cpp msgid "" @@ -2683,7 +2696,7 @@ msgstr "Posição do Painel" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "Modo livre de distrações" +msgstr "Modo Livre de Distrações" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." @@ -2814,7 +2827,7 @@ msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Sair para a lista de Projetos" +msgstr "Sair para a Lista de Projetos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp @@ -2843,7 +2856,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" -msgstr "Distribuição pequena com Sistema de Ficheiros em Rede" +msgstr "Pequena Distribuição com Sistema de Ficheiros de Rede" #: editor/editor_node.cpp msgid "" @@ -2869,8 +2882,8 @@ msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Com esta opção ativa, formas de colisão e nós raycast (para 2D e 3D) serão " -"visíveis no projeto em execução." +"Quando esta opção está ativada, as formas de colisões e nós raycast (para 2D " +"e 3D) serão visíveis no projeto em execução." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2930,7 +2943,7 @@ msgstr "Apresentação do Editor" #: editor/editor_node.cpp msgid "Take Screenshot" -msgstr "Captura do ecrã" +msgstr "Captura do Ecrã" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." @@ -3000,7 +3013,7 @@ msgstr "Comunidade" #: editor/editor_node.cpp msgid "About" -msgstr "Sobre Nós" +msgstr "Sobre" #: editor/editor_node.cpp msgid "Play the project." @@ -3163,7 +3176,7 @@ msgstr "Abrir Editor 3D" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Abrir Editor de Scripts" +msgstr "Abrir Editor de Script" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -3708,6 +3721,22 @@ msgid "Name contains invalid characters." msgstr "O nome contém caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Os seguintes ficheiros ou pastas estão em conflito com os items na " +"localização '%s':\n" +"\n" +"%s\n" +"\n" +"Deseja sobrescrevê-los?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Mudar nome do Ficheiro:" @@ -3755,14 +3784,6 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Ver proprietários..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover para..." @@ -3790,11 +3811,16 @@ msgid "Collapse All" msgstr "Colapsar Tudo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomear" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover para Reciclagem" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3829,8 +3855,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Já existe um ficheiro ou pasta com o mesmo nome nesta localização." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomear" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3898,8 +3927,19 @@ msgid "Searching..." msgstr "A procurar..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Pesquisa completa" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d correspondências." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d correspondências." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d correspondências." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5226,50 +5266,43 @@ msgstr "Criar Guias Horizontais e Verticais" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Definir CanvasItem \"%s\" Pivot Offset para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rodar CanvasItem" +msgstr "Rodar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rodar CanvasItem" +msgstr "Rodar CanvasItem \"%s\" para %d graus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" Âncora" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Controlo \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5450,7 +5483,7 @@ msgstr "Reposição do Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Modo seleção" +msgstr "Modo Seleção" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5472,12 +5505,12 @@ msgstr "Alt+RMB: seleção da lista de profundidade" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "Modo mover" +msgstr "Modo Mover" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "Modo rodar" +msgstr "Modo Rodar" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5621,7 +5654,7 @@ msgstr "Mostrar Grelha Sempre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" -msgstr "Mostrar ajudantes" +msgstr "Mostrar Ajudantes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -5629,7 +5662,7 @@ msgstr "Mostrar réguas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Guides" -msgstr "Mostrar guias" +msgstr "Mostrar Guias" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Origin" @@ -5645,7 +5678,7 @@ msgstr "Mostrar Grupo e Bloquear Ícones" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Centrar seleção" +msgstr "Centrar Seleção" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" @@ -5702,7 +5735,7 @@ msgstr "Copiar pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "Limpar pose" +msgstr "Limpar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6545,18 +6578,16 @@ msgid "Move Points" msgstr "Mover Ponto" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastar: Rotação" +msgstr "Comando: Rodar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover tudo" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escalar" +msgstr "Shift+Comando: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6605,14 +6636,12 @@ msgid "Radius:" msgstr "Raio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Criar Polígono & UV" +msgstr "Copiar Polígono para UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converter para Polygon2D" +msgstr "Copiar UV para Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6867,7 +6896,7 @@ msgstr "Reabrir Script Fechado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "Guardar tudo" +msgstr "Guardar Tudo" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6916,11 +6945,11 @@ msgstr "Executar" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "Passar dentro" +msgstr "Passar Dentro" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "Passar sobre" +msgstr "Passar Sobre" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" @@ -7077,11 +7106,11 @@ msgstr "Cortar" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "Selecionar tudo" +msgstr "Selecionar Tudo" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "Apagar linha" +msgstr "Apagar Linha" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -7093,7 +7122,7 @@ msgstr "Indentar à direita" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Alternar comentário" +msgstr "Alternar Comentário" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" @@ -7109,11 +7138,11 @@ msgstr "Mostrar todas as linhas" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "Clonar abaixo" +msgstr "Clonar Abaixo" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "Completar símbolo" +msgstr "Completar Símbolo" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" @@ -7121,7 +7150,7 @@ msgstr "Avaliar Seleção" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "Apagar espaços nos limites" +msgstr "Apagar Espaços nos Limites" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" @@ -7133,7 +7162,7 @@ msgstr "Converter Indentação em Tabulação" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Indentação automática" +msgstr "Indentação Automática" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -7141,7 +7170,7 @@ msgstr "Localizar em Ficheiros..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "Ajuda contextual" +msgstr "Ajuda Contextual" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" @@ -7174,7 +7203,7 @@ msgstr "Alternar Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Remover todos os Breakpoints" +msgstr "Remover Todos os Breakpoints" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" @@ -7438,35 +7467,35 @@ msgstr "Não disponível para o renderizador GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "Vista livre esquerda" +msgstr "Freelook Esquerda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "Vista livre direita" +msgstr "Freelook Direita" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Vista livre frente" +msgstr "Freelook Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vista livre trás" +msgstr "Freelook Trás" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Vista livre cima" +msgstr "Freelook Cima" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Vista livre baixo" +msgstr "Freelook Baixo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "Modificador de velocidade Freelook" +msgstr "Freelook Modificador de Velocidade" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Slow Modifier" -msgstr "Modificador de Velocidade Freelook" +msgstr "Freelook Modificador de Lentidão" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7527,27 +7556,27 @@ msgstr "Usar Ajuste" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "Vista de fundo" +msgstr "Vista de Fundo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "Vista de topo" +msgstr "Vista de Topo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vista de trás" +msgstr "Vista de Trás" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Vista de frente" +msgstr "Vista de Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "Vista esquerda" +msgstr "Vista Esquerda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "Vista direita" +msgstr "Vista Direita" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" @@ -7559,11 +7588,11 @@ msgstr "Inserir Chave de Animação" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "Focar na origem" +msgstr "Focar na Origem" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "Focar na seleção" +msgstr "Focar na Seleção" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -8095,7 +8124,7 @@ msgstr "Ficheiro Tema" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" -msgstr "Apagar seleção" +msgstr "Apagar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Fix Invalid Tiles" @@ -8120,7 +8149,7 @@ msgstr "Pintar retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" -msgstr "Preencher" +msgstr "Balde de Enchimento" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -8155,13 +8184,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LMB: Desenho de Linha\n" -"Shift+Ctrl+LMB: Pintura de Retângulo" +"Shift+Comando+LMB: Pintura de Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8316,10 +8344,22 @@ msgid "Create a new rectangle." msgstr "Criar novo retângulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Novo Retângulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Criar um novo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Novo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Apagar Forma Selecionada" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Manter polígono dentro da região Rect." @@ -8349,7 +8389,7 @@ 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á sobrescrever todos os tiles atuais." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -8526,10 +8566,6 @@ msgid "Error" msgstr "Erro" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Nenhuma mensagem de gravação foi fornecida" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Nenhum ficheiro adicionado ao palco" @@ -8586,10 +8622,6 @@ msgid "Stage All" msgstr "Tudo no Palco" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Adicionar mensagem de gravação" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Gravar Alterações" @@ -8687,9 +8719,8 @@ msgid "Add Node to Visual Shader" msgstr "Adicionar Nó ao Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nó Movido" +msgstr "Nó(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8709,9 +8740,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Alterado Tipo de Entrada do Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Definir Nome do Uniform" +msgstr "Nome de UniformRef Alterado" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9424,7 +9454,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Uma referência para um uniforme existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9561,15 +9591,15 @@ msgstr "Recursos" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "Exportar todos os recursos do Projeto" +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 selecionadas (e dependências)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "Exportar recursos (e dependências) selecionados" +msgstr "Exportar recursos selecionados (e dependências)" #: editor/project_export.cpp msgid "Export Mode:" @@ -9791,6 +9821,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Não suportado pelos seus drivers GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10395,7 +10429,7 @@ msgstr "Selecione Método" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" -msgstr "Renomear em massa" +msgstr "Renomear em Massa" #: editor/rename_dialog.cpp msgid "Replace:" @@ -11613,7 +11647,7 @@ msgstr "" #: 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 incorreta: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -11907,7 +11941,7 @@ msgstr "Selecionar ou criar uma função para editar o gráfico." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "Apagar Selecionados" +msgstr "Apagar Selecionado" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" @@ -11931,7 +11965,7 @@ msgstr "Atualizar Gráfico" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" -msgstr "Editar Membros" +msgstr "Editar Membro" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -12064,6 +12098,10 @@ msgstr "" "Configurações." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Diretoria 'platform-tools' em falta!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12116,18 +12154,21 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Exportar AAB\" só é válido quando \"Usar Compilação Personalizada\" está " +"ativa." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nome de ficheiro inválido! O Pacote Android App exige a extensão *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Expansão APK não compatível com Pacote Android App." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk." #: platform/android/export/export.cpp msgid "" @@ -12164,13 +12205,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "A mover saída" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Incapaz de copiar e renomear ficheiro de exportação, verifique diretoria de " +"projeto gradle por resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12363,6 +12406,26 @@ msgstr "" "Animação CPUParticles2D requer o uso de um CanvasItemMaterial com " "\"Particles Animation\" ativada." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Nó A e Nó B têm de ser PhysicsBody2Ds" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Nó A tem de ser um PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Nó B tem de ser um PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Junção não está conetada a dois PhysicsBody2Ds" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Nó A e Nó B têm de ser PhysicsBody2Ds diferentes" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12687,6 +12750,26 @@ msgstr "" "reescritas pelo motor de física na execução.\n" "Mude antes o tamanho das formas de colisão filhas." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Nó A e Nó B têm de ser PhysicsBodies" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Nó A tem de ser um PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Nó B tem de ser um PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Junção não está conetada a quaisquer PhysicsBodies" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Nó A e Nó B têm de ser PhysicsBodies diferentes" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12847,6 +12930,11 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirme por favor..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Ativar Ajuste" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12927,6 +13015,39 @@ 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 "Search complete" +#~ msgstr "Pesquisa completa" + +#~ msgid "No commit message was provided" +#~ msgstr "Nenhuma mensagem de gravação foi fornecida" + +#~ msgid "Add a commit message" +#~ msgstr "Adicionar mensagem de gravação" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Já existe um ficheiro ou pasta com o mesmo nome nesta localização." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Diretoria 'build-tools' em falta!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Incapaz de localizar a ferramenta zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "A alinhar APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Incapaz de completar o alinhamento APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Incapaz de apagar o APK não-alinhado." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erro ao tentar guardar o Modelo!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "O modelo do editor predefinido foi substituído." + #~ msgid "Move pivot" #~ msgstr "Mover pivô" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 1b81b4f77f..509d1833b1 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -1,6 +1,6 @@ # Portuguese (Brazil) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Allyson Souza <allyson_as@outlook.com>, 2017. # Anderson Araujo <anderson.araujoprog@gmail.com>, 2018. @@ -101,12 +101,16 @@ # Jairo Tuboi <tuboi.jairo@gmail.com>, 2020. # Felipe Fetter <felipetfetter@gmail.com>, 2020. # Rafael Henrique Capati <rhcapati@gmail.com>, 2020. +# NogardRyuu <nogardryuu@gmail.com>, 2020. +# Elton <eltondeoliveira@outlook.com>, 2020. +# ThiagoCTN <thiagocampostn@gmail.com>, 2020. +# Alec Santos <alecsantos96@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2020-10-05 01:02+0000\n" -"Last-Translator: Rafael Henrique Capati <rhcapati@gmail.com>\n" +"PO-Revision-Date: 2020-12-19 04:29+0000\n" +"Last-Translator: ThiagoCTN <thiagocampostn@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -114,7 +118,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1123,18 +1127,26 @@ msgid "Owners Of:" msgstr "Donos De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Remover arquivos selecionados do projeto? (irreversível)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Remover arquivos selecionados do projeto? (irreversível)\n" +"Você pode encontrar os arquivos removidos na lixeira e restaurá-los caso " +"seja necessário." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Os arquivos sendo removidos são requeridos por outros recursos para que " "funcionem.\n" -"Removê-los mesmo assim? (irreversível)" +"Removê-los mesmo assim? (irreversível)\n" +"Você pode encontrar os arquivos removidos na lixeira e restaurá-los caso " +"necessário." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1162,7 +1174,7 @@ msgstr "Consertar Dependências" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "Erros ao carregar!" +msgstr "Erro ao carregar!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -1178,7 +1190,7 @@ msgstr "Explorador de Recursos Órfãos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1687,35 +1699,33 @@ msgstr "" "Fallback Enabled' (Recuperação de driver ativada)." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"A plataforma alvo requer compressão de texturas 'ETC' para GLES2. Habilite " -"'Import Etc' nas Configurações de Projeto." +"A plataforma alvo requer compressão de texturas 'PVRTC' para GLES2. Habilite " +"'Importar Pvrtc' nas Configurações de Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"A plataforma de destino requer compactação de textura 'ETC2' para GLES3. " -"Ativar 'Importar Etc 2' nas Configurações do Projeto." +"A plataforma de destino requer compactação de textura 'ETC2' ou 'PVRTC' para " +"GLES3. Ativar 'Importar Etc 2' ou 'Importar Pvrtc' nas Configurações do " +"Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"A plataforma de destino requer compactação de textura 'ETC' para o driver " +"A plataforma de destino requer compressão de textura 'PVRTC' para o driver " "retornar ao GLES2.\n" -"Ativar 'Importar Etc' em Configurações do Projeto ou desabilitar 'Driver " -"Fallback Enabled' (Recuperação de driver ativada)." +"Habilite 'Importar Pvrtc' em Configurações do Projeto ou desabilite 'Driver " +"Reserva Ativado'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2396,20 +2406,30 @@ msgid "Error saving TileSet!" msgstr "Erro ao salvar TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erro ao salvar o layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocorreu um erro ao tentar salvar o layout do editor.\n" +"Certifique-se de que o caminho de dados do usuário do editor seja gravável." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Layout padrão do editor sobrescrito." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout do editor padrão substituído.\n" +"Para restaurar o layout padrão para suas configurações básicas, use a opção " +"Excluir layout e exclua o layout padrão." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome do layout não encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Layout padrão restaurado às configurações base." +msgid "Restored the Default layout to its base settings." +msgstr "Layout padrão restaurado às configurações básicas." #: editor/editor_node.cpp msgid "" @@ -3791,6 +3811,22 @@ msgid "Name contains invalid characters." msgstr "Nome contém caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Os seguintes arquivos ou pastas entram em conflito com os itens do local " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Deseja sobreescrever?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renomear arquivo:" @@ -3838,14 +3874,6 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Visualizar Proprietários..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover Para..." @@ -3873,11 +3901,16 @@ msgid "Collapse All" msgstr "Recolher Tudo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomear" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover para o Lixo" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3912,8 +3945,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Já há uma pasta ou arquivo neste caminho com o nome especificado." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomear" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3981,8 +4017,19 @@ msgid "Searching..." msgstr "Procurando..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Pesquisa concluída" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d correspondências." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d correspondências." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d correspondências." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5317,50 +5364,43 @@ msgstr "Criar Guias Horizontais e Verticais" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Definir Deslocamento do Pivô do CanvasItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotacionar CanvasItem" +msgstr "Rotacionar %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotacionar CanvasItem" +msgstr "Rotacionar CanvasItem \"%s\" para %d graus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvaItem" +msgstr "Mover Âncora do CanvaItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Dimensionar Node2D \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensinar Controle \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Tamanho CanvasItem" +msgstr "Dimensionar %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Tamanho CanvasItem" +msgstr "Redimensionar CanvasItem \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvaItem" +msgstr "Mover %d CanvaItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvaItem" +msgstr "Mover CanvaItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6641,18 +6681,16 @@ msgid "Move Points" msgstr "Mover pontos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastar: Rotacionar" +msgstr "Command: Rotacionar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover Todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escala" +msgstr "Shift+Command: Redimensionar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6701,14 +6739,12 @@ msgid "Radius:" msgstr "Raio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Criar Polígono & UV" +msgstr "Copiar Polígono para UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converter para Polígono2D" +msgstr "Copiar UV para Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8253,13 +8289,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LMB: Desenhar Linha\n" -"Shift+Ctrl+LMB: Pintar Retângulo" +"Shift+Command+LMB: Pintar Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8271,7 +8306,7 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Pegar Tile" +msgstr "Escolher Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" @@ -8414,10 +8449,22 @@ msgid "Create a new rectangle." msgstr "Criar um novo retângulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Novo Retângulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Criar um novo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Novo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Excluir Formas Selecionados" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantenha o polígono dentro da região Rect." @@ -8623,10 +8670,6 @@ msgid "Error" msgstr "Erro" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Nenhuma mensagem de confirmação foi fornecida" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Nenhum arquivo em espera" @@ -8683,10 +8726,6 @@ msgid "Stage All" msgstr "Salvar Tudo" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Adicione uma mensagem ao commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Confirmar Mudanças" @@ -8784,9 +8823,8 @@ msgid "Add Node to Visual Shader" msgstr "Adicionar Nó ao Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nó Movido" +msgstr "Node(s) Movidos" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -9523,8 +9561,9 @@ msgstr "" "uniformes e constantes." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "A reference to an existing uniform." -msgstr "" +msgstr "Uma referência a um uniforme existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9891,6 +9930,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Não suportado pelos seus drivers de GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12168,6 +12211,10 @@ msgstr "" "do Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Diretório 'ferramentas-da-plataforma' ausente!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12188,13 +12235,14 @@ msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -"Módulo inválido \"GodotPaymentV3\" incluido na configuração de projeto " -"\"android/modules\" (changed in Godot 3.2.2).\n" +"Módulo \"GodotPaymentV3\" inválido incluido na configuração de projeto " +"\"android/modules\" (alterado em Godot 3.2.2).\n" #: platform/android/export/export.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -"\"Use Custom Build\" precisa estar ativo para ser possível utilizar plugins." +"\"Usar Compilação Customizada\" precisa estar ativo para ser possível " +"utilizar plugins." #: platform/android/export/export.cpp msgid "" @@ -12220,6 +12268,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Exportar AAB\" só é válido quando \"Usar Compilação Customizada\" está " +"habilitado." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." @@ -12231,7 +12281,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk." #: platform/android/export/export.cpp msgid "" @@ -12269,7 +12319,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Movendo saída" #: platform/android/export/export.cpp msgid "" @@ -12462,6 +12512,26 @@ msgstr "" "A animação CPUParticles2D requer o uso de um CanvasItemMaterial com " "\"Animação de partículas\" ativada." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12790,6 +12860,26 @@ msgstr "" "sobrescritas pelo motor de física ao executar.\n" "Ao invés disso, altere o tamanho nas formas de colisão filhas." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12951,6 +13041,11 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirme Por Favor..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Ativar Snap" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13033,6 +13128,24 @@ 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 "Search complete" +#~ msgstr "Pesquisa concluída" + +#~ msgid "No commit message was provided" +#~ msgstr "Nenhuma mensagem de confirmação foi fornecida" + +#~ msgid "Add a commit message" +#~ msgstr "Adicione uma mensagem ao commit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Já há uma pasta ou arquivo neste caminho com o nome especificado." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erro ao salvar o layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Layout padrão do editor sobrescrito." + #~ msgid "Move pivot" #~ msgstr "Mover Pivô" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 1bdb567685..c0337a3413 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -1,6 +1,6 @@ # Romanian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Calin Sopterean <csopterean@gmail.com>, 2018. # Filip <filipanton@tutanota.com>, 2018, 2020. @@ -1042,14 +1042,19 @@ msgid "Owners Of:" msgstr "Stăpâni La:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ștergeți fișierele selectate din proiect? (Acțiune ireversibilă)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Fișierele în proces de ștergere sunt necesare pentru alte resurse ca ele să " "sa funcționeze.\n" @@ -1097,7 +1102,7 @@ msgstr "Explorator de Resurse Orfane" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2322,19 +2327,25 @@ msgid "Error saving TileSet!" msgstr "Eroare la salvarea TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Eroare la încercarea de a salva schema!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Schemă implicită de editor suprascrisă." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Numele schemei nu a fost găsit!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "S-a restaurat schema implictă la setările de bază." #: editor/editor_node.cpp @@ -3696,6 +3707,16 @@ msgid "Name contains invalid characters." msgstr "Numele furnizat conține caractere nevalide." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Redenumind fișierul:" @@ -3743,14 +3764,6 @@ msgstr "Editează Dependințele..." msgid "View Owners..." msgstr "Vizualizează Proprietarii..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Redenumește..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicați..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mută În..." @@ -3778,11 +3791,17 @@ msgid "Collapse All" msgstr "Reduceți Toate" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Redenumește" +msgid "Duplicate..." +msgstr "Duplicați..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mutați Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Redenumește..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3817,8 +3836,11 @@ msgid "Move" msgstr "Mută" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Există deja un fișier sau un dosar cu același nume în această locație." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Redenumește" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3884,8 +3906,19 @@ msgid "Searching..." msgstr "Caut..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Căutare completă" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d potriviri." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d potriviri." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d potriviri." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8445,10 +8478,25 @@ msgstr "Creați un dreptunghi nou." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Scenă Nouă" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Creează un nou poligon de la zero." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Deplasare poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ştergeți Cheile Selectate" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8657,11 +8705,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Niciun nume furnizat" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8726,10 +8769,6 @@ msgid "Stage All" msgstr "Înlocuiți Tot" #: 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 "Sincronizează Modificările Scriptului" @@ -9868,6 +9907,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12108,6 +12151,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12366,6 +12413,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12626,6 +12693,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12763,6 +12850,11 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Activează aliniere" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12831,6 +12923,23 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Search complete" +#~ msgstr "Căutare completă" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Niciun nume furnizat" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Există deja un fișier sau un dosar cu același nume în această locație." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Eroare la încercarea de a salva schema!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Schemă implicită de editor suprascrisă." + #, fuzzy #~ msgid "Move pivot" #~ msgstr "Mută Pivot" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index d261bb8832..c16d7a8e59 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -1,6 +1,6 @@ # Russian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Аркадий Авас <savvot@gmail.com>, 2018. # Artem Varaksa <aymfst@gmail.com>, 2018. @@ -88,11 +88,13 @@ # NeoLan Qu <it.bulla@mail.ru>, 2020. # Nikita Epifanov <nikgreens@protonmail.com>, 2020. # Cube Show <griiv.06@gmail.com>, 2020. +# Roman Tolkachyov <roman@tolkachyov.name>, 2020. +# Igor Grachev <igorecha.9999@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 23:15+0000\n" +"PO-Revision-Date: 2020-12-21 00:29+0000\n" "Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -102,7 +104,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1112,17 +1114,23 @@ msgid "Owners Of:" msgstr "Владельцы:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Удалить выбранные файлы из проекта? (Нельзя восстановить)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Удалить выбранные файлы из проекта? (Нельзя отменить)\n" +"Вы можете найти удалённые файлы в корзине, чтобы восстановить их." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Удаляемый файл требуется для правильной работы других ресурсов.\n" -"Всё равно удалить его? (Нельзя отменить!)" +"Удаляемые файлы требуются для правильной работы других ресурсов.\n" +"Всё равно удалить их? (Нельзя отменить)\n" +"Вы можете найти удалённые файлы в корзине, чтобы восстановить их." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1166,7 +1174,7 @@ msgstr "Обзор подключённых ресурсов" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1674,33 +1682,31 @@ msgstr "" "Enabled»." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Целевая платформа требует сжатие текстур «ETC» для GLES2. Включите «Import " -"Etc» в Настройках проекта." +"Целевая платформа требует сжатие текстур «PVRTC» для GLES2. Включите «Import " +"Pvrtc» в Настройках проекта." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Целевая платформа требует компрессию текстур «ETC2» для GLES2. Включите " -"«Import Etc 2» в Настройках проекта." +"Целевая платформа требует компрессию текстур «ETC2» или «PVRTC» для GLES3. " +"Включите «Import Etc 2» или «Import Pvrtc» в Настройках проекта." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Целевая платформа требует сжатия текстур «ETC» для отката драйвера к GLES2.\n" -"Включите «Import Etc» в Настройках проекта или отключите «Driver Fallback " +"Целевая платформа требует сжатия текстур «PVRTC» для отката драйвера к " +"GLES2.\n" +"Включите «Import Pvrtc» в Настройках проекта или отключите «Driver Fallback " "Enabled»." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2384,20 +2390,30 @@ msgid "Error saving TileSet!" msgstr "Ошибка сохранения набора тайлов!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Ошибка при попытке сохранить макет!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Произошла ошибка при попытке сохранить макет редактора.\n" +"Убедитесь, что путь к пользовательским данным редактора доступен для записи." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Переопределить макет по умолчанию." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Макет редактора по умолчанию перезаписан.\n" +"Чтобы восстановить базовые настройки макета по умолчанию, воспользуйтесь " +"опцией «Удалить макет» и удалите макет по умолчанию." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Название макета не найдено!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Вернуть макет по умолчанию к стандартному." +msgid "Restored the Default layout to its base settings." +msgstr "Макет по умолчанию восстановлен к его базовым настройкам." #: editor/editor_node.cpp msgid "" @@ -2656,7 +2672,7 @@ msgstr "Сцена «%s» имеет испорченные зависимост #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "Очистить последние сцены" +msgstr "Очистить недавние сцены" #: editor/editor_node.cpp msgid "" @@ -2802,7 +2818,7 @@ msgstr "Открыть сцену..." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "Открыть последнее" +msgstr "Открыть недавнее" #: editor/editor_node.cpp msgid "Save Scene" @@ -3098,7 +3114,7 @@ msgstr "Запустить сцену" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "Запустить выборочную сцену" +msgstr "Запустить произвольную сцену" #: editor/editor_node.cpp msgid "Play Custom Scene" @@ -3772,6 +3788,22 @@ msgid "Name contains invalid characters." msgstr "Имя содержит недопустимые символы." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Обнаружен конфликт следующих файлов (или папок) с объектами находящимися в " +"целевой директории '%s':\n" +"\n" +"%s\n" +"\n" +"Вы хотите их перезаписать?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Переименование файла:" @@ -3819,14 +3851,6 @@ msgstr "Редактировать зависимости..." msgid "View Owners..." msgstr "Просмотреть владельцев..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Переименовать..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Дублировать..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Переместить в..." @@ -3854,11 +3878,16 @@ msgid "Collapse All" msgstr "Свернуть все" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Переименовать" +msgid "Duplicate..." +msgstr "Дублировать..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Удалить в корзину" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Переименовать..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3893,8 +3922,11 @@ msgid "Move" msgstr "Переместить" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "По этому пути уже существует файл или папка с указанным именем." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Переименовать" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3955,15 +3987,26 @@ msgstr "Заменить: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" -msgstr "Заменить всё (без возможности отмены)" +msgstr "Заменить всё (нельзя отменить)" #: editor/find_in_files.cpp msgid "Searching..." msgstr "Поиск..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Поиск завершен" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d совпадения(ий)." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d совпадения(ий)." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d совпадения(ий)." #: editor/groups_editor.cpp msgid "Add to Group" @@ -4201,7 +4244,7 @@ msgstr "Перейти к следующему редактируемому об #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "История последних отредактированных объектов." +msgstr "История недавно отредактированных объектов." #: editor/inspector_dock.cpp msgid "Object properties." @@ -5292,50 +5335,43 @@ msgstr "Создать горизонтальные и вертикальные #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Задать Pivot Offset узла CanvasItem «%s» в (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Вращать CanvasItem" +msgstr "Вращать %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Вращать CanvasItem" +msgstr "Повернуть узел CanvasItem «%s» на %d градусов" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть якорь узла CanvasItem «%s»" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Масштабировать узел Node2D «%s» в (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Изменить размер узла Control «%s» на (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Вращать CanvasItem" +msgstr "Масштабировать %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Вращать CanvasItem" +msgstr "Масштабировать узел CanvasItem «%s» в (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть CanvasItem «%s» в (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6612,18 +6648,16 @@ msgid "Move Points" msgstr "Передвинуть точки" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Тащить: Поворот" +msgstr "Command: Повернуть" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Передвинуть все" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Масштаб" +msgstr "Shift+Command: Масштаб" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6671,14 +6705,12 @@ msgid "Radius:" msgstr "Радиус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Создать полигон и UV" +msgstr "Копировать полигон в UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Преобразовать в Polygon2D" +msgstr "Копировать UV в полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6937,7 +6969,7 @@ msgstr "Сохранить всё" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Мягкая перезагрузка скрипта" +msgstr "Мягко перезагрузить скрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" @@ -7167,7 +7199,7 @@ msgstr "Переключить комментарий" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "Свернуть/Развернуть строку" +msgstr "Свернуть/развернуть строку" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -7199,11 +7231,11 @@ msgstr "Преобразовать отступ в пробелы" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "Преобразовать отступы в табуляторы" +msgstr "Преобразовать отступы в табуляцию" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Авто-отступ" +msgstr "Автоотступ" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -8228,13 +8260,12 @@ msgid "Paint Tile" msgstr "Покрасить тайл" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+ЛКМ: Нарисовать линию\n" -"Shift+Ctrl+ЛКМ: Нарисовать прямоугольник" +"Shift+Command+ЛКМ: Нарисовать прямоугольник" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8389,10 +8420,22 @@ msgid "Create a new rectangle." msgstr "Создать новый прямоугольник." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Новый прямоугольник" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Создать новый полигон." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Новый полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Удалить выбранную форму" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Держать полигон внутри области Rect." @@ -8599,10 +8642,6 @@ msgid "Error" msgstr "Ошибка" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Не указано сообщение коммита" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Не добавлены файлы для коммита" @@ -8659,10 +8698,6 @@ msgid "Stage All" msgstr "Индекс. всё" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Добавьте сообщение коммита" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Закоммитить изменения" @@ -8760,9 +8795,8 @@ msgid "Add Node to Visual Shader" msgstr "Добавить узел в визуальный шейдер" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Узел перемещён" +msgstr "Узел(узлы) перемещён(ны)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8782,9 +8816,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Изменен тип ввода визуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Задать имя uniform" +msgstr "Имя UniformRef изменено" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9499,7 +9532,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Ссылка на существующий uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9867,6 +9900,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Не поддерживается вашими драйверами GPU." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10654,7 +10691,7 @@ msgstr "Дополнить сценой(ами)" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "Сохранить ветку как сцену" +msgstr "Заменить на сцену-ветку" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -10867,11 +10904,11 @@ 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)" @@ -11988,7 +12025,7 @@ msgstr "Удалить выделенное" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Найти тип нода" +msgstr "Найти тип узла" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -12139,6 +12176,10 @@ msgstr "" "редактора." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Директория «platform-tools» отсутствует!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12190,18 +12231,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"«Export AAB» действителен только при включённой опции «Использовать " +"пользовательскую сборку»." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Неверное имя файла! Android App Bundle требует расширения *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion несовместимо с Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Неверное имя файла! Android APK требует расширения *.apk." #: platform/android/export/export.cpp msgid "" @@ -12238,13 +12281,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Перемещение выходных данных" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Невозможно скопировать и переименовать файл экспорта, проверьте диекторию " +"проекта gradle на наличие выходных данных." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12432,6 +12477,29 @@ msgstr "" "Анимация CPUParticles2D требует использования CanvasItemMaterial с " "включённой опцией «Particles Animation»." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Узел А и Узел B должны быть экземплярами класса PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Узел А должен быть экземпляром класса PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Узел B должен быть экземпляром класса PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" +"Сустав должен быть связан с двумя объектами являющимися экземплярами класса " +"PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" +"Узел А и Узел B должны быть различными экземплярами класса PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12758,6 +12826,26 @@ msgstr "" "переопределены движком при запуске.\n" "Измените размер дочерней формы коллизии." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Узел А и Узел В должны быть наследниками класса PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Узел А должен быть наследником класса PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Узел В должен быть наследником класса PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Сустав не соединён ни с одним экземпляром класса PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Узел А и Узел В должны быть различными объектами класса PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12918,6 +13006,11 @@ msgstr "Внимание!" msgid "Please Confirm..." msgstr "Подтверждение..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Активировать привязку" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13000,6 +13093,39 @@ msgstr "Изменения могут быть назначены только msgid "Constants cannot be modified." msgstr "Константы не могут быть изменены." +#~ msgid "Search complete" +#~ msgstr "Поиск завершен" + +#~ msgid "No commit message was provided" +#~ msgstr "Не указано сообщение коммита" + +#~ msgid "Add a commit message" +#~ msgstr "Добавьте сообщение коммита" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "По этому пути уже существует файл или папка с указанным именем." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Директория «build-tools» отсутствует!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Не удалось найти инструмент zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Выравнивание APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Невозможно завершить выравнивание APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Не удалось удалить невыровненный APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Ошибка при попытке сохранить макет!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Переопределить макет по умолчанию." + #~ msgid "Move pivot" #~ msgstr "Переместить опорную точку" diff --git a/editor/translations/si.po b/editor/translations/si.po index 87851aa75a..e7f0199198 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -1,6 +1,6 @@ # Sinhala translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Yohan Sandun <Yohan99ysk@gmail.com>, 2018. msgid "" @@ -1022,14 +1022,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1074,7 +1077,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2255,11 +2258,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2267,7 +2275,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3548,6 +3556,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3595,14 +3613,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3630,10 +3640,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3667,7 +3682,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3735,7 +3753,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8092,10 +8118,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "තෝරාගත් යතුරු මකා දමන්න" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8286,10 +8325,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8348,10 +8383,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9478,6 +9509,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11652,6 +11687,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11904,6 +11943,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12164,6 +12223,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12298,6 +12377,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/sk.po b/editor/translations/sk.po index cedcac1f60..ebeb0fd387 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -1,6 +1,6 @@ # Slovak translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # J08nY <johnenter@gmail.com>, 2016. # MineGame 159 <minegame459@gmail.com>, 2018. @@ -1027,14 +1027,19 @@ msgid "Owners Of:" msgstr "Majitelia:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Odstrániť vybraté súbory z projektu? (nedá sa vrátiť späť)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Súbory ktoré budú odstránené vyžadujú ďalšie zdroje, aby mohli pracovať.\n" "Odstrániť aj napriek tomu? (nedá sa vrátiť späť)" @@ -1081,7 +1086,7 @@ msgstr "Orphan Resource Explorer" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2298,19 +2303,25 @@ msgid "Error saving TileSet!" msgstr "Error pri ukladaní TileSet-u!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error pri ukladaní layout-i!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Predvolený editor layout je prepísaný." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Meno Layout-u sa nenašlo!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Obnovené predvolené rozloženie na základné nastavenia." #: editor/editor_node.cpp @@ -3680,6 +3691,16 @@ msgid "Name contains invalid characters." msgstr "Meno obsahuje neplatné písmená." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Zostávajúce súbory:" @@ -3727,14 +3748,6 @@ msgstr "Editovať Závislosti..." msgid "View Owners..." msgstr "Zobraziť Majiteľov..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Premenovať..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikovať..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Presunúť Do..." @@ -3762,11 +3775,17 @@ msgid "Collapse All" msgstr "Collapse All" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Premenovať" +msgid "Duplicate..." +msgstr "Duplikovať..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Presunúť AutoLoad-y" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Premenovať..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3801,8 +3820,11 @@ msgid "Move" msgstr "Presunúť" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Už tu je súbor alebo priečinok pomenovaný rovnako." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Premenovať" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3870,8 +3892,19 @@ msgid "Searching..." msgstr "Vyhľadávam..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Vyhľadávanie bolo dokončené" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d zhody." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d zhody." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d zhody." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8330,10 +8363,25 @@ msgstr "Vytvoriť adresár" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Nová Scéna" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Vytvoriť adresár" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Signály:" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Zmazať označené kľúč(e)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8551,10 +8599,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8618,10 +8662,6 @@ msgid "Stage All" 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 "Zmeniť" @@ -9770,6 +9810,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12002,6 +12046,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12267,6 +12315,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12536,6 +12604,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12671,6 +12759,11 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Povoliť Prichytávanie" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12741,6 +12834,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Search complete" +#~ msgstr "Vyhľadávanie bolo dokončené" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Už tu je súbor alebo priečinok pomenovaný rovnako." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error pri ukladaní layout-i!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Predvolený editor layout je prepísaný." + #~ msgid "Move pivot" #~ msgstr "Presunúť pivot" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 5f0f2941a8..4b542f4daa 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -1,6 +1,6 @@ # Slovenian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # matevž lapajne <sivar.lapajne@gmail.com>, 2016-2018. # Matjaž Vitas <matjaz.vitas@gmail.com>, 2017-2018. @@ -1084,14 +1084,18 @@ msgstr "Lastniki:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Odstranim izbrane datoteke iz projekta? (brez vrnitve)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Izbrisane datoteke so potrebne za delovanje drugih virov.\n" "Ali jih vseeno odstranim? (brez vrnitve)" @@ -1140,7 +1144,7 @@ msgstr "Raziskovalec Osamljenih Virov" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2410,19 +2414,25 @@ msgid "Error saving TileSet!" msgstr "Napaka pri shranjevanju PloščnegaNiza!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Napaka pri shranjevanju postavitev!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Privzeti urejevalnik postavitev je bil prepisan." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Ime postavitve ni mogoče najti!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Privzeta postavitev je bila ponastavljena na osnovne nastaviteve." #: editor/editor_node.cpp @@ -3819,6 +3829,16 @@ msgid "Name contains invalid characters." msgstr "Ime vsebuje neveljavne znake." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Preimenovanje Datoteke:" @@ -3871,14 +3891,6 @@ msgstr "Uredi Odvisnosti..." msgid "View Owners..." msgstr "Poglej Lastnike..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Preimenuj..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Podvoji..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Premakni V..." @@ -3911,11 +3923,17 @@ msgid "Collapse All" msgstr "Skrči vse" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Preimenuj" +msgid "Duplicate..." +msgstr "Podvoji..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Premakni SamodejnoNalaganje" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Preimenuj..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3954,9 +3972,11 @@ msgid "Move" msgstr "Premakni" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "Datoteka ali mapa s tem imenom že obstaja." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Preimenuj" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4032,8 +4052,18 @@ msgstr "Shranjevanje..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Išči Besedilo" +msgid "%d match in %d file." +msgstr "Ni Zadetkov" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Ni Zadetkov" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Ni Zadetkov" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8658,10 +8688,25 @@ msgstr "Ustvari Nov %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Nov Prizor" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Ustvarite Poligon" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Uredi Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izbriši Izbrano" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8875,11 +8920,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "No commit message was provided" -msgstr "Ime ni na voljo" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8944,10 +8984,6 @@ msgid "Stage All" msgstr "Zamenjaj Vse" #: 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 "Usklajuj Spremembe Skript" @@ -10110,6 +10146,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12390,6 +12430,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12664,6 +12708,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12929,6 +12993,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13073,6 +13157,10 @@ msgstr "Opozorilo!" msgid "Please Confirm..." msgstr "Prosimo Potrdite..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -13148,6 +13236,24 @@ msgid "Constants cannot be modified." msgstr "Konstante ni možno spreminjati." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Išči Besedilo" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Ime ni na voljo" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Datoteka ali mapa s tem imenom že obstaja." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Napaka pri shranjevanju postavitev!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Privzeti urejevalnik postavitev je bil prepisan." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Premakni Točko" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index fcc1ee403d..ca29161155 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -1,6 +1,6 @@ # Albanian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Igli <iglibh@outlook.com>, 2018. # Enrik Qose <enrikqose@gmail.com>, 2019. @@ -1026,14 +1026,18 @@ msgstr "Pronarët e:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Hiq skedarët e zgjedhur nga projekti? (pa kthim pas)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Skedarët që do të hiqen janë të kërkuara nga resurse të tjera në mënyrë që " "ato të funksionojnë.\n" @@ -1082,7 +1086,7 @@ msgstr "Eksploruesi I Resurseve Pa Zotërues" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2349,19 +2353,25 @@ msgid "Error saving TileSet!" msgstr "Gabim gjatë ruajtjes së TileSet-it!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Gabim duke provuar të ruaj faqosjen!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Faqosja e parazgjedhur e editorit u mbishkel." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Emri i faqosjes nuk u gjet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Riktheu faqosjen e parazgjedhur në opsionet bazë." #: editor/editor_node.cpp @@ -3759,6 +3769,16 @@ msgid "Name contains invalid characters." msgstr "Emri permban karaktere të pasakta." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Duke riemërtuar skedarin:" @@ -3811,14 +3831,6 @@ msgstr "Modifiko Varësitë..." msgid "View Owners..." msgstr "Shiko Pronarët..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Riemërto..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dyfisho..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Lëviz në..." @@ -3847,11 +3859,17 @@ msgid "Collapse All" msgstr "Mbyll të Gjitha" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Riemërto" +msgid "Duplicate..." +msgstr "Dyfisho..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Lëviz Autoload-in" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Riemërto..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3889,10 +3907,11 @@ msgid "Move" msgstr "Lëviz" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Ekziston që më parë një skedar ose folder me të njëjtin emër në këtë " -"vendndodhje." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Riemërto" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3959,8 +3978,19 @@ msgid "Searching..." msgstr "Duke kërkuar..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Kërkimi u kompletua" +#, fuzzy +msgid "%d match in %d file." +msgstr "Përputhjet:" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Përputhjet:" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Përputhjet:" #: editor/groups_editor.cpp msgid "Add to Group" @@ -8368,10 +8398,25 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Skenë e Re" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Krijo një Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Fshi Çelësat e Zgjedhur" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8562,10 +8607,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8629,10 +8670,6 @@ msgid "Stage All" 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 "Sinkronizo Ndryshimet e Shkrimit" @@ -9768,6 +9805,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11991,6 +12032,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12245,6 +12290,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12505,6 +12570,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12639,6 +12724,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12707,6 +12796,20 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Search complete" +#~ msgstr "Kërkimi u kompletua" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Ekziston që më parë një skedar ose folder me të njëjtin emër në këtë " +#~ "vendndodhje." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Gabim duke provuar të ruaj faqosjen!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Faqosja e parazgjedhur e editorit u mbishkel." + #, fuzzy #~ msgid "Add initial export..." #~ msgstr "Shto te të preferuarat" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 68cddb924c..369e0d1c05 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -1,6 +1,6 @@ # Serbian (cyrillic) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # Александар Урошевић <nicecubedude@gmail.com>, 2017. @@ -1139,14 +1139,18 @@ msgstr "Власници:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Обриши одабране датотеке из пројекта? (НЕМА ОПОЗИВАЊА)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Жељене датотеке за брисање су потребне за рад других ресурса.\n" "Ипак их обриши? (НЕМА ОПОЗИВАЊА)" @@ -1196,7 +1200,7 @@ msgstr "Преглед повезаних ресурса" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2528,19 +2532,25 @@ msgid "Error saving TileSet!" msgstr "Грешка при чувању TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Грешка при чувању распореда!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Уобичајен распоред је преуређен." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Име распореда није пронађен!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Постави подразумевани изглед на почетну вредност." #: editor/editor_node.cpp @@ -4011,6 +4021,16 @@ msgid "Name contains invalid characters." msgstr "Дато име садржи неважећа слова." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Преименовање датотеке:" @@ -4065,15 +4085,6 @@ msgstr "Измени зависности..." msgid "View Owners..." msgstr "Погледај власнике..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Преименуј..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Дуплирај" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Помери у..." @@ -4106,11 +4117,18 @@ msgid "Collapse All" msgstr "Умањи све" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Преименуј" +#, fuzzy +msgid "Duplicate..." +msgstr "Дуплирај" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Помери аутоматско учитавање" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Преименуј..." #: editor/filesystem_dock.cpp #, fuzzy @@ -4149,9 +4167,11 @@ msgid "Move" msgstr "Помери" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "Датотека или директоријум са овим именом већ постоји." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Преименуј" #: editor/filesystem_dock.cpp #, fuzzy @@ -4232,8 +4252,18 @@ msgstr "Чување..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Потражи текст" +msgid "%d match in %d file." +msgstr "Нема подударања." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Нема подударања." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Нема подударања." #: editor/groups_editor.cpp msgid "Add to Group" @@ -9144,11 +9174,26 @@ msgstr "Направи нов" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Цртање правоугаоником" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Направи нови полигон од почетка." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Polygon" +msgstr "Помери полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Обриши одабрани Кључ/еве" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Keep polygon inside region Rect." msgstr "Задржи многоугао унутар региона Четвороугла." @@ -9387,11 +9432,6 @@ msgstr "Грешка" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "No commit message was provided" -msgstr "Име није дато" - -#: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No files added to stage" msgstr "Ни један фајл није додат на позорницу" @@ -9462,11 +9502,6 @@ msgstr "Сачувај све" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add a commit message" -msgstr "Додај предајну поруку" - -#: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit Changes" msgstr "Синхронизуј промене скриптица" @@ -10895,6 +10930,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "" "Higher visual quality\n" @@ -13591,6 +13630,10 @@ msgstr "" "Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -13913,6 +13956,26 @@ msgstr "" "ПроцесорЧестице2Д анимација захтева коришћење ПлатноПредметМатеријала са " "омогућеном \"Анимациом Честица\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -14281,6 +14344,26 @@ msgstr "" "Промена величине у ТврдомТелу (у карактеру или трвдом моду) ће бити " "преписана од стране физичког мотора у раду." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -14464,6 +14547,11 @@ msgstr "Узбуна!" msgid "Please Confirm..." msgstr "Молимо Потврди..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Укључи лепљење" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14560,6 +14648,28 @@ msgid "Constants cannot be modified." msgstr "Константе није могуће мењати." #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Потражи текст" + +#, fuzzy +#~ msgid "No commit message was provided" +#~ msgstr "Име није дато" + +#, fuzzy +#~ msgid "Add a commit message" +#~ msgstr "Додај предајну поруку" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Датотека или директоријум са овим именом већ постоји." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Грешка при чувању распореда!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Уобичајен распоред је преуређен." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Помери пивот" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index acd02840c7..1a4dcff362 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -1,6 +1,6 @@ # Serbian (latin) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Milos Ponjavusic <brane@branegames.com>, 2018. # BLu <blmasfon@gmail.com>, 2018. @@ -1031,14 +1031,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1083,7 +1086,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2269,11 +2272,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2281,7 +2289,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3565,6 +3573,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3612,14 +3630,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3647,10 +3657,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3684,7 +3699,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3752,7 +3770,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8149,10 +8175,25 @@ msgstr "Napravi" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Napravi" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Napravi" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Napravi" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izbriši označeni ključ(eve)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8355,10 +8396,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8420,10 +8457,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9554,6 +9587,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11741,6 +11778,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11993,6 +12034,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12253,6 +12314,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12387,6 +12468,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 86a496279a..fdd3cfa116 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -1,6 +1,6 @@ # Swedish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # bergmarklund <davemcgroin@gmail.com>, 2017, 2018. # Christoffer Sundbom <christoffer_karlsson@live.se>, 2017. @@ -19,12 +19,14 @@ # André Andersson <andre.eric.andersson@gmail.com>, 2020. # Andreas Westrell <andreas.westrell@gmail.com>, 2020. # Gustav Andersson <gustav.andersson96@outlook.com>, 2020. +# Shaggy <anton_christoffersson@hotmail.com>, 2020. +# Marcus Toftedahl <marcus.toftedahl@his.se>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-29 09:14+0000\n" -"Last-Translator: Gustav Andersson <gustav.andersson96@outlook.com>\n" +"PO-Revision-Date: 2020-11-04 02:39+0000\n" +"Last-Translator: Marcus Toftedahl <marcus.toftedahl@his.se>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/" "godot/sv/>\n" "Language: sv\n" @@ -32,7 +34,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 4.3-dev\n" +"X-Generator: Weblate 4.3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -913,9 +915,8 @@ msgid "Signals" msgstr "Signaler" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrera Filer..." +msgstr "Filtrera signaler" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1043,14 +1044,19 @@ msgid "Owners Of:" msgstr "Ägare av:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ta bort valda filer från projektet? (Kan ej återställas)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Filerna som tas bort krävs av andra resurser för att de ska fungera.\n" "Ta bort dem ändå? (går inte ångra)" @@ -1089,9 +1095,8 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "Ta bort %d sak(er) permanent? (Går inte ångra!)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "Beroenden" +msgstr "Visa Beroenden" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" @@ -1099,7 +1104,7 @@ msgstr "Föräldralös Resursutforskare" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1161,12 +1166,10 @@ msgid "Gold Sponsors" msgstr "Guldsponsorer" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" msgstr "Silverdonatorer" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Bronsdonatorer" @@ -1308,9 +1311,8 @@ msgid "Delete Bus Effect" msgstr "Ta bort Buss-Effekt" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Drag & drop to rearrange." -msgstr "Ljud-Buss, dra och släpp för att ändra ordning." +msgstr "Dra och släpp för att ändra ordning." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1370,12 +1372,10 @@ msgid "Move Audio Bus" msgstr "Flytta Ljud-Buss" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save Audio Bus Layout As..." msgstr "Spara Ljud-Buss Layout Som..." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Location for New Layout..." msgstr "Plats för Ny Layout..." @@ -1615,6 +1615,10 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" +"Målplattformen kräver 'ETC' texturkomprimering så GLES2 kan användas som " +"reserv grafik drivare.\n" +"Aktivera 'Import Etc' i Projektinställningarna eller deaktivera 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp #, fuzzy @@ -1655,7 +1659,7 @@ msgstr "Mallfil hittades inte:" #: 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 "Anpassad release mall hittades inte." #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" @@ -1663,7 +1667,7 @@ msgstr "Mallfil hittades inte:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "" +msgstr "Den inbäddade PCK får inte vara större än 4 GiB på 32 bitars exporter." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1706,7 +1710,7 @@ msgstr "Ersätt Alla" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "" +msgstr "Profilen måste ha ett giltigt filnamn och får inte innehålla '.'" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1715,7 +1719,7 @@ msgstr "En fil eller mapp med detta namn finns redan." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "" +msgstr "(Editor inaktiverad, Egenskaper inaktiverad)" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1734,7 +1738,7 @@ msgstr "Beskrivning:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "" +msgstr "Aktivera kontextuell redigerare" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1743,7 +1747,7 @@ msgstr "Egenskaper" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "" +msgstr "Aktivera funktioner:" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1752,13 +1756,15 @@ msgstr "Sök Klasser" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "Fil '%s''s format är ogiltig, import avbruten" #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" +"Profilen '%s' finns redan. Ta bort den före du importerar. Importeringen " +"avbruten." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1816,7 +1822,7 @@ msgstr "Radera punkter" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "" +msgstr "Godot funktions profil" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1970,11 +1976,11 @@ msgstr "Växla Dolda Filer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "" +msgstr "sortera objekt som ett rutnät av bilder." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "" +msgstr "Visa objekt som lista." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -2369,11 +2375,16 @@ msgid "Error saving TileSet!" msgstr "Fel vid sparande av TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fel vid försök att spara layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2381,7 +2392,7 @@ msgid "Layout name not found!" msgstr "Layoutnamn hittades inte!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3757,6 +3768,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Byter namn på filen:" @@ -3812,16 +3833,6 @@ msgstr "" msgid "View Owners..." msgstr "Visa Ägare..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "Byt namn..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplicera" - #: editor/filesystem_dock.cpp #, fuzzy msgid "Move To..." @@ -3855,11 +3866,19 @@ msgid "Collapse All" msgstr "Stäng Alla" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Byt namn" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplicera" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flytta Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "Byt namn..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3896,9 +3915,11 @@ msgid "Move" msgstr "Flytta" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mapp med detta namn finns redan." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Byt namn" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3974,8 +3995,18 @@ msgstr "Sparar..." #: editor/find_in_files.cpp #, fuzzy -msgid "Search complete" -msgstr "Söktext" +msgid "%d match in %d file." +msgstr "%d matchningar." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d matchningar." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d matchningar." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8542,10 +8573,25 @@ msgstr "Skapa Ny" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scen" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Skapa Prenumeration" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Redigera Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ta bort valda nycklar" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8758,10 +8804,6 @@ msgid "Error" msgstr "Fel" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8826,10 +8868,6 @@ msgid "Stage All" msgstr "Spara Alla" #: 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 "Synkronisera Skript-ändringar" @@ -9990,6 +10028,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12275,6 +12317,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12542,6 +12588,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12821,6 +12887,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12961,6 +13047,10 @@ msgstr "Varning!" msgid "Please Confirm..." msgstr "Vänligen Bekräfta..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13033,6 +13123,17 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Search complete" +#~ msgstr "Söktext" + +#, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mapp med detta namn finns redan." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fel vid försök att spara layout!" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Flytta Upp" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 233ec40229..4e7f9d7d26 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -1,6 +1,6 @@ # Tamil translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # Senthil Kumar K <logickumar@gmail.com>, 2017. @@ -1027,14 +1027,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1079,7 +1082,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2261,11 +2264,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2273,7 +2281,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3555,6 +3563,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3602,15 +3620,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "அசைவூட்டு போலிபச்சாவிகள்" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3638,10 +3647,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "அசைவூட்டு போலிபச்சாவிகள்" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "சேர் முக்கியப்புள்ளியை நகர்த்து" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3675,7 +3691,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3742,7 +3761,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8092,10 +8119,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "அனைத்து தேர்வுகள்" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "அனைத்து தேர்வுகள்" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8286,10 +8327,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8349,10 +8386,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9476,6 +9509,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11650,6 +11687,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11902,6 +11943,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12162,6 +12223,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12296,6 +12377,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/te.po b/editor/translations/te.po index 8d4a4192e8..643c89a036 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -1,6 +1,6 @@ # Telugu translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # suresh p <suresh9247@gmail.com>, 2019, 2020. msgid "" @@ -1002,14 +1002,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1054,7 +1057,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2234,11 +2237,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2246,7 +2254,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3525,6 +3533,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3572,14 +3590,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3607,10 +3617,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3644,7 +3659,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3711,7 +3729,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8030,10 +8056,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8222,10 +8260,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8283,10 +8317,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9405,6 +9435,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11562,6 +11596,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11814,6 +11852,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12074,6 +12132,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12208,6 +12286,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/th.po b/editor/translations/th.po index 4f0cf780a4..a81720a35a 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -1,18 +1,19 @@ # Thai translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Kaveeta Vivatchai <goodytong@gmail.com>, 2017. # Poommetee Ketson (Noshyaar) <poommetee@protonmail.com>, 2017-2018. # Thanachart Monpassorn <nunf_2539@hotmail.com>, 2020. # Anonymous <noreply@weblate.org>, 2020. # Lon3r <mptube.p@gmail.com>, 2020. +# Kongfa Warorot <gongpha@hotmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 17:26+0000\n" -"Last-Translator: Thanachart Monpassorn <nunf_2539@hotmail.com>\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" +"Last-Translator: Kongfa Warorot <gongpha@hotmail.com>\n" "Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/" "th/>\n" "Language: th\n" @@ -20,7 +21,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1020,17 +1021,23 @@ msgid "Owners Of:" msgstr "เจ้าของของ:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "ลบไฟล์ที่เลือกออกจากโปรเจกต์? (กู้คืนไม่ได้)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"ลบไฟล์ที่เลือกออกจากโปรเจกต์? (ย้อนกลับไม่ได้)\n" +"คุณสามารถหาไฟล์ที่ลบได้จากถังขยะเพื่อที่จะกู้คืน" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"ไฟล์ที่กำลังจะลบ จำเป็นสำหรับใช้งานโดยทรัพยากรอันอื่น\n" -"จะทำการลบหรือไม่? (คืนกลับไม่ได้)" +"ไฟล์ที่กำลังจะลบ ถูกใช้งานโดยทรัพยากรอันอื่น\n" +"จะทำการลบหรือไม่? (ย้อนกลับไม่ได้)\n" +"คุณสามารถหาไฟล์ที่ลบแล้วในถังขยะเพื่อที่จะกู้คืน" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1074,7 +1081,7 @@ msgstr "ทรัพยากรที่ไม่ได้ใช้" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1165,7 +1172,7 @@ msgstr "ผู้บริจาค" #: editor/editor_about.cpp msgid "License" -msgstr "สัญญาอนุญาต" +msgstr "ลิขสิทธิ์" #: editor/editor_about.cpp msgid "Third-party Licenses" @@ -1580,33 +1587,30 @@ msgstr "" "เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับ GLES2 เปิด 'Import Etc' " +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับ GLES2 กรุณาเปิด 'Import Etc' " "ในตั้งค่าโปรเจ็ค" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC2' สำหรับ GLES3 เปิด 'Import Etc 2' " -"ในตั้งค่าโปรเจ็ค" +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC2' สำหรับ GLES3 กรุณาเปิด 'Import Etc " +"2' หรือ 'Import Pvrtc' ในตั้งค่าโปรเจ็ค" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับการกลับมาใช้ GLES2\n" -"เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'PVRTC' สำหรับการกลับมาใช้ GLES2\n" +"เปิด 'Import Pvrtc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2274,20 +2278,29 @@ msgid "Error saving TileSet!" msgstr "ผิดพลาดขณะบันทึกไทล์เซต!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "ผิดพลาดขณะบันทึกเลย์เอาต์!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"เกิดข้อผิดพลาดขณะกำลังบันทึกเลเอาต์ของเอดิเตอร์\n" +"ตรวจสอบให้แน่ใจว่าที่อยู่ข้อมูลผู้ใช้เอดิเตอร์สามารถแก้ไขได้" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "แทนที่เลย์เอาต์เริ่มต้น" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"เลเอาต์เอดิเตอร์ดั้งเดิมถูกเขียนทับ\n" +"เพื่อที่จะกู้คืนเลเอาต์ดั้งเดิมไปยังการตั้งค่าพื้นฐาน ใช้การตั้งค่า Delete Layout และลบเลเอาต์ตั้งเดิม" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "ไม่พบชื่อเลย์เอาต์!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "คืนเลย์เอาต์เป็นค่าเริ่มต้น" +msgid "Restored the Default layout to its base settings." +msgstr "คืนเลย์เอาต์ดั้งเดิมไปยังการตั้งค่าพื้นฐาน" #: editor/editor_node.cpp msgid "" @@ -3622,6 +3635,21 @@ msgid "Name contains invalid characters." msgstr "อักษรบางตัวใช้ไม่ได้" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"ไฟล์หรือโฟลเดอร์ต่อไปนี้มีความขัดแย้งกับรายการในตำแหน่งเป้าหมาย '%s':\n" +"\n" +"%s\n" +"\n" +"คุณต้องการที่จะเขียนทับหรือไม่?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "เปลี่ยนชื่อไฟล์:" @@ -3669,14 +3697,6 @@ msgstr "แก้ไขการอ้างอิง..." msgid "View Owners..." msgstr "ดูเจ้าของ..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "เปลี่ยนชื่อ..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "ทำซ้ำ..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "ย้ายไป..." @@ -3704,11 +3724,16 @@ msgid "Collapse All" msgstr "ยุบเข้า" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "เปลี่ยนชื่อ" +msgid "Duplicate..." +msgstr "ทำซ้ำ..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "ย้ายไปถังขยะ" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "เปลี่ยนชื่อ..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3743,8 +3768,11 @@ msgid "Move" msgstr "ย้าย" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "มีไฟล์หรือโฟลเดอร์ชื่อเดียวกันอยู่แล้ว" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "เปลี่ยนชื่อ" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3810,8 +3838,19 @@ msgid "Searching..." msgstr "กำลังค้นหา..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "ค้นหาสำเร็จ" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d ตรงกัน" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d ตรงกัน" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d ตรงกัน" #: editor/groups_editor.cpp msgid "Add to Group" @@ -4055,7 +4094,7 @@ msgstr "คุณสมบัติออบเจกต์" #: editor/inspector_dock.cpp msgid "Filter properties" -msgstr "คุญสมบัติตัวกรอง" +msgstr "คุณสมบัติตัวกรอง" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -5125,50 +5164,43 @@ msgstr "สร้างเส้นไกด์แนวตั้งและแ #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "ตั้งออฟเซ็ตจุดหมุน CanvasItem \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "หมุน CanvasItem" +msgstr "หมุน %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "หมุน CanvasItem" +msgstr "หมุน CanvasItem \"%s\" ไปที่ %d องศา" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อนจุดยึด CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "ปรับขนาด Node2D \"%s\" ไปยัง (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "ปรับขนาด Control \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "ขนาด CanvasItem" +msgstr "ปรับขนาด %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "ขนาด CanvasItem" +msgstr "ปรับขนาด CanvasItem \"%s\" ไปยัง (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อน %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อน CanvasItem \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6431,16 +6463,14 @@ msgid "Move Points" msgstr "ย้ายจุด" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "ลาก: หมุน" +msgstr "ctrl: หมุน" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: ย้ายทั้งหมด" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" msgstr "Shift+Ctrl: ปรับขนาด" @@ -6489,14 +6519,12 @@ msgid "Radius:" msgstr "รัศมี:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "สร้าง Polygon และ UV" +msgstr "คัดลอกโพลีกอนไปยังยูวี" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "แปลงเป็น Polygon2D" +msgstr "คัดลอกยูวีไปยังโพลีกอน" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -7168,7 +7196,7 @@ msgstr "แทรกคีย์แอนิเมชัน" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" -msgstr "เสียงสูงต่ำ" +msgstr "Pitch" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" @@ -8036,13 +8064,12 @@ msgid "Paint Tile" msgstr "วาดไทล์" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+LMB: วาดเส้น\n" -"Shift+Ctrl+LMB: วาดสี่เหลี่ยม" +"Shift+คลิกซ้าย: วาดเส้น\n" +"Shift+Ctrl+คลิกซ้าย: วาดสี่เหลี่ยม" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8197,10 +8224,22 @@ msgid "Create a new rectangle." msgstr "สร้างสี่เหลี่ยมใหม่" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "สี่เหลี่ยมใหม่" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "สร้างรูปหลายเหลี่ยมใหม่" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "รูปหลายเหลี่ยมใหม่" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "ลบรูปร่างที่เลือก" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "ให้รูปหลายเหลี่ยมอยู่ในขอบเขตของสี่เหลี่ยม" @@ -8403,10 +8442,6 @@ msgid "Error" msgstr "ผิดพลาด" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "ไม่ได้ระบุข้อความ commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "ไม่มีไฟล์เพิ่มไฟยัง stage" @@ -8463,10 +8498,6 @@ msgid "Stage All" msgstr "Stage ทั้งหมด" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "เพิ่มข้อความ commit" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "การเปลี่ยนแปลง commit" @@ -8564,9 +8595,8 @@ msgid "Add Node to Visual Shader" msgstr "เพิ่มโหนดไปยังเวอร์ชวลเชดเดอร์" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "ย้ายโหนดเรียบร้อย" +msgstr "เลื่อนโหนดแล้ว" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8586,9 +8616,8 @@ msgid "Visual Shader Input Type Changed" msgstr "เปลี่ยนชนิดของอินพุตเวอร์ชวลเชดเดอร์" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "ตั้งชื่อยูนิฟอร์ม" +msgstr "เปลี่ยนชื่อ UniformRef แล้ว" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9285,7 +9314,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "การอ้างอิงถึงยูนิฟอร์มที่มีอยู่" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9637,6 +9666,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "ไม่รองรับโดยไดรเวอร์ GPU ของคุณ" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11859,6 +11892,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "ที่อยู่ Android SDK ผิดพลาดสำหรับการสร้างแบบกำหนดเองในการตั้งค่าเอดิเตอร์" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "ไดเร็กทอรี 'platform-tools' หายไป!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11904,19 +11941,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเปิดใช้งาน \"Use Custom Build\"" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์แอปบันเดิลจำเป็นต้องมีนามสกุล *.aab" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "การขยาย APK เข้ากันไม่ได้กับแอนดรอยด์แอปบันเดิล" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์ APK จำเป็นต้องมีนามสกุล *.apk" #: platform/android/export/export.cpp msgid "" @@ -11951,13 +11988,14 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "กำลังย้ายเอาต์พุต" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"ไม่สามารถคัดลอกและเปลี่ยนชื่อไฟล์ส่งออก ตรวจสอบไดเร็กทอรีโปรเจ็กต์ gradle สำหรับเอาต์พุต" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12139,6 +12177,26 @@ msgstr "" "แอนิเมชัน CPUParticles2D จำเป็นต้องใช้ CanvasItemMaterial โดยเปิดการทำงาน " "\"Particles Animation\"" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "โหนด A และ โหนด B จะต้องเป็น PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A จะต้องเป็น PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B จะต้องเป็น PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "ข้อต่อไม่ได้เชื่อมโยงกับ PhysicsBody2D สองโหนด" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "โหนด A และโหนด B จะต้องเป็น PhysicsBody2D ที่แตกต่างกัน" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12433,6 +12491,26 @@ msgstr "" "จะถูกแทนที่โดยเอ็นจิ้นฟิสิกส์เมื่อทำงาน\n" "เปลี่ยนขนาดในขอบเขตการชนลูกแทน" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "โหนด A และโหนด B จะต้องเป็น PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A จะต้องเป็น PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node A จะต้องเป็น PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "ข้อต่อไม่ได้เชื่อมโยงกับ PhysicsBody ใด ๆ" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "โหนด A และโหนด B จะต้องเป็น PhysicsBody ที่แตกต่างกัน" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12582,6 +12660,11 @@ msgstr "แจ้งเตือน!" msgid "Please Confirm..." msgstr "กรุณายืนยัน..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "จำกัดการเคลื่อนย้าย" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12659,6 +12742,39 @@ msgstr "Varyings สามารถกำหนดในังก์ชันเ msgid "Constants cannot be modified." msgstr "ค่าคงที่ไม่สามารถแก้ไขได้" +#~ msgid "Search complete" +#~ msgstr "ค้นหาสำเร็จ" + +#~ msgid "No commit message was provided" +#~ msgstr "ไม่ได้ระบุข้อความ commit" + +#~ msgid "Add a commit message" +#~ msgstr "เพิ่มข้อความ commit" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "มีไฟล์หรือโฟลเดอร์ชื่อเดียวกันอยู่แล้ว" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "ไดเร็กทอรี 'build-tools' หายไป!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "ไม่สามารถหา zipalign tool" + +#~ msgid "Aligning APK..." +#~ msgstr "จัดเรียง APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "ไม่สามารถจัดเรียง APK ได้สำเร็จ" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "ไม่สามารถลบ APK ที่ยังไม่จัดเรียง" + +#~ msgid "Error trying to save layout!" +#~ msgstr "ผิดพลาดขณะบันทึกเลย์เอาต์!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "แทนที่เลย์เอาต์เริ่มต้น" + #~ msgid "Move pivot" #~ msgstr "ย้ายจุดหมุน" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 91dd17c218..9cb688c727 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -1,6 +1,6 @@ # Turkish translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Aprın Çor Tigin <kabusturk38@gmail.com>, 2016-2017. # Aykut YILDIRIM <aykutyildirim@windowslive.com>, 2018. @@ -59,8 +59,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-12 09:28+0000\n" -"Last-Translator: Suleyman Poyraz <zaryob.dev@gmail.com>\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" +"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -68,7 +68,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1078,17 +1078,25 @@ msgid "Owners Of:" msgstr "Şunların sahipleri:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Seçilen dosyalar kaldırılsın mı? (geri alınamaz)\n" +"Kaldırılan dosyaları sistemin geri dönüşüm kutusunda bulabilir ve geri " +"yükleyebilirsiniz." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Kaldırılmakta olan dosyalar başka kaynakların çalışması için gerekli.\n" -"Yine de kaldırmak istiyor musunuz? (geri alınamaz)" +"Diğer kimi dosyaların çalışması için kaldırdığınız dosyalar gerekli " +"görülmekte.\n" +"Yine de kaldırılsın mı? (geri alınamaz)\n" +"Kaldırılan dosyaların sistemin geri dönüşüm kutusunda bulabilirsiniz." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1132,7 +1140,7 @@ msgstr "Orphan Kaynak Araştırıcı" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1642,16 +1650,14 @@ msgstr "" "Fallback Enabled' seçeneğini devre dışı bırakın." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Hedef platform GLES2 için 'ETC' doku sıkıştırma gerekiyor. Proje " -"Ayarları'nda 'Import Etc' etkinleştirin." +"Hedef platform GLES2 için 'PVRTC' sıkıştırma biçimini gerektirmekte.. Proje " +"Ayarlarındaki 'Pvrtc içe aktar' seçeneğini etkinleştirin." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." @@ -1660,7 +1666,6 @@ msgstr "" "Ayarları'nda 'Import Etc 2' etkinleştirin." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" @@ -2145,7 +2150,7 @@ msgstr "Metot" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp msgid "Signal" -msgstr "Sinyaller" +msgstr "Sinyal" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" @@ -2349,19 +2354,29 @@ msgid "Error saving TileSet!" msgstr "TileSet kaydedilirken hata!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Düzenleyici arayüzünü kaydederken hata meydana geldi.\n" +"Düzenleyici için kullanıcı veri yolunun yazma izninin olduğundan emin olunuz." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Varsayılan arayüz değiştirildi.\n" +"Varsayılan arayüz temel ayarlarını geri yüklemek için, Arayüz silme " +"seçeneğini kullanarak Varsayılan Arayüz'ü silin." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Yerleşim Düzeni adı bulunamadı!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Varsayılan yerleşim düzeni temel ayarlarına geri döndürüldü." #: editor/editor_node.cpp @@ -3738,6 +3753,22 @@ msgid "Name contains invalid characters." msgstr "İsim geçersiz karkterler içeriyor." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Aşağıdaki dosyalar veya klasörler '%s' hedef konumundaki ögelerle " +"çakışıyor:\n" +"\n" +"%s\n" +"\n" +"Bunların üzerine yazmak ister misiniz?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Dosya yeniden-adlandırma:" @@ -3785,14 +3816,6 @@ msgstr "Bağımlılıkları Düzenle..." msgid "View Owners..." msgstr "Sahipleri Görüntüle..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Yeniden Adlandır..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Çoğalt..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Şuraya Taşı..." @@ -3820,11 +3843,16 @@ msgid "Collapse All" msgstr "Hepsini Daralt" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Yeniden Adlandır" +msgid "Duplicate..." +msgstr "Çoğalt..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Çöpe At" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Yeniden Adlandır..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3859,8 +3887,11 @@ msgid "Move" msgstr "Taşı" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Bu konumda zaten aynı ada sahip bir dosya veya klasör var." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Yeniden Adlandır" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3928,8 +3959,19 @@ msgid "Searching..." msgstr "Aranıyor..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Arama tamamlandı" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d eşleşme." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d eşleşme." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d eşleşme." #: editor/groups_editor.cpp msgid "Add to Group" @@ -4564,7 +4606,7 @@ msgstr "Sonraki Değişeni Karıştır" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Oluşturma Süresini Değiştir" +msgstr "Harmanlama Süresini Değiştir" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -5261,50 +5303,43 @@ msgstr "Yeni yatay ve dikey kılavuzlar oluştur" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" Pivot Ofset'i (%d, %d) olarak ayarlayın" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem Döndür" +msgstr "CanvasItems'i %d döndür" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem Döndür" +msgstr "CanvasItem \"% s\"'i %d dereceye döndürün" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItem Taşı" +msgstr "CanvasItem \"%s\" Bağlayıcısını Taşı" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\"'i (%s, %s)'a boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "\"%s\" denetimini (%d, %d)'a boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "CanvasItem Esnet" +msgstr "CanvasItems'i %d boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "CanvasItem Esnet" +msgstr "CanvasItem \"%s\" öğesini (%s,%s) olarak boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItem Taşı" +msgstr "CanvasItems'i %d kadar taşı" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItem Taşı" +msgstr "CanvasItem \"%s\" öğesini (%d,%d) konumuna taşı" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6581,18 +6616,16 @@ msgid "Move Points" msgstr "Noktaları Taşı" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Sürükle: Döndürür" +msgstr "Ctrl: Döndür" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "ÜstKrkt: Tümünü Taşı" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "ÜstKrkt+Ctrl: Ölçek" +msgstr "ÜstKrkt+Ctrl: Ölçeklendir" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6639,14 +6672,12 @@ msgid "Radius:" msgstr "Yarıçap:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Çokgen & UV Oluştur" +msgstr "Çokgeni UV'ye kopyala" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Çokgen2D'ye dönüştür" +msgstr "UV'yi çokgene kopyala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8193,13 +8224,12 @@ msgid "Paint Tile" msgstr "Karo Boya" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+SFT: Çizgi Çiz\n" -"Shift+Ctrl+SFT: Dkidörtgen Boya" +"Shift+Ctrl+SFT: Dolu Dkidörtgen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8354,10 +8384,22 @@ msgid "Create a new rectangle." msgstr "Yeni dikdörtgen oluştur." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Dolu Dikdörtgen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Yeni bir çokgen oluşturun." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Yeni Çokgen" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Seçilen Şekli Sil" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Çokgeni Dikdörtgen bölgesinde tut." @@ -8567,10 +8609,6 @@ msgid "Error" msgstr "Hata" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Hiçbir işleme mesajı sağlanmadı" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Sahneye hiç dosya eklenmedi" @@ -8627,10 +8665,6 @@ msgid "Stage All" msgstr "Tümünü Sahneye Al" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "İşleme Mesajı Ekle" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Değişiklikleri İşle" @@ -8728,9 +8762,8 @@ msgid "Add Node to Visual Shader" msgstr "Visual Shader'a düğüm ekle" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Düğüm Taşındı" +msgstr "Düğüm(ler) Taşındı" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8750,9 +8783,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual Shader giriş Türü Değişti" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Uniform ismi ayarla" +msgstr "UniformRef Adı Değiştirildi" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9462,7 +9494,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Varolan bir üniformaya bir referans." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9829,6 +9861,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "GPU sürücüleriniz tarafından desteklenmiyor." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12091,6 +12127,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "Editör Ayarlarında özel derleme için geçersiz Android SDK yolu." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Eksik 'platform araçları' dizini!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12143,18 +12183,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"AAB Dışa Aktar\" yalnızca \"Özel Yapı Kullan\" etkinleştirildiğinde " +"geçerlidir." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Geçersiz dosya adı! Android Uygulama Paketi *.aab uzantısı gerektirir." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Genişletme, Android Uygulama Paketi ile uyumlu değildir." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir." #: platform/android/export/export.cpp msgid "" @@ -12192,13 +12234,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Çıktı taşınıyor" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Dışa aktarma dosyası kopyalanamıyor ve yeniden adlandırılamıyor, çıktılar " +"için gradle proje dizinini kontrol edin." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12387,6 +12431,26 @@ msgstr "" "CPUParçacık2B animasyonu \"Parçacık Animasyonu\" seçimi etkin olarak " "CanvasÖgesiMalzemesi kullanımı gerektirir." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Düğüm A ve Düğüm B, PhysicsBody2D olmalıdır" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Düğüm A bir PhysicsBody2D olmalıdır" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Düğüm B bir PhysicsBody2D olmalıdır" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Kesişim, iki PhysicsBody2D'ye bağlı değil" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Düğüm A ve Düğüm B, farklı PhysicsBody2D olmalıdır" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12718,6 +12782,26 @@ msgstr "" "çalıştığında geçersiz kılınacak.\n" "Boyu değişikliğini bunun yerine çocuk çarpışma şekilleri içinden yapın." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Düğüm A ve Düğüm B, PhysicsBody olmalıdır" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Düğüm A bir PhysicsBody olmalıdır" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Düğüm B bir PhysicsBody olmalıdır" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Kesişim, herhangi bir PhysicsBody'ye bağlı değil" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Düğüm A ve Düğüm B, farklı PhysicsBody olmalıdır" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12879,6 +12963,11 @@ msgstr "Uyarı!" msgid "Please Confirm..." msgstr "Lütfen Doğrulayın..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Yapışmayı Enkinleştir" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12960,6 +13049,39 @@ msgstr "varyings yalnızca vertex işlevinde atanabilir." msgid "Constants cannot be modified." msgstr "Sabit değerler değiştirilemez." +#~ msgid "Search complete" +#~ msgstr "Arama tamamlandı" + +#~ msgid "No commit message was provided" +#~ msgstr "Hiçbir işleme mesajı sağlanmadı" + +#~ msgid "Add a commit message" +#~ msgstr "İşleme Mesajı Ekle" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Bu konumda zaten aynı ada sahip bir dosya veya klasör var." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Eksik 'inşa-araçları' dizini!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Zipalign aracı bulunamıyor." + +#~ msgid "Aligning APK..." +#~ msgstr "APK hizalanıyor ..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK hizalaması tamamlanamıyor." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Hizalanmamış APK silinemiyor." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı." + #~ msgid "Move pivot" #~ msgstr "Merkezi Taşı" diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po index 1a370d7ef9..52babb0305 100644 --- a/editor/translations/tzm.po +++ b/editor/translations/tzm.po @@ -1,6 +1,6 @@ # Central Atlas Tamazight translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # Hakim Oubouali <hakim.oubouali.skr@gmail.com>, 2020. @@ -1000,14 +1000,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1052,7 +1055,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2244,7 +2252,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3523,6 +3531,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3570,14 +3588,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3605,10 +3615,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3642,7 +3657,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3709,7 +3727,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8028,10 +8054,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8220,10 +8258,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8280,10 +8314,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9402,6 +9432,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11559,6 +11593,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11811,6 +11849,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12071,6 +12129,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12205,6 +12283,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/uk.po b/editor/translations/uk.po index d1a9f9132c..ea13d5c532 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -1,6 +1,6 @@ # Ukrainian translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Aleksandr <XpycT.TOP@gmail.com>, 2017. # Yuri Chornoivan <yurchor@ukr.net>, 2018, 2019, 2020. @@ -15,11 +15,12 @@ # Tymofij Lytvynenko <till.svit@gmail.com>, 2020. # Vladislav Glinsky <cl0ne@mithril.org.ua>, 2020. # Микола Тимошенко <9081@ukr.net>, 2020. +# Miroslav <zinmirx@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-29 09:14+0000\n" +"PO-Revision-Date: 2020-12-14 11:03+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -29,7 +30,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1047,19 +1048,24 @@ msgid "Owners Of:" msgstr "Власники:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Вилучити позначені файли з проєкту? (Вилучені файли не вдасться відновити)" +"Вилучити позначені файли з проєкту? (без можливості скасувати)\n" +"Вилучені файли можна буде знайти і відновити у теці смітника системи." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Файли, що видаляються, вимагаються іншими ресурсами, щоб вони могли " -"працювати.\n" -"Видалити їх у будь-якому разі? (скасування неможливе)" +"Файли, які ви вилучаєте, потрібні для забезпечення працездатності інших " +"ресурсів.\n" +"Вилучити їх попри це? (без скасування)\n" +"Вилучені файли можна знайти і відновити у теці смітника системи." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1103,7 +1109,7 @@ msgstr "Огляд підключених ресурсів" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1611,33 +1617,32 @@ msgstr "" "«Увімкнено резервні драйвери»." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Платформа призначення потребує стискання текстур «ETC» для GLES2. Увімкніть " -"пункт «Імпортувати ETC» у параметрах проєкту." +"Платформа призначення потребує стискання текстур «PVRTC» для GLES2. " +"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Платформа призначення потребує стискання текстур «ETC2» для GLES3. Увімкніть " -"пункт «Імпортувати ETC 2» у параметрах проєкту." +"Платформа призначення потребує стискання текстур «ETC2» або «PVRTC» для " +"GLES3. Увімкніть пункт «Імпортувати ETC 2» або «Імпортувати Pvrtc» у " +"параметрах проєкту." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Платформа призначення потребує стискання текстур «ETC» для GLES2.\n" -"Увімкніть пункт «Імпортувати ETC» у параметрах проєкту або вимкніть пункт " +"Платформа призначення потребує стискання текстур «PVRTC» для резервного " +"варіанта драйверів GLES2.\n" +"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту або вимкніть пункт " "«Увімкнено резервні драйвери»." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -1771,7 +1776,7 @@ msgstr "Новий" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "Імпортувати" +msgstr "Імпорт" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" @@ -2320,20 +2325,30 @@ msgid "Error saving TileSet!" msgstr "Помилка збереження набору тайлів!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Помилка при спробі зберегти компонування!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Під час спроби зберегти компонування редактора сталася помилка.\n" +"Переконайтеся, що каталог даних користувача є придатним до запису." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Типове компонування редактора перевизначено." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Параметри типового компонування редактора перевизначено.\n" +"Щоб відновити початкові параметри типово компонування, скористайтеся пунктом " +"«Вилучити компонування» для вилучення типового компонування." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Назву компонування не знайдено!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Відновлено типове компонування за базовими параметрами." +msgid "Restored the Default layout to its base settings." +msgstr "Відновлено початкові параметри типового компонування." #: editor/editor_node.cpp msgid "" @@ -3715,6 +3730,22 @@ msgid "Name contains invalid characters." msgstr "Назва містить некоректні символи." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Вказані нижче файли або теки мають такі самі назви, що і записи у місці " +"призначення «%s»:\n" +"\n" +"%s\n" +"\n" +"Хочете виконати перезапис поточних даних?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Перейменування файлу:" @@ -3762,14 +3793,6 @@ msgstr "Редагувати залежності..." msgid "View Owners..." msgstr "Переглянути власників..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Перейменувати..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Дублювати..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Перемістити до..." @@ -3797,11 +3820,16 @@ msgid "Collapse All" msgstr "Згорнути все" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Перейменувати" +msgid "Duplicate..." +msgstr "Дублювати..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Пересунути до смітника" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Перейменувати..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3836,8 +3864,11 @@ msgid "Move" msgstr "Перемістити" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "У вказаному каталозі вже міститься тека або файл із вказано назвою." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Перейменувати" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3905,8 +3936,19 @@ msgid "Searching..." msgstr "Шукаємо…" #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Пошук завершено" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d відповідників." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d відповідників." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d відповідників." #: editor/groups_editor.cpp msgid "Add to Group" @@ -5241,50 +5283,43 @@ msgstr "Створити горизонтальні та вертикальні #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Встановити зсув бази CanvasItem «%s» у (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Обертати CanvasItem" +msgstr "Обертати %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Обертати CanvasItem" +msgstr "Обернути CanvasItem «%s» на %d градусів" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути прив'язку CanvasItem «%s»" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Масштабувати Node2D «%s» до (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Змінити розміри елемента керування «%s» до (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Масштабувати CanvasItem" +msgstr "Масштабувати %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Масштабувати CanvasItem" +msgstr "Масштабувати CanvasItem «%s» до (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути CanvasItem «%s» до (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6564,18 +6599,16 @@ msgid "Move Points" msgstr "Перемістити точки" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Перетягування: Поворот" +msgstr "Command: Обертати" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Перемістити всі" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Масштаб" +msgstr "Shift+Command: Масштабувати" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6623,14 +6656,12 @@ msgid "Radius:" msgstr "Радіус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Створити полігон і UV" +msgstr "Копіювати полігон до UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Перетворити на Polygon2D" +msgstr "Копіювати UV до полігона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8181,13 +8212,12 @@ msgid "Paint Tile" msgstr "Намалювати плитку" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+ліва кнопка: малювати лінію\n" -"Shift+Ctrl+ліва кнопка: малювати прямокутник" +"Shift+Command+ліва кнопка: малювати прямокутник" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8342,10 +8372,22 @@ msgid "Create a new rectangle." msgstr "Створити прямокутник." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Новий прямокутник" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Створити новий полігон." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Новий полігон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Вилучити позначену форму" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Утримувати полігон всередині Rect області." @@ -8556,10 +8598,6 @@ msgid "Error" msgstr "Помилка" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "Не було вказано повідомлення щодо внеску" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Не додано жодних файлів для внеску" @@ -8616,10 +8654,6 @@ msgid "Stage All" msgstr "Внести все" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "Додати повідомлення щодо внеску" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "Внести зміни" @@ -8718,9 +8752,8 @@ msgid "Add Node to Visual Shader" msgstr "Додати вузол до візуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Пересунуто вузол" +msgstr "Пересунуто вузли" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8740,9 +8773,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Змінено тип введення для візуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Встановити однорідну назву" +msgstr "Змінено однорідну назву" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9460,7 +9492,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Посилання на наявну однорідність." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9826,6 +9858,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "У ваших драйверах підтримки не передбачено." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12102,6 +12138,10 @@ msgstr "" "редактора." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Не знайдено каталогу «platform-tools»!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12156,18 +12196,23 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"Пункт «Експортувати AAB» є чинним, лише якщо увімкнено «Використовувати " +"нетипове збирання»." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Некоректна назва файла! Пакет програми Android повинен мати суфікс назви *." +"aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Розширення APK є несумісним із Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Некоректна назва файла! Пакунок Android APK повинен мати суфікс назви *.apk." #: platform/android/export/export.cpp msgid "" @@ -12207,13 +12252,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Пересування виведених даних" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Не вдалося скопіювати і перейменувати файл експортованих даних. Виведені " +"дані можна знайти у каталозі проєкту gradle." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12410,6 +12457,26 @@ msgstr "" "Анімація CPUParticles2D потребує використання CanvasItemMaterial із " "увімкненим параметром «Анімація часток»." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Вузол A і вузол B мають бути PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Вузол A має бути PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Вузол B має бути PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "З'єднання не з'єднано із двома PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Вузол A і вузол B мають бути різними PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12743,6 +12810,26 @@ msgstr "" "фізичним рушієм під час роботи.\n" "Замість цієї зміни, вам варто змінити розміри дочірніх форм зіткнення." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Вузол A і вузол B мають належати до типу PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Вузол A має належати до типу PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Вузол B має належати до типу PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "З'єднання не з'єднано із жодним PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Вузол A і вузол B має бути різними PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12904,6 +12991,11 @@ msgstr "Увага!" msgid "Please Confirm..." msgstr "Будь ласка, підтвердьте..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "Дозволити прилипання" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12987,6 +13079,39 @@ msgstr "Змінні величини можна пов'язувати лише msgid "Constants cannot be modified." msgstr "Сталі не можна змінювати." +#~ msgid "Search complete" +#~ msgstr "Пошук завершено" + +#~ msgid "No commit message was provided" +#~ msgstr "Не було вказано повідомлення щодо внеску" + +#~ msgid "Add a commit message" +#~ msgstr "Додати повідомлення щодо внеску" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "У вказаному каталозі вже міститься тека або файл із вказано назвою." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Не знайдено каталогу «build-tools»!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Не вдалося знайти програму zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Вирівнюємо APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Не вдалося завершити вирівнювання APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Не вдалося вилучити невирівняний APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Помилка при спробі зберегти компонування!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Типове компонування редактора перевизначено." + #~ msgid "Move pivot" #~ msgstr "Пересунути опорну точку" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 0daae77789..599ee5e6af 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -1,6 +1,6 @@ # Urdu (Pakistan) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # # Muhammad Ali <ali@codeonion.com>, 2016. @@ -1020,14 +1020,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1072,7 +1075,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2279,11 +2282,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2291,7 +2299,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3589,6 +3597,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3641,14 +3659,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3678,10 +3688,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "ایکشن منتقل کریں" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3715,7 +3731,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -3783,7 +3802,15 @@ msgid "Searching..." msgstr "" #: editor/find_in_files.cpp -msgid "Search complete" +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." msgstr "" #: editor/groups_editor.cpp @@ -8223,10 +8250,25 @@ msgstr "سب سکریپشن بنائیں" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "سب سکریپشن بنائیں" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8432,10 +8474,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8498,10 +8536,6 @@ msgid "Stage All" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "" @@ -9639,6 +9673,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11856,6 +11894,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12109,6 +12151,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12369,6 +12431,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12503,6 +12585,10 @@ msgstr "" msgid "Please Confirm..." msgstr "" +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 446a1ce2fa..64f38b6d19 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -1,6 +1,6 @@ # Vietnamese translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # 01lifeleft <01lifeleft@gmail.com>, 2018. # Dlean Jeans <dleanjeans@gmail.com>, 2018. @@ -1043,14 +1043,18 @@ msgid "Owners Of:" msgstr "Sở hữu của:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Gỡ bỏ các tệp đã chọn trong dự án? (Không thể khôi phục)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1096,7 +1100,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2334,19 +2338,25 @@ msgid "Error saving TileSet!" msgstr "Lỗi khi lưu các TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Lỗi khi cố gắng lưu bố cục!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Bố cục trình biên tập mặc định bị ghi đè." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Tên bố cục không tìm thấy!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Đã khôi phục bố cục mặc định cho các thiết lập." #: editor/editor_node.cpp @@ -3692,6 +3702,16 @@ msgid "Name contains invalid characters." msgstr "Tên có chứa kí tự không hợp lệ." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Đổi tên tệp tin:" @@ -3740,14 +3760,6 @@ msgstr "Chỉnh sửa các phần phụ thuộc..." msgid "View Owners..." msgstr "Xem các scene sở hữu..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Đổi tên..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Nhân đôi..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Di chuyển đến..." @@ -3776,11 +3788,17 @@ msgid "Collapse All" msgstr "Thu gọn Tất cả" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Đổi tên" +msgid "Duplicate..." +msgstr "Nhân đôi..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Di chuyển Nút" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Đổi tên..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3815,8 +3833,11 @@ msgid "Move" msgstr "Di chuyển" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Đã có tệp tin hoặc thư mục cùng tên tại vị trí này." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Đổi tên" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3885,8 +3906,19 @@ msgid "Searching..." msgstr "Đang tìm kiếm ..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "Tìm kiếm hoàn tất" +#, fuzzy +msgid "%d match in %d file." +msgstr "Tìm thấy %d khớp." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "Tìm thấy %d khớp." + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "Tìm thấy %d khớp." #: editor/groups_editor.cpp msgid "Add to Group" @@ -8371,10 +8403,25 @@ msgstr "Tạo hình chữ nhật mới." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Tạo Cảnh Mới" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Tạo" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Tạo" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Xoá lựa chọn" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8581,10 +8628,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8648,10 +8691,6 @@ msgid "Stage All" msgstr "Chọn Toàn Bộ" #: 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 "Đổi" @@ -9809,6 +9848,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12086,6 +12129,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12356,6 +12403,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12616,6 +12683,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12752,6 +12839,10 @@ msgstr "Cảnh báo!" msgid "Please Confirm..." msgstr "Xin hãy xác nhận..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -12827,6 +12918,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Không thể chỉnh sửa hằng số." +#~ msgid "Search complete" +#~ msgstr "Tìm kiếm hoàn tất" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Đã có tệp tin hoặc thư mục cùng tên tại vị trí này." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Lỗi khi cố gắng lưu bố cục!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Bố cục trình biên tập mặc định bị ghi đè." + #~ msgid "Move pivot" #~ msgstr "Di chuyển trục" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 4ce2d7c14d..d8b4ddb0e6 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -1,6 +1,6 @@ # Chinese (Simplified) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # 360119124 <360119124@qq.com>, 2018. # 柠檬杀手 <lemonkiller@gmail.com>, 2018, 2020. @@ -71,11 +71,13 @@ # MintSoda <lionlxh@qq.com>, 2020. # Gardner Belgrade <hapenia@sina.com>, 2020. # godhidden <z2zz2zz@yahoo.com>, 2020. +# BinotaLIU <me@binota.org>, 2020. +# TakWolf <takwolf@foxmail.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-10-18 14:21+0000\n" +"PO-Revision-Date: 2020-12-25 12:29+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" @@ -84,7 +86,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 4.3.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -93,17 +95,17 @@ msgstr "convert() 的参数类型无效,请使用 TYPE_* 常量。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "仅需要长度为1的字符串(1字符)。" +msgstr "应为长度 1 的字符串(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)" @@ -111,7 +113,7 @@ 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" @@ -127,7 +129,7 @@ msgstr "构造 '%s' 的参数无效" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "在调用'%s'时:" +msgstr "在调用 '%s' 时:" #: core/ustring.cpp msgid "B" @@ -260,7 +262,7 @@ msgstr "属性轨道" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "3D变换轨道" +msgstr "3D 变换轨道" #: editor/animation_track_editor.cpp msgid "Call Method Track" @@ -317,7 +319,7 @@ msgstr "切换当前轨道开关。" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "更新模式(如何设置此属性)" +msgstr "更新模式(属性设置方法)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" @@ -337,7 +339,7 @@ msgstr "时间(秒): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "启用轨道切换" +msgstr "启用/禁用轨道" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -411,7 +413,7 @@ msgstr "是否为 %s 新建轨道并插入关键帧?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "是否新建%d个轨道并插入关键帧?" +msgstr "是否新建 %d 个轨道并插入关键帧?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -431,7 +433,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" @@ -455,7 +457,7 @@ 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 "" @@ -471,7 +473,7 @@ msgstr "" #: 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." @@ -479,7 +481,7 @@ msgstr "动画播放器不能动画化自己,只能动画化其他播放器。 #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "无法在没有root的情况下新建轨道" +msgstr "没有根节点时无法添加新轨道" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" @@ -495,7 +497,7 @@ 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" @@ -536,7 +538,7 @@ 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 "" @@ -553,8 +555,8 @@ msgstr "" "此动画属于导入的场景,因此不会保存对导入轨道的更改。\n" "\n" "要启用添加自定义轨道的功能,可以在场景的导入设置中将\n" -"“Animation > Storage”设为“ Files”,启用“Animation > Keep Custom Tracks”,然后" -"重新导入。\n" +"“Animation > Storage” 设为 “ Files”,并启用 “Animation > Keep Custom " +"Tracks”,然后重新导入。\n" "或者也可以使用将动画导入为单独文件的导入预设。" #: editor/animation_track_editor.cpp @@ -563,7 +565,7 @@ msgstr "警告:正在编辑导入的动画" #: editor/animation_track_editor.cpp msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "选择一个AnimationPlayer节点以创建和编辑动画。" +msgstr "选择一个 AnimationPlayer 节点以创建和编辑动画。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -571,7 +573,7 @@ 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:" @@ -711,7 +713,7 @@ msgstr "复制" #: editor/animation_track_editor.cpp msgid "Select All/None" -msgstr "全选/取消" +msgstr "全选/取消" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" @@ -747,19 +749,19 @@ msgstr "行号:" #: editor/code_editor.cpp msgid "%d replaced." -msgstr "已替换%d处。" +msgstr "已替换 %d 处。" #: 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" -msgstr "大小写匹配" +msgstr "区分大小写" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" @@ -784,7 +786,7 @@ 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 @@ -822,7 +824,7 @@ msgstr "方法名称必须是一个有效的标识符。" msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." -msgstr "找不到目标方法。请指定一个有效的方法或者把脚本附加到目标节点。" +msgstr "找不到目标方法。请指定一个有效的方法或把脚本附加到目标节点。" #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -918,15 +920,15 @@ 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..." @@ -947,7 +949,7 @@ msgstr "编辑连接:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "你确定要从信号“%s”中移除所有连接吗?" +msgstr "确定要从信号 “%s” 中移除所有连接吗?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -959,7 +961,7 @@ msgstr "筛选信号" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "你确定要从该广播信号中移除所有连接吗?" +msgstr "确定要从该信号中移除所有连接吗?" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -975,7 +977,7 @@ msgstr "跳转到方法" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "更改%s类型" +msgstr "更改 %s 类型" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" @@ -983,7 +985,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 @@ -1027,7 +1029,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"场景“%s”正被修改。\n" +"场景 “%s” 正被修改。\n" "修改只有在重新加载后才能生效。" #: editor/dependency_editor.cpp @@ -1035,7 +1037,7 @@ msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"资源“%s”正在使用中。\n" +"资源 “%s” 正在使用中。\n" "修改只有在重新加载后才能生效。" #: editor/dependency_editor.cpp @@ -1083,17 +1085,23 @@ msgid "Owners Of:" msgstr "拥有者:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "是否从项目中删除选定文件?(无法恢复)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"是否从项目中删除所选文件?(无法撤销)\n" +"你可以在系统回收站中恢复被删除的文件。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "要删除的文件被其他资源所依赖。\n" -"仍然要删除吗?(无法撤销)" +"仍然要删除吗?(无法撤销)\n" +"你可以在系统回收站中恢复被删除的文件。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1125,7 +1133,7 @@ msgstr "加载出错!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "永久删除选中的%d条项目吗?(此操作无法撤销!)" +msgstr "要永久删除选中的 %d 条项目吗?(此操作无法撤销!)" #: editor/dependency_editor.cpp msgid "Show Dependencies" @@ -1137,7 +1145,7 @@ msgstr "孤立资源浏览器" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1153,19 +1161,19 @@ 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" -msgstr "Godot引擎贡献者" +msgstr "Godot Engine 贡献者" #: editor/editor_about.cpp msgid "Project Founders" @@ -1184,7 +1192,7 @@ msgstr "项目管理员 " #: editor/editor_about.cpp msgid "Developers" -msgstr "开发者" +msgstr "开发人员" #: editor/editor_about.cpp msgid "Authors" @@ -1241,8 +1249,8 @@ msgid "" "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot引擎依赖多个第三方免费开源代码库,这些库全部兼容MIT许可证的条款。以下是" -"所有此类第三方组件及其各自版权声明和许可条款的详尽列表。" +"Godot 引擎依赖多个第三方免费开源代码库,这些库全部兼容 MIT 许可证的条款。以下" +"是所有此类第三方组件及其各自版权声明和许可条款的详尽列表。" #: editor/editor_about.cpp msgid "All Components" @@ -1258,7 +1266,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)" @@ -1274,7 +1282,7 @@ msgstr "以下文件无法从包中提取:" #: editor/editor_asset_installer.cpp msgid "And %s more files." -msgstr "以及其它%s个文件。" +msgstr "以及其它 %s 个文件。" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1315,15 +1323,15 @@ msgstr "修改音频总线音量" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "开关音频总线独奏" +msgstr "开/关音频总线独奏" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "开关音频总线静音" +msgstr "静音/取消静音音频总线" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "开关音频总线旁通效果" +msgstr "开启/关闭音频总线旁通效果" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1416,7 +1424,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" @@ -1478,7 +1486,7 @@ 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." @@ -1490,27 +1498,27 @@ msgstr "与已存在的全局常量名称冲突。" #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "该名称已被用作其他 autoload 占用。" +msgstr "关键字不可用作 Autoload 名称。" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "Autoload '%s'已存在!" +msgstr "Autoload '%s' 已存在!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "重命名自动加载脚本" +msgstr "重命名 Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "切换全局AutoLoad" +msgstr "开启/关闭全局 AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "移动Autoload" +msgstr "移动 Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "移除Autoload" +msgstr "移除 Autoload" #: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp msgid "Enable" @@ -1518,15 +1526,15 @@ msgstr "启用" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "重排序Autoload" +msgstr "重排序 Autoload" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "无法加载autoload:" +msgstr "无法加载 Autoload:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "添加自动加载" +msgstr "添加 Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp @@ -1559,11 +1567,11 @@ msgstr "更新场景" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "保存修改中..." +msgstr "保存本地更改..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "更新场景中..." +msgstr "更新场景..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1575,7 +1583,7 @@ msgstr "[未保存]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first." -msgstr "请先选择一个目录。" +msgstr "请先选择一个基础目录。" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1585,7 +1593,7 @@ msgstr "选择目录" #: editor/filesystem_dock.cpp editor/project_manager.cpp #: scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "新建文件夹" +msgstr "创建文件夹" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1619,13 +1627,14 @@ msgstr "打包中" msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." -msgstr "目标平台需要GLES2的“ETC”纹理压缩。在项目设置中启用“导入Etc”。" +msgstr "目标平台需要 GLES2 的 “ETC” 纹理压缩。在项目设置中启用 “Import Etc”。" #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC2' texture compression for GLES3. Enable " "'Import Etc 2' in Project Settings." -msgstr "目标平台需要GLES3的“ETC2”纹理压缩。在项目设置中启用“导入Etc 2”。" +msgstr "" +"目标平台需要 GLES3 的 “ETC2” 纹理压缩。在项目设置中启用 “Import Etc 2”。" #: editor/editor_export.cpp msgid "" @@ -1634,33 +1643,33 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目标平台需要“ETC”纹理压缩,以便驱动程序回退到GLES2。\n" -"在项目设置中启用“导入Etc”,或禁用“启用驱动程序回退”。" +"目标平台需要 “ETC” 纹理压缩,以便驱动程序回退到 GLES2。\n" +"在项目设置中启用 “Import Etc”,或禁用 “Driver Fallback Enabled”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." -msgstr "目标平台需要GLES2的“ETC”纹理压缩。在项目设置中启用“导入Etc”。" +msgstr "" +"目标平台需要 GLES2 的 “PVRTC” 纹理压缩。在项目设置中启用 “Import Pvrtc”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." -msgstr "目标平台需要GLES3的“ETC2”纹理压缩。在项目设置中启用“导入Etc 2”。" +msgstr "" +"目标平台需要 GLES3 的 “ETC2” 或 “PVRTC” 纹理压缩。在项目设置中启用 “Import " +"Etc 2” 或 “Import Pvrtc”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目标平台需要“ETC”纹理压缩,以便驱动程序回退到GLES2。\n" -"在项目设置中启用“导入Etc”,或禁用“启用驱动程序回退”。" +"目标平台需要 “PVRTC” 纹理压缩,以便驱动程序回退到 GLES2。\n" +"在项目设置中启用 “Import Pvrtc”,或禁用 “Driver Fallback Enabled”。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1680,11 +1689,11 @@ msgstr "找不到模板文件:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "以32位平台导出时,内嵌的PCK不能大于4GB。" +msgstr "以 32 位平台导出时,内嵌的 PCK 不能大于 4GB。" #: editor/editor_feature_profile.cpp msgid "3D Editor" -msgstr "3D编辑器" +msgstr "3D 编辑器" #: editor/editor_feature_profile.cpp msgid "Script Editor" @@ -1712,11 +1721,11 @@ 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." @@ -1756,17 +1765,17 @@ 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”已存在。在导入之前先删除它,导入已中止。" +msgstr "配置文件 “%s” 已存在。在导入之前先删除该配置文件,导入已中止。" #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." -msgstr "将配置文件保存到路径“%s”时出错。" +msgstr "将配置文件保存到路径 “%s” 时出错。" #: editor/editor_feature_profile.cpp msgid "Unset" @@ -1774,7 +1783,7 @@ msgstr "未设置" #: editor/editor_feature_profile.cpp msgid "Current Profile:" -msgstr "当前配置文件:" +msgstr "当前配置文件:" #: editor/editor_feature_profile.cpp msgid "Make Current" @@ -1813,7 +1822,7 @@ msgstr "删除配置文件" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "Godot功能配置文件" +msgstr "Godot 功能配置文件" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1867,11 +1876,11 @@ 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)" @@ -1950,7 +1959,7 @@ 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." @@ -1958,11 +1967,11 @@ 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:" @@ -1990,11 +1999,11 @@ msgstr "扫描源文件" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "不同类型的%s 文件存在多种导入方式,自动导入失败" +msgstr "文件 %s 有不同类型的多个导入器,已中止导入" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "正在(重新)导入素材" +msgstr "正在导入或重新导入素材" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -2192,7 +2201,7 @@ msgstr "开始" #: editor/editor_network_profiler.cpp msgid "%s/s" -msgstr "%s/s" +msgstr "%s/秒" #: editor/editor_network_profiler.cpp msgid "Down" @@ -2208,23 +2217,23 @@ msgstr "节点" #: editor/editor_network_profiler.cpp msgid "Incoming RPC" -msgstr "传入RPC" +msgstr "传入 RPC" #: editor/editor_network_profiler.cpp msgid "Incoming RSET" -msgstr "传入RSET" +msgstr "传入 RSET" #: editor/editor_network_profiler.cpp msgid "Outgoing RPC" -msgstr "传出RPC" +msgstr "传出 RPC" #: editor/editor_network_profiler.cpp msgid "Outgoing RSET" -msgstr "传出RSET" +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." @@ -2243,7 +2252,7 @@ msgstr "保存资源出错!" msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." -msgstr "无法保存此资源,因为它不属于已编辑的场景。首先使它唯一化。" +msgstr "无法保存此资源,因为此资源不属于已编辑的场景。请先唯一化此资源。" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." @@ -2255,7 +2264,7 @@ msgstr "无法以可写模式打开文件:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "未知的文件类型请求:" +msgstr "请求文件的类型未知:" #: editor/editor_node.cpp msgid "Error while saving." @@ -2263,23 +2272,23 @@ 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'." -msgstr "解析“%s”时出错。" +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." -msgstr "“%s”或其依赖项缺失。" +msgstr "“%s” 或其依赖项缺失。" #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "加载“%s”时出错。" +msgstr "加载 “%s” 时出错。" #: editor/editor_node.cpp msgid "Saving Scene" @@ -2302,18 +2311,18 @@ 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 msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." -msgstr "无法保存场景,依赖项(实例或基类)验证失败。" +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!" @@ -2332,20 +2341,29 @@ msgid "Error saving TileSet!" msgstr "保存图块集时出错!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "保存布局出错!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"保存编辑器布局时出错。\n" +"请确认编辑器的用户数据路径可写。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "覆盖编辑器默认布局。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"已覆盖默认编辑器布局。\n" +"如需恢复默认布局至原始内容,可使用删除布局选项将默认布局删除。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "布局名称未找到!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "重置为默认布局设置。" +msgid "Restored the Default layout to its base settings." +msgstr "已将默认布局恢复为原始内容。" #: editor/editor_node.cpp msgid "" @@ -2353,8 +2371,8 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"此资源属于已导入的场景, 因此它不可编辑。\n" -"请阅读与导入场景相关的文档, 以便更好地理解此工作流。" +"此资源属于已导入的场景,不可编辑。\n" +"请阅读与导入场景相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "" @@ -2362,13 +2380,13 @@ msgid "" "Changes to it won't be kept when saving the current scene." msgstr "" "这个资源属于实例或继承的场景。\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 "此资源已导入,因此无法编辑。在“导入”面板中更改设置,然后重新导入。" +msgstr "此资源已导入,因此无法编辑。在导入面板中更改设置并重新导入。" #: editor/editor_node.cpp msgid "" @@ -2377,9 +2395,9 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"场景已被导入, 对它的更改将不会保留。\n" -"对其进行实例化或继承将允许对其进行更改。\n" -"请阅读与导入场景相关的文档, 以便更好地理解此工作流。" +"场景已被导入,所做的更改将不会保留。\n" +"请实例化或继承该场景以允许对其进行更改。\n" +"请阅读与导入场景相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "" @@ -2388,11 +2406,11 @@ msgid "" "this workflow." msgstr "" "这是远程对象,因此不会保留对其的更改。\n" -"请阅读与调试相关的文档,以更好地了解此工作流程。" +"请阅读与调试相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "没有设置要执行的场景。" +msgstr "没有设置要运行的场景。" #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -2424,7 +2442,7 @@ msgstr "保存并关闭" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "是否在关闭前保存对“%s”的更改?" +msgstr "是否在关闭前保存对 “%s” 的更改?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." @@ -2432,7 +2450,7 @@ 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..." @@ -2452,7 +2470,7 @@ 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" @@ -2460,7 +2478,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" @@ -2468,7 +2486,7 @@ 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?" @@ -2476,7 +2494,7 @@ msgstr "当前场景尚未保存。是否仍要打开?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "无法重新加载未保存的场景。" +msgstr "无法重新加载从未保存过的场景。" #: editor/editor_node.cpp msgid "Reload Saved Scene" @@ -2512,17 +2530,17 @@ msgstr "保存后退出" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "以下场景在退出前保存更改吗?" +msgstr "退出前要保存以下场景更改吗?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" -msgstr "在打开项目管理器之前保存更改吗?" +msgstr "打开项目管理器前要保存下列场景更改吗?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." -msgstr "该选项已废弃。必须强制刷新的情况现在被视为 bug。请报告。" +msgstr "该选项已废弃。必须强制刷新的情况现在被视为 Bug,请报告。" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2538,37 +2556,37 @@ msgstr "重新打开关闭的场景" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." -msgstr "无法在“%s”上启用加载项插件:配置解析失败。" +msgstr "无法在 “%s” 上启用加载项插件:配置解析失败。" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "无法在“res://addons/%s”中找到插件的脚本字段。" +msgstr "无法在 “res://addons/%s” 中找到加载项插件的脚本字段。" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "无法从路径中加载插件脚本:“%s”。" +msgstr "无法从路径 “%s” 中加载加载项脚本。" #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." -msgstr "无法从路径加载插件脚本:“%s”脚本看上去似乎有代码错误,请检查其语法。" +msgstr "无法从路径 “%s” 加载加载项脚本:脚本似乎有代码错误,请检查其语法。" #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." -msgstr "无法从路径加载插件脚本:“%s”基类型不是 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”脚本不在工具模式下。" +msgstr "无法从路径 “%s” 加载插件脚本:脚本不在工具模式下。" #: 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 @@ -2576,12 +2594,12 @@ 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:" -msgstr "场景“%s”的依赖已被破坏:" +msgstr "场景 “%s” 的依赖已被破坏:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" @@ -2594,7 +2612,7 @@ msgid "" "category." msgstr "" "尚未定义主场景,是否选择一个?\n" -"你可以稍后在“项目设置”的“application”分类下修改。" +"稍后也可在 “项目设置” 的 “application” 分类下修改。" #: editor/editor_node.cpp msgid "" @@ -2602,8 +2620,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 "" @@ -2611,8 +2629,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 "Save Layout" @@ -2638,31 +2656,31 @@ msgstr "运行此场景" #: editor/editor_node.cpp msgid "Close Tab" -msgstr "关闭标签页" +msgstr "关闭选项卡" #: editor/editor_node.cpp msgid "Undo Close Tab" -msgstr "撤销关闭标签页" +msgstr "撤销关闭选项卡" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "关闭其他标签页" +msgstr "关闭其他选项卡" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "关闭右侧标签页" +msgstr "关闭右侧选项卡" #: editor/editor_node.cpp msgid "Close All Tabs" -msgstr "关闭全部标签" +msgstr "关闭全部选项卡" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "切换场景标签页" +msgstr "切换场景选项卡" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "其它 %d 个文件或文件夹" +msgstr "其它 %d 个文件和文件夹" #: editor/editor_node.cpp msgid "%d more folders" @@ -2682,7 +2700,7 @@ msgstr "专注模式" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "切换专注模式。" +msgstr "进入/离开专注模式。" #: editor/editor_node.cpp msgid "Add a new scene." @@ -2694,7 +2712,7 @@ msgstr "场景" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "前往上一个打开的场景。" +msgstr "转到上一个打开的场景。" #: editor/editor_node.cpp msgid "Copy Text" @@ -2702,11 +2720,11 @@ 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..." @@ -2829,10 +2847,10 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" -"启用该选项时,一键部署后的可执行文件将尝试连接到这台电脑的IP以便调试所运行的" -"工程。\n" -"该选项意在进行远程调试(尤其是移动设备)。\n" -"在本地使用GDScript调试器无需启用。" +"启用该选项时,一键部署后的可执行文件将尝试连接到这台电脑的 IP 以便调试所运行" +"的项目。\n" +"该选项用于进行远程调试(尤其是移动设备)。\n" +"在本地使用 GDScript 调试器时无需启用。" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" @@ -2847,10 +2865,10 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"启用该选项时,一键部署到Android时所导出的可执行文件将不包含工程数据。\n" -"文件系统将由编辑器基于工程通过网络提供。\n" -"在Android平台,部署将通过USB线缆进行以提高性能。如果工程中包含较大的素材,该" -"选项会提高测试速度。" +"启用该选项时,一键部署到 Android 时所导出的可执行文件将不包含项目数据。\n" +"文件系统将由编辑器基于项目通过网络提供。\n" +"在 Android 平台,部署将通过 USB 线缆进行以提高性能。如果项目中包含较大的素" +"材,该选项可提高测试速度。" #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2860,7 +2878,7 @@ msgstr "显示碰撞区域" msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." -msgstr "启用该选项时,碰撞区域和光线投射节点(2D和3D)将在工程运行时可见。" +msgstr "启用该选项时,碰撞区域和光线投射节点(2D 和 3D)将在项目运行时可见。" #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2870,7 +2888,7 @@ msgstr "显示导航" msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." -msgstr "启用该选项时,导航网格和多边形将在工程运行时可见。" +msgstr "启用该选项时,导航网格和多边形将在项目运行时可见。" #: editor/editor_node.cpp msgid "Synchronize Scene Changes" @@ -2883,7 +2901,7 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"启用该选项时,在编辑器中对场景的任何修改都会被应用于正在运行的工程中。\n" +"启用该选项时,在编辑器中对场景的任何修改都会被应用于正在运行的项目中。\n" "当使用于远程设备时,启用网络文件系统能提高编辑效率。" #: editor/editor_node.cpp @@ -2897,7 +2915,7 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"启用该选项时,保存的任何脚本都会被正在运行的工程重新加载。\n" +"启用该选项时,任何保存的脚本都会被正在运行的项目重新加载。\n" "当使用于远程设备时,启用网络文件系统能提高编辑效率。" #: editor/editor_node.cpp editor/script_create_dialog.cpp @@ -2918,27 +2936,27 @@ msgstr "截屏" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "截图将保存在编辑器数据/设置文件夹中。" +msgstr "截图将保存在编辑器数据或设置文件夹中。" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "全屏模式" +msgstr "进入/离开全屏模式" #: editor/editor_node.cpp msgid "Toggle System Console" -msgstr "系统命令行模式" +msgstr "打开/关闭系统命令行" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "打开“编辑器数据/设置”文件夹" +msgstr "打开 “编辑器数据/设置” 文件夹" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "打开编辑器数据文件夹" +msgstr "打开 “编辑器数据” 文件夹" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "打开“编辑器设置”文件夹" +msgstr "打开 “编辑器设置” 文件夹" #: editor/editor_node.cpp msgid "Manage Editor Features..." @@ -2995,7 +3013,7 @@ msgstr "运行" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "暂停运行场景,以便进行调试。" +msgstr "暂停运行场景以进行调试。" #: editor/editor_node.cpp msgid "Pause Scene" @@ -3052,7 +3070,7 @@ msgstr "文件系统" #: editor/editor_node.cpp msgid "Inspector" -msgstr "属性" +msgstr "检查器" #: editor/editor_node.cpp msgid "Expand Bottom Panel" @@ -3084,11 +3102,12 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" -"通过将源模板安装到“res://android/build”,将为自定义Android构建设置项目。\n" -"然后,您可以应用修改并在导出时构建自己的自定义APK(添加模块,更改" -"AndroidManifest.xml等)。\n" -"请注意,为了进行自定义构建而不是使用预先构建的APK,应在Android导出预设中启" -"用“使用自定义构建”选项。" +"通过将源模板安装到 “res://android/build” ,将为自定义 Android 构建设置项" +"目。\n" +"然后,可以应用修改并在导出时构建自己的自定义 APK(添加模块、更改 " +"AndroidManifest.xml 等)。\n" +"请注意,要使用自定义构建而不是使用预先构建的APK,需在 Android 导出预设中启用 " +"“使用自定义构建” 选项。" #: editor/editor_node.cpp msgid "" @@ -3097,12 +3116,12 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" -"Android构建模板已安装在此项目中,并且不会被覆盖。\n" -"再次尝试执行此操作之前,请手动删除“res://android/build”目录。" +"Android 构建模板已安装在此项目中,将不会被覆盖。\n" +"再次尝试执行此操作之前,请手动删除 “res://android/build” 目录。" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "从ZIP文件中导入模板" +msgstr "从 ZIP 文件中导入模板" #: editor/editor_node.cpp msgid "Template Package" @@ -3134,11 +3153,11 @@ msgstr "选择" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "打开2D编辑器" +msgstr "打开 2D 编辑器" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "打开3D编辑器" +msgstr "打开 3D 编辑器" #: editor/editor_node.cpp msgid "Open Script Editor" @@ -3182,7 +3201,7 @@ msgstr "编辑插件" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "已安装插件:" +msgstr "已安装插件:" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp msgid "Update" @@ -3227,15 +3246,15 @@ msgstr "物理帧 %" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "包含" +msgstr "全部" #: editor/editor_profiler.cpp msgid "Self" -msgstr "自身" +msgstr "仅自己" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "帧号:" +msgstr "帧 #:" #: editor/editor_profiler.cpp msgid "Time" @@ -3259,7 +3278,7 @@ msgstr "层" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "第%d位,值为%d" +msgstr "第 %d 位,值为 %d" #: editor/editor_properties.cpp msgid "[Empty]" @@ -3271,7 +3290,7 @@ msgstr "指定..." #: editor/editor_properties.cpp msgid "Invalid RID" -msgstr "无效的RID" +msgstr "无效的 RID" #: editor/editor_properties.cpp msgid "" @@ -3284,7 +3303,7 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"无法在保存为文件的资源上创建视图纹理。\n" +"无法在保存为文件的资源上创建 ViewportTexture。\n" "资源需要属于场景。" #: editor/editor_properties.cpp @@ -3294,8 +3313,8 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" -"无法在此资源上创建视图纹理,因为它未设置为本地到场景。\n" -"请打开上面的“本地到场景”属性(以及包含它的所有资源到节点)。" +"无法在此资源上创建 ViewportTexture,因为这个资源未设置对应的本地场景。\n" +"请打开资源上的 “Local to Scene” 属性(以及到节点内所有包含该资源的资源)。" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3311,11 +3330,11 @@ msgstr "扩展脚本" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" -msgstr "新建%s" +msgstr "新建 %s" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Make Unique" -msgstr "转换为独立资源" +msgstr "唯一化" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -3333,11 +3352,11 @@ 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!" -msgstr "选定的不是Viewport节点!" +msgstr "选定节点不是 Viewport!" #: editor/editor_properties_array_dict.cpp msgid "Size: " @@ -3362,7 +3381,7 @@ msgstr "新建值:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "添加键/值对" +msgstr "添加键值对" #: editor/editor_run_native.cpp msgid "" @@ -3375,31 +3394,31 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "在_run()方法中填写您的逻辑代码。" +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:" -msgstr "无法实例化脚本:" +msgstr "无法实例化脚本:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "您是否遗漏了tool关键字?" +msgstr "是否遗漏了 tool 关键字?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "无法执行脚本:" +msgstr "无法运行脚本:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "您是否遗漏了_run()方法?" +msgstr "是否遗漏了 _run() 方法?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." -msgstr "按住Ctrl键来四舍五入至整数。 按住Shift键获取更精确的变化。" +msgstr "按住 Ctrl 键来取整。 按住 Shift 键获取更精确的变化。" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3452,23 +3471,23 @@ 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." -msgstr "无法打开ZIP导出模板。" +msgstr "无法打开 ZIP 导出模板。" #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates: %s." -msgstr "模板文件:%s 中的 version.txt 格式无效。" +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:" -msgstr "创建模板文件路径出错:" +msgstr "创建模板路径出错:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3484,7 +3503,7 @@ msgstr "获取镜像列表时出错。" #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "解析镜像列表JSON时出错。请提交此问题!" +msgstr "解析镜像列表 JSON 时出错。请提交此问题!" #: editor/export_template_manager.cpp msgid "" @@ -3534,11 +3553,11 @@ msgid "" "The problematic templates archives can be found at '%s'." msgstr "" "模板安装失败。\n" -"有问题的模板文档在“%s”。" +"有问题的模板文档在 “%s”。" #: editor/export_template_manager.cpp msgid "Error requesting URL:" -msgstr "请求URL时出错:" +msgstr "请求 URL 时出错:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3588,7 +3607,7 @@ msgstr "SSL 握手错误" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" -msgstr "无压缩的Android Build资源" +msgstr "解压 Android Build 资源" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3636,11 +3655,11 @@ 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:" @@ -3671,6 +3690,21 @@ msgid "Name contains invalid characters." msgstr "名称包含无效字符。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"下列文件或文件夹与目标路径 “%s” 中的项目冲突:\n" +"\n" +"%s\n" +"\n" +"要复写这些文件或文件夹吗?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重命名文件:" @@ -3680,7 +3714,7 @@ msgstr "重命名文件夹:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "拷贝文件:" +msgstr "复制文件:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" @@ -3700,7 +3734,7 @@ msgstr "打开场景" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "创建实例节点" +msgstr "实例" #: editor/filesystem_dock.cpp msgid "Add to Favorites" @@ -3718,14 +3752,6 @@ msgstr "编辑依赖..." msgid "View Owners..." msgstr "查看所有者..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "重命名为..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "拷贝..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移动..." @@ -3753,19 +3779,24 @@ msgid "Collapse All" msgstr "全部折叠" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重命名" +msgid "Duplicate..." +msgstr "重复..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "移动至回收站" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "重命名为..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" -msgstr "上一个文件夹/文件" +msgstr "上一个文件夹或文件" #: editor/filesystem_dock.cpp msgid "Next Folder/File" -msgstr "下一个文件夹/文件" +msgstr "下一个文件夹或文件" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" @@ -3792,8 +3823,11 @@ msgid "Move" msgstr "移动" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "当前位置已存在相同名字的文件或文件夹。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重命名" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3809,7 +3843,7 @@ msgstr "创建脚本" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp msgid "Find in Files" -msgstr "跨文件查找" +msgstr "在文件中查找" #: editor/find_in_files.cpp msgid "Find:" @@ -3827,7 +3861,7 @@ msgstr "筛选:" msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." -msgstr "包含下列扩展名的文件。可在项目设置中增加或移除。" +msgstr "包含下列扩展名的文件。可在项目设置中添加或移除。" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3859,8 +3893,19 @@ msgid "Searching..." msgstr "搜索中..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "搜索完毕" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d 个匹配。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d 个匹配。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d 个匹配。" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3876,11 +3921,11 @@ msgstr "分组名称已存在。" #: editor/groups_editor.cpp msgid "Invalid group name." -msgstr "组名无效。" +msgstr "分组名称无效。" #: editor/groups_editor.cpp msgid "Rename Group" -msgstr "重命名组" +msgstr "重命名分组" #: editor/groups_editor.cpp msgid "Delete Group" @@ -3917,43 +3962,43 @@ msgstr "管理分组" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "导入为独立场景" +msgstr "导入为单一场景" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "与独立的动画一同导入" +msgstr "与动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "导入独立材质" +msgstr "与材质分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "导入独立物体" +msgstr "与对象分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "导入独立物体 + 材质" +msgstr "与对象 + 材质分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "导入独立的物体和动画" +msgstr "与对象 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "与独立的材质和动画一同导入" +msgstr "与材质 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "使用单独的对象 + 材质 + 动画导入" +msgstr "与对象 + 材质 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "导入多个场景" +msgstr "导入为多个场景" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "导入多个场景 + 材质" +msgstr "导入为多个场景 + 材质" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3962,7 +4007,7 @@ msgstr "导入场景" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene..." -msgstr "导入场景..." +msgstr "导入场景中..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3970,7 +4015,7 @@ msgstr "正在生成光照贴图" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "正在生成Mesh: " +msgstr "正在生成网格: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -3990,7 +4035,7 @@ msgstr "后处理脚本运行发生错误:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" -msgstr "你是否在 `post_import()` 方法中返回了 Node 衍生对象?" +msgstr "有在 `post_import()` 方法中返回继承了 Node 的对象吗?" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -3998,15 +4043,15 @@ msgstr "保存中..." #: editor/import_dock.cpp msgid "%d Files" -msgstr "%d个文件" +msgstr "%d 个文件" #: 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'" +msgstr "清除 “%s” 的默认值" #: editor/import_dock.cpp msgid "Import As:" @@ -4116,15 +4161,15 @@ msgstr "多节点组" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." -msgstr "选择一个节点以编辑其信号和组。" +msgstr "选择一个节点以编辑其信号和分组。" #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" -msgstr "编辑一个插件" +msgstr "编辑插件" #: editor/plugin_config_dialog.cpp msgid "Create a Plugin" -msgstr "创建一个插件" +msgstr "创建插件" #: editor/plugin_config_dialog.cpp msgid "Plugin Name:" @@ -4210,11 +4255,11 @@ msgstr "移动节点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "更改混合空间1D限制" +msgstr "更改 BlendSpace1D 限制" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "更改混合空间1D标签" +msgstr "更改 BlendSpace1D 标签" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4234,11 +4279,11 @@ msgstr "添加动画点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "移除混合空间1D顶点" +msgstr "移除 BlendSpace1D 顶点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "移动混合空间1D节点顶点" +msgstr "移动 BlendSpace1D 节点顶点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4259,7 +4304,7 @@ 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 "选择并移动点,使用 RMB 创建点。" +msgstr "选择并移动点,使用鼠标右键创建点。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp @@ -4294,19 +4339,19 @@ msgstr "添加三角面" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" -msgstr "更改混合空间2D限制" +msgstr "更改 BlendSpace2D 限制" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Labels" -msgstr "更改混合空间2D标签" +msgstr "更改 BlendSpace2D 标签" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Point" -msgstr "移除混合空间2D顶点" +msgstr "移除 BlendSpace2D 顶点" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "移除混合空间2D三角形" +msgstr "移除 BlendSpace2D 三角形" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -4318,11 +4363,11 @@ msgstr "不存在任何三角形,因此不会有任何混效果合产生。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Toggle Auto Triangles" -msgstr "切换自动三角形" +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." @@ -4330,12 +4375,12 @@ msgstr "擦除点和三角形。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "自动创建混合三角形(非手动)" +msgstr "自动生成混合三角形(而非手动)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend:" -msgstr "混合:" +msgstr "混合:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Parameter Changed" @@ -4352,7 +4397,7 @@ msgstr "输出节点不能被添加到混合树。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "在合成树中添加节点" +msgstr "添加节点到 BlendTree" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Node Moved" @@ -4400,7 +4445,7 @@ 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 @@ -4442,7 +4487,7 @@ msgstr "启用筛选" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "切换AutoPlay" +msgstr "打开/关闭自动播放" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" @@ -4501,7 +4546,7 @@ 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" @@ -4513,7 +4558,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)" @@ -4537,11 +4582,11 @@ msgstr "从当前位置播放选中动画(D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "动画位置(单位:秒)。" +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" @@ -4557,7 +4602,7 @@ msgstr "编辑过渡方式..." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Open in Inspector" -msgstr "在属性检查器中打开" +msgstr "在检查器中打开" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -4569,7 +4614,7 @@ msgstr "加载后自动播放" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "启用洋葱皮(Onion Skinning)" +msgstr "启用洋葱皮" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning Options" @@ -4589,23 +4634,23 @@ msgstr "未来" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "Depth(深度)" +msgstr "深度" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "1步" +msgstr "1 步" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "2步" +msgstr "2 步" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "3步" +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" @@ -4613,7 +4658,7 @@ msgstr "强制用白色调和" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "包括3D控制器" +msgstr "包括 Gizmo (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pin AnimationPlayer" @@ -4636,11 +4681,11 @@ 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" @@ -4665,11 +4710,11 @@ 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" @@ -4677,7 +4722,7 @@ msgstr "同步" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "在终点" +msgstr "在结尾" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" @@ -4689,7 +4734,7 @@ msgstr "子过渡动画需要开始和结束节点。" #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "路径下无播放资源:%s。" +msgstr "路径下无可播放资源:%s。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4727,11 +4772,11 @@ 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: " @@ -4765,11 +4810,11 @@ msgstr "淡出(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "混合" +msgstr "混合 (Blend)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "混合" +msgstr "混合 (Mix)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" @@ -4794,19 +4839,19 @@ msgstr "数量:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" -msgstr "混合0:" +msgstr "混合 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 1:" -msgstr "混合1:" +msgstr "混合 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "X-Fade(交叉淡化)时间(s):" +msgstr "交叉淡化 (X-Fade) 时间(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" -msgstr "当前:" +msgstr "当前:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4816,15 +4861,15 @@ msgstr "添加输入" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "清除Auto-Advance" +msgstr "清除自动 Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "设置清除Auto-Advance" +msgstr "设置自动 Advance" #: 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." @@ -4844,31 +4889,31 @@ msgstr "单项节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix Node" -msgstr "混合(Mix)节点" +msgstr "Mix 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "混合2(Blend) 节点" +msgstr "Blend2 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "混合3(Blend) 节点" +msgstr "Blend3 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "混合4(Blend) 节点" +msgstr "Blend4 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "时间缩放节点" +msgstr "TimeScale 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "TimeSeek(时间寻找) 节点" +msgstr "TimeSeek 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "过渡节点" +msgstr "Transition 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Import Animations..." @@ -4896,11 +4941,11 @@ msgstr "连接错误,请重试。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "无法连接到服务器:" +msgstr "无法连接到主机:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "服务器无响应:" +msgstr "主机无响应:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -4908,7 +4953,7 @@ msgstr "无法解析主机名:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "请求失败,错误代码:" +msgstr "请求失败,返回代码:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed." @@ -4940,7 +4985,7 @@ msgstr "超时。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "文件hash值错误,该文件可能被篡改。" +msgstr "文件哈希值错误,该文件可能被篡改。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -4952,7 +4997,7 @@ msgstr "获得:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "sha256哈希值校验失败" +msgstr "SHA-256 哈希值校验失败" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -4960,7 +5005,7 @@ 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..." @@ -4976,7 +5021,7 @@ msgstr "请求错误" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "空闲" +msgstr "闲置" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install..." @@ -4992,7 +5037,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" @@ -5000,7 +5045,7 @@ 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)" @@ -5040,7 +5085,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..." @@ -5052,16 +5097,16 @@ 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 msgid "Category:" -msgstr "分类:" +msgstr "分类:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "站点:" +msgstr "站点:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Support" @@ -5081,7 +5126,7 @@ msgstr "载入中..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "素材ZIP文件" +msgstr "素材 ZIP 文件" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5097,7 +5142,7 @@ msgstr "" msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." -msgstr "没有可烘焙的Mesh。请确保Mesh包含UV2通道并且勾选'Bake Light'选项。" +msgstr "没有可烘焙的网格。请确保网格包含 UV2 通道并且勾选 “Bake Light” 选项。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5174,50 +5219,43 @@ msgstr "创建垂直水平参考线" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "将 CanvasItem “%s”的 Pivot Offset 设为 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "旋转 CanvasItem" +msgstr "旋转 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "旋转 CanvasItem" +msgstr "旋转 CanvasItem “%s” 为 %d 度" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "移动 CanvasItem" +msgstr "移动 CanvasItem “%s” 的锚点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "缩放 Node2D “%s” 为 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "缩放 Control “%s” 为 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "缩放包含项" +msgstr "缩放 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "缩放包含项" +msgstr "缩放 CanvasItem “%s” 为 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "移动 CanvasItem" +msgstr "移动 %s 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "移动 CanvasItem" +msgstr "移动 CanvasItem “%s” 至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5227,29 +5265,29 @@ msgstr "容器的子级的锚点和边距值被其父容器重写。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." -msgstr "控件节点的定位点和边距值的预设。" +msgstr "Control 节点的定位点和边距值的预设。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." -msgstr "激活后,移动控制节点会更改变锚点,而非边距。" +msgstr "激活后,移动 Control 节点会更改变锚点,而非边距。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" -msgstr "左上角" +msgstr "左上" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Right" -msgstr "右上角" +msgstr "右上" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Right" -msgstr "右下角" +msgstr "右下" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Left" -msgstr "左下角" +msgstr "左下" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Left" @@ -5371,7 +5409,7 @@ 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" @@ -5404,7 +5442,7 @@ msgstr "Alt+拖动:移动" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." -msgstr "按下V键修改旋转中心,在移动时按下Shift+V来拖动它。" +msgstr "按下 “V” 键修改旋转中心,在移动时按下 Shift+V 来拖动它。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" @@ -5432,7 +5470,7 @@ msgid "" "(same as Alt+RMB in select mode)." msgstr "" "显示鼠标点击位置的所有节点\n" -"(同Alt+鼠标右键)。" +"(同 Alt + 鼠标右键)。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -5645,11 +5683,11 @@ msgstr "清除姿势" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "网格步进乘以2" +msgstr "网格步进乘以 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "网格步进除以2" +msgstr "网格步进除以 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan View" @@ -5657,7 +5695,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..." @@ -5675,7 +5713,7 @@ msgstr "创建节点" #: 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 "从%s实例化场景出错" +msgstr "从 %s 实例化场景出错" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" @@ -5686,12 +5724,12 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"拖放+ Shift:将节点添加为兄弟节点\n" -"拖放+ Alt:更改节点类型" +"拖放 + Shift:将节点添加为兄弟节点\n" +"拖放 + Alt:更改节点类型" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" -msgstr "创建Polygon3D" +msgstr "创建 Polygon3D" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" @@ -5736,7 +5774,7 @@ msgstr "生成顶点计数:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "Emission Mask(发射遮挡)" +msgstr "发射遮罩" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5761,29 +5799,29 @@ msgstr "从像素捕获" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "Emission Colors(自发光颜色)" +msgstr "发射色彩" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" -msgstr "CPU粒子" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "从Mesh创建发射点" +msgstr "从网格创建发射点" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "从Node创建发射点" +msgstr "从节点创建发射点" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 0" -msgstr "保持0" +msgstr "Flat 0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 1" -msgstr "保持1" +msgstr "Flat 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" @@ -5835,7 +5873,7 @@ msgstr "移除曲线点" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "切换曲线线性Tangent" +msgstr "切换曲线线性正切" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" @@ -5847,7 +5885,7 @@ msgstr "鼠标右键添加点" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "烘培GI探针" +msgstr "烘培 GI 探针" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" @@ -5855,7 +5893,7 @@ msgstr "渐变编辑" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "第%d项" +msgstr "第 %d 项" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" @@ -5875,11 +5913,11 @@ msgstr "网格为空!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a Trimesh collision shape." -msgstr "无法创建Trimesh碰撞形状。" +msgstr "无法创建三角网格碰撞形状。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "创建静态三维身体" +msgstr "创建静态三角网格身体" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5887,7 +5925,7 @@ msgstr "此操作无法引用在根节点上!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" -msgstr "创建三维网格静态形状" +msgstr "创建三角网格静态形状" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." @@ -5919,23 +5957,23 @@ msgstr "创建导航网格" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "包含的Mesh不是ArrayMesh类型。" +msgstr "包含的 Mesh 不是 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 (网格实例) 缺少 Mesh(网格)!" +msgstr "MeshInstance 缺少 Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" @@ -5943,7 +5981,7 @@ msgstr "网格没有可用来创建轮廓的表面!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "网格原始类型不是 PRIMITIVE_TRIANGLES(三角形网格)!" +msgstr "Mesh 原始类型不是 PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -5967,7 +6005,7 @@ msgid "" "automatically.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" -"创建StaticBody并自动为其分配基于多边形的碰撞形状。\n" +"创建 StaticBody 并自动为其分配基于多边形的碰撞形状。\n" "这是最准确(但是最慢)的碰撞检测手段。" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6018,19 +6056,19 @@ msgid "" "that property isn't possible." msgstr "" "创建一个静态轮廓网格。轮廓网格会自动翻转法线。\n" -"可以用来在必要时代替SpatialMaterial的Grow属性。" +"可以用来在必要时代替 SpatialMaterial 的 Grow 属性。" #: 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" -msgstr "为光照映射/环境光遮蔽展开UV2" +msgstr "为光照映射或环境光遮蔽展开 UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" @@ -6042,11 +6080,11 @@ msgstr "轮廓大小:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "调试UV通道" +msgstr "调试 UV 通道" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" -msgstr "确定要移除项目%d吗?" +msgstr "确定要移除项目 %d 吗?" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "" @@ -6079,11 +6117,11 @@ msgstr "从场景中更新" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "未指定网格源(且节点中没有设置多网格物体(MultiMesh))。" +msgstr "未指定网格源(且节点中没有设置 MultiMesh 集)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "未指定网格源(且多网格(MultiMesh)不包含网格(Mesh))。" +msgstr "未指定网格源(且 MultiMesh 不包含 Mesh)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -6091,11 +6129,11 @@ 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." @@ -6115,7 +6153,7 @@ 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:" @@ -6127,7 +6165,7 @@ msgstr "填充表面" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "填充MultiMesh" +msgstr "填充 MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" @@ -6139,11 +6177,11 @@ msgstr "源网格:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "X轴" +msgstr "X 轴" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "Y轴" +msgstr "Y 轴" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" @@ -6177,7 +6215,7 @@ msgstr "创建导航多边形" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Convert to CPUParticles" -msgstr "转换为 CPU粒子" +msgstr "转换为 CPUParticles" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generating Visibility Rect" @@ -6189,12 +6227,12 @@ 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 msgid "Generation Time (sec):" -msgstr "生成时间(秒):" +msgstr "生成时间(秒):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." @@ -6206,23 +6244,23 @@ 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" -msgstr "创建发射器(Emitter)" +msgstr "创建发射器 (Emitter)" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "发射位置:" +msgstr "发射位置:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" @@ -6230,7 +6268,7 @@ msgstr "表面顶点" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "表面定点+法线(方向向量)" +msgstr "表面定点 + 法线(有向)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" @@ -6242,19 +6280,19 @@ 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" -msgstr "正在生成AABB" +msgstr "正在生成 AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "生成可见的AABB" +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" @@ -6297,12 +6335,12 @@ 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)" @@ -6311,11 +6349,11 @@ 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 @@ -6358,11 +6396,11 @@ msgstr "设置曲线的顶点坐标" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "设置的曲线初始位置(Pos)" +msgstr "设置曲线内控点位置" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" -msgstr "设置曲线外控制点" +msgstr "设置曲线外控点位置" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6374,15 +6412,15 @@ 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)" -msgstr "拆分(曲线)" +msgstr "拆分线段(在曲线中)" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" @@ -6391,7 +6429,7 @@ msgstr "移动关节" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "Polygon2D 的骨架属性并没有指向一个 Skeleton2D 节点" +msgstr "Polygon2D 的骨架属性并没有指向 Skeleton2D 节点" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6407,13 +6445,13 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "创建UV贴图" +msgstr "创建 UV 贴图" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "多边形2d 具有内部顶点, 因此不能再在视口中对其进行编辑。" +msgstr "Polygon2D 具有内部顶点,因此不能再于视口中对其进行编辑。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6453,11 +6491,11 @@ msgstr "绘制骨骼权重" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "打开2D多边形UV编辑器。" +msgstr "打开 2D 多边形 UV 编辑器。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "2D多边形UV编辑器" +msgstr "2D 多边形 UV 编辑器" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6480,22 +6518,20 @@ msgid "Move Points" msgstr "移动点" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "拖动来旋转" +msgstr "Command: 旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: 移动所有" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: 缩放" +msgstr "Shift+Command: 缩放" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl:旋转" +msgstr "Ctrl: 旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" @@ -6515,13 +6551,13 @@ 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 "移除自定义多边形。如果不存在,禁用自定义多边形渲染。" +msgstr "移除自定义多边形。如果没有剩下任何多边形,则会禁用自定义多边形渲染。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." @@ -6536,18 +6572,16 @@ msgid "Radius:" msgstr "半径:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "创建多边形和 UV" +msgstr "复制多边形为 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "转换为Polygon2D" +msgstr "复制 UV 为多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "清除UV" +msgstr "清除 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Settings" @@ -6645,7 +6679,7 @@ 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" @@ -6714,7 +6748,7 @@ msgstr "脚本并非处于工具模式,无法执行。" #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." -msgstr "如需执行此脚本,必须继承EditorScript并将其设为工具模式。" +msgstr "如需执行此脚本,必须继承 EditorScript 并将其设为工具模式。" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6752,7 +6786,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" @@ -6870,7 +6904,7 @@ msgstr "使用外部编辑器进行调试" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "打开Godot在线文档。" +msgstr "打开 Godot 在线文档。" #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -6933,7 +6967,7 @@ msgstr "目标" #: editor/plugins/script_text_editor.cpp msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "未找到方法“%s”(连接于信号“%s”、来自节点“%s”、目标节点“%s”)。" +msgstr "未找到方法 “%s”(连接于信号“%s”、来自节点“%s”、目标节点“%s”)。" #: editor/plugins/script_text_editor.cpp msgid "[Ignore]" @@ -6949,12 +6983,12 @@ 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”未在该场景中使用。" +msgstr "无法放置该节点,因为脚本 “%s” 未在该场景中使用。" #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -6996,7 +7030,7 @@ 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 scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -7026,7 +7060,7 @@ msgstr "切换注释" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "折叠/展开行" +msgstr "折叠/展开行" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -7034,7 +7068,7 @@ msgstr "折叠所有行" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "取消折叠所有行" +msgstr "展开所有行" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" @@ -7058,7 +7092,7 @@ msgstr "将缩进转为空格" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "将缩进转为Tabs" +msgstr "将缩进转为制表符" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -7099,7 +7133,7 @@ msgstr "转到行..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "切换断点" +msgstr "设置/移除断点" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" @@ -7107,18 +7141,18 @@ 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 @@ -7179,15 +7213,15 @@ msgstr "已忽略变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "X轴变换。" +msgstr "X 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "Y轴变换。" +msgstr "Y 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "Z轴变换。" +msgstr "Z 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." @@ -7203,7 +7237,7 @@ 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)." @@ -7315,7 +7349,7 @@ msgstr "锁定视角旋转" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "显示法线" +msgstr "显示标准" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" @@ -7343,7 +7377,7 @@ msgstr "查看信息" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" -msgstr "查看帧率" +msgstr "查看 FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7363,7 +7397,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" @@ -7406,12 +7440,12 @@ 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 "XForm Dialog" -msgstr "XForm对话框" +msgstr "XForm 对话框" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7423,9 +7457,9 @@ msgid "" msgstr "" "点击以切换可见状态。\n" "\n" -"睁眼:标志可见。\n" -"闭眼:标志隐藏。\n" -"半睁眼:标志也可穿过不透明的表面可见(“X光”)。" +"睁眼:Gizmo 可见。\n" +"闭眼:Gizmo 隐藏。\n" +"半睁眼:Gizmo 也可穿过不透明的表面可见(“X-Ray - X 光”)。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" @@ -7512,31 +7546,31 @@ msgstr "变换对话框..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "1个视口" +msgstr "1 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "2个视口" +msgstr "2 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "2个视口(备选)" +msgstr "2 个视口(备选)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "3个视口" +msgstr "3 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3个视口(备选)" +msgstr "3 个视口(备选)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "4个视口" +msgstr "4 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "控制器" +msgstr "Gizmo" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -7577,11 +7611,11 @@ msgstr "透视视角(角度):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "查看Z-Near:" +msgstr "查看 Z-Near:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "查看Z-Far:" +msgstr "查看 Z-Far:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -7617,35 +7651,35 @@ msgstr "无名控制器" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" -msgstr "创建Mesh2D" +msgstr "创建 Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Mesh2D Preview" -msgstr "Mesh2D预览" +msgstr "Mesh2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Polygon2D" -msgstr "创建Polygon 2D" +msgstr "创建 Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "Polygon2D预览" +msgstr "Polygon2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D" -msgstr "创建CollisionPolygon2D" +msgstr "创建 CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "CollisionPolygon2D Preview" -msgstr "CollisionPolygon2D预览" +msgstr "CollisionPolygon2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D" -msgstr "创建LightOccluder2D" +msgstr "创建 LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "LightOccluder2D Preview" -msgstr "LightOccluder2D预览" +msgstr "LightOccluder2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7653,7 +7687,7 @@ msgstr "Sprite 是空的!" #: 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." @@ -7661,7 +7695,7 @@ 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." @@ -7669,7 +7703,7 @@ 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." @@ -7677,7 +7711,7 @@ msgstr "无效的几何体,无法创建多边形碰撞体。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" -msgstr "创建CollisionPolygon2D兄弟节点" +msgstr "创建 CollisionPolygon2D 兄弟节点" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." @@ -7685,7 +7719,7 @@ msgstr "无效的几何体,无法创建遮光体。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" -msgstr "创建LightOccluder2D兄弟节点" +msgstr "创建 LightOccluder2D 兄弟节点" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" @@ -7717,7 +7751,7 @@ 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" @@ -7745,7 +7779,7 @@ msgstr "添加空白帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "修改动画FPS" +msgstr "修改动画 FPS" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" @@ -7817,7 +7851,7 @@ msgstr "选择/清除所有帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Create Frames from Sprite Sheet" -msgstr "从 Sprite Sheet 中创建帧" +msgstr "从精灵表中创建帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" @@ -7833,7 +7867,7 @@ msgstr "设置边距" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "吸附模式:" +msgstr "吸附模式:" #: editor/plugins/texture_region_editor_plugin.cpp #: scene/resources/visual_shader.cpp @@ -7854,7 +7888,7 @@ msgstr "自动裁剪" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Offset:" -msgstr "网格偏移量:" +msgstr "偏移量:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Step:" @@ -7922,7 +7956,7 @@ msgstr "不可用的按钮" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "项目(Item)" +msgstr "项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Item" @@ -7930,11 +7964,11 @@ msgstr "不可用的项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "检查项目(Item)" +msgstr "检查项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "已选项目(Checked Item)" +msgstr "已选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Radio Item" @@ -7946,47 +7980,47 @@ msgstr "已选单选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "命名为 Sep。" +msgstr "带名称的分隔线" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" -msgstr "子菜单(Submenu)" +msgstr "子菜单" #: editor/plugins/theme_editor_plugin.cpp msgid "Subitem 1" -msgstr "子项目1" +msgstr "子项目 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Subitem 2" -msgstr "子项目2" +msgstr "子项目 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "有(Has)" +msgstr "有" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "许多(Many)" +msgstr "许多" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled LineEdit" -msgstr "行编辑不可用" +msgstr "已禁用 LineEdit" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "分页1" +msgstr "选项卡 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "分页2" +msgstr "选项卡 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "分页3" +msgstr "选项卡 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Editable Item" -msgstr "可编辑节点" +msgstr "可编辑的项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" @@ -7994,11 +8028,11 @@ msgstr "子树" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" -msgstr "有,很多,选项" +msgstr "有, 很多, 选项" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "数据类型:" +msgstr "数据类型:" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp @@ -8083,21 +8117,20 @@ msgid "Paint Tile" msgstr "绘制图块" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+鼠标左键:绘制直线\n" -"Shift+Ctrl+鼠标左键:绘制矩形" +"Shift + 鼠标左键:绘制直线\n" +"Shift + Command + 鼠标左键:绘制矩形" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+鼠标左键:绘制直线\n" -"Shift+Ctrl+鼠标左键:绘制矩形" +"Shift + 鼠标左键:绘制直线\n" +"Shift + Ctrl + 鼠标左键:绘制矩形" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -8193,7 +8226,7 @@ msgstr "优先级" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index" -msgstr "Z索引" +msgstr "Z 索引" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8225,7 +8258,7 @@ msgstr "图标模式" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" -msgstr "Z索引模式" +msgstr "Z 索引模式" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -8241,19 +8274,31 @@ msgstr "擦除位掩码。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new rectangle." -msgstr "新建矩形。" +msgstr "创建新矩形。" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新建矩形" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "创建新多边形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新建多边形" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "删除所选形状" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "保持多边形位于纹理区域中。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "启用吸附并显示网格(可通过属性面板设置)。" +msgstr "启用吸附并显示网格(可通过检查器设置)。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" @@ -8286,7 +8331,7 @@ 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 "" @@ -8298,7 +8343,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." -msgstr "删除选中的Rect。" +msgstr "删除选中矩形。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8321,7 +8366,7 @@ msgid "" msgstr "" "鼠标左键:启用比特。\n" "鼠标右键:关闭比特。\n" -"Shift+鼠标左键:设置通配符位。\n" +"Shift + 鼠标左键:设置通配符位。\n" "点击另一个图块进行编辑。" #: editor/plugins/tile_set_editor_plugin.cpp @@ -8443,17 +8488,13 @@ 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 msgid "Error" msgstr "错误" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "没有提供提交消息" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "没有文件被添加到暂存区" @@ -8463,7 +8504,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" @@ -8510,10 +8551,6 @@ msgid "Stage All" msgstr "暂存全部" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "添加提交消息" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "提交变更" @@ -8536,7 +8573,7 @@ msgstr "检测文件差异的变化" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" -msgstr "只使用GLES3" +msgstr "(仅限 GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Output" @@ -8548,7 +8585,7 @@ msgstr "标量" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector" -msgstr "Vector" +msgstr "矢量" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8556,7 +8593,7 @@ msgstr "布尔值" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "采样(Sampler)" +msgstr "采样 Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" @@ -8596,7 +8633,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" @@ -8611,7 +8648,6 @@ msgid "Add Node to Visual Shader" msgstr "将节点添加到可视着色器" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "节点已移动" @@ -8633,9 +8669,8 @@ msgid "Visual Shader Input Type Changed" msgstr "可视着色器输入类型已更改" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "设置统一名称" +msgstr "已更改 UniformRef 的名称" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -8671,11 +8706,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." @@ -8731,15 +8766,15 @@ msgstr "返回两个参数之间 %s 比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "等于(==)" +msgstr "等于 (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "大于(>)" +msgstr "大于 (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "大于或等于(> =)" +msgstr "大于或等于 (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8751,35 +8786,35 @@ msgstr "如果提供的标量相等,更大或更小,则返回关联的向量 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和标量参数之间比较的布尔结果。" +msgstr "返回 NaN 和标量参数之间比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "小于 (<)" +msgstr "小于 (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "小于或等于(<=)" +msgstr "小于或等于 (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "不等于(!=)" +msgstr "不等于 (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." -msgstr "如果提供的布尔值是true或false,则返回关联的向量。" +msgstr "如果提供的布尔值是 true 或 false,则返回关联的向量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated scalar if the provided boolean value is true or false." -msgstr "如果提供的布尔值是true或false,则返回关联的标量。" +msgstr "如果提供的布尔值是 true 或 false,则返回关联的标量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." @@ -8801,7 +8836,7 @@ msgstr "布尔统一。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." -msgstr "“%s”为所有着色器模式的输入参数。" +msgstr "所有着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Input parameter." @@ -8809,27 +8844,27 @@ msgstr "输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "“%s”为顶点和片段着色器模式的输入参数。" +msgstr "顶点和片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." -msgstr "“%s”为片段和灯光着色器模式的输入参数。" +msgstr "片段和灯光着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." -msgstr "“%s”为片段着色器模式的输入参数。" +msgstr "片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for light shader mode." -msgstr "“%s”为灯光着色器模式的输入参数。" +msgstr "灯光着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "“%s”为顶点着色器模式的输入参数。" +msgstr "顶点着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "“%s”为顶点和片段着色器模式的输入参数。" +msgstr "顶点和片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8841,35 +8876,35 @@ msgstr "标量运算符。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "E constant (2.718282). Represents the base of the natural logarithm." -msgstr "E常数(2.718282)。表示自然对数的基数。" +msgstr "E 常数 (2.718282)。表示自然对数的基数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Epsilon constant (0.00001). Smallest possible scalar number." -msgstr "Epsilon常数(0.00001)。最小的标量数。" +msgstr "ε (eplison) 常数 (0.00001)。最小的标量数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Phi constant (1.618034). Golden ratio." -msgstr "Phi常数(1.618034)。黄金比例。" +msgstr "Φ (Phi) 常数 (1.618034)。黄金比例。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/4 constant (0.785398) or 45 degrees." -msgstr "Pi / 4常数(0.785398)或45度。" +msgstr "π (Pi)/4 常数 (0.785398) 或 45 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/2 constant (1.570796) or 90 degrees." -msgstr "Pi/2常数(1.570796)或90度。" +msgstr "π (Pi)/2 常数 (1.570796) 或 90 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi constant (3.141593) or 180 degrees." -msgstr "Pi 常数 (3.141593) 或 180 度。" +msgstr "π (Pi) 常数 (3.141593) 或 180 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Tau constant (6.283185) or 360 degrees." -msgstr "Tau常数(6.283185)或360度。" +msgstr "τ (Tau) 常数 (6.283185)或 360 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sqrt2 constant (1.414214). Square root of 2." -msgstr "Sqrt2 常数 (1.414214)。2 的平方根。" +msgstr "Sqrt2 常数 (1.414214)。2 的平方根。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the absolute value of the parameter." @@ -8926,11 +8961,11 @@ msgstr "将以弧度为单位的量转换为度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-e Exponential." -msgstr "以e为底的指数。" +msgstr "以 e 为底的指数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 Exponential." -msgstr "2为底的指数。" +msgstr "以 2 为底的指数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." @@ -8950,7 +8985,7 @@ msgstr "自然对数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 logarithm." -msgstr "2为底的对数。" +msgstr "以 2 为底的对数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the greater of two values." @@ -9021,10 +9056,10 @@ 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" +"SmoothStep 函数( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" -"如果'x'小于'edge0'则返回0.0,如果x大于'edge1'则返回1.0。否则在0.0和1.0之间返" -"回Hermite多项式插值的值。" +"如果 “x” 小于 “edge0” 则返回 0.0,如果 x 大于 “edge1” 则返回 1.0。否则在 0.0 " +"和 1.0 之间返回埃尔米特多项式插值的值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9032,9 +9067,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( 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." @@ -9112,9 +9147,9 @@ msgid "" msgstr "" "计算一对矢量的外积。\n" "\n" -"OuterProduct 将第一个参数\"c\"视为列矢量(包含一列的矩阵),将第二个参数\"r" -"\"视为行矢量(具有一行的矩阵),并执行线性代数矩阵乘以\"c * r\",生成行数为" -"\"c\"中的组件,其列数是\"r\"中的组件数。" +"OuterProduct 将第一个参数 “c” 视为列矢量(包含一列的矩阵),将第二个参数 “r” " +"视为行矢量(具有一行的矩阵),并执行线性代数矩阵乘以 “c * r”,生成行数为 “c” " +"中的组件,其列数是 “r” 中的组件数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -9187,8 +9222,8 @@ 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的点乘小于零,返回值为n,否则返回-N。" +"返回指向与参考向量相同方向的向量。该函数有三个向量参数:N,方向向量;I,入射" +"向量;Nref,参考向量。如果 I 和 Nref 的点乘小于零,返回值为 N,否则返回 -N。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." @@ -9232,10 +9267,10 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep 函数(矢量(edge0)、矢量(edge1)、矢量(x))。 \n" +"SmoothStep 函数( vector(edge0), vector(edge1), vector (x) )。 \n" "\n" -"如果\"x\"小于\"edge0\",则返回 0.0;如果\"x\"大于\"edge1\",则返回 0.0。否则," -"返回值将使用赫密特多项式在 0.0 和 1.0 之间插值。" +"如果 “x” 小于 “edge0”,则返回 0.0;如果 “x” 大于 “edge1”,则返回 0.0。否则," +"返回值将使用埃尔米特多项式在 0.0 和 1.0 之间插值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9245,10 +9280,10 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"smoothstep函数(标量(edge0)、标量(edge1)、向量(x))。\n" +"SmoothStep 函数( scalar(edge0), scalar(edge1), vector(x) )。\n" "\n" -"如果'x'小于'edge0'则返回0.0,如果x大于'edge1'则返回1.0。否则在0.0和1.0之间返" -"回Hermite多项式插值的值。" +"如果 “x” 小于 “edge0” 则返回 0.0,如果 x 大于 “edge1” 则返回 1.0。否则,返回" +"值将使用埃尔米特多项式在 0.0 和 1.0 之间插值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9256,9 +9291,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( 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 "" @@ -9266,9 +9301,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( 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 "Adds vector to vector." @@ -9304,8 +9339,8 @@ 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 "" -"自定义Godot着色器语言表达式,可以有任意数量的输入和输出端口。它会往顶点/片段/" -"灯光函数中直接注入代码,请勿在其中声明函数。" +"自定义 Godot 着色器语言表达式,可以有任意数量的输入和输出端口。它会往顶点/片" +"段/灯光函数中直接注入代码,请勿在其中声明函数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9325,7 +9360,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "至现有一致的引用。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9339,7 +9374,7 @@ msgstr "(仅限片段/灯光模式)矢量导数功能。" msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." -msgstr "(仅限片段/光照模式)(矢量)使用局部差分的“ x”中的导数。" +msgstr "(仅限片段/光照模式)(矢量)使用局部差分的 “x” 中的导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9363,13 +9398,13 @@ msgstr "(仅限片段/光照模式)(标量)使用局部差分的'y'导 msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." -msgstr "(仅限片段/光照模式)(向量)“ x”和“ y”中的绝对导数之和。" +msgstr "(仅限片段/光照模式)(向量)“x” 和 “y” 中的绝对导数之和。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." -msgstr "(仅限片段/光照模式)(标量)“ x”和“ y”中的绝对导数之和。" +msgstr "(仅限片段/光照模式)(标量)“x” 和 “y” 中的绝对导数之和。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" @@ -9389,14 +9424,14 @@ msgstr "可执行的" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "是否删除预设“%s”?" +msgstr "是否删除预设 “%s”?" #: editor/project_export.cpp 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 @@ -9405,7 +9440,7 @@ 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 @@ -9518,11 +9553,11 @@ 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):" -msgstr "脚本加密密钥(256位16进制码):" +msgstr "脚本加密密钥(256 位 16 进制码):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -9546,7 +9581,7 @@ msgstr "ZIP 文件" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "Godot游戏包" +msgstr "Godot 游戏包" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -9566,12 +9601,12 @@ msgstr "指定的路径不存在。" #: editor/project_manager.cpp msgid "Error opening package file (it's not in ZIP format)." -msgstr "打开包文件时出错(非ZIP格式)。" +msgstr "打开包文件时出错(非 ZIP 格式)。" #: editor/project_manager.cpp msgid "" "Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." -msgstr "无效的“.zip”项目文件;没有包含“project.godot”文件。" +msgstr "无效的 “.zip” 项目文件。没有包含 “project.godot” 文件。" #: editor/project_manager.cpp msgid "Please choose an empty folder." @@ -9579,11 +9614,11 @@ msgstr "请选择空文件夹。" #: editor/project_manager.cpp msgid "Please choose a \"project.godot\" or \".zip\" file." -msgstr "请选择“project.godot”或“.zip”文件。" +msgstr "请选择 “project.godot” 或 “.zip” 文件。" #: editor/project_manager.cpp msgid "This directory already contains a Godot project." -msgstr "该目录已经包含Godot项目。" +msgstr "该目录已经包含 Godot 项目。" #: editor/project_manager.cpp msgid "New Game Project" @@ -9607,7 +9642,7 @@ 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?)." @@ -9622,11 +9657,11 @@ msgstr "" #: 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" @@ -9650,7 +9685,7 @@ msgstr "创建并编辑" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "安装项目:" +msgstr "安装项目:" #: editor/project_manager.cpp msgid "Install & Edit" @@ -9677,6 +9712,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "所使用的 GPU 驱动不支持。" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9740,12 +9779,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 "" @@ -9758,18 +9797,18 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "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 "项目设置是由更新的引擎版本创建的,其设置与此版本不兼容。" +msgstr "项目设置是由较新版本的引擎创建的,其设置与此版本不兼容。" #: editor/project_manager.cpp msgid "" @@ -9778,7 +9817,7 @@ msgid "" "the \"Application\" category." msgstr "" "无法运行项目:未定义主场景。 \n" -"请编辑项目并在“应用程序”类别下的“项目设置”中设置主场景。" +"请编辑项目并在 “项目设置” 中 “Application” 类别下设置主场景。" #: editor/project_manager.cpp msgid "" @@ -9786,18 +9825,18 @@ msgid "" "Please edit the project to trigger the initial import." msgstr "" "无法运行项目: 需要导入素材。\n" -"请编辑项目,从而触发首次导入。" +"请编辑项目来触发首次导入。" #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" -msgstr "您确定要同时运行%d个项目吗?" +msgstr "确定要同时运行 %d 个项目吗?" #: editor/project_manager.cpp msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"是否从列表中删除%d个项目? \n" +"是否从列表中删除 %d 个项目? \n" "项目文件夹的内容不会被修改。" #: editor/project_manager.cpp @@ -9829,7 +9868,7 @@ msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"您确定要扫描%s文件夹中的现有Godot项目吗? \n" +"确定要扫描文件夹 %s 中的现有 Godot 项目吗? \n" "这可能需要一段时间。" #. TRANSLATORS: This refers to the application where users manage their Godot projects. @@ -9878,7 +9917,7 @@ 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_manager.cpp @@ -9910,12 +9949,11 @@ msgstr "鼠标按键" msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" -msgstr "" -"无效的操作名称。操作名不能为空,也不能包含 '/', ':', '=', '\\' 或者空字符串" +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" @@ -9983,7 +10021,7 @@ msgstr "X 按键 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" -msgstr "手柄摇杆序号:" +msgstr "手柄摇杆序号:" #: editor/project_settings_editor.cpp msgid "Axis" @@ -10039,11 +10077,11 @@ 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" @@ -10053,7 +10091,8 @@ msgstr "删除条目" msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." -msgstr "无效的操作名称。它不能是空的也不能包含 '/', ':', '=', '\\' 或者 '\"'。" +msgstr "" +"无效的操作名称。名称不能为空,也不能包含 “/”, “:”, “=”, “\\” 或者 “\"”。" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -10077,11 +10116,11 @@ 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" @@ -10093,7 +10132,7 @@ msgstr "添加资源重定向" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "修改语言资源重定向" +msgstr "修改资源重定向语言" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" @@ -10145,11 +10184,11 @@ msgstr "盲区" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "设备:" +msgstr "设备:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "序号:" +msgstr "序号:" #: editor/project_settings_editor.cpp msgid "Localization" @@ -10157,11 +10196,11 @@ msgstr "本地化" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "语言" +msgstr "翻译" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "语言:" +msgstr "翻译:" #: editor/project_settings_editor.cpp msgid "Remaps" @@ -10173,7 +10212,7 @@ msgstr "资源:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "地区重定向:" +msgstr "依照区域重定向:" #: editor/project_settings_editor.cpp msgid "Locale" @@ -10181,15 +10220,15 @@ msgstr "区域" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "区域筛选器" +msgstr "筛选区域" #: editor/project_settings_editor.cpp msgid "Show All Locales" -msgstr "显示所有语言设置" +msgstr "显示所有区域" #: editor/project_settings_editor.cpp msgid "Show Selected Locales Only" -msgstr "仅显示选定的语言环境" +msgstr "仅显示选定的区域" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -10197,7 +10236,7 @@ msgstr "筛选模式:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "区域:" +msgstr "区域:" #: editor/project_settings_editor.cpp msgid "AutoLoad" @@ -10241,7 +10280,7 @@ msgstr "选择节点" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "加载文件出错:不是资源文件!" +msgstr "加载文件出错:不是资源文件!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10249,7 +10288,7 @@ msgstr "选择一个节点" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "(Bit)位 %d, val %d." +msgstr "位 %d,值 %d。" #: editor/property_selector.cpp msgid "Select Property" @@ -10297,7 +10336,7 @@ msgstr "节点名称" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "父节点的名称,如果有的话" +msgstr "父节点名称(若有需要)" #: editor/rename_dialog.cpp msgid "Node type" @@ -10349,7 +10388,7 @@ msgid "" "Missing digits are padded with leading zeros." msgstr "" "计数器数字的最少个数。\n" -"缺失的数字将用0填充在头部。" +"缺失的数字将用 0 填充在头部。" #: editor/rename_dialog.cpp msgid "Post-Process" @@ -10389,7 +10428,7 @@ msgstr "正则表达式出错:" #: editor/rename_dialog.cpp msgid "At character %s" -msgstr "位于字符%s" +msgstr "位于字符 %s" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" @@ -10397,7 +10436,7 @@ msgstr "重设父节点" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "重设位置(选择新的父节点):" +msgstr "重设位置(选择新的父节点):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -10409,7 +10448,7 @@ msgstr "重设父节点" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "运行模式:" +msgstr "运行模式:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -10421,7 +10460,7 @@ msgstr "主场景" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "主场景参数:" +msgstr "主场景参数:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" @@ -10433,13 +10472,13 @@ msgstr "没有可实例化场景的父节点。" #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "从%s加载场景出错" +msgstr "从 %s 加载场景出错" #: editor/scene_tree_dock.cpp 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)" @@ -10491,23 +10530,23 @@ msgstr "将节点设置为根节点" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes and any children?" -msgstr "是否删除节点“%s”及其子节点?" +msgstr "是否删除节点 “%s” 及其子节点?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" -msgstr "是否删除%d个节点?" +msgstr "是否删除 %d 个节点?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "是否删除根节点“%s”?" +msgstr "是否删除根节点 “%s”?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "是否删除节点“%s”及其子节点?" +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." @@ -10525,18 +10564,19 @@ msgstr "将新场景另存为..." msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." -msgstr "禁用“可编辑实例”将导致节点的所有属性恢复为其默认值。" +msgstr "禁用 “editable_instance” 将导致节点的所有属性恢复为其默认值。" #: 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 "" -"开启“加载为占位符”将禁用“可编辑实例”并重置该节点的所有属性恢复为其默认值。" +"开启 “加载为占位符” 将禁用 “子节点可编辑” 并重置该节点的所有属性恢复为其默认" +"值。" #: editor/scene_tree_dock.cpp msgid "Make Local" -msgstr "使用本地" +msgstr "转为本地" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -10709,14 +10749,14 @@ msgstr "(连接来源)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "节点配置警告:" +msgstr "节点配置警告:" #: editor/scene_tree_editor.cpp 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 @@ -10724,7 +10764,7 @@ msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"节点具有%s个连接。\n" +"节点具有 %s 个连接。\n" "单击以显示信号面板。" #: editor/scene_tree_editor.cpp @@ -10829,7 +10869,7 @@ msgstr "错误:无法创建脚本文件。" #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "从%s加载脚本出错" +msgstr "从 %s 加载脚本出错" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -10869,7 +10909,7 @@ msgstr "脚本路径/名称有效。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "允许:a-z,a-z,0-9,_ 和 ." +msgstr "允许:a-z, A-Z, 0-9, _ 和 ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." @@ -10927,15 +10967,15 @@ msgstr "错误:" #: editor/script_editor_debugger.cpp msgid "C++ Error" -msgstr "C++错误" +msgstr "C++ 错误" #: editor/script_editor_debugger.cpp msgid "C++ Error:" -msgstr "C++错误:" +msgstr "C++ 错误:" #: editor/script_editor_debugger.cpp msgid "C++ Source" -msgstr "C++源文件" +msgstr "C++ 源文件" #: editor/script_editor_debugger.cpp msgid "Source:" @@ -10943,7 +10983,7 @@ msgstr "源文件:" #: editor/script_editor_debugger.cpp msgid "C++ Source:" -msgstr "C++源文件:" +msgstr "C++ 源文件:" #: editor/script_editor_debugger.cpp msgid "Stack Trace" @@ -11007,7 +11047,7 @@ msgstr "从列表中选取一个或多个项目以显示图表。" #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "占用显存的资源列表:" +msgstr "占用显存的资源列表:" #: editor/script_editor_debugger.cpp msgid "Total:" @@ -11015,7 +11055,7 @@ msgstr "合计:" #: editor/script_editor_debugger.cpp msgid "Export list to a CSV file" -msgstr "将列表导出为CSV文件" +msgstr "将列表导出为 CSV 文件" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11039,15 +11079,15 @@ msgstr "其他" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "点击的控件:" +msgstr "点击的控件:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "点击的控件类型:" +msgstr "点击的控件类型:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "实时编辑根节点:" +msgstr "实时编辑根节点:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -11055,7 +11095,7 @@ msgstr "从场景树设置" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "导出为CSV格式" +msgstr "导出为 CSV 格式" #: editor/settings_config_dialog.cpp msgid "Erase Shortcut" @@ -11103,11 +11143,11 @@ msgstr "修改通知器 AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "修改粒子AABB" +msgstr "修改粒子 AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "修改探针(Probe)范围" +msgstr "修改探针范围" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" @@ -11171,7 +11211,7 @@ msgstr "双击创建新条目" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "平台:" +msgstr "平台:" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform" @@ -11183,11 +11223,11 @@ msgstr "动态链接库" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "添加CPU架构项" +msgstr "添加架构项" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "动态链接库" +msgstr "GDNative 库" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" @@ -11203,7 +11243,7 @@ msgstr "库" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "库: " +msgstr "库: " #: modules/gdnative/register_types.cpp msgid "GDNative" @@ -11211,7 +11251,7 @@ msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" -msgstr "Step参数为 0 !" +msgstr "Step 参数为 0!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -11227,15 +11267,15 @@ msgstr "没有基于资源文件" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "实例字典格式不正确(缺少@path)" +msgstr "实例字典格式不正确(缺少 @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "实例字典格式不正确(无法加载脚本@path)" +msgstr "实例字典格式不正确(无法加载 @path 的脚本)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "实例字典格式不正确(无效脚本@path)" +msgstr "实例字典格式不正确(@path 的脚本无效)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" @@ -11319,27 +11359,27 @@ msgstr "编辑 Z 轴" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "光标沿X轴旋转" +msgstr "光标沿 X 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "沿Y轴旋转" +msgstr "沿 Y 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "沿Z轴旋转" +msgstr "沿 Z 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "光标沿X轴向后旋转" +msgstr "光标沿 X 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "光标沿Y轴向后旋转" +msgstr "光标沿 Y 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "光标沿Z轴向后旋转" +msgstr "光标沿 Z 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" @@ -11359,11 +11399,11 @@ msgstr "填充已选" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" -msgstr "GridMap设置" +msgstr "GridMap 设置" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "拾取距离:" +msgstr "拾取距离:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Filter meshes" @@ -11371,7 +11411,7 @@ msgstr "筛选网格" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "向此GridMap提供网格库资源以使用其网格。" +msgstr "向此 GridMap 提供网格库资源以使用其网格。" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -11387,7 +11427,7 @@ msgstr "烘焙导航网" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "清除导航网格(mesh)。" +msgstr "清除导航网格。" #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -11427,11 +11467,11 @@ msgstr "创建多边形网格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "转换为导航网格(mesh)..." +msgstr "转换为导航网格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "导航网格(Mesh)生成设置:" +msgstr "导航网格生成设置:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -11446,19 +11486,20 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"一个节点在无工作内存的情况下被yielded,请阅读文档来查看如何适当的yield!" +"一个节点在无工作内存的情况下调用了 yield,请阅读文档来查看如何正确使用 " +"yield!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." -msgstr "节点已yielded,但并没有在第一个工作内存中返回一个函数状态。" +msgstr "节点调用了 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 "节点工作内存的第一个节点的返回值必须已赋值!请修正你的节点。" +msgstr "节点工作内存的第一个节点的返回值必须被赋值!请修正节点。" #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -11466,7 +11507,7 @@ msgstr "节点返回了一个无效的连续输出: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "在非堆栈中的节点中找到连续bit,报告bug!" +msgstr "在非堆栈中的节点中找到连续比特,请回报 Bug!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -11582,11 +11623,11 @@ msgstr "复制 VisualScript 节点" #: 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键放置一个通用签名。" +msgstr "按住 %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键放置一个通用签名。" +msgstr "按住 Ctrl 键放置一个 Getter 节点。按住 Shift 键放置一个通用签名。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." @@ -11594,19 +11635,19 @@ 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" @@ -11617,16 +11658,16 @@ 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" @@ -11658,7 +11699,7 @@ 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" @@ -11802,33 +11843,33 @@ 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: " -msgstr ":无效参数类型: " +msgstr ": 无效参数类型: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ":无效参数: " +msgstr ": 无效参数: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "脚本中未找到VariableGet: " +msgstr "脚本中未找到 VariableGet: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "脚本中未找到VariableSet: " +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)。" +msgstr "_step() 的返回值无效,必须是整形 (Seq Out) 或字符串 (Error)。" #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" @@ -11844,7 +11885,7 @@ msgstr "设置 %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." @@ -11852,7 +11893,7 @@ msgstr "包段的长度必须为非零。" #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "Android应用程序包名称中不允许使用字符“%s”。" +msgstr "Android 应用程序包名称中不允许使用字符 “%s”。" #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." @@ -11860,11 +11901,11 @@ 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" @@ -11872,11 +11913,11 @@ 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." @@ -11888,21 +11929,25 @@ msgstr "用于发布的密钥存储在导出预设中未被正确设置。" #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." -msgstr "自定义构建需要在“编辑器设置”中使用有效的Android SDK路径。" +msgstr "自定义构建需要在 “编辑器设置” 中使用有效的 Android SDK 路径。" #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "用于“编辑器设置”中自定义构建的Android SDK路径是无效的。" +msgstr "用于 “编辑器设置” 中自定义构建的 Android SDK 路径是无效的。" + +#: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "缺失“platform-tools”目录!" #: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." -msgstr "未在项目中安装Android构建模板。从项目菜单安装它。" +msgstr "未在项目中安装 Android 构建模板。从项目菜单安装它。" #: 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:" @@ -11913,44 +11958,45 @@ msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -"“android/modules”项目设置(变更于Godot 3.2.2)中包含了无效模" -"组“GodotPaymentV3”.\n" +"“android/modules” 项目设置(变更于Godot 3.2.2)中包含了无效模组 " +"“GodotPaymentV3”。\n" #: platform/android/export/export.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." -msgstr "必须启用“使用自定义构建”才能使用插件。" +msgstr "必须启用 “使用自定义构建” 才能使用插件。" #: platform/android/export/export.cpp msgid "" "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" "\"." -msgstr "“自由度”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "" +"“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "“手部追踪”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "“Hand Tracking” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "" "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "“焦点感知”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "“Export AAB” 只有在当启用 “Use Custom Build” 时才有效。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "无效文件名!Android App Bundle 必须有 *.aab 扩展。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion 与 Android App Bundle 不兼容。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "无效文件名!Android APK 必须有 *.apk 扩展。" #: platform/android/export/export.cpp msgid "" @@ -11973,25 +12019,25 @@ msgstr "" #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "构建android项目(gradle)" +msgstr "构建 Android 项目 (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项目构建失败,请检查输出中显示的错误。\n" -"你也可以访问docs.godotengine.org查看Android构建文档。" +"Android 项目构建失败,请检查输出中显示的错误。\n" +"也可以访问 docs.godotengine.org 查看 Android 构建文档。" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "移动输出" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." -msgstr "" +msgstr "无法复制与更名导出文件,请在 Gradle 项目文件夹内确认输出。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12003,7 +12049,7 @@ msgstr "标识符中不允许使用字符 '%s' 。" #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "未指定应用商店团队ID-无法配置项目。" +msgstr "未指定 App Store Team ID - 无法配置项目。" #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" @@ -12015,7 +12061,7 @@ msgstr "预设中未指定必需的图标。" #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "停止HTTP服务" +msgstr "停止 HTTP 服务" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -12023,7 +12069,7 @@ 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:" @@ -12039,11 +12085,11 @@ 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:" -msgstr "无法读取启动图片:" +msgstr "无法读取启动图片:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." @@ -12063,11 +12109,11 @@ msgstr "发布者显示名称无效。" #: platform/uwp/export/export.cpp msgid "Invalid product GUID." -msgstr "产品GUID无效。" +msgstr "产品 GUID 无效。" #: platform/uwp/export/export.cpp msgid "Invalid publisher GUID." -msgstr "发布者GUID无效。" +msgstr "发布者 GUID 无效。" #: platform/uwp/export/export.cpp msgid "Invalid background color." @@ -12075,47 +12121,47 @@ msgstr "无效的背景颜色。" #: platform/uwp/export/export.cpp msgid "Invalid Store Logo image dimensions (should be 50x50)." -msgstr "Logo图片尺寸无效(图像尺寸必须是50x50)。" +msgstr "商店 Logo 图片尺寸无效(图像尺寸必须是 50x50)。" #: platform/uwp/export/export.cpp msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "正方形的 44x44 Logo图片尺寸无效(应为44x44)。" +msgstr "正方形的 44x44 Logo 图片尺寸无效(应为 44x44)。" #: platform/uwp/export/export.cpp msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "正方形的 71x71 Logo标志图片尺寸无效(应为71x71)。" +msgstr "正方形的 71x71 Logo 标志图片尺寸无效(应为 71x71)。" #: platform/uwp/export/export.cpp msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "正方的 150x150 Logo图片尺寸无效(应为150x150)。" +msgstr "正方形的 150x150 Logo 图片尺寸无效(应为 150x150)。" #: platform/uwp/export/export.cpp msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "正方形的 310x310 Logo图片尺寸无效(应为310x310)。" +msgstr "正方形的 310x310 Logo 图片尺寸无效(应为 310x310)。" #: platform/uwp/export/export.cpp msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "宽幅310x150 Logo图片尺寸无效(应为310x150)。" +msgstr "宽幅 310x150 Logo 图片尺寸无效(应为 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 "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"必须创建SpriteFrames资源,或在“ Frames”属性中设置SpriteFrames资源,以便" -"AnimatedSprite显示帧。" +"必须创建 SpriteFrames 资源,或在 “Frames” 属性中设置 SpriteFrames 资源,以便 " +"AnimatedSprite 显示帧。" #: 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" -"节点能正常工作,其余的将被忽略。" +"每个场景中只允许有一个 CanvasModulate 类型的节点,场景中的第一个 " +"CanvasModulate 节点能正常工作,其余的将被忽略。" #: scene/2d/collision_object_2d.cpp msgid "" @@ -12133,12 +12179,12 @@ 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 "" @@ -12146,14 +12192,14 @@ 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 "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" -msgstr "形状资源必须是通过CollisionShape2D节点的shape属性创建的!" +msgstr "CollisionShape2D 必须有形状才能工作。请先为其创建形状资源!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12167,13 +12213,35 @@ msgstr "" msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "CPUParticles2D动画需要使用启用了“粒子动画”的CanvasItemMaterial。" +msgstr "" +"CPUParticles2D 动画需要使用启用了 “Particles Animation” 的 " +"CanvasItemMaterial。" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A 与 Node B 必须为 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A 必须为 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B 必须为 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Joint 未连结到 2 个 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A 与 Node B 必须为不同的 PhysicsBody2D" #: 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 "" @@ -12189,21 +12257,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的子节点才能正常工作。" +"ParallaxLayer 类型的节点必须作为 ParallaxBackground 的子节点才能正常工作。" #: scene/2d/particles_2d.cpp msgid "" @@ -12211,8 +12279,8 @@ 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 节点。为此,可以使用 “Convert to CPUParticles” 选项。" #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" @@ -12224,11 +12292,12 @@ msgstr "粒子材质没有指定,该行为无效。" msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "Particles2D 动画需要使用启用了“粒子动画”的CanvasItemMaterial。" +msgstr "" +"Particles2D 动画需要使用启用了 “Particles Animation” 的 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 "" @@ -12236,13 +12305,13 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"对RigidBody2D (在character或rigid模式想)的尺寸修改在运行时会被物理引擎的覆" -"盖。\n" +"对 RigidBody2D (在 Character 或 Rigid 模式下)的尺寸修改在运行时会被物理引擎" +"的覆盖。\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." @@ -12264,43 +12333,43 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"启用了“使用父级”的图块地图需要父级 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效果最佳。" +msgstr "当直接将已编辑的场景根作为父级使用时,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,否则此控制器将不会绑定到实际的控制器。" +msgstr "控制器 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%%" @@ -12341,12 +12410,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的派生类提供碰撞形状数据,请将其" -"放在Area、StaticBody、RigidBody或KinematicBody节点下。" +"CollisionPolygon 类型节点只能为 CollisionObject 的派生类提供碰撞形状数据,请" +"将其放在 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 "" @@ -12354,14 +12424,14 @@ 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 "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." -msgstr "必须提供形状以使CollisionShape起作用。请为其创建形状资源。" +msgstr "必须提供形状以使 CollisionShape 起作用。请为其创建形状资源。" #: scene/3d/collision_shape.cpp msgid "" @@ -12383,8 +12453,8 @@ msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." msgstr "" -"CPUParticles动画需要使用SpatialMaterial,其“公告牌模式”设置为“ Particle " -"Billboard”。" +"CPUParticles 动画需要使用 Billboard Mode 设置为 “Particle Billboard” 的 " +"SpatialMaterial。" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -12395,13 +12465,13 @@ msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GLES2视频驱动程序不支持GIProbe。\n" -"请改用BakedLightmap。" +"GLES2 视频驱动程序不支持 GIProbes。\n" +"请改用 BakedLightmap。" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "InterpolatedCamera已废弃,将在Godot 4.0中删除。" +msgstr "InterpolatedCamera 已废弃,将在 Godot 4.0 中删除。" #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12409,14 +12479,15 @@ msgstr "角度宽于 90 度的 SpotLight 无法投射出阴影。" #: 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 "" @@ -12424,31 +12495,33 @@ 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 节点。为此,您可以使用 “Convert to CPUParticles” 选项。" #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "粒子不可见,因为没有网格(meshe)指定到绘制通道(draw passes)。" +msgstr "粒子不可见,因为没有网格指定到绘制通道 (Draw Pass)。" #: scene/3d/particles.cpp msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" -"粒子动画需要使用SpatialMaterial,其“公告牌模式”设置为“ Particle Billboard”。" +"粒子动画需要使用 Billboard Mode 设置为 “Particle Billboard” 的 " +"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 "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" -"PathFollow 的 ROTATION_ORIENTED 要求在其父路径的 Curve 资源中启用“向上矢量”。" +"PathFollow 的 ROTATION_ORIENTED 要求在其父路径的 Curve 资源中启用 “Up " +"Vector”。" #: scene/3d/physics_body.cpp msgid "" @@ -12456,15 +12529,36 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"对RigidBody(在character或rigid模式下)的尺寸修改,在运行时会被物理引擎的覆" -"盖。\n" +"对 RigidBody(在 Character 或 Rigid 模式下)的尺寸修改,在运行时会被物理引擎" +"的覆盖。\n" "建议您修改子节点的碰撞形状。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A 与 Node B 必须为 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A 必须为 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B 必须为 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Joint 未连结到任何 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A 与 Node B 必须为不同的 PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." -msgstr "“远程路径”属性必须指向有效的Spatial或Spatial派生的节点才能工作。" +msgstr "" +"“Remote Path” 属性必须指向有效的 Spatial 或 Spatial 派生的节点才能工作。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -12484,7 +12578,7 @@ msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"必须在“Frames”属性中创建或设置 SpriteFrames 资源,AnimatedSprite3D 才会显示" +"必须在 “Frames” 属性中创建或设置 SpriteFrames 资源,AnimatedSprite3D 才会显示" "帧。" #: scene/3d/vehicle_body.cpp @@ -12492,52 +12586,53 @@ msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" -"VehicleWheel 为 VehicleBody 提供一个车轮系统(Wheel System)。请将它作为" -"VehicleBody的子节点。" +"VehicleWheel 为 VehicleBody 提供一个车轮系统 (Wheel System)。请将它作为 " +"VehicleBody 的子节点。" #: scene/3d/world_environment.cpp msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" -"WorldEnvironment 要求其“Environment”属性是一个 Environment,以产生可见效果。" +"WorldEnvironment 要求其 “Environment” 属性是一个 Environment,以产生可见效" +"果。" #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." -msgstr "每个场景中只允许有一个WorldEnvironment类型的节点。" +msgstr "每个场景中只允许有一个 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场景)或将此环境的背景模式设置" -"为画布(用于2D场景)。" +"这个 WorldEnvironment 被忽略。添加摄像头(用于 3D 场景)或将此环境的背景模式" +"设置为画布(用于 2D 场景)。" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "在 BlendTree 节点 '%s' 上没有发现动画: '%s'" +msgstr "在 BlendTree 节点 “%s” 上没有发现动画: “%s”" #: scene/animation/animation_blend_tree.cpp msgid "Animation not found: '%s'" -msgstr "没有动画: '%s'" +msgstr "没有动画: “%s”" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "在节点 '%s' 上的动画无效: '%s' 。" +msgstr "在节点 “%s” 上的动画无效: “%s” 。" #: scene/animation/animation_tree.cpp msgid "Invalid animation: '%s'." -msgstr "无效动画: '%s' 。" +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." @@ -12549,11 +12644,11 @@ msgstr "动画播放器的路径没有加载一个 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 "该节点已废弃。请使用Animation Tree代替。" +msgstr "该节点已废弃。请使用 AnimationTree 代替。" #: scene/gui/color_picker.cpp msgid "" @@ -12591,37 +12686,42 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"除非脚本配置其子代放置行为,否则容器本身没有任何作用。\n" -"如果您不想添加脚本,请改用普通的Control节点。" +"除非脚本配置其子节点放置行为,否则容器本身没有任何作用。\n" +"如果您不想添加脚本,请改用普通的 Control 节点。" #: 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 "" -"由于该控件的 Mouse Filter 设置为 \"Ignore\" 因此它的 Hint Tooltip 将不会展" -"示。将 Mouse Filter 设置为 \"Stop\" 或 \"Pass\" 可修正此问题。" +"由于该控件的 Mouse Filter 设置为 “Ignore” 因此将不会显示高亮工具提示。将 " +"Mouse Filter 设置为 “Stop” 或 “Pass” 可修正此问题。" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "提示!" +msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." msgstr "请确认..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "启用吸附" + #: scene/gui/popup.cpp 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*() 函数。虽然可以将弹窗设为可见" +"来进行编辑,但在运行时会隐藏。" #: 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 "" @@ -12629,19 +12729,21 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer旨在与单个子控件一起使用。\n" -"子节点应该是单个容器(VBox、HBox等)或者使用单个控件并手动设置其自定义最小尺" +"ScrollContainer 适用于与单个子控件一起使用。\n" +"子节点应该是单个容器(VBox, HBox 等)或者使用单个控件并手动设置其自定义最小尺" "寸。" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "(其它)" +msgstr "(其它)" #: scene/main/scene_tree.cpp msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." -msgstr "无法加载项目设置中的默认环境,详见(渲染->视图->默认环境)。" +msgstr "" +"无法加载项目设置中的默认环境 (Rendering -> Environment -> Default " +"Environment)。" #: scene/main/viewport.cpp msgid "" @@ -12650,13 +12752,13 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"这个 Viewport 未被设置为渲染目标(render target)。如果你刻意打算让其直接在屏" -"幕上显示其内容,使其成为子控件的所以它可以有一个尺寸大小值。否则请将其设置为 " -"RenderTarget,并将其内部纹理分配给其它节点显示。" +"这个 Viewport 未被设置为渲染目标。如果你想让其直接在屏幕上显示内容,请使其成" +"为 Control 的子节点,这样一来该 Viewport 才会有大小。否则请为其设置 " +"RenderTarget 并分配其内部纹理来显示。" #: scene/main/viewport.cpp msgid "Viewport size must be greater than 0 to render anything." -msgstr "Viewport大小大于0时才能进行渲染。" +msgstr "Viewport 大小大于 0 时才能进行渲染。" #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." @@ -12676,7 +12778,7 @@ msgstr "对函数的赋值。" #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "对uniform的赋值。" +msgstr "对统一的赋值。" #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." @@ -12686,6 +12788,39 @@ msgstr "变量只能在顶点函数中指定。" msgid "Constants cannot be modified." msgstr "不允许修改常量。" +#~ msgid "Search complete" +#~ msgstr "搜索完毕" + +#~ msgid "No commit message was provided" +#~ msgstr "没有提供提交消息" + +#~ msgid "Add a commit message" +#~ msgstr "添加提交消息" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "当前位置已存在同名文件或文件夹。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "缺失“build-tools”目录!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "未找到 zipalign 工具。" + +#~ msgid "Aligning APK..." +#~ msgstr "对齐 APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "无法完成 APK 对齐。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "无法删除未对齐 APK。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "保存布局出错!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "覆盖编辑器默认布局。" + #~ msgid "Move pivot" #~ msgstr "移动轴心点" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index cfc8abfafa..b0dcffa7f1 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -1,6 +1,6 @@ # Chinese (Hong Kong) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Wesley (zx-wt) <ZX_WT@ymail.com>, 2016-2017, 2020. # cnieFIT <dtotncq@gmail.com>, 2019. @@ -1071,14 +1071,17 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "從專案中刪除所選的檔案?(此動作無法復原)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1125,7 +1128,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2389,12 +2392,16 @@ msgid "Error saving TileSet!" msgstr "儲存TileSet時出現錯誤!" #: editor/editor_node.cpp -#, fuzzy -msgid "Error trying to save layout!" -msgstr "儲存佈局時出現錯誤!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2403,7 +2410,7 @@ msgstr "未找到佈局名稱!" #: editor/editor_node.cpp #, fuzzy -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "重設預設佈局。" #: editor/editor_node.cpp @@ -3794,6 +3801,16 @@ msgid "Name contains invalid characters." msgstr "名字含有無效字符。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重新命名檔案:" @@ -3846,15 +3863,6 @@ msgstr "編輯Dependencies..." msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "重新命名..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "再製..." - #: editor/filesystem_dock.cpp #, fuzzy msgid "Move To..." @@ -3883,11 +3891,18 @@ msgid "Collapse All" msgstr "全部折疊" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重新命名" +msgid "Duplicate..." +msgstr "再製..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "移動Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "重新命名..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3925,8 +3940,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "此位置已存在同名的檔案或資料夾。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重新命名" #: editor/filesystem_dock.cpp #, fuzzy @@ -3999,8 +4017,19 @@ msgid "Searching..." msgstr "搜尋中..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "搜尋完成" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d 相同。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d 相同。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d 相同。" #: editor/groups_editor.cpp #, fuzzy @@ -8608,10 +8637,25 @@ msgstr "新增" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "新增場景" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "縮放selection" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "插件" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "刪除選中檔案" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8825,10 +8869,6 @@ msgid "Error" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "" @@ -8893,10 +8933,6 @@ msgid "Stage All" 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 "同步更新腳本" @@ -10062,6 +10098,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12365,6 +12405,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12632,6 +12676,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12892,6 +12956,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13030,6 +13114,10 @@ msgstr "警告!" msgid "Please Confirm..." msgstr "請確認..." +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13100,6 +13188,16 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Search complete" +#~ msgstr "搜尋完成" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "此位置已存在同名的檔案或資料夾。" + +#, fuzzy +#~ msgid "Error trying to save layout!" +#~ msgstr "儲存佈局時出現錯誤!" + #, fuzzy #~ msgid "Move pivot" #~ msgstr "上移" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index e579ce7d7c..59b7ce53fa 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -1,6 +1,6 @@ # Chinese (Taiwan) translation of the Godot Engine editor -# Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. -# Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Allen H <w84miracle@gmail.com>, 2017. # Billy SU <g4691821@gmail.com>, 2018. @@ -29,7 +29,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-11 17:17+0000\n" +"PO-Revision-Date: 2020-12-19 04:29+0000\n" "Last-Translator: BinotaLIU <me@binota.org>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" @@ -38,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 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -61,15 +61,15 @@ msgstr "運算式中的輸入 %i 無效 (未傳遞)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "該實體為 null,無法使用 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" @@ -307,7 +307,7 @@ msgstr "觸發程序" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "截圖" +msgstr "截取" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -324,11 +324,11 @@ msgstr "立方體" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "Clamp 式內插循環" +msgstr "鉗制內插循環 (Clamp)" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "Wrap 式內插循環" +msgstr "無縫內插循環 (Wrap)" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -389,15 +389,15 @@ msgstr "AnimationPlayer 不能播放自己,只可播放其他 Player。" #: 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" @@ -437,7 +437,7 @@ 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" @@ -477,7 +477,7 @@ msgstr "移動動畫關鍵畫格" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" -msgstr "空白剪貼板" +msgstr "剪貼板為空" #: editor/animation_track_editor.cpp msgid "Paste Tracks" @@ -490,7 +490,7 @@ 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 "" @@ -509,7 +509,7 @@ msgstr "" "若要開啟「加入客制軌」的功能,請在場景在匯入設定中將 [Animation] -> " "[Storage] 設定為\n" "[Files],並啟用 [Animation] -> [Keep Custom Tracks],然後重新匯入。\n" -"另可使用會將動畫匯入獨立檔案的匯入預設設定。" +"或者也可使用會將動畫匯入獨立檔案的匯入預設設定。" #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" @@ -612,11 +612,11 @@ 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:" @@ -770,13 +770,13 @@ msgstr "必須指定目標節點方法。" #: editor/connections_dialog.cpp msgid "Method name must be a valid identifier." -msgstr "方法名稱必須為有效識別符。" +msgstr "方法名稱必須為有效識別項。" #: editor/connections_dialog.cpp msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." -msgstr "找不到目標方法!請指定一個有效的方法、或將腳本附加至目標節點上。" +msgstr "找不到目標方法!請指定一個有效的方法,或將腳本附加至目標節點上。" #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -1037,17 +1037,23 @@ msgid "Owners Of:" msgstr "為下列之擁有者:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "確定要將所選檔案自專案中移除嗎?(無法復原)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"確定要將所選檔案自專案中移除嗎?(無法復原)\n" +"移除的檔案可在稍後於系統資源回收桶內找到。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"有其他資源需要正在刪除的檔案以正常運作。\n" -"依然要移除嗎?(無法復原)" +"有其他資源需要正在刪除的檔案才能正常運作。\n" +"依然要移除嗎?(無法復原)\n" +"移除的檔案可在稍後於系統資源回收桶內找到。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1059,7 +1065,7 @@ msgstr "載入時發生錯誤:" #: editor/dependency_editor.cpp msgid "Load failed due to missing dependencies:" -msgstr "由於缺乏下列相依性內容而無法載入:" +msgstr "缺乏下列相依性內容,無法載入:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1091,7 +1097,7 @@ msgstr "孤立資源瀏覽器" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1123,7 +1129,7 @@ msgstr "Godot Engine 貢獻者" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "專案創始人" +msgstr "專案發起人" #: editor/editor_about.cpp msgid "Lead Developer" @@ -1138,7 +1144,7 @@ msgstr "專案管理員 " #: editor/editor_about.cpp msgid "Developers" -msgstr "開發者" +msgstr "開發人員" #: editor/editor_about.cpp msgid "Authors" @@ -1216,7 +1222,7 @@ msgstr "無法開啟套件檔案,非 ZIP 格式。" #: editor/editor_asset_installer.cpp msgid "%s (Already Exists)" -msgstr "%s(已經存在)" +msgstr "%s(已存在)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1249,7 +1255,7 @@ msgstr "安裝" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "套件安裝" +msgstr "套件安裝程式" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1269,7 +1275,7 @@ msgstr "更改音訊匯流排音量" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "切換音訊匯流排 Solo" +msgstr "開啟/關閉音訊匯流排獨奏" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" @@ -1301,7 +1307,7 @@ msgstr "拖放以重新排列。" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "Solo" +msgstr "獨奏" #: editor/editor_audio_buses.cpp msgid "Mute" @@ -1444,7 +1450,7 @@ msgstr "不可與現存的全域常數名稱衝突。" #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "關鍵字無法作為 Autoload 名稱。" +msgstr "不可使用關鍵字作為 Autoload 名稱。" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1456,7 +1462,7 @@ msgstr "重新命名 Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "觸發全域 AutoLoad" +msgstr "開啟/關閉全域 AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" @@ -1596,33 +1602,30 @@ msgstr "" "請在專案設定中啟用「Import Etc」或是禁用「Driver Fallback Enabled」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"目標平台上的 GLES2 必須使用「ETC」紋理壓縮。請在專案設定中啟用「Import " -"Etc」。" +"目標平台上的 GLES2 必須使用「PVRTC」紋理壓縮。請在專案設定中啟用「Import " +"Pvrtc」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"目標平台上的 GLES3 必須使用「ETC2」紋理壓縮。請在專案設定中啟用「Import Etc " -"2」。" +"目標平台上的 GLES3 必須使用「ETC2」或「PVRTC」紋理壓縮。請在專案設定中啟用" +"「Import Etc 2」或「Import Pvrtc」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目標平台上的 GLES2 回退驅動器功能必須使用「ETC」紋理壓縮。\n" -"請在專案設定中啟用「Import Etc」或是禁用「Driver Fallback Enabled」。" +"目標平台上的 GLES2 回退驅動器功能必須使用「PVRTC」紋理壓縮。\n" +"請在專案設定中啟用「Import Pvrtc」或是禁用「Driver Fallback Enabled」。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1662,15 +1665,15 @@ msgstr "正在編輯場景樹" #: editor/editor_feature_profile.cpp msgid "Node Dock" -msgstr "節點 Dock" +msgstr "節點停駐列" #: editor/editor_feature_profile.cpp msgid "FileSystem Dock" -msgstr "檔案系統 Dock" +msgstr "檔案系統停駐列" #: editor/editor_feature_profile.cpp msgid "Import Dock" -msgstr "匯入 Dock" +msgstr "匯入停駐列" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1682,7 +1685,7 @@ 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)" @@ -1872,7 +1875,7 @@ msgstr "上一層" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "顯示/隱藏隱藏檔案" +msgstr "顯示/取消顯示隱藏檔案" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" @@ -1904,7 +1907,7 @@ 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." @@ -1952,7 +1955,7 @@ msgstr "掃描原始檔" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "由於多個匯入器以不同的型別指向檔案 %s,已中止匯入" +msgstr "由於有多個匯入器對檔案 %s 提供了不同的型別,已中止匯入" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -2197,7 +2200,7 @@ msgstr "好" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "保存資源錯誤!" +msgstr "保存資源時發生錯誤!" #: editor/editor_node.cpp msgid "" @@ -2255,7 +2258,7 @@ msgstr "正在建立縮圖" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "無樹狀根目錄無法進行此操作。" +msgstr "無樹狀根目錄時無法進行此操作。" #: editor/editor_node.cpp msgid "" @@ -2273,7 +2276,7 @@ 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!" @@ -2289,22 +2292,31 @@ msgstr "無法加載要合併的圖塊集!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "保存保存圖塊集時發生錯誤!" +msgstr "保存圖塊集時發生錯誤!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "嘗試保存配置時出錯!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"保存編輯器畫面配置時發生錯誤。\n" +"請確認編輯器的使用者資料路徑是否可寫入。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "已覆蓋預設的編輯器配置。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"預設編輯器畫面配置已被複寫。\n" +"若要恢復預設的畫面配置,請使用 [刪除配置] 選項,並刪除預設畫面配置。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "找不到配置名稱!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "已將預設配置還原至基本設定。" #: editor/editor_node.cpp @@ -2314,7 +2326,7 @@ msgid "" "understand this workflow." msgstr "" "該資源屬於已匯入的場景,因此不可編輯。 \n" -"請閱讀有關匯入場景的說明文件以更瞭解該流程。" +"請閱讀有關匯入場景的說明文件以更瞭解該工作流程。" #: editor/editor_node.cpp msgid "" @@ -2338,7 +2350,7 @@ msgid "" "understand this workflow." msgstr "" "該場景自外部匯入,因此做出的改動將不會保存。\n" -"實例化或繼承後將可對其做出修改。\n" +"實例化或繼承該場景即可對其做出修改。\n" "請閱讀與匯入相關的說明文件以更加瞭解該工作流程。" #: editor/editor_node.cpp @@ -2348,7 +2360,7 @@ msgid "" "this workflow." msgstr "" "該資源自外部匯入,因此做出的改動將不會保存。\n" -"請閱讀有關偵錯的說明文件以更瞭解該流程。" +"請閱讀有關偵錯的說明文件以更瞭解該工作流程。" #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -2392,7 +2404,7 @@ 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..." @@ -2412,7 +2424,7 @@ 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" @@ -2482,7 +2494,7 @@ msgstr "開啟專案管理員前要先保存以下場景嗎?" msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." -msgstr "該選項已停止維護。目前已將需強制重新整理之狀況視為 Bug,請回報該問題。" +msgstr "該選項已停止維護。目前已將需強制重新整理的情況視為 Bug,請回報該問題。" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2634,7 +2646,7 @@ msgstr "其他 %d 個檔案" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "Dock 位置" +msgstr "停駐列位置" #: editor/editor_node.cpp msgid "Distraction Free Mode" @@ -2674,7 +2686,7 @@ msgstr "篩選檔案..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "操作場景文件。" +msgstr "操作場景檔案。" #: editor/editor_node.cpp msgid "New Scene" @@ -2792,7 +2804,7 @@ msgstr "" "當開啓該選項後,一鍵部署所產生的執行檔會嘗試連線至本電腦之 IP 位置以對執行中" "的專案進行除錯。\n" "該選項旨在進行遠端除錯(通常配合行動裝置使用)。\n" -"若要使用本機 GDScript 除錯工具,則不許啟用該選項。" +"若要使用本機 GDScript 除錯工具,則不需啟用該選項。" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" @@ -2809,8 +2821,8 @@ msgid "" msgstr "" "啟用該選項後,一鍵部署至 Android 時的可執行檔將不會包含專案資料。\n" "專案之檔案系統將由本編輯器透過網路提供。\n" -"部署至 Android 平台需使用 USB 線以獲得更快速的效能。該選項適用於有大型素材的" -"專案,可加速測試。" +"部署至 Android 平台需使用 USB 線以獲得更快速的效能。該選項用於有大型素材的專" +"案時可加速測試。" #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2890,7 +2902,7 @@ msgstr "開啟/關閉系統主控台" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "開啟 編輯器資料/編輯器設定 資料夾" +msgstr "開啟編輯器資料/編輯器設定資料夾" #: editor/editor_node.cpp msgid "Open Editor Data Folder" @@ -3192,7 +3204,7 @@ msgstr "全部" #: editor/editor_profiler.cpp msgid "Self" -msgstr "自身" +msgstr "僅自己" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3220,7 +3232,7 @@ msgstr "圖層" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "位 %d,值 %d" +msgstr "位元 %d,值 %d" #: editor/editor_properties.cpp msgid "[Empty]" @@ -3238,14 +3250,14 @@ 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 @@ -3255,7 +3267,7 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" -"無法為該資源建立檢視區紋理 (ViewportTexture),因其未設定對應的本地場景。\n" +"無法為該資源建立 ViewportTexture,因其未設定為對應本機之場景。\n" "請開啟其(與其至節點的所有資源)「Local to Scene」屬性。" #: editor/editor_properties.cpp editor/property_editor.cpp @@ -3332,7 +3344,7 @@ msgid "" "as runnable." msgstr "" "為找到可執行於該平台的匯出預設設定。\n" -"請在 [匯出] 選單中新增一個可執行的預設設定,會將現有的預設設定設為可執行。" +"請在 [匯出] 選單中新增一個可執行的預設設定,或將現有的預設設定設為可執行。" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3360,7 +3372,7 @@ msgstr "是否未新增「_run」方法?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." -msgstr "按住 Ctrl 以取整數。按住 Shift 以使用更精確的改動。" +msgstr "按住 Ctrl 以取整數。按住 Shift 以進行更精確的改動。" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3533,7 +3545,7 @@ msgstr "已連線" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting..." -msgstr "正在請求…" +msgstr "正在要求…" #: editor/export_template_manager.cpp msgid "Downloading" @@ -3597,7 +3609,7 @@ msgstr "狀態:檔案匯入失敗。請修正檔案並手動重新匯入。" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "無法移動/重新命名根資源。" +msgstr "無法移動或重新命名根資源。" #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." @@ -3632,6 +3644,21 @@ msgid "Name contains invalid characters." msgstr "名稱包含無效字元。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"以下檔案或資料夾與目標路徑「%s」中的項目衝突:\n" +"\n" +"%s\n" +"\n" +"要覆蓋這些檔案或資料夾嗎?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重新命名檔案:" @@ -3679,14 +3706,6 @@ msgstr "編輯相依性..." msgid "View Owners..." msgstr "檢視擁有者..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "重新命名..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "重複..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移動至..." @@ -3714,11 +3733,16 @@ msgid "Collapse All" msgstr "收合全部" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重新命名" +msgid "Duplicate..." +msgstr "重複..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "移動至資源回收桶" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "重新命名..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3753,8 +3777,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "該位置已有相同名稱的檔案或資料夾。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重新命名" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3820,8 +3847,19 @@ msgid "Searching..." msgstr "正在搜尋..." #: editor/find_in_files.cpp -msgid "Search complete" -msgstr "搜尋完成" +#, fuzzy +msgid "%d match in %d file." +msgstr "%d 件相符合的結果。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d file." +msgstr "%d 件相符合的結果。" + +#: editor/find_in_files.cpp +#, fuzzy +msgid "%d matches in %d files." +msgstr "%d 件相符合的結果。" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3866,7 +3904,7 @@ msgstr "群組中的節點" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "空群組將被自動移除。" +msgstr "空群組將自動移除。" #: editor/groups_editor.cpp msgid "Group Editor" @@ -3943,11 +3981,11 @@ msgstr "無法載入 Post-Import 腳本:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "匯入後腳本無效或損毀(請檢查主控台):" +msgstr "Post-Import 腳本無效或損毀(請檢查主控台):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "執行匯入後腳本時發生錯誤:" +msgstr "執行 Post-Import 腳本時發生錯誤:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" @@ -4171,11 +4209,11 @@ msgstr "移動節點頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "修改混合空間 1D 限制" +msgstr "修改 BlendSpace1D 限制" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "修改混合空間 1D 標籤" +msgstr "修改 BlendSpace1D 標籤" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4195,11 +4233,11 @@ msgstr "新增動畫頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "移除混合空間 1D 頂點" +msgstr "移除 BlendSpace1D 頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "移動混合空間 1D 節點頂點" +msgstr "移動 BlendSpace1D 節點頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4209,7 +4247,7 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" -"動畫樹未啟用。\n" +"AnimationTree 未啟用。\n" "請先啟用以播放,若啟用失敗請檢查節點警告訊息。" #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -4220,7 +4258,7 @@ 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 @@ -4313,7 +4351,7 @@ msgstr "輸出節點無法被新增至混合樹。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "新增節點至混合樹" +msgstr "新增節點至 BlendTree" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Node Moved" @@ -4442,7 +4480,7 @@ msgstr "重新命名動畫" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "混合下一個改動" +msgstr "混合下一個更改" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" @@ -4570,7 +4608,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)" @@ -4688,11 +4726,11 @@ 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: " @@ -4869,11 +4907,11 @@ msgstr "無法解析主機名稱:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "請求失敗,回傳代碼:" +msgstr "要求失敗,回傳代碼:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed." -msgstr "請求失敗。" +msgstr "要求失敗。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Cannot save response to:" @@ -4885,7 +4923,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." @@ -4893,7 +4931,7 @@ msgstr "重新導向循環。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, timeout" -msgstr "請求失敗,逾時" +msgstr "要求失敗,逾時" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Timeout." @@ -4933,7 +4971,7 @@ msgstr "正在解析..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "建立請求時發生錯誤" +msgstr "建立要求時發生錯誤" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -5001,7 +5039,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..." @@ -5051,15 +5089,15 @@ msgid "" "path from the BakedLightmap properties." msgstr "" "無法判斷光照圖的保存路徑。\n" -"請將場景保存(圖片將保存於相同資料夾),或是在 BackedLightmap 屬性內選擇一個" -"保存路徑。" +"請保存場景(圖片將保存於相同資料夾),或是在 BackedLightmap 屬性內選擇一個保" +"存路徑。" #: editor/plugins/baked_lightmap_editor_plugin.cpp 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." @@ -5067,7 +5105,7 @@ msgstr "建立光照圖失敗,請確保該路徑可寫入。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "建立光照圖" +msgstr "烘焙光照圖" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5136,50 +5174,43 @@ msgstr "建立水平與垂直參考線" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "將 CanvasItem「%s」的 Pivot Offset 設為 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "旋轉 CanvasItem" +msgstr "旋轉 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "旋轉 CanvasItem" +msgstr "旋轉 CanvasItem「%d」為 %d 度" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "移動 CanvasItem" +msgstr "移動 CanvasItem「%s」的錨點" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "縮放 Node2D「%s」為 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "縮放 Control「%s」為 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "縮放 CanvasItem" +msgstr "縮放 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "縮放 CanvasItem" +msgstr "縮放 CanvasItem「%s」為 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "移動 CanvasItem" +msgstr "移動 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "移動 CanvasItem" +msgstr "移動 CanvasItem「%s」至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5809,7 +5840,7 @@ msgstr "右鍵點擊以新增控制點" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "製作 GI 探查" +msgstr "烘焙 GI 探查" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" @@ -6151,7 +6182,7 @@ msgstr "產生矩形可見性" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "僅可將為 ParticlesMaterial 處理材料設定點" +msgstr "僅可設為指向 ProticlesMaterial 處理材料" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6442,18 +6473,16 @@ msgid "Move Points" msgstr "移動點" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "拖移:旋轉" +msgstr "Command:旋轉" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift:移動全部" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl:縮放" +msgstr "Shift+Command:縮放" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6498,14 +6527,12 @@ msgid "Radius:" msgstr "半徑:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "建立多邊形與 UV" +msgstr "將多邊形複製至 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "轉換為 Polygon2D" +msgstr "將 UV 複製至多邊形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6911,7 +6938,7 @@ 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 @@ -7828,7 +7855,7 @@ msgstr "分隔線:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" -msgstr "TextureRegion" +msgstr "紋理貼圖區域" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" @@ -8045,13 +8072,12 @@ msgid "Paint Tile" msgstr "繪製圖塊" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+左鍵:直線繪製\n" -"Shift+Ctrl+左鍵:矩形繪圖" +"Shift+Command+左鍵:矩形繪圖" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8206,10 +8232,22 @@ msgid "Create a new rectangle." msgstr "建立新矩形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新增矩形" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "建立新多邊形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新增多邊形" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "刪除所選形狀" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "保持多邊形在區域矩形 (Rect) 內。" @@ -8412,10 +8450,6 @@ msgid "Error" msgstr "錯誤" #: editor/plugins/version_control_editor_plugin.cpp -msgid "No commit message was provided" -msgstr "未提供提交訊息" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "預存區無檔案" @@ -8472,10 +8506,6 @@ msgid "Stage All" msgstr "預存全部" #: editor/plugins/version_control_editor_plugin.cpp -msgid "Add a commit message" -msgstr "新增一個提交訊息" - -#: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" msgstr "提交改動" @@ -8573,7 +8603,6 @@ msgid "Add Node to Visual Shader" msgstr "將節點新增至視覺著色器" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "已移動節點" @@ -8595,9 +8624,8 @@ msgid "Visual Shader Input Type Changed" msgstr "已修改視覺著色器輸入類型" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "設定均勻名稱" +msgstr "已更改 UniformRef 名稱" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9288,7 +9316,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "現有均勻的參照。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9639,6 +9667,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "所使用的 GPU 驅動程式不支援。" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9732,7 +9764,7 @@ msgstr "" msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." -msgstr "該專案設定是由新版本的引擎所建立,其設定無法相容於這個版本。" +msgstr "該專案設定是由新版本的 Godot 所建立,其設定無法相容於這個版本。" #: editor/project_manager.cpp msgid "" @@ -9741,7 +9773,7 @@ msgid "" "the \"Application\" category." msgstr "" "無法執行專案:未定義主場景。\n" -"請編輯專案並在「應用程式」分類中的專案設定內設定主場景。" +"請編輯專案並在 [專案設定] 的「Application」分類中設定主場景。" #: editor/project_manager.cpp msgid "" @@ -10494,7 +10526,8 @@ msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"啟用「載入為佔位」將禁用「可編輯子節點」並導致其所有節點都被還原為其預設值。" +"啟用「Load As Placeholder」將禁用「Editable Children」並導致其所有節點都被還" +"原為其預設值。" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -11349,7 +11382,7 @@ msgstr "製作 NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "清除導航網格 (Navigation Mesh)。" +msgstr "清除導航網格。" #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -11385,15 +11418,15 @@ msgstr "正在建立輪廓..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "正在建立多邊形網格 (Polymesh)..." +msgstr "正在建立多邊形網格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "正在轉換為原生導航網格 (Native Navigation Mesh)..." +msgstr "正在轉換為原生導航網格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "導航網格 (Navigation Mesh) 產生器設定:" +msgstr "導航網格產生器設定:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -11768,11 +11801,11 @@ msgstr "無效的索引屬性名稱「%s」,於節點「%s」。" #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr ": 無效的引數型別: " +msgstr ": 無效的引數型別: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ": 無效的引數: " +msgstr ": 無效的引數: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " @@ -11857,6 +11890,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "編輯器設定中用於自定義設定之 Android SDK 路徑無效。" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "缺少「platform-tools」資料夾!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11906,19 +11943,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "「Export AAB」僅於「Use Custom Build」啟用時可用。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "無效的檔案名稱!Android App Bundle 必須要有 *.aab 副檔名。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion 與 Android App Bundle 不相容。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "無效的檔案名稱!Android APK 必須要有 *.apk 副檔名。" #: platform/android/export/export.cpp msgid "" @@ -11953,13 +11990,13 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "移動輸出" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." -msgstr "" +msgstr "無法複製並更名匯出的檔案,請於 Gradle 專案資料夾內確認輸出。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12101,7 +12138,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionPolygon2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請僅" -"於 Area2D、StaticBody2D、RigidBody2D、KinematicBody2D…等節點下作為子節點使" +"於 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為子節點使" "用。" #: scene/2d/collision_polygon_2d.cpp @@ -12115,7 +12152,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請僅於 " -"Area2D、StaticBody2D、RigidBody2D、KinematicBody2D…等節點下作為子節點使用以提" +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為子節點使用以提" "供形狀。" #: scene/2d/collision_shape_2d.cpp @@ -12140,11 +12177,31 @@ msgstr "" "CPUParticles2D 動畫需要使用有啟用「Particles Animation(粒子動畫)」的 " "CanvasItemMaterial。" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A 與 Node B 必須為 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A 必須為 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B 必須為 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "Joint 未連結至 2 個 PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "Node A 與 Node B 必須為不同的 PhysicsBody2D" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "有光照形狀的紋理必須提供「紋理」屬性。" +msgstr "有光照形狀的紋理必須提供「Texture」(紋理)屬性。" #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12236,9 +12293,8 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請將其" -"設為 Area2D、StaticBody2D、RigidBody2D、KinematicBody2D… 的子節點以賦予其形" -"狀。" +"打開「Use Parent」的 TileMap 僅可為母級 CollisionObject2D 提供形狀。請將其設" +"為 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D… 的子節點以賦予其形狀。" #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -12367,7 +12423,7 @@ msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GLES2 視訊驅動程式不支援 GIProbs。\n" +"GLES2 視訊驅動程式不支援 GIProbes。\n" "請改為使用 BakedLightmap。" #: scene/3d/interpolated_camera.cpp @@ -12435,6 +12491,26 @@ msgstr "" "複寫。\n" "請改為修改其子節點的碰撞形狀之大小。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A 與 Node B 必須為 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A 必須為 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B 必須為 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Joint 尚未連結至任何 PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A 與 Node B 必須為不同的 PhysicsBody" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12588,6 +12664,11 @@ msgstr "警告!" msgid "Please Confirm..." msgstr "請確認..." +#: scene/gui/graph_edit.cpp +#, fuzzy +msgid "Enable grid minimap." +msgstr "啟用吸附" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -12619,7 +12700,9 @@ msgstr "(其它)" msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." -msgstr "無法載入專案設定中指定的預設環境(算繪 -> 環境 -> 預設環境)。" +msgstr "" +"無法載入專案設定中指定的預設環境 (Rendering -> Environment -> Default " +"Environment)。" #: scene/main/viewport.cpp msgid "" @@ -12664,6 +12747,39 @@ msgstr "Varying 變數只可在頂點函式中指派。" msgid "Constants cannot be modified." msgstr "不可修改常數。" +#~ msgid "Search complete" +#~ msgstr "搜尋完成" + +#~ msgid "No commit message was provided" +#~ msgstr "未提供提交訊息" + +#~ msgid "Add a commit message" +#~ msgstr "新增一個提交訊息" + +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "該位置已有相同名稱的檔案或資料夾。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "缺少「build-tools」資料夾!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "找不到 zipalign 工具。" + +#~ msgid "Aligning APK..." +#~ msgstr "正在對齊 APK…" + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "無法完成 APK 對齊。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "無法刪除未對齊的 APK。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "嘗試保存配置時出錯!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "已覆蓋預設的編輯器配置。" + #~ msgid "Move pivot" #~ msgstr "移動軸心" |