diff options
Diffstat (limited to 'editor')
237 files changed, 28201 insertions, 11273 deletions
diff --git a/editor/SCsub b/editor/SCsub index 8f87e12cb9..4ca6b9e3fd 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -4,6 +4,7 @@ Import('env') env.editor_sources = [] import os +import os.path from compat import encode_utf8, byte_to_str, open_utf8, escape_string @@ -29,6 +30,9 @@ def make_certs_header(target, source, env): g.write("};\n") g.write("#endif") + g.close() + f.close() + def make_doc_header(target, source, env): @@ -41,8 +45,8 @@ def make_doc_header(target, source, env): src = s.srcnode().abspath if not src.endswith(".xml"): continue - f = open_utf8(src, "r") - content = f.read() + with open_utf8(src, "r") as f: + content = f.read() buf += content buf = encode_utf8(docbegin + buf + docend) @@ -62,6 +66,8 @@ def make_doc_header(target, source, env): g.write("#endif") + g.close() + def make_fonts_header(target, source, env): @@ -76,9 +82,8 @@ def make_fonts_header(target, source, env): # saving uncompressed, since freetype will reference from memory pointer xl_names = [] for i in range(len(source)): - f = open(source[i].srcnode().abspath, "rb") - buf = f.read() - import os.path + with open(source[i].srcnode().abspath, "rb")as f: + buf = f.read() name = os.path.splitext(os.path.basename(source[i].srcnode().abspath))[0] @@ -91,6 +96,8 @@ def make_fonts_header(target, source, env): g.write("#endif") + g.close() + def make_translations_header(target, source, env): @@ -110,8 +117,8 @@ def make_translations_header(target, source, env): xl_names = [] for i in range(len(sorted_paths)): - f = open(sorted_paths[i], "rb") - buf = f.read() + with open(sorted_paths[i], "rb") as f: + buf = f.read() decomp_size = len(buf) buf = zlib.compress(buf) name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] @@ -138,6 +145,9 @@ def make_translations_header(target, source, env): g.write("#endif") + g.close() + + def make_authors_header(target, source, env): sections = ["Project Founders", "Lead Developer", "Project Manager", "Developers"] @@ -180,6 +190,9 @@ def make_authors_header(target, source, env): g.write("#endif\n") + g.close() + f.close() + def make_donors_header(target, source, env): sections = ["Platinum sponsors", "Gold sponsors", "Mini sponsors", "Gold donors", "Silver donors", "Bronze donors"] @@ -222,6 +235,10 @@ def make_donors_header(target, source, env): g.write("#endif\n") + g.close() + f.close() + + def make_license_header(target, source, env): src_copyright = source[0].srcnode().abspath @@ -387,17 +404,23 @@ def make_license_header(target, source, env): g.write("#endif\n") + g.close() + fc.close() + f.close() + def _make_doc_data_class_path(to_path): - g = open_utf8(os.path.join(to_path,"doc_data_class_path.gen.h"), "w") - g.write("static const int _doc_data_class_path_count = " + str(len(env.doc_class_path)) + ";\n") - g.write("struct _DocDataClassPath { const char* name; const char* path; };\n") + g = open_utf8(os.path.join(to_path,"doc_data_class_path.gen.h"), "w") + g.write("static const int _doc_data_class_path_count = " + str(len(env.doc_class_path)) + ";\n") + g.write("struct _DocDataClassPath { const char* name; const char* path; };\n") + + g.write("static const _DocDataClassPath _doc_data_class_paths[" + str(len(env.doc_class_path) + 1) + "] = {\n"); + for c in sorted(env.doc_class_path): + g.write("\t{\"" + c + "\", \"" + env.doc_class_path[c] + "\"},\n") + g.write("\t{NULL, NULL}\n") + g.write("};\n") - g.write("static const _DocDataClassPath _doc_data_class_paths[" + str(len(env.doc_class_path) + 1) + "] = {\n"); - for c in sorted(env.doc_class_path): - g.write("\t{\"" + c + "\", \"" + env.doc_class_path[c] + "\"},\n") - g.write("\t{NULL, NULL}\n") - g.write("};\n") + g.close() if env['tools']: @@ -409,10 +432,9 @@ if env['tools']: reg_exporters += '\tregister_' + e + '_exporter();\n' reg_exporters_inc += '#include "platform/' + e + '/export/export.h"\n' reg_exporters += '}\n' - f = open_utf8("register_exporters.gen.cpp", "w") - f.write(reg_exporters_inc) - f.write(reg_exporters) - f.close() + with open_utf8("register_exporters.gen.cpp", "w") as f: + f.write(reg_exporters_inc) + f.write(reg_exporters) # API documentation docs = [] @@ -466,6 +488,7 @@ if env['tools']: env.add_source_files(env.editor_sources, "*.cpp") + env.add_source_files(env.editor_sources, ["#thirdparty/misc/clipper.cpp"]) SConscript('collada/SCsub') SConscript('doc/SCsub') diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp index 91aa189c8f..f7c8cac93f 100644 --- a/editor/animation_editor.cpp +++ b/editor/animation_editor.cpp @@ -1076,6 +1076,9 @@ void AnimationKeyEditor::_track_editor_draw() { if (!animation.is_valid()) { v_scroll->hide(); h_scroll->hide(); + length->set_editable(false); + step->set_editable(false); + loop->set_disabled(true); menu_add_track->set_disabled(true); menu_track->set_disabled(true); edit_button->set_disabled(true); @@ -1087,6 +1090,9 @@ void AnimationKeyEditor::_track_editor_draw() { return; } + length->set_editable(true); + step->set_editable(true); + loop->set_disabled(false); menu_add_track->set_disabled(false); menu_track->set_disabled(false); edit_button->set_disabled(false); @@ -1149,15 +1155,13 @@ void AnimationKeyEditor::_track_editor_draw() { get_icon("KeyCall", "EditorIcons") }; + Ref<Texture> valid_icon = get_icon("KeyValid", "EditorIcons"); Ref<Texture> invalid_icon = get_icon("KeyInvalid", "EditorIcons"); - Ref<Texture> invalid_icon_hover = get_icon("KeyInvalidHover", "EditorIcons"); + const Color modulate_selected = Color(0x84 / 255.0, 0xc2 / 255.0, 0xff / 255.0); Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); - Ref<Texture> type_hover = get_icon("KeyHover", "EditorIcons"); - Ref<Texture> type_selected = get_icon("KeySelected", "EditorIcons"); - - int right_separator_ofs = down_icon->get_width() * 3 + add_key_icon->get_width() + interp_icon[0]->get_width() + wrap_icon[0]->get_width() + cont_icon[0]->get_width() + hsep * 9; + int right_separator_ofs = right_data_size_cache; int h = font->get_height() + sep; @@ -1268,8 +1272,21 @@ void AnimationKeyEditor::_track_editor_draw() { 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; + for (int i = 1; i <= 9; i++) { + const int digit_width = font->get_char_size('0' + i).width; + max_digit_width = MAX(digit_width, max_digit_width); + } + const int max_sc = int(Math::ceil(zoomw / scale)); + const int max_sc_width = String::num(max_sc).length() * max_digit_width; + while (!step_found) { + min = max_sc_width; + if (decimals > 0) + min += period_width + max_digit_width * decimals; + static const int _multp[3] = { 1, 2, 5 }; for (int i = 0; i < 3; i++) { @@ -1359,7 +1376,7 @@ void AnimationKeyEditor::_track_editor_draw() { Color ncol = color; if (n && editor_selection->is_selected(n)) ncol = track_select_color; - te->draw_string(font, Point2(ofs + Point2(left_check_ofs + sep + type_icon[0]->get_width() + sep, y + font->get_ascent() + (sep / 2))).floor(), np, ncol, name_limit - (type_icon[0]->get_width() + sep) - 5); + te->draw_string(font, Point2(ofs + Point2(left_check_ofs + sep + type_icon[0]->get_width() + sep, y + font->get_ascent() + (sep / 2))).floor(), np, ncol, name_limit - (left_check_ofs + sep) - (type_icon[0]->get_width() + sep) - 5); // Draw separator line below track area if (!obj) @@ -1464,6 +1481,10 @@ void AnimationKeyEditor::_track_editor_draw() { float x = key_hofs + name_limit + (time - keys_from) * zoom_scale; Ref<Texture> tex = type_icon[tt]; + Color modulate = Color(1, 1, 1); + + bool is_hover = false; + bool is_selected = false; SelectedKey sk; sk.key = i; @@ -1472,13 +1493,33 @@ void AnimationKeyEditor::_track_editor_draw() { if (click.click == ClickOver::CLICK_MOVE_KEYS) continue; - tex = type_selected; + is_selected = true; } if (mouse_over.over == MouseOver::OVER_KEY && mouse_over.track == idx && mouse_over.over_key == i) - tex = type_hover; + is_hover = true; Variant value = animation->track_get_key_value(idx, i); + + if (prop_exists && !Variant::can_convert(value.get_type(), valid_type)) { + + tex = invalid_icon; + if (is_hover) + modulate = Color(1.5, 1.5, 1.5); + else + modulate = Color(1, 1, 1); + } else if (is_selected) { + + tex = valid_icon; + modulate = modulate_selected; + if (is_hover) + modulate = modulate.lightened(0.2); + } else if (is_hover) { + + tex = valid_icon; + modulate = Color(1, 1, 1); + } + if (first && i > 0 && value == animation->track_get_key_value(idx, i - 1)) { te->draw_line(ofs + Vector2(name_limit, y + h / 2), ofs + Point2(x, y + h / 2), color); @@ -1491,19 +1532,7 @@ void AnimationKeyEditor::_track_editor_draw() { te->draw_line(ofs + Point2(x_n, y + h / 2), ofs + Point2(x, y + h / 2), color); } - if (prop_exists && !Variant::can_convert(value.get_type(), valid_type)) { - te->draw_texture(invalid_icon, ofs + Point2(x, y + key_vofs).floor()); - } - - if (prop_exists && !Variant::can_convert(value.get_type(), valid_type)) { - if (tex == type_hover) - te->draw_texture(invalid_icon_hover, ofs + Point2(x, y + key_vofs).floor()); - else - te->draw_texture(invalid_icon, ofs + Point2(x, y + key_vofs).floor()); - } else { - - te->draw_texture(tex, ofs + Point2(x, y + key_vofs).floor()); - } + te->draw_texture(tex, ofs + Point2(x, y + key_vofs).floor(), modulate); first = false; } @@ -1539,8 +1568,8 @@ void AnimationKeyEditor::_track_editor_draw() { continue; int y = h + i * h + sep; - float key_vofs = Math::floor((float)(h - type_selected->get_height()) / 2); - float key_hofs = -Math::floor((float)type_selected->get_height() / 2); + float key_vofs = Math::floor((float)(h - valid_icon->get_height()) / 2); + float key_hofs = -Math::floor((float)valid_icon->get_height() / 2); float time = animation->track_get_key_time(idx, E->key().key); float diff = time - from_t; @@ -1554,7 +1583,7 @@ void AnimationKeyEditor::_track_editor_draw() { x += name_limit; - te->draw_texture(type_selected, ofs + Point2(x + key_hofs, y + key_vofs).floor()); + te->draw_texture(valid_icon, ofs + Point2(x + key_hofs, y + key_vofs).floor(), modulate_selected); } } break; default: {}; @@ -1830,7 +1859,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) get_icon("KeyXform", "EditorIcons"), get_icon("KeyCall", "EditorIcons") }; - int right_separator_ofs = down_icon->get_width() * 3 + add_key_icon->get_width() + interp_icon[0]->get_width() + wrap_icon[0]->get_width() + cont_icon[0]->get_width() + hsep * 9; + int right_separator_ofs = right_data_size_cache; int h = font->get_height() + sep; @@ -2930,8 +2959,8 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) Ref<InputEventPanGesture> pan_gesture = p_input; if (pan_gesture.is_valid()) { - h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * pan_gesture->get_delta().x / 8); - v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * pan_gesture->get_delta().y / 8); + h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * pan_gesture->get_delta().x / 8); + v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * pan_gesture->get_delta().y / 8); } } @@ -3042,7 +3071,7 @@ void AnimationKeyEditor::_notification(int p_what) { get_icon("InterpWrapClamp", "EditorIcons"), get_icon("InterpWrapLoop", "EditorIcons"), }; - right_data_size_cache = down_icon->get_width() * 3 + add_key_icon->get_width() + interp_icon[0]->get_width() + cont_icon[0]->get_width() + wrap_icon[0]->get_width() + hsep * 8; + right_data_size_cache = down_icon->get_width() * 3 + add_key_icon->get_width() + interp_icon[0]->get_width() + cont_icon[0]->get_width() + wrap_icon[0]->get_width() + hsep * 9; } } break; } @@ -3107,7 +3136,6 @@ void AnimationKeyEditor::set_animation(const Ref<Animation> &p_anim) { timeline_pos = 0; _clear_selection(); - _update_paths(); _update_menu(); selected_track = -1; @@ -3362,7 +3390,7 @@ int AnimationKeyEditor::_confirm_insert(InsertData p_id, int p_last_track) { //wants a new tack { - //shitty hack + //hack NodePath np; animation->add_track(p_id.type); animation->track_set_path(animation->get_track_count() - 1, p_id.path); @@ -3834,6 +3862,7 @@ AnimationKeyEditor::AnimationKeyEditor() { length->set_h_size_flags(SIZE_EXPAND_FILL); length->set_stretch_ratio(1); length->set_tooltip(TTR("Animation length (in seconds).")); + length->set_editable(false); hb->add_child(length); length->connect("value_changed", this, "_animation_len_changed"); @@ -3850,6 +3879,7 @@ AnimationKeyEditor::AnimationKeyEditor() { step->set_h_size_flags(SIZE_EXPAND_FILL); step->set_stretch_ratio(1); step->set_tooltip(TTR("Cursor step snap (in seconds).")); + step->set_editable(false); hb->add_child(step); step->connect("value_changed", this, "_step_changed"); @@ -3859,6 +3889,7 @@ AnimationKeyEditor::AnimationKeyEditor() { loop->connect("pressed", this, "_animation_loop_changed"); hb->add_child(loop); loop->set_tooltip(TTR("Enable/Disable looping in animation.")); + loop->set_disabled(true); hb->add_child(memnew(VSeparator)); @@ -3896,7 +3927,7 @@ AnimationKeyEditor::AnimationKeyEditor() { menu_track = memnew(MenuButton); hb->add_child(menu_track); menu_track->get_popup()->connect("id_pressed", this, "_menu_track"); - menu_track->set_tooltip(TTR("Track tools")); + menu_track->set_tooltip(TTR("Track Tools")); edit_button = memnew(ToolButton); edit_button->set_toggle_mode(true); @@ -3998,6 +4029,7 @@ AnimationKeyEditor::AnimationKeyEditor() { //key_edit->ke_dialog=key_edit_dialog; type_menu = memnew(PopupMenu); + type_menu->set_pass_on_modal_close_click(false); add_child(type_menu); for (int i = 0; i < Variant::VARIANT_MAX; i++) type_menu->add_item(Variant::get_type_name(Variant::Type(i)), i); @@ -4038,6 +4070,7 @@ AnimationKeyEditor::AnimationKeyEditor() { add_child(track_name); track_name->connect("text_entered", this, "_track_name_changed"); track_menu = memnew(PopupMenu); + track_menu->set_pass_on_modal_close_click(false); add_child(track_menu); track_menu->connect("id_pressed", this, "_track_menu_selected"); diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 70334c2343..24e86770bf 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -212,35 +212,39 @@ void FindReplaceBar::_replace_all() { text_edit->begin_complex_operation(); - while (search_next()) { - - // replace area - Point2i match_from(result_line, result_col); - Point2i match_to(result_line, result_col + search_text_len); + if (search_current()) { + do { + // replace area + Point2i match_from(result_line, result_col); + Point2i match_to(result_line, result_col + search_text_len); + + if (match_from < prev_match) { + break; // done + } - if (match_from < prev_match) - break; // done + prev_match = Point2i(result_line, result_col + replace_text.length()); - prev_match = Point2i(result_line, result_col + replace_text.length()); + text_edit->unfold_line(result_line); + text_edit->select(result_line, result_col, result_line, match_to.y); - text_edit->unfold_line(result_line); - text_edit->select(result_line, result_col, result_line, match_to.y); + if (selection_enabled && is_selection_only()) { + if (match_from < selection_begin || match_to > selection_end) { + continue; + } - if (selection_enabled && is_selection_only()) { + // replace but adjust selection bounds + text_edit->insert_text_at_cursor(replace_text); + if (match_to.x == selection_end.x) { + selection_end.y += replace_text.length() - search_text_len; + } - if (match_from < selection_begin || match_to > selection_end) - continue; - - // replace but adjust selection bounds - text_edit->insert_text_at_cursor(replace_text); - if (match_to.x == selection_end.x) - selection_end.y += replace_text.length() - search_text_len; - } else { - // just replace - text_edit->insert_text_at_cursor(replace_text); - } + } else { + // just replace + text_edit->insert_text_at_cursor(replace_text); + } - rc++; + rc++; + } while (search_next()); } text_edit->end_complex_operation(); @@ -646,12 +650,12 @@ void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) { } void CodeTextEditor::_zoom_in() { - font_resize_val += EDSCALE; + font_resize_val += MAX(EDSCALE, 1.0f); _zoom_changed(); } void CodeTextEditor::_zoom_out() { - font_resize_val -= EDSCALE; + font_resize_val -= MAX(EDSCALE, 1.0f); _zoom_changed(); } @@ -666,13 +670,27 @@ void CodeTextEditor::_reset_zoom() { if (font.is_valid()) { EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); font->set_size(14); + zoom_nb->set_text("100%"); } } void CodeTextEditor::_line_col_changed() { line_nb->set_text(itos(text_editor->cursor_get_line() + 1)); - col_nb->set_text(itos(text_editor->cursor_get_column() + 1)); + + String line = text_editor->get_line(text_editor->cursor_get_line()); + + int positional_column = 0; + + for (int i = 0; i < text_editor->cursor_get_column(); i++) { + if (line[i] == '\t') { + positional_column += text_editor->get_indent_size(); //tab size + } else { + positional_column += 1; + } + } + + col_nb->set_text(itos(positional_column + 1)); } void CodeTextEditor::_text_changed() { @@ -727,6 +745,9 @@ bool CodeTextEditor::_add_font_size(int p_delta) { if (font.is_valid()) { int new_size = CLAMP(font->get_size() + p_delta, 8 * EDSCALE, 96 * EDSCALE); + + zoom_nb->set_text(itos(100 * new_size / 14) + "%"); + if (new_size != font->get_size()) { EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); font->set_size(new_size); @@ -771,6 +792,14 @@ void CodeTextEditor::set_error(const String &p_error) { void CodeTextEditor::_update_font() { text_editor->add_font_override("font", get_font("source", "EditorFonts")); + + Ref<Font> status_bar_font = get_font("status_source", "EditorFonts"); + 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_font_override("font", status_bar_font); + } } void CodeTextEditor::_on_settings_change() { @@ -851,7 +880,7 @@ CodeTextEditor::CodeTextEditor() { text_editor->set_brace_matching(true); text_editor->set_auto_indent(true); - HBoxContainer *status_bar = memnew(HBoxContainer); + status_bar = memnew(HBoxContainer); add_child(status_bar); status_bar->set_h_size_flags(SIZE_EXPAND_FILL); @@ -878,6 +907,24 @@ CodeTextEditor::CodeTextEditor() { status_bar->add_child(memnew(Label)); //to keep the height if the other labels are not visible + Label *zoom_txt = memnew(Label); + status_bar->add_child(zoom_txt); + zoom_txt->set_align(Label::ALIGN_RIGHT); + zoom_txt->set_valign(Label::VALIGN_CENTER); + zoom_txt->set_v_size_flags(SIZE_FILL); + zoom_txt->set_text(TTR("Zoom:")); + zoom_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); + + zoom_nb = memnew(Label); + status_bar->add_child(zoom_nb); + zoom_nb->set_valign(Label::VALIGN_CENTER); + zoom_nb->set_v_size_flags(SIZE_FILL); + zoom_nb->set_autowrap(true); // workaround to prevent resizing the label on each change, do not touch + zoom_nb->set_clip_text(true); // workaround to prevent resizing the label on each change, do not touch + zoom_nb->set_custom_minimum_size(Size2(60, 1) * EDSCALE); + zoom_nb->set_align(Label::ALIGN_RIGHT); + zoom_nb->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); + Label *line_txt = memnew(Label); status_bar->add_child(line_txt); line_txt->set_align(Label::ALIGN_RIGHT); @@ -931,7 +978,8 @@ CodeTextEditor::CodeTextEditor() { code_complete_timer->connect("timeout", this, "_code_complete_timer_timeout"); font_resize_val = 0; - font_size = -1; + font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); + zoom_nb->set_text(itos(100 * font_size / 14) + "%"); font_resize_timer = memnew(Timer); add_child(font_resize_timer); font_resize_timer->set_one_shot(true); diff --git a/editor/code_editor.h b/editor/code_editor.h index db2e25b922..a860ad24e2 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -141,9 +141,11 @@ class CodeTextEditor : public VBoxContainer { TextEdit *text_editor; FindReplaceBar *find_replace_bar; + HBoxContainer *status_bar; Label *line_nb; Label *col_nb; + Label *zoom_nb; Label *info; Timer *idle; Timer *code_complete_timer; diff --git a/editor/collada/collada.cpp b/editor/collada/collada.cpp index 4ce57d7f63..734229d014 100644 --- a/editor/collada/collada.cpp +++ b/editor/collada/collada.cpp @@ -2266,10 +2266,8 @@ void Collada::_merge_skeletons2(VisualScene *p_vscene) { } node = node->parent; } - ERR_CONTINUE(!sk); - if (!sk) - continue; //bleh + ERR_CONTINUE(!sk); if (!skeleton) { skeleton = sk; diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 3466d17980..7f93917744 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -35,6 +35,7 @@ #include "plugins/script_editor_plugin.h" #include "print_string.h" #include "scene/gui/label.h" +#include "scene/gui/popup_menu.h" class ConnectDialogBinds : public Object { @@ -87,51 +88,12 @@ public: } }; -void ConnectDialog::_notification(int p_what) { - - if (p_what == NOTIFICATION_ENTER_TREE) { - bind_editor->edit(cdbinds); - } -} - -void ConnectDialog::_tree_node_selected() { - - //dst_method_list->get_popup()->clear(); - Node *current = tree->get_selected(); - - if (!current) { - make_callback->hide(); - return; - } - - if (current->get_script().is_null()) - make_callback->hide(); - else - make_callback->show(); - - dst_path->set_text(node->get_path_to(current)); -} - -void ConnectDialog::edit(Node *p_node) { - - node = p_node; - - //dst_method_list->get_popup()->clear(); - - tree->set_selected(NULL); - tree->set_marked(node, true); - dst_path->set_text(""); - dst_method->set_text(""); - deferred->set_pressed(false); - oneshot->set_pressed(false); - cdbinds->params.clear(); - cdbinds->notify_changed(); -} - +/* +Signal automatically called by parent dialog. +*/ void ConnectDialog::ok_pressed() { if (dst_method->get_text() == "") { - error->set_text(TTR("Method in target Node must be specified!")); error->popup_centered_minsize(); return; @@ -147,39 +109,35 @@ void ConnectDialog::ok_pressed() { emit_signal("connected"); hide(); } + void ConnectDialog::_cancel_pressed() { hide(); } -NodePath ConnectDialog::get_dst_path() const { - - return dst_path->get_text(); -} - -bool ConnectDialog::get_deferred() const { - - return deferred->is_pressed(); -} - -bool ConnectDialog::get_oneshot() const { - - return oneshot->is_pressed(); -} +/* +Called each time a target node is selected within the target node tree. +*/ +void ConnectDialog::_tree_node_selected() { -StringName ConnectDialog::get_dst_method() const { + Node *current = tree->get_selected(); - String txt = dst_method->get_text(); - if (txt.find("(") != -1) - txt = txt.left(txt.find("(")).strip_edges(); - return txt; -} + if (!current) { + make_callback->hide(); + return; + } -Vector<Variant> ConnectDialog::get_binds() const { + if (current->get_script().is_null()) + make_callback->hide(); + else + make_callback->show(); - return cdbinds->params; + dst_path->set_text(source->get_path_to(current)); } +/* +Adds a new parameter bind to connection. +*/ void ConnectDialog::_add_bind() { if (cdbinds->params.size() >= VARIANT_ARG_MAX) @@ -189,7 +147,6 @@ void ConnectDialog::_add_bind() { Variant value; switch (vt) { - case Variant::BOOL: value = false; break; case Variant::INT: value = 0; break; case Variant::REAL: value = 0.0; break; @@ -203,7 +160,6 @@ void ConnectDialog::_add_bind() { case Variant::BASIS: value = Basis(); break; case Variant::TRANSFORM: value = Transform(); break; case Variant::COLOR: value = Color(); break; - default: { ERR_FAIL(); } break; } @@ -213,6 +169,9 @@ void ConnectDialog::_add_bind() { cdbinds->notify_changed(); } +/* +Remove parameter bind from connection. +*/ void ConnectDialog::_remove_bind() { String st = bind_editor->get_selected_path(); @@ -225,25 +184,106 @@ void ConnectDialog::_remove_bind() { cdbinds->notify_changed(); } +void ConnectDialog::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE) { + bind_editor->edit(cdbinds); + } +} + +void ConnectDialog::_bind_methods() { + + ClassDB::bind_method("_cancel", &ConnectDialog::_cancel_pressed); + ClassDB::bind_method("_tree_node_selected", &ConnectDialog::_tree_node_selected); + ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind); + ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind); + + ADD_SIGNAL(MethodInfo("connected")); +} + +Node *ConnectDialog::get_source() const { + + return source; +} + +StringName ConnectDialog::get_signal_name() const { + + return signal; +} + +NodePath ConnectDialog::get_dst_path() const { + + return dst_path->get_text(); +} + void ConnectDialog::set_dst_node(Node *p_node) { tree->set_selected(p_node); } +StringName ConnectDialog::get_dst_method_name() const { + + String txt = dst_method->get_text(); + if (txt.find("(") != -1) + txt = txt.left(txt.find("(")).strip_edges(); + return txt; +} + void ConnectDialog::set_dst_method(const StringName &p_method) { dst_method->set_text(p_method); } -void ConnectDialog::_bind_methods() { +Vector<Variant> ConnectDialog::get_binds() const { - ClassDB::bind_method("_cancel", &ConnectDialog::_cancel_pressed); - ClassDB::bind_method("_tree_node_selected", &ConnectDialog::_tree_node_selected); + return cdbinds->params; +} - ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind); - ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind); +bool ConnectDialog::get_deferred() const { - ADD_SIGNAL(MethodInfo("connected")); + return deferred->is_pressed(); +} + +bool ConnectDialog::get_oneshot() const { + + return oneshot->is_pressed(); +} + +/* +Returns true if ConnectDialog is being used to edit an existing connection. +*/ +bool ConnectDialog::is_editing() const { + + return bEditMode; +} + +/* +Initialize ConnectDialog and populate fields with expected data. +If creating a connection from scratch, sensible defaults are used. +If editing an existing connection, previous data is retained. +*/ +void ConnectDialog::init(Connection c, bool bEdit) { + + source = static_cast<Node *>(c.source); + signal = c.signal; + + tree->set_selected(NULL); + tree->set_marked(source, true); + + set_dst_node(static_cast<Node *>(c.target)); + set_dst_method(c.method); + + bool bDeferred = (c.flags & CONNECT_DEFERRED) == CONNECT_DEFERRED; + bool bOneshot = (c.flags & CONNECT_ONESHOT) == CONNECT_ONESHOT; + + deferred->set_pressed(bDeferred); + oneshot->set_pressed(bOneshot); + + cdbinds->params.clear(); + cdbinds->params = c.binds; + cdbinds->notify_changed(); + + bEditMode = bEdit; } ConnectDialog::ConnectDialog() { @@ -261,6 +301,8 @@ ConnectDialog::ConnectDialog() { tree = memnew(SceneTreeEditor(false)); tree->get_scene_tree()->connect("item_activated", this, "_ok"); + tree->connect("node_selected", this, "_tree_node_selected"); + vbc_left->add_margin_child(TTR("Connect To Node:"), tree, true); VBoxContainer *vbc_right = memnew(VBoxContainer); @@ -272,12 +314,10 @@ ConnectDialog::ConnectDialog() { type_list = memnew(OptionButton); type_list->set_h_size_flags(SIZE_EXPAND_FILL); add_bind_hb->add_child(type_list); - type_list->add_item("bool", Variant::BOOL); type_list->add_item("int", Variant::INT); type_list->add_item("real", Variant::REAL); type_list->add_item("string", Variant::STRING); - //type_list->add_separator(); type_list->add_item("Vector2", Variant::VECTOR2); type_list->add_item("Rect2", Variant::RECT2); type_list->add_item("Vector3", Variant::VECTOR3); @@ -286,12 +326,10 @@ ConnectDialog::ConnectDialog() { type_list->add_item("AABB", Variant::AABB); type_list->add_item("Basis", Variant::BASIS); type_list->add_item("Transform", Variant::TRANSFORM); - //type_list->add_separator(); type_list->add_item("Color", Variant::COLOR); type_list->select(0); Button *add_bind = memnew(Button); - add_bind->set_text(TTR("Add")); add_bind_hb->add_child(add_bind); add_bind->connect("pressed", this, "_add_bind"); @@ -318,8 +356,9 @@ ConnectDialog::ConnectDialog() { dst_method->set_h_size_flags(SIZE_EXPAND_FILL); dstm_hb->add_child(dst_method); - /*dst_method_list = memnew( MenuButton ); - dst_method_list->set_text("List.."); + /* + dst_method_list = memnew( MenuButton ); + dst_method_list->set_text("List..."); dst_method_list->set_anchor( MARGIN_RIGHT, ANCHOR_END ); dst_method_list->set_anchor( MARGIN_LEFT, ANCHOR_END ); dst_method_list->set_anchor( MARGIN_TOP, ANCHOR_END ); @@ -327,7 +366,6 @@ ConnectDialog::ConnectDialog() { dst_method_list->set_begin( Point2( 70,59) ); dst_method_list->set_end( Point2( 15,39 ) ); */ - //add_child(dst_method_list); make_callback = memnew(CheckButton); make_callback->set_toggle_mode(true); @@ -343,8 +381,6 @@ ConnectDialog::ConnectDialog() { oneshot->set_text(TTR("Oneshot")); dstm_hb->add_child(oneshot); - tree->connect("node_selected", this, "_tree_node_selected"); - set_as_toplevel(true); cdbinds = memnew(ConnectDialogBinds); @@ -356,134 +392,365 @@ ConnectDialog::ConnectDialog() { } ConnectDialog::~ConnectDialog() { + memdelete(cdbinds); } -void ConnectionsDock::_notification(int p_what) { - - if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { - update_tree(); - } -} +//ConnectionsDock ========================== -void ConnectionsDock::_close() { +struct _ConnectionsDockMethodInfoSort { - hide(); -} + _FORCE_INLINE_ bool operator()(const MethodInfo &a, const MethodInfo &b) const { + return a.name < b.name; + } +}; -void ConnectionsDock::_connect() { +/* +Post-ConnectDialog callback for creating/editing connections. +Creates or edits connections based on state of the ConnectDialog when "Connect" is pressed. +*/ +void ConnectionsDock::_make_or_edit_connection() { TreeItem *it = tree->get_selected(); ERR_FAIL_COND(!it); - String signal = it->get_metadata(0).operator Dictionary()["name"]; NodePath dst_path = connect_dialog->get_dst_path(); - Node *target = node->get_node(dst_path); + Node *target = selectedNode->get_node(dst_path); ERR_FAIL_COND(!target); - StringName dst_method = connect_dialog->get_dst_method(); + Connection cToMake; + cToMake.source = connect_dialog->get_source(); + cToMake.target = target; + cToMake.signal = connect_dialog->get_signal_name(); + cToMake.method = connect_dialog->get_dst_method_name(); + cToMake.binds = connect_dialog->get_binds(); bool defer = connect_dialog->get_deferred(); bool oshot = connect_dialog->get_oneshot(); - Vector<Variant> binds = connect_dialog->get_binds(); - PoolStringArray args = it->get_metadata(0).operator Dictionary()["args"]; - int flags = CONNECT_PERSIST | (defer ? CONNECT_DEFERRED : 0) | (oshot ? CONNECT_ONESHOT : 0); + cToMake.flags = CONNECT_PERSIST | (defer ? CONNECT_DEFERRED : 0) | (oshot ? CONNECT_ONESHOT : 0); + + if (connect_dialog->is_editing()) { + _disconnect(*it); + _connect(cToMake); + } else { + _connect(cToMake); + } - undo_redo->create_action(vformat(TTR("Connect '%s' to '%s'"), signal, String(dst_method))); - undo_redo->add_do_method(node, "connect", signal, target, dst_method, binds, flags); - undo_redo->add_undo_method(node, "disconnect", signal, target, dst_method); + if (connect_dialog->get_make_callback()) { + PoolStringArray args = it->get_metadata(0).operator Dictionary()["args"]; + editor->emit_signal("script_add_function_request", target, cToMake.method, args); + hide(); + } + + update_tree(); +} + +/* +Creates single connection w/ undo-redo functionality. +*/ +void ConnectionsDock::_connect(Connection cToMake) { + + Node *source = static_cast<Node *>(cToMake.source); + Node *target = static_cast<Node *>(cToMake.target); + + if (!source || !target) + return; + + undo_redo->create_action(vformat(TTR("Connect '%s' to '%s'"), String(cToMake.signal), String(cToMake.method))); + + undo_redo->add_do_method(source, "connect", cToMake.signal, target, cToMake.method, cToMake.binds, cToMake.flags); + undo_redo->add_undo_method(source, "disconnect", cToMake.signal, target, cToMake.method); undo_redo->add_do_method(this, "update_tree"); undo_redo->add_undo_method(this, "update_tree"); undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree - undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree + undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); undo_redo->commit_action(); +} - if (connect_dialog->get_make_callback()) { +/* +Break single connection w/ undo-redo functionality. +*/ +void ConnectionsDock::_disconnect(TreeItem &item) { - print_line("request connect"); - editor->emit_signal("script_add_function_request", target, dst_method, args); - hide(); + Connection c = item.get_metadata(0); + ERR_FAIL_COND(c.source != selectedNode); //shouldn't happen but...bugcheck + + undo_redo->create_action(vformat(TTR("Disconnect '%s' from '%s'"), c.signal, c.method)); + + undo_redo->add_do_method(selectedNode, "disconnect", c.signal, c.target, c.method); + undo_redo->add_undo_method(selectedNode, "connect", c.signal, c.target, c.method, c.binds, c.flags); + undo_redo->add_do_method(this, "update_tree"); + undo_redo->add_undo_method(this, "update_tree"); + undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree + undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); + + undo_redo->commit_action(); +} + +/* +Break all conections of currently selected signal. +Can undo-redo as a single action. +*/ +void ConnectionsDock::_disconnect_all() { + + TreeItem *item = tree->get_selected(); + + if (!_is_item_signal(*item)) + return; + + TreeItem *child = item->get_children(); + String signalName = item->get_metadata(0).operator Dictionary()["name"]; + undo_redo->create_action(vformat(TTR("Disconnect all from signal: '%s'"), signalName)); + + while (child) { + Connection c = child->get_metadata(0); + undo_redo->add_do_method(selectedNode, "disconnect", c.signal, c.target, c.method); + undo_redo->add_undo_method(selectedNode, "connect", c.signal, c.target, c.method, c.binds, c.flags); + child = child->get_next(); } - update_tree(); + undo_redo->add_do_method(this, "update_tree"); + undo_redo->add_undo_method(this, "update_tree"); + undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); + undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); + + undo_redo->commit_action(); } -void ConnectionsDock::_connect_pressed() { +void ConnectionsDock::_tree_item_selected() { TreeItem *item = tree->get_selected(); - if (!item) { - //no idea how this happened, but disable + if (!item) { //Unlikely. Disable button just in case. + connect_button->set_text(TTR("Connect...")); connect_button->set_disabled(true); + } else if (_is_item_signal(*item)) { + connect_button->set_text(TTR("Connect...")); + connect_button->set_disabled(false); + } else { + connect_button->set_text(TTR("Disconnect")); + connect_button->set_disabled(false); + } +} + +void ConnectionsDock::_tree_item_activated() { //"Activation" on double-click. + + TreeItem *item = tree->get_selected(); + + if (!item) return; + + if (_is_item_signal(*item)) { + _open_connection_dialog(*item); + } else { + _go_to_script(*item); } - if (item->get_parent() == tree->get_root() || item->get_parent()->get_parent() == tree->get_root()) { - //a signal - connect - String signal = item->get_metadata(0).operator Dictionary()["name"]; - String signalname = signal; - String midname = node->get_name(); - for (int i = 0; i < midname.length(); i++) { - CharType c = midname[i]; - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') { - //all good - } else if (c == ' ') { +} + +bool ConnectionsDock::_is_item_signal(TreeItem &item) { + + return (item.get_parent() == tree->get_root() || item.get_parent()->get_parent() == tree->get_root()); +} + +/* +Open connection dialog with TreeItem data to CREATE a brand-new connection. +*/ +void ConnectionsDock::_open_connection_dialog(TreeItem &item) { + + String signal = item.get_metadata(0).operator Dictionary()["name"]; + String signalname = signal; + String midname = selectedNode->get_name(); + for (int i = 0; i < midname.length(); i++) { //TODO: Regex filter may be cleaner. + CharType c = midname[i]; + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_')) { + if (c == ' ') { + //Replace spaces with underlines. c = '_'; } else { + //Remove any other characters. midname.remove(i); i--; continue; } - - midname[i] = c; } + midname[i] = c; + } + + Node *dst_node = selectedNode->get_owner() ? selectedNode->get_owner() : selectedNode; + StringName dst_method = "_on_" + midname + "_" + signal; - connect_dialog->edit(node); + Connection c; + c.source = selectedNode; + c.signal = StringName(signalname); + c.target = dst_node; + c.method = dst_method; + + connect_dialog->init(c); + connect_dialog->set_title(TTR("Connect Signal: ") + signalname); + connect_dialog->popup_centered_ratio(); +} + +/* +Open connection dialog with Connection data to EDIT an existing connection. +*/ +void ConnectionsDock::_open_connection_dialog(Connection cToEdit) { + + Node *src = static_cast<Node *>(cToEdit.source); + Node *dst = static_cast<Node *>(cToEdit.target); + + if (src && dst) { + connect_dialog->init(cToEdit, true); + connect_dialog->set_title(TTR("Edit Connection: ") + cToEdit.signal); connect_dialog->popup_centered_ratio(); - connect_dialog->set_title(TTR("Connecting Signal:") + " " + signalname); - connect_dialog->set_dst_method("_on_" + midname + "_" + signal); - connect_dialog->set_dst_node(node->get_owner() ? node->get_owner() : node); + } +} + +/* +Open slot method location in script editor. +*/ +void ConnectionsDock::_go_to_script(TreeItem &item) { + + if (_is_item_signal(item)) + return; + + Connection c = item.get_metadata(0); + ERR_FAIL_COND(c.source != selectedNode); //shouldn't happen but...bugcheck + + if (!c.target) + return; + Ref<Script> script = c.target->get_script(); + + if (script.is_null()) + return; + + if (script.is_valid() && ScriptEditor::get_singleton()->script_goto_method(script, c.method)) { + editor->call("_editor_select", EditorNode::EDITOR_SCRIPT); + } +} + +void ConnectionsDock::_handle_signal_menu_option(int option) { + + TreeItem *item = tree->get_selected(); + + if (!item) + return; + + switch (option) { + case CONNECT: { + _open_connection_dialog(*item); + } break; + case DISCONNECT_ALL: { + StringName signalName = item->get_metadata(0).operator Dictionary()["name"]; + disconnect_all_dialog->set_text(TTR("Are you sure you want to remove all connections from the \"") + signalName + "\" signal?"); + disconnect_all_dialog->popup_centered(); + } break; + } +} + +void ConnectionsDock::_handle_slot_menu_option(int option) { + + TreeItem *item = tree->get_selected(); + + if (!item) + return; + + switch (option) { + case EDIT: { + Connection c = item->get_metadata(0); + _open_connection_dialog(c); + } break; + case GO_TO_SCRIPT: { + _go_to_script(*item); + } break; + case DISCONNECT: { + _disconnect(*item); + update_tree(); + } break; + } +} + +void ConnectionsDock::_rmb_pressed(Vector2 position) { + + TreeItem *item = tree->get_selected(); + + if (!item) + return; + + Vector2 global_position = tree->get_global_position() + position; + + if (_is_item_signal(*item)) { + signal_menu->set_position(global_position); + signal_menu->popup(); } else { - //a slot- disconnect - Connection c = item->get_metadata(0); - ERR_FAIL_COND(c.source != node); //shouldn't happen but...bugcheck - - undo_redo->create_action(vformat(TTR("Disconnect '%s' from '%s'"), c.signal, c.method)); - undo_redo->add_do_method(node, "disconnect", c.signal, c.target, c.method); - undo_redo->add_undo_method(node, "connect", c.signal, c.target, c.method, Vector<Variant>(), c.flags); - undo_redo->add_do_method(this, "update_tree"); - undo_redo->add_undo_method(this, "update_tree"); - undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree - undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree - undo_redo->commit_action(); - - c.source->disconnect(c.signal, c.target, c.method); + slot_menu->set_position(global_position); + slot_menu->popup(); + } +} + +void ConnectionsDock::_close() { + + hide(); +} + +void ConnectionsDock::_connect_pressed() { + + TreeItem *item = tree->get_selected(); + if (!item) { + connect_button->set_disabled(true); + return; + } + + if (_is_item_signal(*item)) { + _open_connection_dialog(*item); + } else { + _disconnect(*item); update_tree(); } } -struct _ConnectionsDockMethodInfoSort { +void ConnectionsDock::_notification(int p_what) { - _FORCE_INLINE_ bool operator()(const MethodInfo &a, const MethodInfo &b) const { - return a.name < b.name; + if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { + update_tree(); } -}; +} + +void ConnectionsDock::_bind_methods() { + + ClassDB::bind_method("_make_or_edit_connection", &ConnectionsDock::_make_or_edit_connection); + ClassDB::bind_method("_disconnect_all", &ConnectionsDock::_disconnect_all); + ClassDB::bind_method("_tree_item_selected", &ConnectionsDock::_tree_item_selected); + ClassDB::bind_method("_tree_item_activated", &ConnectionsDock::_tree_item_activated); + ClassDB::bind_method("_handle_signal_menu_option", &ConnectionsDock::_handle_signal_menu_option); + ClassDB::bind_method("_handle_slot_menu_option", &ConnectionsDock::_handle_slot_menu_option); + ClassDB::bind_method("_rmb_pressed", &ConnectionsDock::_rmb_pressed); + ClassDB::bind_method("_close", &ConnectionsDock::_close); + ClassDB::bind_method("_connect_pressed", &ConnectionsDock::_connect_pressed); + ClassDB::bind_method("update_tree", &ConnectionsDock::update_tree); +} + +void ConnectionsDock::set_node(Node *p_node) { + + selectedNode = p_node; + update_tree(); +} void ConnectionsDock::update_tree() { tree->clear(); - if (!node) + if (!selectedNode) return; TreeItem *root = tree->create_item(); List<MethodInfo> node_signals; - node->get_signal_list(&node_signals); + selectedNode->get_signal_list(&node_signals); //node_signals.sort_custom<_ConnectionsDockMethodInfoSort>(); bool did_script = false; - StringName base = node->get_class(); + StringName base = selectedNode->get_class(); while (base) { @@ -493,7 +760,7 @@ void ConnectionsDock::update_tree() { if (!did_script) { - Ref<Script> scr = node->get_script(); + Ref<Script> scr = selectedNode->get_script(); if (scr.is_valid()) { scr->get_script_signal_list(&node_signals); if (scr->get_path().is_resource_file()) @@ -563,7 +830,7 @@ void ConnectionsDock::update_tree() { item->set_icon(0, get_icon("Signal", "EditorIcons")); List<Object::Connection> connections; - node->get_signal_connection_list(mi.name, &connections); + selectedNode->get_signal_connection_list(mi.name, &connections); for (List<Object::Connection>::Element *F = connections.front(); F; F = F->next()) { @@ -575,7 +842,7 @@ void ConnectionsDock::update_tree() { if (!target) continue; - String path = String(node->get_path_to(target)) + " :: " + c.method + "()"; + String path = String(selectedNode->get_path_to(target)) + " :: " + c.method + "()"; if (c.flags & CONNECT_DEFERRED) path += " (deferred)"; if (c.flags & CONNECT_ONESHOT) @@ -610,88 +877,6 @@ void ConnectionsDock::update_tree() { connect_button->set_disabled(true); } -void ConnectionsDock::set_node(Node *p_node) { - - node = p_node; - update_tree(); -} - -void ConnectionsDock::_something_selected() { - - TreeItem *item = tree->get_selected(); - if (!item) { - //no idea how this happened, but disable - connect_button->set_text(TTR("Connect..")); - connect_button->set_disabled(true); - - } else if (item->get_parent() == tree->get_root() || item->get_parent()->get_parent() == tree->get_root()) { - //a signal - connect - connect_button->set_text(TTR("Connect..")); - connect_button->set_disabled(false); - - } else { - //a slot- disconnect - connect_button->set_text(TTR("Disconnect")); - connect_button->set_disabled(false); - } -} - -void ConnectionsDock::_something_activated() { - - TreeItem *item = tree->get_selected(); - - if (!item) - return; - - if (item->get_parent() == tree->get_root() || item->get_parent()->get_parent() == tree->get_root()) { - // a signal - connect - String signal = item->get_metadata(0).operator Dictionary()["name"]; - String midname = node->get_name(); - for (int i = 0; i < midname.length(); i++) { - CharType c = midname[i]; - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') { - //all good - } else if (c == ' ') { - c = '_'; - } else { - midname.remove(i); - i--; - continue; - } - - midname[i] = c; - } - - connect_dialog->edit(node); - connect_dialog->popup_centered_ratio(); - connect_dialog->set_dst_method("_on_" + midname + "_" + signal); - connect_dialog->set_dst_node(node->get_owner() ? node->get_owner() : node); - } else { - // a slot - go to target method - Connection c = item->get_metadata(0); - ERR_FAIL_COND(c.source != node); //shouldn't happen but...bugcheck - - if (!c.target) - return; - - Ref<Script> script = c.target->get_script(); - - if (script.is_valid() && ScriptEditor::get_singleton()->script_goto_method(script, c.method)) { - editor->call("_editor_select", EditorNode::EDITOR_SCRIPT); - } - } -} - -void ConnectionsDock::_bind_methods() { - - ClassDB::bind_method("_connect", &ConnectionsDock::_connect); - ClassDB::bind_method("_something_selected", &ConnectionsDock::_something_selected); - ClassDB::bind_method("_something_activated", &ConnectionsDock::_something_activated); - ClassDB::bind_method("_close", &ConnectionsDock::_close); - ClassDB::bind_method("_connect_pressed", &ConnectionsDock::_connect_pressed); - ClassDB::bind_method("update_tree", &ConnectionsDock::update_tree); -} - ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { editor = p_editor; @@ -705,6 +890,7 @@ ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { tree->set_hide_root(true); vbc->add_child(tree); tree->set_v_size_flags(SIZE_EXPAND_FILL); + tree->set_allow_rmb_select(true); connect_button = memnew(Button); connect_button->set_text(TTR("Connect")); @@ -713,15 +899,29 @@ ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { hb->add_spacer(); hb->add_child(connect_button); connect_button->connect("pressed", this, "_connect_pressed"); - //add_child(tree); connect_dialog = memnew(ConnectDialog); connect_dialog->set_as_toplevel(true); add_child(connect_dialog); - remove_confirm = memnew(ConfirmationDialog); - remove_confirm->set_as_toplevel(true); - add_child(remove_confirm); + disconnect_all_dialog = memnew(ConfirmationDialog); + disconnect_all_dialog->set_as_toplevel(true); + add_child(disconnect_all_dialog); + disconnect_all_dialog->connect("confirmed", this, "_disconnect_all"); + disconnect_all_dialog->set_text(TTR("Are you sure you want to remove all connections from this signal?")); + + signal_menu = memnew(PopupMenu); + add_child(signal_menu); + signal_menu->connect("id_pressed", this, "_handle_signal_menu_option"); + signal_menu->add_item(TTR("Connect..."), CONNECT); + signal_menu->add_item(TTR("Disconnect All"), DISCONNECT_ALL); + + slot_menu = memnew(PopupMenu); + add_child(slot_menu); + slot_menu->connect("id_pressed", this, "_handle_slot_menu_option"); + slot_menu->add_item(TTR("Edit..."), EDIT); + slot_menu->add_item(TTR("Go To Method"), GO_TO_SCRIPT); + slot_menu->add_item(TTR("Disconnect"), DISCONNECT); /* node_only->set_anchor( MARGIN_TOP, ANCHOR_END ); @@ -732,10 +932,10 @@ ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { node_only->set_end( Point2( 10,44) ); */ - remove_confirm->connect("confirmed", this, "_remove_confirm"); - connect_dialog->connect("connected", this, "_connect"); - tree->connect("item_selected", this, "_something_selected"); - tree->connect("item_activated", this, "_something_activated"); + connect_dialog->connect("connected", this, "_make_or_edit_connection"); + tree->connect("item_selected", this, "_tree_item_selected"); + tree->connect("item_activated", this, "_tree_item_activated"); + tree->connect("item_rmb_selected", this, "_rmb_pressed"); add_constant_override("separation", 3 * EDSCALE); } diff --git a/editor/connections_dialog.h b/editor/connections_dialog.h index 5e26e00f67..932ff693e4 100644 --- a/editor/connections_dialog.h +++ b/editor/connections_dialog.h @@ -28,6 +28,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +/** +@author Juan Linietsky <reduzio@gmail.com> +*/ + #ifndef CONNECTIONS_DIALOG_H #define CONNECTIONS_DIALOG_H @@ -42,27 +46,28 @@ #include "scene/gui/tree.h" #include "undo_redo.h" -/** -@author Juan Linietsky <reduzio@gmail.com> -*/ - +class PopupMenu; class ConnectDialogBinds; class ConnectDialog : public ConfirmationDialog { GDCLASS(ConnectDialog, ConfirmationDialog); - ConfirmationDialog *error; + Node *source; + StringName signal; LineEdit *dst_path; LineEdit *dst_method; + ConnectDialogBinds *cdbinds; + bool bEditMode; + SceneTreeEditor *tree; + ConfirmationDialog *error; + PropertyEditor *bind_editor; OptionButton *type_list; CheckButton *deferred; CheckButton *oneshot; CheckButton *make_callback; - PropertyEditor *bind_editor; - Node *node; - ConnectDialogBinds *cdbinds; + void ok_pressed(); void _cancel_pressed(); void _tree_node_selected(); @@ -74,37 +79,71 @@ protected: static void _bind_methods(); public: - bool get_make_callback() { return make_callback->is_visible() && make_callback->is_pressed(); } + Node *get_source() const; + StringName get_signal_name() const; NodePath get_dst_path() const; - StringName get_dst_method() const; + void set_dst_node(Node *p_node); + StringName get_dst_method_name() const; + void set_dst_method(const StringName &p_method); + Vector<Variant> get_binds() const; + + bool get_make_callback() { return make_callback->is_visible() && make_callback->is_pressed(); } bool get_deferred() const; bool get_oneshot() const; - Vector<Variant> get_binds() const; - void set_dst_method(const StringName &p_method); - void set_dst_node(Node *p_node); + bool is_editing() const; - void edit(Node *p_node); + void init(Connection c, bool bEdit = false); ConnectDialog(); ~ConnectDialog(); }; +//======================================== + class ConnectionsDock : public VBoxContainer { GDCLASS(ConnectionsDock, VBoxContainer); - Button *connect_button; - EditorNode *editor; - Node *node; + //Right-click Pop-up Menu Options. + enum SignalMenuOption { + CONNECT, + DISCONNECT_ALL + }; + + enum SlotMenuOption { + EDIT, + GO_TO_SCRIPT, + DISCONNECT + }; + + Node *selectedNode; Tree *tree; - ConfirmationDialog *remove_confirm; + EditorNode *editor; + + ConfirmationDialog *disconnect_all_dialog; ConnectDialog *connect_dialog; + Button *connect_button; + PopupMenu *signal_menu; + PopupMenu *slot_menu; + UndoRedo *undo_redo; + + void _make_or_edit_connection(); + void _connect(Connection cToMake); + void _disconnect(TreeItem &item); + void _disconnect_all(); + void _tree_item_selected(); + void _tree_item_activated(); + bool _is_item_signal(TreeItem &item); + + void _open_connection_dialog(TreeItem &item); + void _open_connection_dialog(Connection cToEdit); + void _go_to_script(TreeItem &item); + + void _handle_signal_menu_option(int option); + void _handle_slot_menu_option(int option); + void _rmb_pressed(Vector2 position); void _close(); - void _connect(); - void _something_selected(); - void _something_activated(); - UndoRedo *undo_redo; protected: void _connect_pressed(); @@ -113,9 +152,7 @@ protected: public: void set_undoredo(UndoRedo *p_undo_redo) { undo_redo = p_undo_redo; } - void set_node(Node *p_node); - String get_selected_type(); void update_tree(); ConnectionsDock(EditorNode *p_editor = NULL); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 48ceb82dc3..36978e37a5 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -87,7 +87,14 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { if (EditorSettings::get_singleton()->has_setting("interface/dialogs/create_new_node_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); } else { - popup_centered_ratio(); + + Size2 popup_size = Size2(900, 700) * editor_get_scale(); + Size2 window_size = get_viewport_rect().size; + + popup_size.x = MIN(window_size.x * 0.8, popup_size.x); + popup_size.y = MIN(window_size.y * 0.8, popup_size.y); + + popup_centered(popup_size); } if (p_dont_clear) { @@ -316,6 +323,10 @@ void CreateDialog::_update_search() { } } + if (search_box->get_text() == "") { + to_select = root; + } + if (to_select) { to_select->select(0); search_options->scroll_to_item(to_select); @@ -429,26 +440,7 @@ Object *CreateDialog::instance_selected() { custom = md; if (custom != String()) { - if (EditorNode::get_editor_data().get_custom_types().has(custom)) { - - for (int i = 0; i < EditorNode::get_editor_data().get_custom_types()[custom].size(); i++) { - if (EditorNode::get_editor_data().get_custom_types()[custom][i].name == selected->get_text(0)) { - Ref<Texture> icon = EditorNode::get_editor_data().get_custom_types()[custom][i].icon; - Ref<Script> script = EditorNode::get_editor_data().get_custom_types()[custom][i].script; - String name = selected->get_text(0); - - Object *ob = ClassDB::instance(custom); - ERR_FAIL_COND_V(!ob, NULL); - if (ob->is_class("Node")) { - ob->call("set_name", name); - } - ob->set_script(script.get_ref_ptr()); - if (icon.is_valid()) - ob->set_meta("_editor_icon", icon); - return ob; - } - } - } + return EditorNode::get_editor_data().instance_custom_type(selected->get_text(0), custom); } else { return ClassDB::instance(selected->get_text(0)); } @@ -472,6 +464,8 @@ void CreateDialog::_item_selected() { return; help_bit->set_text(EditorHelp::get_doc_data()->class_list[name].brief_description); + + get_ok()->set_disabled(false); } void CreateDialog::_favorite_toggled() { diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 19fd297f69..953d787322 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -472,17 +472,18 @@ void DependencyRemoveDialog::_build_removed_dependency_tree(const Vector<Removed void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<String> &p_files) { all_remove_files.clear(); - to_delete.clear(); + dirs_to_delete.clear(); + files_to_delete.clear(); owners->clear(); for (int i = 0; i < p_folders.size(); ++i) { String folder = p_folders[i].ends_with("/") ? p_folders[i] : (p_folders[i] + "/"); _find_files_in_removed_folder(EditorFileSystem::get_singleton()->get_filesystem_path(folder), folder); - to_delete.push_back(folder); + dirs_to_delete.push_back(folder); } for (int i = 0; i < p_files.size(); ++i) { all_remove_files[p_files[i]] = String(); - to_delete.push_back(p_files[i]); + files_to_delete.push_back(p_files[i]); } Vector<RemovedDependency> removed_deps; @@ -502,29 +503,49 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector< } void DependencyRemoveDialog::ok_pressed() { - bool files_only = true; - for (int i = 0; i < to_delete.size(); ++i) { - if (to_delete[i].ends_with("/")) { - files_only = false; - } else if (ResourceCache::has(to_delete[i])) { - Resource *res = ResourceCache::get(to_delete[i]); - res->set_path(""); //clear reference to path + + if (dirs_to_delete.size() == 0) { + //If we only deleted files we should only need to tell the file system about the files we touched. + for (int i = 0; i < files_to_delete.size(); ++i) + EditorFileSystem::get_singleton()->update_file(files_to_delete[i]); + } else { + + for (int i = 0; i < files_to_delete.size(); ++i) { + if (ResourceCache::has(files_to_delete[i])) { + Resource *res = ResourceCache::get(files_to_delete[i]); + res->set_path(""); + } + String path = OS::get_singleton()->get_resource_dir() + files_to_delete[i].replace_first("res://", "/"); + print_line("Moving to trash: " + path); + Error err = OS::get_singleton()->move_to_trash(path); + if (err != OK) { + EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + files_to_delete[i] + "\n"); + } } - String path = OS::get_singleton()->get_resource_dir() + to_delete[i].replace_first("res://", "/"); - print_line("Moving to trash: " + path); - Error err = OS::get_singleton()->move_to_trash(path); - if (err != OK) { - EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + to_delete[i] + "\n"); + for (int i = 0; i < dirs_to_delete.size(); ++i) { + String path = OS::get_singleton()->get_resource_dir() + dirs_to_delete[i].replace_first("res://", "/"); + print_line("Moving to trash: " + path); + Error err = OS::get_singleton()->move_to_trash(path); + if (err != OK) { + EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + dirs_to_delete[i] + "\n"); + } } - } - if (files_only) { - //If we only deleted files we should only need to tell the file system about the files we touched. - for (int i = 0; i < to_delete.size(); ++i) { - EditorFileSystem::get_singleton()->update_file(to_delete[i]); + // if some dirs would be deleted, favorite dirs need to be updated + Vector<String> previous_favorite_dirs = EditorSettings::get_singleton()->get_favorite_dirs(); + Vector<String> new_favorite_dirs; + + for (int i = 0; i < previous_favorite_dirs.size(); ++i) { + if (dirs_to_delete.find(previous_favorite_dirs[i] + "/") < 0) { + new_favorite_dirs.push_back(previous_favorite_dirs[i]); + } } - } else { + + if (new_favorite_dirs.size() < previous_favorite_dirs.size()) { + EditorSettings::get_singleton()->set_favorite_dirs(new_favorite_dirs); + } + EditorFileSystem::get_singleton()->scan_changes(); } } diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h index 16135c352b..4f268de748 100644 --- a/editor/dependency_editor.h +++ b/editor/dependency_editor.h @@ -102,7 +102,8 @@ class DependencyRemoveDialog : public ConfirmationDialog { Tree *owners; Map<String, String> all_remove_files; - Vector<String> to_delete; + Vector<String> dirs_to_delete; + Vector<String> files_to_delete; struct RemovedDependency { String file; diff --git a/editor/dictionary_property_edit.cpp b/editor/dictionary_property_edit.cpp index 4c0ad59385..a87edfd00d 100644 --- a/editor/dictionary_property_edit.cpp +++ b/editor/dictionary_property_edit.cpp @@ -41,7 +41,7 @@ void DictionaryPropertyEdit::_notif_changev(const String &p_v) { void DictionaryPropertyEdit::_set_key(const Variant &p_old_key, const Variant &p_new_key) { - // TODO: Set key of a dictionary is not allowd yet + // TODO: Set key of a dictionary is not allowed yet return; } diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index 58eaab78ed..3434aa33f9 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -611,6 +611,14 @@ void DocData::generate(bool p_basic_types) { ArgumentDoc ad; argument_doc_from_arginfo(ad, mi.arguments[i]); + + int darg_idx = i - (mi.arguments.size() - mi.default_arguments.size()); + + if (darg_idx >= 0) { + Variant default_arg = E->get().default_arguments[darg_idx]; + ad.default_value = default_arg.get_construct_string(); + } + md.arguments.push_back(ad); } @@ -966,7 +974,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri if (c.category == "") category = "Core"; header += " category=\"" + category + "\""; - header += String(" version=\"") + itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR) + "-" + VERSION_STATUS + "\""; + header += String(" version=\"") + VERSION_NUMBER + "\""; header += ">"; _write_string(f, 0, header); _write_string(f, 1, "<brief_description>"); diff --git a/editor/doc/doc_dump.cpp b/editor/doc/doc_dump.cpp index 905732a43f..adbe23dcd5 100644 --- a/editor/doc/doc_dump.cpp +++ b/editor/doc/doc_dump.cpp @@ -83,7 +83,7 @@ void DocDump::dump(const String &p_file) { FileAccess *f = FileAccess::open(p_file, FileAccess::WRITE); _write_string(f, 0, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); - _write_string(f, 0, String("<doc version=\"") + itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR) + "-" + VERSION_STATUS + "\" name=\"Engine Types\">"); + _write_string(f, 0, String("<doc version=\"") + VERSION_NUMBER + "\" name=\"Engine Types\">"); while (class_list.size()) { diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index 9ab539da07..360ed620f6 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -44,9 +44,11 @@ void EditorAbout::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { - Ref<Font> font = EditorNode::get_singleton()->get_gui_base()->get_font("source", "EditorFonts"); + Control *base = EditorNode::get_singleton()->get_gui_base(); + Ref<Font> font = base->get_font("source", "EditorFonts"); _tpl_text->add_font_override("normal_font", font); _license_text->add_font_override("normal_font", font); + _logo->set_texture(base->get_icon("Logo", "EditorIcons")); } break; } } diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index 9d0de930f2..a084437226 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -121,6 +121,26 @@ void EditorAudioBus::_notification(int p_what) { set_process(is_visible_in_tree()); } + + if (p_what == NOTIFICATION_THEME_CHANGED) { + + for (int i = 0; i < cc; i++) { + channel[i].vu_l->set_under_texture(get_icon("BusVuEmpty", "EditorIcons")); + channel[i].vu_l->set_progress_texture(get_icon("BusVuFull", "EditorIcons")); + channel[i].vu_r->set_under_texture(get_icon("BusVuEmpty", "EditorIcons")); + channel[i].vu_r->set_progress_texture(get_icon("BusVuFull", "EditorIcons")); + channel[i].prev_active = true; + } + scale->set_texture(get_icon("BusVuDb", "EditorIcons")); + + disabled_vu = get_icon("BusVuFrozen", "EditorIcons"); + + solo->set_icon(get_icon("AudioBusSolo", "EditorIcons")); + mute->set_icon(get_icon("AudioBusMute", "EditorIcons")); + bypass->set_icon(get_icon("AudioBusBypass", "EditorIcons")); + + bus_options->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + } } void EditorAudioBus::update_send() { @@ -707,6 +727,9 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { channel[i].vu_r->set_min(-80); channel[i].vu_r->set_max(24); channel[i].vu_r->set_step(0.1); + + channel[i].peak_l = 0.0f; + channel[i].peak_r = 0.0f; } scale = memnew(TextureRect); @@ -716,6 +739,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effects->set_hide_root(true); effects->set_custom_minimum_size(Size2(0, 100) * EDSCALE); effects->set_hide_folding(true); + effects->set_v_size_flags(SIZE_EXPAND_FILL); vb->add_child(effects); effects->connect("item_edited", this, "_effect_edited"); effects->connect("cell_selected", this, "_effect_selected"); @@ -997,7 +1021,7 @@ void EditorAudioBuses::_select_layout() { void EditorAudioBuses::_save_as_layout() { file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_dialog->set_title(TTR("Save Audio Bus Layout As..")); + file_dialog->set_title(TTR("Save Audio Bus Layout As...")); file_dialog->set_current_path(edited_path); file_dialog->popup_centered_ratio(); new_layout = false; @@ -1006,7 +1030,7 @@ void EditorAudioBuses::_save_as_layout() { void EditorAudioBuses::_new_layout() { file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_dialog->set_title(TTR("Location for New Layout..")); + file_dialog->set_title(TTR("Location for New Layout...")); file_dialog->set_current_path(edited_path); file_dialog->popup_centered_ratio(); new_layout = true; @@ -1148,6 +1172,7 @@ EditorAudioBuses::EditorAudioBuses() { bus_scroll->set_enable_v_scroll(false); add_child(bus_scroll); bus_hb = memnew(HBoxContainer); + bus_hb->set_v_size_flags(SIZE_EXPAND_FILL); bus_scroll->add_child(bus_hb); save_timer = memnew(Timer); diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 393c33c1b0..a2f5c1aa1a 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -92,45 +92,7 @@ bool EditorAutoloadSettings::_autoload_name_is_valid(const String &p_name, Strin void EditorAutoloadSettings::_autoload_add() { - String name = autoload_add_name->get_text(); - - String error; - if (!_autoload_name_is_valid(name, &error)) { - EditorNode::get_singleton()->show_warning(error); - return; - } - - String path = autoload_add_path->get_line_edit()->get_text(); - if (!FileAccess::exists(path)) { - EditorNode::get_singleton()->show_warning(TTR("Invalid Path.") + "\n" + TTR("File does not exist.")); - return; - } - - if (!path.begins_with("res://")) { - EditorNode::get_singleton()->show_warning(TTR("Invalid Path.") + "\n" + TTR("Not in resource path.")); - return; - } - - name = "autoload/" + name; - - UndoRedo *undo_redo = EditorNode::get_singleton()->get_undo_redo(); - - undo_redo->create_action(TTR("Add AutoLoad")); - undo_redo->add_do_property(ProjectSettings::get_singleton(), name, "*" + path); - - if (ProjectSettings::get_singleton()->has_setting(name)) { - undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, ProjectSettings::get_singleton()->get(name)); - } else { - undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, Variant()); - } - - undo_redo->add_do_method(this, "update_autoload"); - undo_redo->add_undo_method(this, "update_autoload"); - - undo_redo->add_do_method(this, "emit_signal", autoload_changed); - undo_redo->add_undo_method(this, "emit_signal", autoload_changed); - - undo_redo->commit_action(); + autoload_add(autoload_add_name->get_text(), autoload_add_path->get_line_edit()->get_text()); autoload_add_path->get_line_edit()->set_text(""); autoload_add_name->set_text(""); @@ -246,7 +208,9 @@ void EditorAutoloadSettings::_autoload_button_pressed(Object *p_item, int p_colu UndoRedo *undo_redo = EditorNode::get_undo_redo(); switch (p_button) { - + case BUTTON_OPEN: { + _autoload_open(ti->get_text(1)); + } break; case BUTTON_MOVE_UP: case BUTTON_MOVE_DOWN: { @@ -305,6 +269,21 @@ void EditorAutoloadSettings::_autoload_button_pressed(Object *p_item, int p_colu } } +void EditorAutoloadSettings::_autoload_activated() { + TreeItem *ti = tree->get_selected(); + if (!ti) + return; + _autoload_open(ti->get_text(1)); +} + +void EditorAutoloadSettings::_autoload_open(const String &fpath) { + if (ResourceLoader::get_resource_type(fpath) == "PackedScene") { + EditorNode::get_singleton()->open_request(fpath); + } else { + EditorNode::get_singleton()->load_resource(fpath); + } + ProjectSettingsEditor::get_singleton()->hide(); +} void EditorAutoloadSettings::_autoload_file_callback(const String &p_path) { autoload_add_name->set_text(p_path.get_file().get_basename()); @@ -356,13 +335,13 @@ void EditorAutoloadSettings::update_autoload() { item->set_editable(0, true); item->set_text(1, path); - item->set_selectable(1, false); + item->set_selectable(1, true); item->set_cell_mode(2, TreeItem::CELL_MODE_CHECK); item->set_editable(2, true); item->set_text(2, TTR("Enable")); item->set_checked(2, global); - + item->add_button(3, get_icon("FileList", "EditorIcons"), BUTTON_OPEN); item->add_button(3, get_icon("MoveUp", "EditorIcons"), BUTTON_MOVE_UP); item->add_button(3, get_icon("MoveDown", "EditorIcons"), BUTTON_MOVE_DOWN); item->add_button(3, get_icon("Remove", "EditorIcons"), BUTTON_DELETE); @@ -522,6 +501,74 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & undo_redo->commit_action(); } +void EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_path) { + + String name = p_name; + + String error; + if (!_autoload_name_is_valid(name, &error)) { + EditorNode::get_singleton()->show_warning(error); + return; + } + + String path = p_path; + if (!FileAccess::exists(path)) { + EditorNode::get_singleton()->show_warning(TTR("Invalid Path.") + "\n" + TTR("File does not exist.")); + return; + } + + if (!path.begins_with("res://")) { + EditorNode::get_singleton()->show_warning(TTR("Invalid Path.") + "\n" + TTR("Not in resource path.")); + return; + } + + name = "autoload/" + name; + + UndoRedo *undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + undo_redo->create_action(TTR("Add AutoLoad")); + undo_redo->add_do_property(ProjectSettings::get_singleton(), name, "*" + path); + + if (ProjectSettings::get_singleton()->has_setting(name)) { + undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, ProjectSettings::get_singleton()->get(name)); + } else { + undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, Variant()); + } + + undo_redo->add_do_method(this, "update_autoload"); + undo_redo->add_undo_method(this, "update_autoload"); + + undo_redo->add_do_method(this, "emit_signal", autoload_changed); + undo_redo->add_undo_method(this, "emit_signal", autoload_changed); + + undo_redo->commit_action(); +} + +void EditorAutoloadSettings::autoload_remove(const String &p_name) { + + String name = "autoload/" + p_name; + + UndoRedo *undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + int order = ProjectSettings::get_singleton()->get_order(name); + + undo_redo->create_action(TTR("Remove Autoload")); + + undo_redo->add_do_property(ProjectSettings::get_singleton(), name, Variant()); + + undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, ProjectSettings::get_singleton()->get(name)); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_persisting", name, true); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", order); + + undo_redo->add_do_method(this, "update_autoload"); + undo_redo->add_undo_method(this, "update_autoload"); + + undo_redo->add_do_method(this, "emit_signal", autoload_changed); + undo_redo->add_undo_method(this, "emit_signal", autoload_changed); + + undo_redo->commit_action(); +} + void EditorAutoloadSettings::_bind_methods() { ClassDB::bind_method("_autoload_add", &EditorAutoloadSettings::_autoload_add); @@ -529,12 +576,16 @@ void EditorAutoloadSettings::_bind_methods() { ClassDB::bind_method("_autoload_edited", &EditorAutoloadSettings::_autoload_edited); ClassDB::bind_method("_autoload_button_pressed", &EditorAutoloadSettings::_autoload_button_pressed); ClassDB::bind_method("_autoload_file_callback", &EditorAutoloadSettings::_autoload_file_callback); + ClassDB::bind_method("_autoload_activated", &EditorAutoloadSettings::_autoload_activated); + ClassDB::bind_method("_autoload_open", &EditorAutoloadSettings::_autoload_open); ClassDB::bind_method("get_drag_data_fw", &EditorAutoloadSettings::get_drag_data_fw); ClassDB::bind_method("can_drop_data_fw", &EditorAutoloadSettings::can_drop_data_fw); ClassDB::bind_method("drop_data_fw", &EditorAutoloadSettings::drop_data_fw); ClassDB::bind_method("update_autoload", &EditorAutoloadSettings::update_autoload); + ClassDB::bind_method("autoload_add", &EditorAutoloadSettings::autoload_add); + ClassDB::bind_method("autoload_remove", &EditorAutoloadSettings::autoload_remove); ADD_SIGNAL(MethodInfo("autoload_changed")); } @@ -592,15 +643,15 @@ EditorAutoloadSettings::EditorAutoloadSettings() { tree->set_column_title(2, TTR("Singleton")); tree->set_column_expand(2, false); - tree->set_column_min_width(2, 80); + tree->set_column_min_width(2, 80 * EDSCALE); tree->set_column_expand(3, false); - tree->set_column_min_width(3, 80); + tree->set_column_min_width(3, 120 * EDSCALE); tree->connect("cell_selected", this, "_autoload_selected"); tree->connect("item_edited", this, "_autoload_edited"); tree->connect("button_pressed", this, "_autoload_button_pressed"); - + tree->connect("item_activated", this, "_autoload_activated"); tree->set_v_size_flags(SIZE_EXPAND_FILL); add_child(tree, true); diff --git a/editor/editor_autoload_settings.h b/editor/editor_autoload_settings.h index 39f902179c..6f622de6d5 100644 --- a/editor/editor_autoload_settings.h +++ b/editor/editor_autoload_settings.h @@ -40,6 +40,7 @@ class EditorAutoloadSettings : public VBoxContainer { GDCLASS(EditorAutoloadSettings, VBoxContainer); enum { + BUTTON_OPEN, BUTTON_MOVE_UP, BUTTON_MOVE_DOWN, BUTTON_DELETE @@ -72,6 +73,8 @@ class EditorAutoloadSettings : public VBoxContainer { void _autoload_selected(); void _autoload_edited(); void _autoload_button_pressed(Object *p_item, int p_column, int p_button); + void _autoload_activated(); + void _autoload_open(const String &fpath); void _autoload_file_callback(const String &p_path); Variant get_drag_data_fw(const Point2 &p_point, Control *p_control); @@ -84,6 +87,8 @@ protected: public: void update_autoload(); + void autoload_add(const String &p_name, const String &p_path); + void autoload_remove(const String &p_name); EditorAutoloadSettings(); }; diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 95ed40d889..b584107bcb 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -364,6 +364,14 @@ void EditorData::notify_edited_scene_changed() { } } +void EditorData::notify_resource_saved(const Ref<Resource> &p_resource) { + + for (int i = 0; i < editor_plugins.size(); i++) { + + editor_plugins[i]->notify_resource_saved(p_resource); + } +} + void EditorData::clear_editor_states() { for (int i = 0; i < editor_plugins.size(); i++) { @@ -452,6 +460,31 @@ 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) { + + 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<Texture> icon = get_custom_types()[p_inherits][i].icon; + Ref<Script> script = get_custom_types()[p_inherits][i].script; + + Object *ob = ClassDB::instance(p_inherits); + ERR_FAIL_COND_V(!ob, NULL); + if (ob->is_class("Node")) { + ob->call("set_name", p_type); + } + ob->set_script(script.get_ref_ptr()); + if (icon.is_valid()) + ob->set_meta("_editor_icon", icon); + return ob; + } + } + } + + return NULL; +} + void EditorData::remove_custom_type(const String &p_type) { for (Map<String, Vector<CustomType> >::Element *E = custom_types.front(); E; E = E->next()) { @@ -563,18 +596,16 @@ bool EditorData::check_and_update_scene(int p_idx) { bool must_reload = _find_updated_instances(edited_scene[p_idx].root, edited_scene[p_idx].root, checked_scenes); - print_line("MUST RELOAD? " + itos(must_reload)); - if (must_reload) { Ref<PackedScene> pscene; pscene.instance(); EditorProgress ep("update_scene", TTR("Updating Scene"), 2); - ep.step(TTR("Storing local changes.."), 0); + ep.step(TTR("Storing local changes..."), 0); //pack first, so it stores diffs to previous version of saved scene Error err = pscene->pack(edited_scene[p_idx].root); ERR_FAIL_COND_V(err != OK, false); - ep.step(TTR("Updating scene.."), 1); + ep.step(TTR("Updating scene..."), 1); Node *new_scene = pscene->instance(PackedScene::GEN_EDIT_STATE_MAIN); ERR_FAIL_COND_V(!new_scene, false); diff --git a/editor/editor_data.h b/editor/editor_data.h index 844145853d..5a0b58464a 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -171,6 +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<Texture> &p_icon); + Object *instance_custom_type(const String &p_type, const String &p_inherits); void remove_custom_type(const String &p_type); const Map<String, Vector<CustomType> > &get_custom_types() const { return custom_types; } @@ -203,6 +204,7 @@ public: void save_edited_scene_state(EditorSelection *p_selection, EditorHistory *p_history, const Dictionary &p_custom); Dictionary restore_edited_scene_state(EditorSelection *p_selection, EditorHistory *p_history); void notify_edited_scene_changed(); + void notify_resource_saved(const Ref<Resource> &p_resource); EditorData(); }; diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index c9ac62a74d..7739b08eff 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -274,8 +274,6 @@ void EditorExportPlatform::gen_debug_flags(Vector<String> &r_flags, int p_flags) } Error EditorExportPlatform::_save_pack_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) { - if (p_path.ends_with(".so") || p_path.ends_with(".dylib") || p_path.ends_with(".dll")) - return OK; PackData *pd = (PackData *)p_userdata; @@ -337,7 +335,7 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_pat String EditorExportPlatform::find_export_template(String template_file_name, String *err) const { - String current_version = itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR) + "-" + VERSION_STATUS + VERSION_MODULE_CONFIG; + String current_version = VERSION_FULL_CONFIG; String template_path = EditorSettings::get_singleton()->get_templates_dir().plus_file(current_version).plus_file(template_file_name); if (FileAccess::exists(template_path)) { @@ -913,6 +911,16 @@ Error EditorExportPlatform::save_zip(const Ref<EditorExportPreset> &p_preset, co return OK; } +Error EditorExportPlatform::export_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { + ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags); + return save_pack(p_preset, p_path); +} + +Error EditorExportPlatform::export_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { + ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags); + return save_zip(p_preset, p_path); +} + void EditorExportPlatform::gen_export_flags(Vector<String> &r_flags, int p_flags) { String host = EditorSettings::get_singleton()->get("network/debug/remote_host"); @@ -1264,6 +1272,7 @@ bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, String err; bool valid = true; + bool use64 = p_preset->get("binary_format/64_bits"); if (use64 && (!exists_export_template(debug_file_64, &err) || !exists_export_template(release_file_64, &err))) { valid = false; @@ -1354,27 +1363,24 @@ Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_pr DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); Error err = da->copy(template_path, p_path, get_chmod_flags()); - memdelete(da); - - if (err != OK) { - return err; - } + if (err == OK) { + String pck_path = p_path.get_basename() + ".pck"; - String pck_path = p_path.get_basename() + ".pck"; + Vector<SharedObject> so_files; - Vector<SharedObject> so_files; + err = save_pack(p_preset, pck_path, &so_files); - err = save_pack(p_preset, pck_path, &so_files); - - if (err != OK || so_files.empty()) - return err; - //if shared object files, copy them - da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - for (int i = 0; i < so_files.size(); i++) { - da->copy(so_files[i].path, p_path.get_base_dir().plus_file(so_files[i].path.get_file())); + if (err == OK && !so_files.empty()) { + //if shared object files, copy them + da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + for (int i = 0; i < so_files.size() && err == OK; i++) { + err = da->copy(so_files[i].path, p_path.get_base_dir().plus_file(so_files[i].path.get_file())); + } + } } + memdelete(da); - return OK; + return err; } void EditorExportPlatformPC::set_extension(const String &p_extension, const String &p_feature_key) { diff --git a/editor/editor_export.h b/editor/editor_export.h index e851769279..1d0b89cf16 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -243,6 +243,8 @@ public: virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const = 0; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) = 0; + virtual Error export_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); + virtual Error export_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual void get_platform_features(List<String> *r_features) = 0; EditorExportPlatform(); @@ -373,7 +375,6 @@ class EditorExportPlatformPC : public EditorExportPlatform { Set<String> extra_features; - bool use64; int chmod_flags; public: diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index f356c16827..8a8a21543b 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -458,6 +458,23 @@ void EditorFileDialog::_item_selected(int p_item) { get_ok()->set_disabled(_is_open_should_be_disabled()); } +void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { + + int current = p_item; + if (current < 0 || current >= item_list->get_item_count()) + return; + + Dictionary d = item_list->get_item_metadata(current); + + if (!d["dir"] && p_selected) { + + file->set_text(d["name"]); + _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); + } + + get_ok()->set_disabled(_is_open_should_be_disabled()); +} + void EditorFileDialog::_items_clear_selection() { item_list->unselect_all(); @@ -534,7 +551,7 @@ void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p } if (single_item_selected) { - item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Path"), ITEM_MENU_COPY_PATH); + item_menu->add_icon_item(get_icon("ActionCopy", "EditorIcons"), TTR("Copy Path"), ITEM_MENU_COPY_PATH); } if (allow_delete) { item_menu->add_icon_item(get_icon("Remove", "EditorIcons"), TTR("Delete"), ITEM_MENU_DELETE, KEY_DELETE); @@ -561,7 +578,7 @@ void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) { item_menu->set_size(Size2(1, 1)); if (can_create_dir) { - item_menu->add_icon_item(get_icon("folder", "FileDialog"), TTR("New Folder.."), ITEM_MENU_NEW_FOLDER, KEY_MASK_CMD | KEY_N); + item_menu->add_icon_item(get_icon("folder", "FileDialog"), TTR("New Folder..."), ITEM_MENU_NEW_FOLDER, KEY_MASK_CMD | KEY_N); } item_menu->add_icon_item(get_icon("Reload", "EditorIcons"), TTR("Refresh"), ITEM_MENU_REFRESH, KEY_F5); item_menu->add_separator(); @@ -1010,6 +1027,7 @@ void EditorFileDialog::invalidate() { if (is_visible_in_tree()) { update_file_list(); + _update_favorites(); invalidated = false; } else { invalidated = true; @@ -1290,6 +1308,7 @@ void EditorFileDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("_unhandled_input"), &EditorFileDialog::_unhandled_input); ClassDB::bind_method(D_METHOD("_item_selected"), &EditorFileDialog::_item_selected); + ClassDB::bind_method(D_METHOD("_multi_selected"), &EditorFileDialog::_multi_selected); ClassDB::bind_method(D_METHOD("_items_clear_selection"), &EditorFileDialog::_items_clear_selection); ClassDB::bind_method(D_METHOD("_item_list_item_rmb_selected"), &EditorFileDialog::_item_list_item_rmb_selected); ClassDB::bind_method(D_METHOD("_item_list_rmb_clicked"), &EditorFileDialog::_item_list_rmb_clicked); @@ -1598,6 +1617,7 @@ EditorFileDialog::EditorFileDialog() { connect("confirmed", this, "_action_pressed"); item_list->connect("item_selected", this, "_item_selected", varray(), CONNECT_DEFERRED); + item_list->connect("multi_selected", this, "_multi_selected", varray(), CONNECT_DEFERRED); item_list->connect("item_activated", this, "_item_db_selected", varray()); item_list->connect("nothing_selected", this, "_items_clear_selection"); dir->connect("text_entered", this, "_dir_entered"); diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h index 05f66eadbf..b1f8f1108c 100644 --- a/editor/editor_file_dialog.h +++ b/editor/editor_file_dialog.h @@ -159,6 +159,7 @@ private: void _recent_selected(int p_idx); void _item_selected(int p_item); + void _multi_selected(int p_item, bool p_selected); void _items_clear_selection(); void _item_dc_selected(int p_item); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index dca32d7492..d8ae1da72e 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -275,9 +275,13 @@ void EditorFileSystem::_scan_filesystem() { memdelete(d); f = FileAccess::open(fscache, FileAccess::WRITE); - _save_filesystem_cache(new_filesystem, f); - f->close(); - memdelete(f); + if (f == NULL) { + ERR_PRINTS("Error writing fscache: " + fscache); + } else { + _save_filesystem_cache(new_filesystem, f); + f->close(); + memdelete(f); + } scanning = false; } @@ -286,9 +290,13 @@ void EditorFileSystem::_save_filesystem_cache() { String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_cache3"); FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE); - _save_filesystem_cache(filesystem, f); - f->close(); - memdelete(f); + if (f == NULL) { + ERR_PRINTS("Error writing fscache: " + fscache); + } else { + _save_filesystem_cache(filesystem, f); + f->close(); + memdelete(f); + } } void EditorFileSystem::_thread_func(void *_userdata) { @@ -321,10 +329,10 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo List<String> to_check; - String source_file; - String source_md5; + String source_file = ""; + String source_md5 = ""; Vector<String> dest_files; - String dest_md5; + String dest_md5 = ""; while (true) { @@ -334,7 +342,6 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo err = VariantParser::parse_tag_assign_eof(&stream, lines, error_text, next_tag, assign, value, NULL, true); if (err == ERR_FILE_EOF) { - memdelete(f); break; } else if (err != OK) { ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import:" + itos(lines) + " error: " + error_text); @@ -351,12 +358,8 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo to_check.push_back(fa[i]); } } else if (!p_only_imported_files) { - if (assign == "source_md5") { - source_md5 = value; - } else if (assign == "source_file") { + if (assign == "source_file") { source_file = value; - } else if (assign == "dest_md5") { - dest_md5 = value; } else if (assign == "dest_files") { dest_files = value; } @@ -369,6 +372,42 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo memdelete(f); + // Read the md5's from a separate file (so the import parameters aren't dependant 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); + if (!md5s) { // No md5's stored for this resource + return true; + } + + VariantParser::StreamFile md5_stream; + md5_stream.f = md5s; + + while (true) { + assign = Variant(); + next_tag.fields.clear(); + next_tag.name = String(); + + err = VariantParser::parse_tag_assign_eof(&md5_stream, lines, error_text, next_tag, assign, value, NULL, true); + + if (err == ERR_FILE_EOF) { + break; + } else if (err != OK) { + ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import.md5:" + itos(lines) + " error: " + error_text); + memdelete(md5s); + return false; // parse error + } + if (assign != String()) { + if (!p_only_imported_files) { + if (assign == "source_md5") { + source_md5 = value; + } else if (assign == "dest_md5") { + dest_md5 = value; + } + } + } + } + memdelete(md5s); + //imported files are gone, reimport for (List<String>::Element *E = to_check.front(); E; E = E->next()) { if (!FileAccess::exists(E->get())) { @@ -1316,6 +1355,9 @@ void EditorFileSystem::update_file(const String &p_file) { fs->files[cpos]->deps = _get_dependencies(p_file); fs->files[cpos]->import_valid = ResourceLoader::is_import_valid(p_file); + // Update preview + EditorResourcePreview::get_singleton()->check_for_invalidation(p_file); + call_deferred("emit_signal", "filesystem_changed"); //update later } @@ -1456,15 +1498,13 @@ void EditorFileSystem::_reimport_file(const String &p_file) { } f->store_line("source_file=" + Variant(p_file).get_construct_string()); - f->store_line("source_md5=\"" + FileAccess::get_md5(p_file) + "\"\n"); if (dest_paths.size()) { Array dp; for (int i = 0; i < dest_paths.size(); i++) { dp.push_back(dest_paths[i]); } - f->store_line("dest_files=" + Variant(dp).get_construct_string()); - f->store_line("dest_md5=\"" + FileAccess::get_multiple_md5(dest_paths) + "\"\n"); + f->store_line("dest_files=" + Variant(dp).get_construct_string() + "\n"); } f->store_line("[params]"); @@ -1483,6 +1523,16 @@ void EditorFileSystem::_reimport_file(const String &p_file) { f->close(); memdelete(f); + // Store the md5's of the various files. These are stored separately so that the .import files can be version controlled. + FileAccess *md5s = FileAccess::open(base_path + ".md5", FileAccess::WRITE); + ERR_FAIL_COND(!md5s); + md5s->store_line("source_md5=\"" + FileAccess::get_md5(p_file) + "\""); + if (dest_paths.size()) { + md5s->store_line("dest_md5=\"" + FileAccess::get_multiple_md5(dest_paths) + "\"\n"); + } + md5s->close(); + memdelete(md5s); + //update modified times, to avoid reimport fs->files[cpos]->modified_time = FileAccess::get_modified_time(p_file); fs->files[cpos]->import_modified_time = FileAccess::get_modified_time(p_file + ".import"); diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index a58257962a..26f16e282e 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -85,6 +85,20 @@ static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_valign, int p m_name->set_spacing(DynamicFont::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 (CustomFont.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); \ + MAKE_FALLBACKS(m_name); + #define MAKE_SOURCE_FONT(m_name, m_size) \ Ref<DynamicFont> m_name; \ m_name.instance(); \ @@ -102,86 +116,124 @@ static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_valign, int p void editor_register_fonts(Ref<Theme> p_theme) { /* Custom font */ - String custom_font = EditorSettings::get_singleton()->get("interface/editor/main_font"); + DynamicFontData::Hinting font_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/main_font_hinting"); + + String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font"); Ref<DynamicFontData> CustomFont; - if (custom_font.length() > 0) { + if (custom_font_path.length() > 0) { CustomFont.instance(); - CustomFont->set_font_path(custom_font); + CustomFont->set_hinting(font_hinting); + CustomFont->set_font_path(custom_font_path); CustomFont->set_force_autohinter(true); //just looks better..i think? } + /* Custom Bold font */ + + String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold"); + Ref<DynamicFontData> CustomFontBold; + if (custom_font_path_bold.length() > 0) { + CustomFontBold.instance(); + CustomFontBold->set_hinting(font_hinting); + CustomFontBold->set_font_path(custom_font_path_bold); + CustomFontBold->set_force_autohinter(true); //just looks better..i think? + } + /* Custom source code font */ - String custom_font_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); + String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); + DynamicFontData::Hinting font_source_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/code_font_hinting"); Ref<DynamicFontData> CustomFontSource; - if (custom_font_source.length() > 0) { + if (custom_font_path_source.length() > 0) { CustomFontSource.instance(); - CustomFontSource->set_font_path(custom_font_source); + CustomFontSource->set_hinting(font_source_hinting); + CustomFontSource->set_font_path(custom_font_path_source); } /* Droid Sans */ Ref<DynamicFontData> DefaultFont; DefaultFont.instance(); + 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; + DefaultFontBold.instance(); + DefaultFont->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; FontFallback.instance(); + 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; FontJapanese.instance(); + 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; FontArabic.instance(); + 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; FontHebrew.instance(); + 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; FontThai.instance(); + 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? - /* Source Code Pro */ + /* Hack */ Ref<DynamicFontData> dfmono; dfmono.instance(); + dfmono->set_hinting(font_source_hinting); dfmono->set_font_ptr(_font_Hack_Regular, _font_Hack_Regular_size); //dfd->set_force_autohinter(true); //just looks better..i think? int default_font_size = int(EditorSettings::get_singleton()->get("interface/editor/main_font_size")) * EDSCALE; - MAKE_DEFAULT_FONT(df, default_font_size); + // Default font + MAKE_DEFAULT_FONT(df, default_font_size); p_theme->set_default_theme_font(df); - MAKE_DEFAULT_FONT(df_title, default_font_size + 2 * EDSCALE); + // Bold font + MAKE_BOLD_FONT(df_bold, 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); - MAKE_DEFAULT_FONT(df_doc_title, int(EDITOR_DEF("text_editor/help/help_title_font_size", 23)) * EDSCALE); + // Doc font + MAKE_BOLD_FONT(df_doc_title, int(EDITOR_DEF("text_editor/help/help_title_font_size", 23)) * EDSCALE); MAKE_DEFAULT_FONT(df_doc, int(EDITOR_DEF("text_editor/help/help_font_size", 15)) * EDSCALE); p_theme->set_font("doc", "EditorFonts", df_doc); p_theme->set_font("doc_title", "EditorFonts", df_doc_title); + MAKE_SOURCE_FONT(df_doc_code, int(EDITOR_DEF("text_editor/help/help_source_font_size", 14)) * EDSCALE); + p_theme->set_font("doc_source", "EditorFonts", df_doc_code); + + // Ruler font MAKE_DEFAULT_FONT(df_rulers, 8 * EDSCALE); p_theme->set_font("rulers", "EditorFonts", df_rulers); + // Code font MAKE_SOURCE_FONT(df_code, int(EditorSettings::get_singleton()->get("interface/editor/code_font_size")) * EDSCALE); p_theme->set_font("source", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_doc_code, int(EDITOR_DEF("text_editor/help/help_source_font_size", 14)) * EDSCALE); - p_theme->set_font("doc_source", "EditorFonts", df_doc_code); - MAKE_SOURCE_FONT(df_output_code, int(EDITOR_DEF("run/output/font_size", 13)) * EDSCALE); p_theme->set_font("output_source", "EditorFonts", df_output_code); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 198a52fef2..f3be02a8c7 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -81,162 +81,147 @@ void EditorHelpSearch::_sbox_input(const Ref<InputEvent> &p_ie) { } } -class EditorHelpSearch::IncrementalSearch : public Reference { - String term; - TreeItem *root; +void EditorHelpSearch::IncrementalSearch::phase1(Map<String, DocData::ClassDoc>::Element *E) { - EditorHelpSearch *search; - Tree *search_options; + if (E->key().findn(term) != -1) { - DocData *doc; - Ref<Texture> def_icon; - - int phase; - Map<String, DocData::ClassDoc>::Element *iterator; - - void phase1(Map<String, DocData::ClassDoc>::Element *E) { - - if (E->key().findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_name:" + E->key()); - item->set_text(0, E->key() + " (Class)"); - if (search->has_icon(E->key(), "EditorIcons")) - item->set_icon(0, search->get_icon(E->key(), "EditorIcons")); - else - item->set_icon(0, def_icon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_name:" + E->key()); + item->set_text(0, E->key() + " (Class)"); + if (search->has_icon(E->key(), "EditorIcons")) + item->set_icon(0, search->get_icon(E->key(), "EditorIcons")); + else + item->set_icon(0, def_icon); } +} - void phase2(Map<String, DocData::ClassDoc>::Element *E) { +void EditorHelpSearch::IncrementalSearch::phase2(Map<String, DocData::ClassDoc>::Element *E) { - DocData::ClassDoc &c = E->get(); + DocData::ClassDoc &c = E->get(); - Ref<Texture> cicon; - if (search->has_icon(E->key(), "EditorIcons")) - cicon = search->get_icon(E->key(), "EditorIcons"); - else - cicon = def_icon; + Ref<Texture> cicon; + if (search->has_icon(E->key(), "EditorIcons")) + cicon = search->get_icon(E->key(), "EditorIcons"); + else + cicon = def_icon; - for (int i = 0; i < c.methods.size(); i++) { - if ((term.begins_with(".") && c.methods[i].name.begins_with(term.right(1))) || (term.ends_with("(") && c.methods[i].name.ends_with(term.left(term.length() - 1).strip_edges())) || (term.begins_with(".") && term.ends_with("(") && c.methods[i].name == term.substr(1, term.length() - 2).strip_edges()) || c.methods[i].name.findn(term) != -1) { + for (int i = 0; i < c.methods.size(); i++) { + if ((term.begins_with(".") && c.methods[i].name.begins_with(term.right(1))) || (term.ends_with("(") && c.methods[i].name.ends_with(term.left(term.length() - 1).strip_edges())) || (term.begins_with(".") && term.ends_with("(") && c.methods[i].name == term.substr(1, term.length() - 2).strip_edges()) || c.methods[i].name.findn(term) != -1) { - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_method:" + E->key() + ":" + c.methods[i].name); - item->set_text(0, E->key() + "." + c.methods[i].name + " (Method)"); - item->set_icon(0, cicon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_method:" + E->key() + ":" + c.methods[i].name); + item->set_text(0, E->key() + "." + c.methods[i].name + " (Method)"); + item->set_icon(0, cicon); } + } - for (int i = 0; i < c.signals.size(); i++) { + for (int i = 0; i < c.signals.size(); i++) { - if (c.signals[i].name.findn(term) != -1) { + if (c.signals[i].name.findn(term) != -1) { - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_signal:" + E->key() + ":" + c.signals[i].name); - item->set_text(0, E->key() + "." + c.signals[i].name + " (Signal)"); - item->set_icon(0, cicon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_signal:" + E->key() + ":" + c.signals[i].name); + item->set_text(0, E->key() + "." + c.signals[i].name + " (Signal)"); + item->set_icon(0, cicon); } + } - for (int i = 0; i < c.constants.size(); i++) { + for (int i = 0; i < c.constants.size(); i++) { - if (c.constants[i].name.findn(term) != -1) { + if (c.constants[i].name.findn(term) != -1) { - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_constant:" + E->key() + ":" + c.constants[i].name); - item->set_text(0, E->key() + "." + c.constants[i].name + " (Constant)"); - item->set_icon(0, cicon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_constant:" + E->key() + ":" + c.constants[i].name); + item->set_text(0, E->key() + "." + c.constants[i].name + " (Constant)"); + item->set_icon(0, cicon); } + } - for (int i = 0; i < c.properties.size(); i++) { + for (int i = 0; i < c.properties.size(); i++) { - if (c.properties[i].name.findn(term) != -1) { + if (c.properties[i].name.findn(term) != -1) { - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_property:" + E->key() + ":" + c.properties[i].name); - item->set_text(0, E->key() + "." + c.properties[i].name + " (Property)"); - item->set_icon(0, cicon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_property:" + E->key() + ":" + c.properties[i].name); + item->set_text(0, E->key() + "." + c.properties[i].name + " (Property)"); + item->set_icon(0, cicon); } + } - for (int i = 0; i < c.theme_properties.size(); i++) { + for (int i = 0; i < c.theme_properties.size(); i++) { - if (c.theme_properties[i].name.findn(term) != -1) { + if (c.theme_properties[i].name.findn(term) != -1) { - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_theme_item:" + E->key() + ":" + c.theme_properties[i].name); - item->set_text(0, E->key() + "." + c.theme_properties[i].name + " (Theme Item)"); - item->set_icon(0, cicon); - } + TreeItem *item = search_options->create_item(root); + item->set_metadata(0, "class_theme_item:" + E->key() + ":" + c.theme_properties[i].name); + item->set_text(0, E->key() + "." + c.theme_properties[i].name + " (Theme Item)"); + item->set_icon(0, cicon); } } +} - bool slice() { +bool EditorHelpSearch::IncrementalSearch::slice() { - if (phase > 2) - return true; + if (phase > 2) + return true; - if (iterator) { + if (iterator) { - switch (phase) { + switch (phase) { - case 1: { - phase1(iterator); - } break; - case 2: { - phase2(iterator); - } break; - default: { - WARN_PRINT("illegal phase in IncrementalSearch"); - return true; - } + case 1: { + phase1(iterator); + } break; + case 2: { + phase2(iterator); + } break; + default: { + WARN_PRINT("illegal phase in IncrementalSearch"); + return true; } - - iterator = iterator->next(); - } else { - - phase += 1; - iterator = doc->class_list.front(); } - return false; + iterator = iterator->next(); + } else { + + phase += 1; + iterator = doc->class_list.front(); } -public: - IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term) : - search(p_search), - search_options(p_search_options) { + return false; +} - def_icon = search->get_icon("Node", "EditorIcons"); - doc = EditorHelp::get_doc_data(); +EditorHelpSearch::IncrementalSearch::IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term) : + search(p_search), + search_options(p_search_options) { - term = p_term; + def_icon = search->get_icon("Node", "EditorIcons"); + doc = EditorHelp::get_doc_data(); - root = search_options->create_item(); - phase = 0; - iterator = 0; - } + term = p_term; - bool empty() const { + root = search_options->create_item(); + phase = 0; + iterator = 0; +} - return root->get_children() == NULL; - } +bool EditorHelpSearch::IncrementalSearch::empty() const { - bool work(uint64_t slot = 1000000 / 10) { + return root->get_children() == NULL; +} - const uint64_t until = OS::get_singleton()->get_ticks_usec() + slot; +bool EditorHelpSearch::IncrementalSearch::work(uint64_t slot) { - while (!slice()) { + const uint64_t until = OS::get_singleton()->get_ticks_usec() + slot; - if (OS::get_singleton()->get_ticks_usec() > until) - return false; - } + while (!slice()) { - return true; + if (OS::get_singleton()->get_ticks_usec() > until) + return false; } -}; + + return true; +} void EditorHelpSearch::_update_search() { search_options->clear(); @@ -1187,7 +1172,12 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->push_indent(1); Vector<DocData::ConstantDoc> enum_list = E->get(); + Map<String, int> enumValuesContainer; + int enumStartingLine = enum_line[E->key()]; + for (int i = 0; i < enum_list.size(); i++) { + if (cd.name == "@GlobalScope") + enumValuesContainer[enum_list[i].name] = enumStartingLine; class_desc->push_font(doc_code_font); class_desc->push_color(headline_color); @@ -1215,6 +1205,9 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->add_newline(); } + if (cd.name == "@GlobalScope") + enum_values_line[E->key()] = enumValuesContainer; + class_desc->pop(); class_desc->add_newline(); @@ -1500,21 +1493,32 @@ void EditorHelp::_help_callback(const String &p_topic) { if (method_line.has(name)) line = method_line[name]; } else if (what == "class_property") { - if (property_line.has(name)) line = property_line[name]; } else if (what == "class_enum") { - if (enum_line.has(name)) line = enum_line[name]; } else if (what == "class_theme_item") { - if (theme_property_line.has(name)) line = theme_property_line[name]; } else if (what == "class_constant") { - if (constant_line.has(name)) line = constant_line[name]; + } else if (what == "class_global") { + if (constant_line.has(name)) + line = constant_line[name]; + else { + Map<String, Map<String, int> >::Element *iter = enum_values_line.front(); + while (true) { + if (iter->value().has(name)) { + line = iter->value()[name]; + break; + } else if (iter == enum_values_line.back()) + break; + else + iter = iter->next(); + } + } } class_desc->call_deferred("scroll_to_line", line); diff --git a/editor/editor_help.h b/editor/editor_help.h index db4c33afb0..0f93e1b55b 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -54,7 +54,30 @@ class EditorHelpSearch : public ConfirmationDialog { Tree *search_options; String base_type; - class IncrementalSearch; + class IncrementalSearch : public Reference { + String term; + TreeItem *root; + + EditorHelpSearch *search; + Tree *search_options; + + DocData *doc; + Ref<Texture> def_icon; + + int phase; + Map<String, DocData::ClassDoc>::Element *iterator; + + void phase1(Map<String, DocData::ClassDoc>::Element *E); + void phase2(Map<String, DocData::ClassDoc>::Element *E); + bool slice(); + + public: + IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term); + + bool empty() const; + bool work(uint64_t slot = 1000000 / 10); + }; + Ref<IncrementalSearch> search; void _update_search(); @@ -129,6 +152,7 @@ class EditorHelp : public VBoxContainer { Map<String, int> theme_property_line; Map<String, int> constant_line; Map<String, int> enum_line; + Map<String, Map<String, int> > enum_values_line; int description_line; RichTextLabel *class_desc; diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index e301d12214..158eedfb0f 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -88,6 +88,7 @@ void EditorLog::_notification(int p_what) { void EditorLog::_clear_request() { log->clear(); + tool_button->set_icon(Ref<Texture>()); } void EditorLog::clear() { @@ -103,9 +104,7 @@ void EditorLog::add_message(const String &p_msg, bool p_error) { Ref<Texture> icon = get_icon("Error", "EditorIcons"); log->add_image(icon); log->add_text(" "); - //button->set_icon(icon); - } else { - //button->set_icon(Ref<Texture>()); + tool_button->set_icon(icon); } log->add_text(p_msg); @@ -115,6 +114,10 @@ void EditorLog::add_message(const String &p_msg, bool p_error) { log->pop(); } +void EditorLog::set_tool_button(ToolButton *p_tool_button) { + tool_button = p_tool_button; +} + /* void EditorLog::_dragged(const Point2& p_ofs) { diff --git a/editor/editor_log.h b/editor/editor_log.h index 42137f71cc..f9bc82de7d 100644 --- a/editor/editor_log.h +++ b/editor/editor_log.h @@ -51,6 +51,7 @@ class EditorLog : public VBoxContainer { RichTextLabel *log; HBoxContainer *title_hb; //PaneDrag *pd; + ToolButton *tool_button; static void _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); @@ -68,6 +69,7 @@ protected: public: void add_message(const String &p_msg, bool p_error = false); + void set_tool_button(ToolButton *p_tool_button); void deinit(); void clear(); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 2f0c41c6e1..fd5a6dffc9 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -93,13 +93,17 @@ #include "editor/plugins/particles_editor_plugin.h" #include "editor/plugins/path_2d_editor_plugin.h" #include "editor/plugins/path_editor_plugin.h" +#include "editor/plugins/physical_bone_plugin.h" #include "editor/plugins/polygon_2d_editor_plugin.h" #include "editor/plugins/resource_preloader_editor_plugin.h" #include "editor/plugins/script_editor_plugin.h" #include "editor/plugins/script_text_editor.h" #include "editor/plugins/shader_editor_plugin.h" #include "editor/plugins/shader_graph_editor_plugin.h" +#include "editor/plugins/skeleton_2d_editor_plugin.h" +#include "editor/plugins/skeleton_editor_plugin.h" #include "editor/plugins/spatial_editor_plugin.h" +#include "editor/plugins/sprite_editor_plugin.h" #include "editor/plugins/sprite_frames_editor_plugin.h" #include "editor/plugins/style_box_editor_plugin.h" #include "editor/plugins/texture_editor_plugin.h" @@ -188,6 +192,8 @@ void EditorNode::_unhandled_input(const Ref<InputEvent> &p_event) { Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed() && !k->is_echo() && !gui_base->get_viewport()->gui_has_modal_stack()) { + EditorPlugin *old_editor = editor_plugin_screen; + if (ED_IS_SHORTCUT("editor/next_tab", p_event)) { int next_tab = editor_data.get_edited_scene() + 1; next_tab %= editor_data.get_edited_scene_count(); @@ -217,6 +223,16 @@ void EditorNode::_unhandled_input(const Ref<InputEvent> &p_event) { } else if (ED_IS_SHORTCUT("editor/editor_prev", p_event)) { _editor_select_prev(); } + + if (k->get_scancode() == KEY_ESCAPE) { + for (int i = 0; i < bottom_panel_items.size(); i++) { + _bottom_panel_switch(false, i); + } + } + + if (old_editor != editor_plugin_screen) { + get_tree()->set_input_as_handled(); + } } } @@ -339,16 +355,22 @@ void EditorNode::_notification(int p_what) { if (ScriptEditor::get_singleton()->get_debugger()->is_visible()) bottom_panel->add_style_override("panel", gui_base->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")); - //_update_icons + // update_icons for (int i = 0; i < singleton->main_editor_buttons.size(); i++) { - Ref<Texture> icon = singleton->main_editor_buttons[i]->get_icon(); + + ToolButton *tb = singleton->main_editor_buttons[i]; + EditorPlugin *p_editor = singleton->editor_table[i]; + Ref<Texture> icon = p_editor->get_icon(); if (icon.is_valid()) { - main_editor_buttons[i]->set_icon(icon); - } else if (singleton->gui_base->has_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons")) { - main_editor_buttons[i]->set_icon(gui_base->get_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons")); + tb->set_icon(icon); + } else if (singleton->gui_base->has_icon(p_editor->get_name(), "EditorIcons")) { + tb->set_icon(singleton->gui_base->get_icon(p_editor->get_name(), "EditorIcons")); } } + + _build_icon_type_cache(); + play_button->set_icon(gui_base->get_icon("MainPlay", "EditorIcons")); play_scene_button->set_icon(gui_base->get_icon("PlayScene", "EditorIcons")); play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom", "EditorIcons")); @@ -374,6 +396,15 @@ void EditorNode::_notification(int p_what) { dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); update_menu->set_icon(gui_base->get_icon("Progress1", "EditorIcons")); + + PopupMenu *p = help_menu->get_popup(); + p->set_item_icon(p->get_item_index(HELP_CLASSES), gui_base->get_icon("ClassList", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_SEARCH), gui_base->get_icon("HelpSearch", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_DOCS), gui_base->get_icon("Instance", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_QA), gui_base->get_icon("Instance", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_ISSUES), gui_base->get_icon("Instance", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_COMMUNITY), gui_base->get_icon("Instance", "EditorIcons")); + p->set_item_icon(p->get_item_index(HELP_ABOUT), gui_base->get_icon("Godot", "EditorIcons")); } if (p_what == Control::NOTIFICATION_RESIZED) { @@ -440,25 +471,29 @@ void EditorNode::_fs_changed() { preset.unref(); } if (preset.is_null()) { - String err = "Unknown export preset: " + export_defer.preset; - ERR_PRINT(err.utf8().get_data()); + String errstr = "Unknown export preset: " + export_defer.preset; + ERR_PRINTS(errstr); } else { Ref<EditorExportPlatform> platform = preset->get_platform(); if (platform.is_null()) { - String err = "Preset \"" + export_defer.preset + "\" doesn't have a platform."; - ERR_PRINT(err.utf8().get_data()); + String errstr = "Preset \"" + export_defer.preset + "\" doesn't have a platform."; + ERR_PRINTS(errstr); } else { // ensures export_project does not loop infinitely, because notifications may // come during the export export_defer.preset = ""; + Error err = OK; if (!preset->is_runnable() && (export_defer.path.ends_with(".pck") || export_defer.path.ends_with(".zip"))) { if (export_defer.path.ends_with(".zip")) { - platform->save_zip(preset, export_defer.path); + err = platform->export_zip(preset, export_defer.debug, export_defer.path); } else if (export_defer.path.ends_with(".pck")) { - platform->save_pack(preset, export_defer.path); + err = platform->export_pack(preset, export_defer.debug, export_defer.path); } } else { - platform->export_project(preset, export_defer.debug, export_defer.path, /*p_flags*/ 0); + err = platform->export_project(preset, export_defer.debug, export_defer.path); + } + if (err != OK) { + ERR_PRINTS(vformat(TTR("Project export failed with error code %d."), (int)err)); } } } @@ -581,6 +616,7 @@ void EditorNode::open_resource(const String &p_type) { void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const String &p_path) { editor_data.apply_changes_in_editors(); + int flg = 0; if (EditorSettings::get_singleton()->get("filesystem/on_save/compress_binary_resources")) flg |= ResourceSaver::FLAG_COMPRESS; @@ -589,6 +625,7 @@ void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const St Error err = ResourceSaver::save(path, p_resource, flg | ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS); if (err != OK) { + current_option = -1; accept->set_text(TTR("Error saving resource!")); accept->popup_centered_minsize(); return; @@ -596,6 +633,7 @@ void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const St ((Resource *)p_resource.ptr())->set_path(path); emit_signal("resource_saved", p_resource); + editor_data.notify_resource_saved(p_resource); } void EditorNode::save_resource(const Ref<Resource> &p_resource) { @@ -658,7 +696,7 @@ void EditorNode::save_resource_as(const Ref<Resource> &p_resource, const String file->set_current_path(existing); } file->popup_centered_ratio(); - file->set_title(TTR("Save Resource As..")); + file->set_title(TTR("Save Resource As...")); } void EditorNode::_menu_option(int p_option) { @@ -676,7 +714,7 @@ void EditorNode::_dialog_display_save_error(String p_file, Error p_error) { if (p_error) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); switch (p_error) { @@ -703,13 +741,13 @@ void EditorNode::_dialog_display_load_error(String p_file, Error p_error) { if (p_error) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); switch (p_error) { case ERR_CANT_OPEN: { - accept->set_text(vformat(TTR("Can't open '%s'."), p_file.get_file())); + accept->set_text(vformat(TTR("Can't open '%s'. The file could have been moved or deleted."), p_file.get_file())); } break; case ERR_PARSE_ERROR: { @@ -975,6 +1013,7 @@ void EditorNode::_save_scene_with_preview(String p_file, int p_idx) { String file = cache_base + ".png"; + post_process_preview(img); img->save_png(file); } @@ -990,7 +1029,7 @@ void EditorNode::_save_scene(String p_file, int idx) { if (!scene) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a tree root.")); accept->popup_centered_minsize(); return; @@ -1021,7 +1060,7 @@ void EditorNode::_save_scene(String p_file, int idx) { if (err != OK) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied.")); accept->popup_centered_minsize(); return; @@ -1032,7 +1071,7 @@ void EditorNode::_save_scene(String p_file, int idx) { Node *dummy_scene = sdata->instance(PackedScene::GEN_EDIT_STATE_INSTANCE); if (!dummy_scene) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied.")); accept->popup_centered_minsize(); return; @@ -1064,7 +1103,8 @@ void EditorNode::_save_scene(String p_file, int idx) { void EditorNode::_save_all_scenes() { - for (int i = 0; i < editor_data.get_edited_scene_count(); i++) { + int i = _next_unsaved_scene(true, 0); + while (i != -1) { Node *scene = editor_data.get_edited_scene_root(i); if (scene && scene->get_filename() != "") { if (i != editor_data.get_edited_scene()) @@ -1072,6 +1112,7 @@ void EditorNode::_save_all_scenes() { else _save_scene_with_preview(scene->get_filename()); } // else: ignore new scenes + i = _next_unsaved_scene(true, ++i); } _save_default_environment(); @@ -1110,7 +1151,7 @@ void EditorNode::_dialog_action(String p_file) { if (res.is_null()) { current_option = -1; - accept->get_ok()->set_text("ok :("); + accept->get_ok()->set_text("Ugh"); accept->set_text(TTR("Failed to load resource.")); return; }; @@ -1145,6 +1186,7 @@ void EditorNode::_dialog_action(String p_file) { _save_default_environment(); _save_scene_with_preview(p_file, scene_idx); + _add_to_recent_scenes(p_file); if (scene_idx != -1) _discard_changes(); @@ -1169,7 +1211,7 @@ void EditorNode::_dialog_action(String p_file) { if (ml.is_null()) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Can't load MeshLibrary for merging!")); accept->popup_centered_minsize(); return; @@ -1185,7 +1227,8 @@ void EditorNode::_dialog_action(String p_file) { Error err = ResourceSaver::save(p_file, ml); if (err) { - accept->get_ok()->set_text(TTR("I see..")); + current_option = -1; + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Error saving MeshLibrary!")); accept->popup_centered_minsize(); return; @@ -1194,32 +1237,29 @@ void EditorNode::_dialog_action(String p_file) { } break; case FILE_EXPORT_TILESET: { - Ref<TileSet> ml; - if (FileAccess::exists(p_file)) { - ml = ResourceLoader::load(p_file, "TileSet"); + Ref<TileSet> tileset; + if (FileAccess::exists(p_file) && file_export_lib_merge->is_pressed()) { + tileset = ResourceLoader::load(p_file, "TileSet"); - if (ml.is_null()) { - if (file_export_lib_merge->is_pressed()) { - current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); - accept->set_text(TTR("Can't load TileSet for merging!")); - accept->popup_centered_minsize(); - return; - } - } else if (!file_export_lib_merge->is_pressed()) { - ml->clear(); + if (tileset.is_null()) { + current_option = -1; + accept->get_ok()->set_text(TTR("I see...")); + accept->set_text(TTR("Can't load TileSet for merging!")); + accept->popup_centered_minsize(); + return; } } else { - ml = Ref<TileSet>(memnew(TileSet)); + tileset = Ref<TileSet>(memnew(TileSet)); } - TileSetEditor::update_library_file(editor_data.get_edited_scene_root(), ml, true); + TileSetEditor::update_library_file(editor_data.get_edited_scene_root(), tileset, true); - Error err = ResourceSaver::save(p_file, ml); + Error err = ResourceSaver::save(p_file, tileset); if (err) { - accept->get_ok()->set_text(TTR("I see..")); + current_option = -1; + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Error saving TileSet!")); accept->popup_centered_minsize(); return; @@ -1419,7 +1459,8 @@ void EditorNode::_save_default_environment() { if (fallback.is_valid() && fallback->get_path().is_resource_file()) { Map<RES, bool> processed; _find_and_save_edited_subresources(fallback.ptr(), processed, 0); - save_resource_in_path(fallback, fallback->get_path()); + if (fallback->get_last_modified_time() != fallback->get_import_last_modified_time()) + save_resource_in_path(fallback, fallback->get_path()); } } @@ -1565,7 +1606,8 @@ void EditorNode::_edit_current() { // special case if use of external editor is true if (main_plugin->get_name() == "Script" && (bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor")) || overrides_external_editor(current_obj))) { - main_plugin->edit(current_obj); + if (!changing_scene) + main_plugin->edit(current_obj); } else if (main_plugin != editor_plugin_screen && (!ScriptEditor::get_singleton() || !ScriptEditor::get_singleton()->is_visible_in_tree() || ScriptEditor::get_singleton()->can_take_away_focus())) { @@ -1707,7 +1749,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { if (!scene) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("There is no defined scene to run.")); accept->popup_centered_minsize(); return; @@ -1764,7 +1806,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { if (scene->get_filename() == "") { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Current scene was never saved, please save it prior to running.")); accept->popup_centered_minsize(); return; @@ -1777,7 +1819,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { editor_data.save_editor_external_data(); } - if (!_call_build()) + if (!call_build()) return; if (bool(EDITOR_DEF("run/output/always_clear_output_on_play", true))) { @@ -1798,7 +1840,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { if (error != OK) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Could not start subprocess!")); accept->popup_centered_minsize(); return; @@ -1858,13 +1900,13 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case FILE_QUICK_OPEN_SCENE: { quick_open->popup("PackedScene", true); - quick_open->set_title(TTR("Quick Open Scene..")); + quick_open->set_title(TTR("Quick Open Scene...")); } break; case FILE_QUICK_OPEN_SCRIPT: { quick_open->popup("Script", true); - quick_open->set_title(TTR("Quick Open Script..")); + quick_open->set_title(TTR("Quick Open Script...")); } break; case FILE_OPEN_PREV: { @@ -1919,8 +1961,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (!scene) { current_option = -1; - //confirmation->get_cancel()->hide(); - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a tree root.")); accept->popup_centered_minsize(); break; @@ -1937,7 +1978,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { file->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); } - //file->set_current_path(current_path); if (scene->get_filename() != "") { file->set_current_path(scene->get_filename()); if (extensions.size()) { @@ -1956,7 +1996,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { file->set_current_path(existing); } file->popup_centered_ratio(); - file->set_title(TTR("Save Scene As..")); + file->set_title(TTR("Save Scene As...")); } break; @@ -1987,8 +2027,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (!editor_data.get_edited_scene_root()) { current_option = -1; - //confirmation->get_cancel()->hide(); - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a scene.")); accept->popup_centered_minsize(); break; @@ -2011,7 +2050,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { //Make sure that the scene has a root before trying to convert to tileset if (!editor_data.get_edited_scene_root()) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a root node.")); accept->popup_centered_minsize(); break; @@ -2036,12 +2075,10 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } break; case FILE_IMPORT_SUBSCENE: { - //import_subscene->popup_centered_ratio(); - if (!editor_data.get_edited_scene_root()) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a selected node.")); accept->popup_centered_minsize(); break; @@ -2056,7 +2093,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (unsaved_cache && !p_confirmed) { confirmation->get_ok()->set_text(TTR("Open")); - //confirmation->get_cancel()->show(); confirmation->set_text(TTR("Current scene not saved. Open anyway?")); confirmation->popup_centered_minsize(); break; @@ -2094,10 +2130,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { log->add_message("REDO: " + action); } break; - case TOOLS_ORPHAN_RESOURCES: { - - orphan_resources->show(); - } break; case EDIT_REVERT: { @@ -2269,7 +2301,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (run_custom_filename.empty() || editor_run.get_status() == EditorRun::STATUS_STOP) { _menu_option_confirm(RUN_STOP, true); quick_run->popup("PackedScene", true); - quick_run->set_title(TTR("Quick Run Scene..")); + quick_run->set_title(TTR("Quick Run Scene...")); play_custom_scene_button->set_pressed(false); } else { String last_custom_scene = run_custom_filename; @@ -2320,7 +2352,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (run_native->is_deploy_debug_remote_enabled()) { _menu_option_confirm(RUN_STOP, true); - if (!_call_build()) + if (!call_build()) break; // build failed emit_signal("play_pressed"); @@ -2448,7 +2480,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { EditorSettings::get_singleton()->set_project_metadata("editor_options", "update_always", true); current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This option is deprecated. Situations where refresh must be forced are now considered a bug. Please report.")); accept->popup_centered_minsize(); } break; @@ -2543,6 +2575,30 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } } +void EditorNode::_tool_menu_option(int p_idx) { + switch (tool_menu->get_item_id(p_idx)) { + case TOOLS_ORPHAN_RESOURCES: { + orphan_resources->show(); + } 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]; + Variant::CallError ce; + + handler->call(callback, (const Variant **)&ud, 1, ce); + if (ce.error != Variant::CallError::CALL_OK) { + String err = Variant::get_call_error_text(handler, callback, (const Variant **)&ud, 1, ce); + ERR_PRINTS("Error calling function from tool menu: " + err); + } + } // else it's a submenu so don't do anything. + } break; + } +} + int EditorNode::_next_unsaved_scene(bool p_valid_filename, int p_start) { for (int i = p_start; i < editor_data.get_edited_scene_count(); i++) { @@ -2843,7 +2899,7 @@ void EditorNode::_remove_scene(int index) { //Scene to remove is current scene _remove_edited_scene(); } else { - // Scene to remove is not active scene + //Scene to remove is not active scene editor_data.remove_scene(index); } } @@ -2906,7 +2962,7 @@ void EditorNode::_set_main_scene_state(Dictionary p_state, Node *p_for_scene) { if (p_state.has("editor_index")) { int index = p_state["editor_index"]; - if (current < 2) { //if currently in spatial/2d, only switch to spatial/2d. if curently in script, stay there + if (current < 2) { //if currently in spatial/2d, only switch to spatial/2d. if currently in script, stay there if (index < 2 || !get_edited_scene()) { _editor_select(index); } @@ -3240,48 +3296,47 @@ void EditorNode::_show_messages() { void EditorNode::_add_to_recent_scenes(const String &p_scene) { - String base = "_" + ProjectSettings::get_singleton()->get_resource_path().replace("\\", "::").replace("/", "::"); - Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); - String name = p_scene; - name = name.replace("res://", ""); - if (rc.find(name) != -1) - rc.erase(name); - rc.insert(0, name); + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scenes", Array()); + if (rc.find(p_scene) != -1) + rc.erase(p_scene); + rc.push_front(p_scene); if (rc.size() > 10) rc.resize(10); - EditorSettings::get_singleton()->set(base + "/_recent_scenes", rc); - EditorSettings::get_singleton()->save(); + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scenes", rc); _update_recent_scenes(); } void EditorNode::_open_recent_scene(int p_idx) { - String base = "_" + ProjectSettings::get_singleton()->get_resource_path().replace("\\", "::").replace("/", "::"); - if (p_idx == recent_scenes->get_item_count() - 1) { - EditorSettings::get_singleton()->erase(base + "/_recent_scenes"); + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scenes", Array()); call_deferred("_update_recent_scenes"); } else { - Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scenes", Array()); ERR_FAIL_INDEX(p_idx, rc.size()); - String path = "res://" + rc[p_idx]; - load_scene(path); + if (load_scene(rc[p_idx]) != OK) { + + rc.remove(p_idx); + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scenes", rc); + _update_recent_scenes(); + } } } void EditorNode::_update_recent_scenes() { - String base = "_" + ProjectSettings::get_singleton()->get_resource_path().replace("\\", "::").replace("/", "::"); - Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scenes", Array()); recent_scenes->clear(); + String path; for (int i = 0; i < rc.size(); i++) { - recent_scenes->add_item(rc[i], i); + path = rc[i]; + recent_scenes->add_item(path.replace("res://", ""), i); } recent_scenes->add_separator(); @@ -3439,6 +3494,19 @@ Ref<Texture> EditorNode::_file_dialog_get_icon(const String &p_path) { return singleton->icon_type_cache["Object"]; } +void EditorNode::_build_icon_type_cache() { + + List<StringName> tl; + StringName ei = "EditorIcons"; + theme_base->get_theme()->get_icon_list(ei, &tl); + for (List<StringName>::Element *E = tl.front(); E; E = E->next()) { + + if (!ClassDB::class_exists(E->get())) + continue; + icon_type_cache[E->get()] = theme_base->get_theme()->get_icon(E->get(), ei); + } +} + void EditorNode::_file_dialog_register(FileDialog *p_dialog) { singleton->file_dialogs.insert(p_dialog); @@ -3827,6 +3895,53 @@ void EditorNode::_update_dock_slots_visibility() { } } +void EditorNode::_dock_tab_changed(int p_tab) { + + // update visibility but dont set current tab + VSplitContainer *splits[DOCK_SLOT_MAX / 2] = { + left_l_vsplit, + left_r_vsplit, + right_l_vsplit, + right_r_vsplit, + }; + + if (!docks_visible) { + + for (int i = 0; i < DOCK_SLOT_MAX; i++) { + dock_slot[i]->hide(); + } + + for (int i = 0; i < DOCK_SLOT_MAX / 2; i++) { + splits[i]->hide(); + } + + right_hsplit->hide(); + bottom_panel->hide(); + } else { + for (int i = 0; i < DOCK_SLOT_MAX; i++) { + + if (dock_slot[i]->get_tab_count()) + dock_slot[i]->show(); + else + dock_slot[i]->hide(); + } + + for (int i = 0; i < DOCK_SLOT_MAX / 2; i++) { + bool in_use = dock_slot[i * 2 + 0]->get_tab_count() || dock_slot[i * 2 + 1]->get_tab_count(); + if (in_use) + splits[i]->show(); + else + splits[i]->hide(); + } + bottom_panel->show(); + + if (right_l_vsplit->is_visible() || right_r_vsplit->is_visible()) + right_hsplit->show(); + else + right_hsplit->hide(); + } +} + void EditorNode::_load_docks_from_config(Ref<ConfigFile> p_layout, const String &p_section) { for (int i = 0; i < DOCK_SLOT_MAX; i++) { @@ -4423,6 +4538,45 @@ 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); + 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); +} + +void EditorNode::add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu) { + ERR_FAIL_NULL(p_submenu); + ERR_FAIL_COND(p_submenu->get_parent() != NULL); + + tool_menu->add_child(p_submenu); + tool_menu->add_submenu_item(p_name, p_submenu->get_name(), TOOLS_CUSTOM); +} + +void EditorNode::remove_tool_menu_item(const String &p_name) { + for (int i = 0; i < tool_menu->get_item_count(); i++) { + if (tool_menu->get_item_id(i) != TOOLS_CUSTOM) + continue; + + if (tool_menu->get_item_text(i) == p_name) { + if (tool_menu->get_item_submenu(i) != "") { + Node *n = tool_menu->get_node(tool_menu->get_item_submenu(i)); + tool_menu->remove_child(n); + memdelete(n); + } + tool_menu->remove_item(i); + tool_menu->set_as_minsize(); + return; + } + } +} + void EditorNode::_dropped_files(const Vector<String> &p_files, int p_screen) { String to_path = ProjectSettings::get_singleton()->globalize_path(get_filesystem_dock()->get_current_path()); @@ -4525,7 +4679,7 @@ void EditorNode::add_build_callback(EditorBuildCallback p_callback) { EditorBuildCallback EditorNode::build_callbacks[EditorNode::MAX_BUILD_CALLBACKS]; -bool EditorNode::_call_build() { +bool EditorNode::call_build() { for (int i = 0; i < build_callback_count; i++) { if (!build_callbacks[i]()) @@ -4619,6 +4773,7 @@ Vector<Ref<EditorResourceConversionPlugin> > EditorNode::find_resource_conversio void EditorNode::_bind_methods() { ClassDB::bind_method("_menu_option", &EditorNode::_menu_option); + ClassDB::bind_method("_tool_menu_option", &EditorNode::_tool_menu_option); ClassDB::bind_method("_menu_confirm_current", &EditorNode::_menu_confirm_current); ClassDB::bind_method("_dialog_action", &EditorNode::_dialog_action); ClassDB::bind_method("_resource_selected", &EditorNode::_resource_selected, DEFVAL("")); @@ -4657,6 +4812,7 @@ void EditorNode::_bind_methods() { ClassDB::bind_method("_dock_popup_exit", &EditorNode::_dock_popup_exit); ClassDB::bind_method("_dock_move_left", &EditorNode::_dock_move_left); ClassDB::bind_method("_dock_move_right", &EditorNode::_dock_move_right); + ClassDB::bind_method("_dock_tab_changed", &EditorNode::_dock_tab_changed); ClassDB::bind_method("_layout_menu_option", &EditorNode::_layout_menu_option); @@ -4733,7 +4889,7 @@ EditorNode::EditorNode() { if (!OS::get_singleton()->has_touchscreen_ui_hint() && Input::get_singleton()) { //only if no touchscreen ui hint, set emulation - id->set_emulate_touch(false); //just disable just in case + id->set_emulate_touch_from_mouse(false); //just disable just in case } id->set_custom_mouse_cursor(RES()); } @@ -4757,18 +4913,43 @@ EditorNode::EditorNode() { FileAccess::set_backup_save(EDITOR_GET("filesystem/on_save/safe_save_on_backup_then_rename")); { - int dpi_mode = EditorSettings::get_singleton()->get("interface/editor/hidpi_mode"); - if (dpi_mode == 0) { - const int screen = OS::get_singleton()->get_current_screen(); - editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); - } else if (dpi_mode == 1) { - editor_set_scale(0.75); - } else if (dpi_mode == 2) { - editor_set_scale(1.0); - } else if (dpi_mode == 3) { - editor_set_scale(1.5); - } else if (dpi_mode == 4) { - editor_set_scale(2.0); + 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 + const int screen = OS::get_singleton()->get_current_screen(); + editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); + } break; + + case 1: { + editor_set_scale(0.75); + } break; + + case 2: { + editor_set_scale(1.0); + } break; + + case 3: { + editor_set_scale(1.25); + } break; + + case 4: { + editor_set_scale(1.5); + } break; + + case 5: { + editor_set_scale(1.75); + } break; + + case 6: { + editor_set_scale(2.0); + } break; + + default: { + editor_set_scale(custom_display_scale); + } break; } } @@ -4815,6 +4996,10 @@ EditorNode::EditorNode() { 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); } Ref<ResourceImporterBitMap> import_bitmap; @@ -4987,6 +5172,9 @@ EditorNode::EditorNode() { dock_slot[i]->set_popup(dock_select_popup); dock_slot[i]->connect("pre_popup_pressed", this, "_dock_pre_popup", varray(i)); dock_slot[i]->set_tab_align(TabContainer::ALIGN_LEFT); + dock_slot[i]->set_drag_to_rearrange_enabled(true); + dock_slot[i]->set_tabs_rearrange_group(1); + dock_slot[i]->connect("tab_changed", this, "_dock_tab_changed"); } dock_drag_timer = memnew(Timer); @@ -5024,6 +5212,7 @@ EditorNode::EditorNode() { scene_tabs->set_tab_align(Tabs::ALIGN_LEFT); scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/scene_tabs/always_show_close_button", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); scene_tabs->set_min_width(int(EDITOR_DEF("interface/scene_tabs/minimum_width", 50)) * EDSCALE); + scene_tabs->set_drag_to_rearrange_enabled(true); scene_tabs->connect("tab_changed", this, "_scene_tab_changed"); scene_tabs->connect("right_button_pressed", this, "_scene_tab_script_edited"); scene_tabs->connect("tab_close", this, "_scene_tab_closed"); @@ -5114,7 +5303,6 @@ EditorNode::EditorNode() { gui_base->add_child(dependency_fixer); settings_config_dialog = memnew(EditorSettingsDialog); - // settings_config_dialog->add_style_override("panel", gui_base->get_stylebox("EditorSettingsDialog", "EditorStyles")); gui_base->add_child(settings_config_dialog); project_settings = memnew(ProjectSettingsEditor(&editor_data)); @@ -5127,7 +5315,6 @@ EditorNode::EditorNode() { gui_base->add_child(export_template_manager); about = memnew(EditorAbout); - about->get_logo()->set_texture(gui_base->get_icon("Logo", "EditorIcons")); gui_base->add_child(about); warning = memnew(AcceptDialog); @@ -5135,32 +5322,32 @@ EditorNode::EditorNode() { ED_SHORTCUT("editor/next_tab", TTR("Next tab"), KEY_MASK_CMD + KEY_TAB); ED_SHORTCUT("editor/prev_tab", TTR("Previous tab"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_TAB); - ED_SHORTCUT("editor/filter_files", TTR("Filter Files.."), KEY_MASK_ALT + KEY_MASK_CMD + KEY_P); + ED_SHORTCUT("editor/filter_files", TTR("Filter Files..."), KEY_MASK_ALT + KEY_MASK_CMD + KEY_P); PopupMenu *p; file_menu->set_tooltip(TTR("Operations with scene files.")); p = file_menu->get_popup(); p->add_shortcut(ED_SHORTCUT("editor/new_scene", TTR("New Scene")), FILE_NEW_SCENE); - p->add_shortcut(ED_SHORTCUT("editor/new_inherited_scene", TTR("New Inherited Scene..")), FILE_NEW_INHERITED_SCENE); - p->add_shortcut(ED_SHORTCUT("editor/open_scene", TTR("Open Scene.."), KEY_MASK_CMD + KEY_O), FILE_OPEN_SCENE); + p->add_shortcut(ED_SHORTCUT("editor/new_inherited_scene", TTR("New Inherited Scene...")), FILE_NEW_INHERITED_SCENE); + p->add_shortcut(ED_SHORTCUT("editor/open_scene", TTR("Open Scene..."), KEY_MASK_CMD + KEY_O), FILE_OPEN_SCENE); p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/save_scene", TTR("Save Scene"), KEY_MASK_CMD + KEY_S), FILE_SAVE_SCENE); - p->add_shortcut(ED_SHORTCUT("editor/save_scene_as", TTR("Save Scene As.."), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_AS_SCENE); + p->add_shortcut(ED_SHORTCUT("editor/save_scene_as", TTR("Save Scene As..."), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_AS_SCENE); p->add_shortcut(ED_SHORTCUT("editor/save_all_scenes", TTR("Save all Scenes"), KEY_MASK_ALT + KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_ALL_SCENES); p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/close_scene", TTR("Close Scene"), KEY_MASK_SHIFT + KEY_MASK_CTRL + KEY_W), FILE_CLOSE); p->add_separator(); p->add_submenu_item(TTR("Open Recent"), "RecentScenes", FILE_OPEN_RECENT); p->add_separator(); - p->add_shortcut(ED_SHORTCUT("editor/quick_open_scene", TTR("Quick Open Scene.."), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_O), FILE_QUICK_OPEN_SCENE); - p->add_shortcut(ED_SHORTCUT("editor/quick_open_script", TTR("Quick Open Script.."), KEY_MASK_ALT + KEY_MASK_CMD + KEY_O), FILE_QUICK_OPEN_SCRIPT); + p->add_shortcut(ED_SHORTCUT("editor/quick_open_scene", TTR("Quick Open Scene..."), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_O), FILE_QUICK_OPEN_SCENE); + p->add_shortcut(ED_SHORTCUT("editor/quick_open_script", TTR("Quick Open Script..."), KEY_MASK_ALT + KEY_MASK_CMD + KEY_O), FILE_QUICK_OPEN_SCRIPT); p->add_separator(); PopupMenu *pm_export = memnew(PopupMenu); pm_export->set_name("Export"); p->add_child(pm_export); - p->add_submenu_item(TTR("Convert To.."), "Export"); - pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_MeshLibrary", TTR("MeshLibrary..")), FILE_EXPORT_MESH_LIBRARY); - pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_TileSet", TTR("TileSet..")), FILE_EXPORT_TILESET); + p->add_submenu_item(TTR("Convert To..."), "Export"); + pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_MeshLibrary", TTR("MeshLibrary...")), FILE_EXPORT_MESH_LIBRARY); + pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_TileSet", TTR("TileSet...")), FILE_EXPORT_TILESET); pm_export->connect("id_pressed", this, "_menu_option"); p->add_separator(); @@ -5188,12 +5375,11 @@ EditorNode::EditorNode() { p->add_item(TTR("Project Settings"), RUN_SETTINGS); p->add_separator(); p->connect("id_pressed", this, "_menu_option"); - //p->add_item(TTR("Run Script"), FILE_RUN_SCRIPT, KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_R); p->add_item(TTR("Export"), FILE_EXPORT_PROJECT); - PopupMenu *tool_menu = memnew(PopupMenu); + tool_menu = memnew(PopupMenu); tool_menu->set_name("Tools"); - tool_menu->connect("id_pressed", this, "_menu_option"); + tool_menu->connect("index_pressed", this, "_tool_menu_option"); p->add_child(tool_menu); p->add_submenu_item(TTR("Tools"), "Tools"); tool_menu->add_item(TTR("Orphan Resource Explorer"), TOOLS_ORPHAN_RESOURCES); @@ -5279,7 +5465,6 @@ EditorNode::EditorNode() { menu_hb->add_child(play_cc); play_button_panel = memnew(PanelContainer); - // play_button_panel->add_style_override("panel", gui_base->get_stylebox("PlayButtonPanel", "EditorStyles")); play_cc->add_child(play_button_panel); HBoxContainer *play_hb = memnew(HBoxContainer); @@ -5401,7 +5586,7 @@ EditorNode::EditorNode() { resource_save_button->set_icon(gui_base->get_icon("Save", "EditorIcons")); prop_editor_hb->add_child(resource_save_button); resource_save_button->get_popup()->add_item(TTR("Save"), RESOURCE_SAVE); - resource_save_button->get_popup()->add_item(TTR("Save As.."), RESOURCE_SAVE_AS); + resource_save_button->get_popup()->add_item(TTR("Save As..."), RESOURCE_SAVE_AS); resource_save_button->get_popup()->connect("id_pressed", this, "_menu_option"); resource_save_button->set_focus_mode(Control::FOCUS_NONE); resource_save_button->set_disabled(true); @@ -5554,7 +5739,8 @@ EditorNode::EditorNode() { bottom_panel_vb->add_child(bottom_panel_hb); log = memnew(EditorLog); - add_bottom_panel_item(TTR("Output"), log); + ToolButton *output_button = add_bottom_panel_item(TTR("Output"), log); + log->set_tool_button(output_button); old_split_ofs = 0; @@ -5670,10 +5856,12 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(AnimationTreeEditorPlugin(this))); add_editor_plugin(memnew(MeshLibraryEditorPlugin(this))); add_editor_plugin(memnew(StyleBoxEditorPlugin(this))); + add_editor_plugin(memnew(SpriteEditorPlugin(this))); + add_editor_plugin(memnew(Skeleton2DEditorPlugin(this))); add_editor_plugin(memnew(ParticlesEditorPlugin(this))); add_editor_plugin(memnew(ResourcePreloaderEditorPlugin(this))); add_editor_plugin(memnew(ItemListEditorPlugin(this))); - add_editor_plugin(memnew(CollisionPolygonEditorPlugin(this))); + add_editor_plugin(memnew(Polygon3DEditorPlugin(this))); add_editor_plugin(memnew(CollisionPolygon2DEditorPlugin(this))); add_editor_plugin(memnew(TileSetEditorPlugin(this))); add_editor_plugin(memnew(TileMapEditorPlugin(this))); @@ -5692,9 +5880,11 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(CollisionShape2DEditorPlugin(this))); add_editor_plugin(memnew(CurveEditorPlugin(this))); add_editor_plugin(memnew(TextureEditorPlugin(this))); - add_editor_plugin(memnew(MeshEditorPlugin(this))); + add_editor_plugin(memnew(AudioBusesEditorPlugin(audio_bus_editor))); add_editor_plugin(memnew(AudioBusesEditorPlugin(audio_bus_editor))); add_editor_plugin(memnew(NavigationMeshEditorPlugin(this))); + add_editor_plugin(memnew(SkeletonEditorPlugin(this))); + add_editor_plugin(memnew(PhysicalBonePlugin(this))); // FIXME: Disabled as (according to reduz) users were complaining that it gets in the way // Waiting for PropertyEditor rewrite (planned for 3.1) to be refactored. @@ -5792,17 +5982,7 @@ EditorNode::EditorNode() { EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "_fs_changed"); EditorFileSystem::get_singleton()->connect("resources_reimported", this, "_resources_reimported"); - { - List<StringName> tl; - StringName ei = "EditorIcons"; - theme_base->get_theme()->get_icon_list(ei, &tl); - for (List<StringName>::Element *E = tl.front(); E; E = E->next()) { - - if (!ClassDB::class_exists(E->get())) - continue; - icon_type_cache[E->get()] = theme_base->get_theme()->get_icon(E->get(), ei); - } - } + _build_icon_type_cache(); Node::set_human_readable_collision_renaming(true); diff --git a/editor/editor_node.h b/editor/editor_node.h index 03102cdc81..f774fa0a2e 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -141,6 +141,7 @@ private: EDIT_REDO, EDIT_REVERT, TOOLS_ORPHAN_RESOURCES, + TOOLS_CUSTOM, RESOURCE_NEW, RESOURCE_LOAD, RESOURCE_SAVE, @@ -426,6 +427,7 @@ private: void _menu_option(int p_option); void _menu_confirm_current(); void _menu_option_confirm(int p_option, bool p_confirmed); + void _tool_menu_option(int p_idx); void _update_debug_options(); void _property_editor_forward(); @@ -496,6 +498,7 @@ private: Set<EditorFileDialog *> editor_file_dialogs; Map<String, Ref<Texture> > icon_type_cache; + void _build_icon_type_cache(); bool _initializing_addons; Map<String, EditorPlugin *> plugin_addons; @@ -566,6 +569,7 @@ private: void _save_docks_to_config(Ref<ConfigFile> p_layout, const String &p_section); void _load_docks_from_config(Ref<ConfigFile> p_layout, const String &p_section); void _update_dock_slots_visibility(); + void _dock_tab_changed(int p_tab); bool restoring_scenes; void _save_open_scenes_to_config(Ref<ConfigFile> p_layout, const String &p_section); @@ -596,25 +600,9 @@ private: static EditorPluginInitializeCallback plugin_init_callbacks[MAX_INIT_CALLBACKS]; void _save_default_environment(); - bool _call_build(); static int build_callback_count; static EditorBuildCallback build_callbacks[MAX_BUILD_CALLBACKS]; - bool _initializing_tool_menu; - - struct ToolMenuItem { - String name; - String submenu; - Variant ud; - ObjectID handler; - String callback; - }; - - Vector<ToolMenuItem> tool_menu_items; - - void _tool_menu_insert_item(const ToolMenuItem &p_item); - void _rebuild_tool_menu() const; - bool _dimming; float _dim_time; Timer *_dim_timer; @@ -634,6 +622,8 @@ protected: static void _bind_methods(); public: + bool call_build(); + static void add_plugin_init_callback(EditorPluginInitializeCallback p_callback); enum EditorTable { @@ -653,6 +643,8 @@ public: PropertyEditor *get_property_editor() { return property_editor; } VBoxContainer *get_property_editor_vb() { return prop_editor_vb; } + ProjectSettingsEditor *get_project_settings() { return project_settings; } + static void add_editor_plugin(EditorPlugin *p_editor); static void remove_editor_plugin(EditorPlugin *p_editor); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index 9dd8a7232f..2e4e887165 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -125,7 +125,7 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> xform.origin.z -= rot_aabb.size.z * 2; RID inst = VS::get_singleton()->instance_create2(mesh->get_rid(), scenario); VS::get_singleton()->instance_set_transform(inst, xform); - ep.step(TTR("Thumbnail.."), i); + ep.step(TTR("Thumbnail..."), i); Main::iteration(); Main::iteration(); Ref<Image> img = VS::get_singleton()->texture_get_data(viewport_texture); @@ -235,6 +235,14 @@ Control *EditorInterface::get_base_control() { return EditorNode::get_singleton()->get_gui_base(); } +void EditorInterface::set_plugin_enabled(const String &p_plugin, bool p_enabled) { + EditorNode::get_singleton()->set_addon_plugin_enabled(p_plugin, p_enabled); +} + +bool EditorInterface::is_plugin_enabled(const String &p_plugin) const { + return EditorNode::get_singleton()->is_addon_plugin_enabled(p_plugin); +} + Error EditorInterface::save_scene() { if (!get_edited_scene_root()) return ERR_CANT_CREATE; @@ -271,6 +279,9 @@ void EditorInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("select_file", "p_file"), &EditorInterface::select_file); ClassDB::bind_method(D_METHOD("get_selected_path"), &EditorInterface::get_selected_path); + ClassDB::bind_method(D_METHOD("set_plugin_enabled", "plugin", "enabled"), &EditorInterface::set_plugin_enabled); + ClassDB::bind_method(D_METHOD("is_plugin_enabled", "plugin"), &EditorInterface::is_plugin_enabled); + ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene); ClassDB::bind_method(D_METHOD("save_scene_as", "path", "with_preview"), &EditorInterface::save_scene_as, DEFVAL(true)); } @@ -290,6 +301,14 @@ void EditorPlugin::remove_custom_type(const String &p_type) { EditorNode::get_editor_data().remove_custom_type(p_type); } +void EditorPlugin::add_autoload_singleton(const String &p_name, const String &p_path) { + EditorNode::get_singleton()->get_project_settings()->get_autoload_settings()->autoload_add(p_name, p_path); +} + +void EditorPlugin::remove_autoload_singleton(const String &p_name) { + EditorNode::get_singleton()->get_project_settings()->get_autoload_settings()->autoload_remove(p_name); +} + ToolButton *EditorPlugin::add_control_to_bottom_panel(Control *p_control, const String &p_title) { return EditorNode::get_singleton()->add_bottom_panel_item(p_title, p_control); @@ -362,22 +381,66 @@ void EditorPlugin::add_control_to_container(CustomControlContainer p_location, C } } -void EditorPlugin::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) { +void EditorPlugin::remove_control_from_container(CustomControlContainer p_location, Control *p_control) { + + switch (p_location) { + + case CONTAINER_TOOLBAR: { + + EditorNode::get_menu_hb()->remove_child(p_control); + } break; + + case CONTAINER_SPATIAL_EDITOR_MENU: { + + SpatialEditor::get_singleton()->remove_control_from_menu_panel(p_control); + + } break; + case CONTAINER_SPATIAL_EDITOR_SIDE: { + + SpatialEditor::get_singleton()->get_palette_split()->remove_child(p_control); + + } break; + case CONTAINER_SPATIAL_EDITOR_BOTTOM: { + + SpatialEditor::get_singleton()->get_shader_split()->remove_child(p_control); - //EditorNode::get_singleton()->add_tool_menu_item(p_name, p_handler, p_callback, p_ud); + } break; + case CONTAINER_CANVAS_EDITOR_MENU: { + + CanvasItemEditor::get_singleton()->remove_control_from_menu_panel(p_control); + + } break; + case CONTAINER_CANVAS_EDITOR_SIDE: { + + CanvasItemEditor::get_singleton()->get_palette_split()->remove_child(p_control); + + } break; + case CONTAINER_CANVAS_EDITOR_BOTTOM: { + + CanvasItemEditor::get_singleton()->get_bottom_split()->remove_child(p_control); + + } break; + case CONTAINER_PROPERTY_EDITOR_BOTTOM: { + + EditorNode::get_singleton()->get_property_editor_vb()->remove_child(p_control); + + } break; + } } -void EditorPlugin::add_tool_submenu_item(const String &p_name, Object *p_submenu) { +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_submenu_item(const String &p_name, Object *p_submenu) { ERR_FAIL_NULL(p_submenu); PopupMenu *submenu = Object::cast_to<PopupMenu>(p_submenu); ERR_FAIL_NULL(submenu); - //EditorNode::get_singleton()->add_tool_submenu_item(p_name, submenu); + EditorNode::get_singleton()->add_tool_submenu_item(p_name, submenu); } void EditorPlugin::remove_tool_menu_item(const String &p_name) { - - //EditorNode::get_singleton()->remove_tool_menu_item(p_name); + EditorNode::get_singleton()->remove_tool_menu_item(p_name); } void EditorPlugin::set_input_event_forwarding_always_enabled() { @@ -410,6 +473,10 @@ void EditorPlugin::notify_scene_closed(const String &scene_filepath) { emit_signal("scene_closed", scene_filepath); } +void EditorPlugin::notify_resource_saved(const Ref<Resource> &p_resource) { + emit_signal("resource_saved", p_resource); +} + Ref<SpatialEditorGizmo> EditorPlugin::create_spatial_gizmo(Spatial *p_spatial) { //?? if (get_script_instance() && get_script_instance()->has_method("create_spatial_gizmo")) { @@ -640,12 +707,16 @@ void EditorPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("add_control_to_dock", "slot", "control"), &EditorPlugin::add_control_to_dock); 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("add_tool_menu_item", "name", "handler", "callback", "ud"),&EditorPlugin::add_tool_menu_item,DEFVAL(Variant())); + 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_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("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); ClassDB::bind_method(D_METHOD("remove_custom_type", "type"), &EditorPlugin::remove_custom_type); + ClassDB::bind_method(D_METHOD("add_autoload_singleton", "name", "path"), &EditorPlugin::add_autoload_singleton); + ClassDB::bind_method(D_METHOD("remove_autoload_singleton", "name"), &EditorPlugin::remove_autoload_singleton); + ClassDB::bind_method(D_METHOD("update_overlays"), &EditorPlugin::update_overlays); ClassDB::bind_method(D_METHOD("make_bottom_panel_item_visible", "item"), &EditorPlugin::make_bottom_panel_item_visible); @@ -690,6 +761,7 @@ void EditorPlugin::_bind_methods() { ADD_SIGNAL(MethodInfo("scene_changed", PropertyInfo(Variant::OBJECT, "scene_root", PROPERTY_HINT_RESOURCE_TYPE, "Node"))); ADD_SIGNAL(MethodInfo("scene_closed", PropertyInfo(Variant::STRING, "filepath"))); ADD_SIGNAL(MethodInfo("main_screen_changed", PropertyInfo(Variant::STRING, "screen_name"))); + ADD_SIGNAL(MethodInfo("resource_saved", PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource"))); BIND_ENUM_CONSTANT(CONTAINER_TOOLBAR); BIND_ENUM_CONSTANT(CONTAINER_SPATIAL_EDITOR_MENU); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 145dccc2d5..ebc4afdfeb 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -90,6 +90,9 @@ public: Control *get_base_control(); + void set_plugin_enabled(const String &p_plugin, bool p_enabled); + bool is_plugin_enabled(const String &p_plugin) const; + Error save_scene(); void save_scene_as(const String &p_scene, bool p_with_preview = true); @@ -145,6 +148,7 @@ public: //TODO: send a resource for editing to the editor node? void add_control_to_container(CustomControlContainer p_location, Control *p_control); + void remove_control_from_container(CustomControlContainer p_location, Control *p_control); ToolButton *add_control_to_bottom_panel(Control *p_control, const String &p_title); void add_control_to_dock(DockSlot p_slot, Control *p_control); void remove_control_from_docks(Control *p_control); @@ -163,6 +167,7 @@ public: void notify_main_screen_changed(const String &screen_name); void notify_scene_changed(const Node *scn_root); void notify_scene_closed(const String &scene_filepath); + void notify_resource_saved(const Ref<Resource> &p_resource); virtual Ref<SpatialEditorGizmo> create_spatial_gizmo(Spatial *p_spatial); virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event); @@ -208,6 +213,9 @@ public: void add_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer); void remove_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer); + void add_autoload_singleton(const String &p_name, const String &p_path); + void remove_autoload_singleton(const String &p_name); + EditorPlugin(); virtual ~EditorPlugin(); }; diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp index 8803a03f2d..ea1e0fe99e 100644 --- a/editor/editor_plugin_settings.cpp +++ b/editor/editor_plugin_settings.cpp @@ -83,8 +83,6 @@ void EditorPluginSettings::update_plugins() { plugins.sort(); - Vector<String> active_plugins = ProjectSettings::get_singleton()->get("editor_plugins/enabled"); - for (int i = 0; i < plugins.size(); i++) { Ref<ConfigFile> cf; diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 93787a7a4c..aa67ea03d7 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -253,7 +253,6 @@ void EditorResourcePreview::_thread() { img.instance(); if (img->load(cache_base + ".png") != OK) { - //well fuck cache_valid = false; } else { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 433f501fc8..6eae7be9d5 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -256,8 +256,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { String best; - for (int i = 0; i < translations.size(); i++) { - String locale = translations[i]->get_locale(); + EditorTranslationList *etl = _editor_translations; + + while (etl->data) { + + const String &locale = etl->lang; lang_hint += ","; lang_hint += locale; @@ -268,6 +271,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { if (best == String() && host_lang.begins_with(locale)) { best = locale; } + + etl++; } if (best == String()) { @@ -278,15 +283,23 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["interface/editor/editor_language"] = PropertyInfo(Variant::STRING, "interface/editor/editor_language", PROPERTY_HINT_ENUM, lang_hint, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); } - _initial_set("interface/editor/hidpi_mode", 0); - hints["interface/editor/hidpi_mode"] = PropertyInfo(Variant::INT, "interface/editor/hidpi_mode", PROPERTY_HINT_ENUM, "Auto,VeryLoDPI,LoDPI,MidDPI,HiDPI", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/display_scale", 0); + hints["interface/editor/display_scale"] = PropertyInfo(Variant::INT, "interface/editor/display_scale", PROPERTY_HINT_ENUM, "Auto,75%,100%,125%,150%,175%,200%,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/custom_display_scale", 1.0f); + hints["interface/editor/custom_display_scale"] = PropertyInfo(Variant::REAL, "interface/editor/custom_display_scale", PROPERTY_HINT_RANGE, "0.75,3,0.01", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/scene_tabs/show_script_button", false); _initial_set("interface/editor/main_font_size", 14); hints["interface/editor/main_font_size"] = PropertyInfo(Variant::INT, "interface/editor/main_font_size", PROPERTY_HINT_RANGE, "10,40,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,96,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/main_font_hinting", 2); + hints["interface/editor/main_font_hinting"] = PropertyInfo(Variant::INT, "interface/editor/main_font_hinting", PROPERTY_HINT_ENUM, "None,Light,Normal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/code_font_hinting", 2); + hints["interface/editor/code_font_hinting"] = PropertyInfo(Variant::INT, "interface/editor/code_font_hinting", PROPERTY_HINT_ENUM, "None,Light,Normal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/main_font", ""); hints["interface/editor/main_font"] = PropertyInfo(Variant::STRING, "interface/editor/main_font", PROPERTY_HINT_GLOBAL_FILE, "*.ttf,*.otf", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/main__bold_font", ""); + hints["interface/editor/main_font_bold"] = PropertyInfo(Variant::STRING, "interface/editor/main_bold_font", PROPERTY_HINT_GLOBAL_FILE, "*.ttf,*.otf", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/code_font", ""); hints["interface/editor/code_font"] = PropertyInfo(Variant::STRING, "interface/editor/code_font", PROPERTY_HINT_GLOBAL_FILE, "*.ttf,*.otf", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/dim_editor_on_dialog_popup", true); @@ -360,7 +373,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/line_numbers/code_folding", true); _initial_set("text_editor/line_numbers/show_line_length_guideline", false); _initial_set("text_editor/line_numbers/line_length_guideline_column", 80); - hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 10"); + hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 1"); _initial_set("text_editor/open_scripts/smooth_scrolling", true); _initial_set("text_editor/open_scripts/v_scroll_speed", 80); @@ -374,7 +387,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/cursor/block_caret", false); _initial_set("text_editor/cursor/caret_blink", true); _initial_set("text_editor/cursor/caret_blink_speed", 0.65); - hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.1"); + hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.01"); _initial_set("text_editor/cursor/right_click_moves_caret", true); _initial_set("text_editor/completion/auto_brace_complete", false); @@ -382,8 +395,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/completion/callhint_tooltip_offset", Vector2()); _initial_set("text_editor/files/restore_scripts_on_load", true); _initial_set("text_editor/completion/complete_file_paths", true); - _initial_set("text_editor/files/maximum_recent_files", 20); - hints["text_editor/files/maximum_recent_files"] = PropertyInfo(Variant::INT, "text_editor/files/maximum_recent_files", PROPERTY_HINT_RANGE, "1, 200, 1"); _initial_set("docks/scene_tree/start_create_dialog_fully_expanded", false); _initial_set("docks/scene_tree/draw_relationship_lines", false); @@ -391,8 +402,17 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/grid_map/pick_distance", 5000.0); - _initial_set("editors/3d/grid_color", Color::html("808080")); - hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_COLOR_NO_ALPHA, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("editors/3d/primary_grid_color", Color::html("909090")); + hints["editors/3d/primary_grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/primary_grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + + _initial_set("editors/3d/secondary_grid_color", Color::html("606060")); + hints["editors/3d/secondary_grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/secondary_grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + + _initial_set("editors/3d/grid_size", 50); + hints["editors/3d/grid_size"] = PropertyInfo(Variant::INT, "editors/3d/grid_size", PROPERTY_HINT_RANGE, "1,500,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + + _initial_set("editors/3d/primary_grid_steps", 10); + hints["editors/3d/primary_grid_steps"] = PropertyInfo(Variant::INT, "editors/3d/primary_grid_steps", PROPERTY_HINT_RANGE, "1,100,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("editors/3d/default_fov", 70.0); _initial_set("editors/3d/default_z_near", 0.05); @@ -400,6 +420,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // navigation _initial_set("editors/3d/navigation/navigation_scheme", 0); + _initial_set("editors/3d/navigation/invert_y-axis", false); hints["editors/3d/navigation/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo"); _initial_set("editors/3d/navigation/zoom_style", 0); hints["editors/3d/navigation/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal"); @@ -444,9 +465,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/2d/guides_color", Color(0.6, 0.0, 0.8)); _initial_set("editors/2d/bone_width", 5); _initial_set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9)); - _initial_set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9)); + _initial_set("editors/2d/bone_color2", Color(0.6, 0.6, 0.6, 0.9)); _initial_set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9)); _initial_set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9)); + _initial_set("editors/2d/bone_outline_color", Color(0.35, 0.35, 0.35)); + _initial_set("editors/2d/bone_outline_size", 2); _initial_set("editors/2d/keep_margins_when_changing_anchors", false); _initial_set("editors/2d/warped_mouse_panning", true); _initial_set("editors/2d/simple_spacebar_panning", false); @@ -885,11 +908,29 @@ void EditorSettings::setup_language() { if (lang == "en") return; //none to do - for (int i = 0; i < translations.size(); i++) { - if (translations[i]->get_locale() == lang) { - TranslationServer::get_singleton()->set_tool_translation(translations[i]); - break; + EditorTranslationList *etl = _editor_translations; + + while (etl->data) { + + if (etl->lang == lang) { + + Vector<uint8_t> data; + data.resize(etl->uncomp_size); + Compression::decompress(data.ptrw(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE); + + FileAccessMemory *fa = memnew(FileAccessMemory); + fa->open_custom(data.ptr(), data.size()); + + Ref<Translation> tr = TranslationLoaderPO::load_translation(fa, NULL, "translation_" + String(etl->lang)); + + if (tr.is_valid()) { + tr->set_locale(etl->lang); + TranslationServer::get_singleton()->set_tool_translation(tr); + break; + } } + + etl++; } } @@ -938,11 +979,8 @@ void EditorSettings::save() { Error err = ResourceSaver::save(singleton->config_file_path, singleton); if (err != OK) { - ERR_PRINT("Can't Save!"); - return; - } - - if (OS::get_singleton()->is_stdout_verbose()) { + ERR_PRINTS("Error saving editor settings to " + singleton->config_file_path); + } else if (OS::get_singleton()->is_stdout_verbose()) { print_line("EditorSettings Save OK!"); } } @@ -1459,27 +1497,6 @@ EditorSettings::EditorSettings() { optimize_save = true; save_changed_setting = true; - EditorTranslationList *etl = _editor_translations; - - while (etl->data) { - - Vector<uint8_t> data; - data.resize(etl->uncomp_size); - Compression::decompress(data.ptrw(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE); - - FileAccessMemory *fa = memnew(FileAccessMemory); - fa->open_custom(data.ptr(), data.size()); - - Ref<Translation> tr = TranslationLoaderPO::load_translation(fa, NULL, "translation_" + String(etl->lang)); - - if (tr.is_valid()) { - tr->set_locale(etl->lang); - translations.push_back(tr); - } - - etl++; - } - _load_defaults(); } diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 914316ee61..e196ca506e 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -95,7 +95,6 @@ private: int last_order; Ref<Resource> clipboard; - Vector<Ref<Translation> > translations; Map<String, Ref<ShortCut> > shortcuts; String resource_path; @@ -145,7 +144,7 @@ public: bool has_setting(const String &p_setting) const; void erase(const String &p_setting); void raise_order(const String &p_setting); - void set_initial_value(const StringName &p_setting, const Variant &p_value, bool update_current = false); + void set_initial_value(const StringName &p_setting, const Variant &p_value, bool p_update_current = false); void set_manually(const StringName &p_setting, const Variant &p_value, bool p_emit_signal = false) { if (p_emit_signal) _set(p_setting, p_value); diff --git a/editor/editor_sub_scene.cpp b/editor/editor_sub_scene.cpp index 7527b198b8..056ee59860 100644 --- a/editor/editor_sub_scene.cpp +++ b/editor/editor_sub_scene.cpp @@ -121,10 +121,10 @@ void EditorSubScene::_item_multi_selected(Object *p_object, int p_cell, bool p_s } } -void EditorSubScene::_remove_selection_child(Node *n) { - if (n->get_child_count() > 0) { - for (int i = 0; i < n->get_child_count(); i++) { - Node *c = n->get_child(i); +void EditorSubScene::_remove_selection_child(Node *p_node) { + if (p_node->get_child_count() > 0) { + for (int i = 0; i < p_node->get_child_count(); i++) { + Node *c = p_node->get_child(i); List<Node *>::Element *E = selection.find(c); if (E) { selection.move_to_back(E); diff --git a/editor/editor_sub_scene.h b/editor/editor_sub_scene.h index cf4d6fd5b9..202ba03cea 100644 --- a/editor/editor_sub_scene.h +++ b/editor/editor_sub_scene.h @@ -50,7 +50,7 @@ class EditorSubScene : public ConfirmationDialog { void _fill_tree(Node *p_node, TreeItem *p_parent); void _selected_changed(); void _item_multi_selected(Object *p_object, int p_cell, bool p_selected); - void _remove_selection_child(Node *c); + void _remove_selection_child(Node *p_node); void _reown(Node *p_node, List<Node *> *p_to_reown); void ok_pressed(); diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 096a60afa3..bf7236cc2b 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -626,8 +626,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color_disabled", "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("GuiChecked", "EditorIcons")); - theme->set_icon("radio_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("visibility_hidden", "PopupMenu", theme->get_icon("GuiVisibilityHidden", "EditorIcons")); theme->set_icon("visibility_visible", "PopupMenu", theme->get_icon("GuiVisibilityVisible", "EditorIcons")); @@ -891,6 +891,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { //RichTextLabel theme->set_color("default_color", "RichTextLabel", font_color); + theme->set_color("font_color_shadow", "RichTextLabel", Color(0, 0, 0, 0)); + theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * EDSCALE); + theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * EDSCALE); + theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * EDSCALE); theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox()); theme->set_stylebox("normal", "RichTextLabel", style_tree_bg); @@ -908,6 +912,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_constant("shadow_as_outline", "Label", 0 * EDSCALE); theme->set_constant("line_spacing", "Label", 3 * EDSCALE); + // LinkButton + theme->set_stylebox("focus", "LinkButton", style_empty); + theme->set_color("font_color", "LinkButton", font_color); + // TooltipPanel Ref<StyleBoxFlat> style_tooltip = style_popup->duplicate(); style_tooltip->set_bg_color(Color(mono_color.r, mono_color.g, mono_color.b, 0.9)); @@ -1139,7 +1147,9 @@ Ref<Theme> create_custom_theme(const Ref<Theme> p_theme) { String custom_theme = EditorSettings::get_singleton()->get("interface/theme/custom_theme"); if (custom_theme != "") { theme = ResourceLoader::load(custom_theme); - } else { + } + + if (!theme.is_valid()) { theme = create_editor_theme(p_theme); } diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 6cbca3f733..a39c8b2209 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -30,6 +30,8 @@ #include "export_template_manager.h" +#include "core/os/input.h" +#include "core/os/keyboard.h" #include "editor_node.h" #include "editor_scale.h" #include "io/json.h" @@ -68,7 +70,7 @@ void ExportTemplateManager::_update_template_list() { memdelete(d); - String current_version = itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR) + "-" + VERSION_STATUS + VERSION_MODULE_CONFIG; + String current_version = VERSION_FULL_CONFIG; Label *current = memnew(Label); current->set_h_size_flags(SIZE_EXPAND_FILL); @@ -126,7 +128,7 @@ void ExportTemplateManager::_download_template(const String &p_version) { memdelete(template_list->get_child(0)); } template_downloader->popup_centered_minsize(); - template_list_state->set_text(TTR("Retrieving mirrors, please wait..")); + template_list_state->set_text(TTR("Retrieving mirrors, please wait...")); template_download_progress->set_max(100); template_download_progress->set_value(0); request_mirror->request("https://godotengine.org/mirrorlist/" + p_version + ".json"); @@ -215,25 +217,15 @@ void ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_ data_str.parse_utf8((const char *)data.ptr(), data.size()); data_str = data_str.strip_edges(); - if (data_str.get_slice_count("-") != 2 || data_str.get_slice_count(".") != 2) { - EditorNode::get_singleton()->show_warning(TTR("Invalid version.txt format inside templates.")); + // Version number should be of the form major.minor[.patch].status[.module_config] + // so it can in theory have 3 or more slices. + if (data_str.get_slice_count(".") < 3) { + EditorNode::get_singleton()->show_warning(vformat(TTR("Invalid version.txt format inside templates: %s."), data_str)); unzClose(pkg); return; } - String ver = data_str.get_slice("-", 0); - - int major = ver.get_slice(".", 0).to_int(); - int minor = ver.get_slice(".", 1).to_int(); - String rev = data_str.get_slice("-", 1); - - if (!rev.is_valid_identifier()) { - EditorNode::get_singleton()->show_warning(TTR("Invalid version.txt format inside templates. Revision is not a valid identifier.")); - unzClose(pkg); - return; - } - - version = itos(major) + "." + itos(minor) + "-" + rev; + version = data_str; } fc++; @@ -400,19 +392,10 @@ void ExportTemplateManager::_http_download_templates_completed(int p_status, int if (p_code != 200) { template_list_state->set_text(TTR("Failed:") + " " + itos(p_code)); } else { - String path = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp_templates.tpz"); - FileAccess *f = FileAccess::open(path, FileAccess::WRITE); - if (!f) { - template_list_state->set_text(TTR("Can't write file.")); - } else { - int size = p_data.size(); - PoolVector<uint8_t>::Read r = p_data.read(); - f->store_buffer(r.ptr(), size); - memdelete(f); - template_list_state->set_text(TTR("Download Complete.")); - template_downloader->hide(); - _install_from_file(path, false); - } + String path = download_templates->get_download_file(); + template_list_state->set_text(TTR("Download Complete.")); + template_downloader->hide(); + _install_from_file(path, false); } } break; } @@ -422,6 +405,11 @@ void ExportTemplateManager::_http_download_templates_completed(int p_status, int void ExportTemplateManager::_begin_template_download(const String &p_url) { + if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + OS::get_singleton()->shell_open(p_url); + return; + } + for (int i = 0; i < template_list->get_child_count(); i++) { BaseButton *b = Object::cast_to<BaseButton>(template_list->get_child(0)); if (b) { @@ -430,6 +418,8 @@ void ExportTemplateManager::_begin_template_download(const String &p_url) { } download_data.clear(); + download_templates->set_download_file(EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp_templates.tpz")); + download_templates->set_use_threads(true); Error err = download_templates->request(p_url); if (err != OK) { @@ -443,7 +433,7 @@ void ExportTemplateManager::_begin_template_download(const String &p_url) { template_download_progress->set_max(100); template_download_progress->set_value(0); template_download_progress->show(); - template_list_state->set_text(TTR("Connecting to Mirror..")); + template_list_state->set_text(TTR("Connecting to Mirror...")); } void ExportTemplateManager::_notification(int p_what) { @@ -469,13 +459,13 @@ void ExportTemplateManager::_notification(int p_what) { status = TTR("Can't Resolve"); errored = true; break; - case HTTPClient::STATUS_CONNECTING: status = TTR("Connecting.."); break; + case HTTPClient::STATUS_CONNECTING: status = TTR("Connecting..."); break; case HTTPClient::STATUS_CANT_CONNECT: status = TTR("Can't Connect"); errored = true; break; case HTTPClient::STATUS_CONNECTED: status = TTR("Connected"); break; - case HTTPClient::STATUS_REQUESTING: status = TTR("Requesting.."); break; + case HTTPClient::STATUS_REQUESTING: status = TTR("Requesting..."); break; case HTTPClient::STATUS_BODY: status = TTR("Downloading"); if (download_templates->get_body_size() > 0) { @@ -576,7 +566,7 @@ ExportTemplateManager::ExportTemplateManager() { template_downloader->add_child(vbc); ScrollContainer *sc = memnew(ScrollContainer); sc->set_custom_minimum_size(Size2(400, 200) * EDSCALE); - vbc->add_margin_child(TTR("Select mirror from list: "), sc); + vbc->add_margin_child(TTR("Select mirror from list: (Shift+Click: Open in Browser)"), sc); template_list = memnew(VBoxContainer); sc->add_child(template_list); sc->set_enable_v_scroll(true); diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp index 56fb7633e7..a218070933 100644 --- a/editor/fileserver/editor_file_server.cpp +++ b/editor/fileserver/editor_file_server.cpp @@ -55,7 +55,7 @@ void EditorFileServer::_subthread_start(void *s) { ClientData *cd = (ClientData *)s; - cd->connection->set_nodelay(true); + cd->connection->set_no_delay(true); uint8_t buf4[8]; Error err = cd->connection->get_data(buf4, 4); if (err != OK) { diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index cc9c9a11d7..e7741c7926 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -30,6 +30,7 @@ #include "filesystem_dock.h" +#include "core/os/keyboard.h" #include "editor_node.h" #include "editor_settings.h" #include "io/resource_loader.h" @@ -77,7 +78,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory return true; } -void FileSystemDock::_update_tree(bool keep_collapse_state) { +void FileSystemDock::_update_tree(bool keep_collapse_state, bool p_uncollapse_root) { Vector<String> uncollapsed_paths; if (keep_collapse_state) { @@ -129,6 +130,10 @@ void FileSystemDock::_update_tree(bool keep_collapse_state) { ti->set_metadata(0, fave); } + if (p_uncollapse_root) { + uncollapsed_paths.push_back("res://"); + } + _create_tree(root, EditorFileSystem::get_singleton()->get_filesystem(), uncollapsed_paths); tree->ensure_cursor_is_visible(); updating_tree = false; @@ -154,6 +159,7 @@ void FileSystemDock::_notification(int p_what) { } else { tree->set_v_size_flags(SIZE_FILL); + button_tree->hide(); if (!tree->is_visible()) { tree->show(); button_favorite->show(); @@ -163,7 +169,6 @@ void FileSystemDock::_notification(int p_what) { if (!file_list_vb->is_visible()) { file_list_vb->show(); - button_tree->hide(); _update_files(true); } } @@ -204,7 +209,7 @@ void FileSystemDock::_notification(int p_what) { if (EditorFileSystem::get_singleton()->is_scanning()) { _set_scanning_mode(); } else { - _update_tree(false); + _update_tree(false, true); } } break; @@ -488,7 +493,7 @@ void FileSystemDock::_update_files(bool p_keep_selection) { Ref<Texture> folderIcon = (use_thumbnails) ? folder_thumbnail : get_icon("folder", "FileDialog"); if (path != "res://") { - files->add_item("..", folderIcon, false); + files->add_item("..", folderIcon, true); String bd = path.get_base_dir(); if (bd != "res://" && !bd.ends_with("/")) @@ -528,6 +533,7 @@ void FileSystemDock::_update_files(bool p_keep_selection) { filelist.push_back(fi); } + filelist.sort(); } String oi = "Object"; @@ -714,12 +720,13 @@ void FileSystemDock::_push_to_history() { button_hist_next->set_disabled(history_pos == history.size() - 1); } -void FileSystemDock::_get_all_files_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files) const { +void FileSystemDock::_get_all_items_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files, Vector<String> &folders) const { if (efsd == NULL) return; for (int i = 0; i < efsd->get_subdir_count(); i++) { - _get_all_files_in_dir(efsd->get_subdir(i), files); + folders.push_back(efsd->get_subdir(i)->get_path()); + _get_all_items_in_dir(efsd->get_subdir(i), files, folders); } for (int i = 0; i < efsd->get_file_count(); i++) { files.push_back(efsd->get_file_path(i)); @@ -741,7 +748,8 @@ void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, const Map<Str } } -void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const { +void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_new_path, + Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const { //Ensure folder paths end with "/" 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 + "/"); @@ -758,11 +766,13 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ } //Build a list of files which will have new paths as a result of this operation - Vector<String> changed_paths; + Vector<String> file_changed_paths; + Vector<String> folder_changed_paths; if (p_item.is_file) { - changed_paths.push_back(old_path); + file_changed_paths.push_back(old_path); } else { - _get_all_files_in_dir(EditorFileSystem::get_singleton()->get_filesystem_path(old_path), changed_paths); + folder_changed_paths.push_back(old_path); + _get_all_items_in_dir(EditorFileSystem::get_singleton()->get_filesystem_path(old_path), file_changed_paths, folder_changed_paths); } DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); @@ -778,12 +788,12 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ } // update scene if it is open - for (int i = 0; i < changed_paths.size(); ++i) { - String new_item_path = p_item.is_file ? new_path : changed_paths[i].replace_first(old_path, new_path); - if (ResourceLoader::get_resource_type(new_item_path) == "PackedScene" && editor->is_scene_open(changed_paths[i])) { + for (int i = 0; i < file_changed_paths.size(); ++i) { + String new_item_path = p_item.is_file ? new_path : file_changed_paths[i].replace_first(old_path, new_path); + if (ResourceLoader::get_resource_type(new_item_path) == "PackedScene" && editor->is_scene_open(file_changed_paths[i])) { EditorData *ed = &editor->get_editor_data(); for (int j = 0; j < ed->get_edited_scene_count(); j++) { - if (ed->get_scene_path(j) == changed_paths[i]) { + if (ed->get_scene_path(j) == file_changed_paths[i]) { ed->get_edited_scene_root(j)->set_filename(new_item_path); break; } @@ -792,9 +802,12 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ } //Only treat as a changed dependency if it was successfully moved - for (int i = 0; i < changed_paths.size(); ++i) { - p_renames[changed_paths[i]] = changed_paths[i].replace_first(old_path, new_path); - print_line(" Remap: " + changed_paths[i] + " -> " + p_renames[changed_paths[i]]); + for (int i = 0; i < file_changed_paths.size(); ++i) { + p_file_renames[file_changed_paths[i]] = file_changed_paths[i].replace_first(old_path, new_path); + print_line(" Remap: " + file_changed_paths[i] + " -> " + p_file_renames[file_changed_paths[i]]); + } + for (int i = 0; i < folder_changed_paths.size(); ++i) { + p_folder_renames[folder_changed_paths[i]] = folder_changed_paths[i].replace_first(old_path, new_path); } } else { EditorNode::get_singleton()->add_io_error(TTR("Error moving:") + "\n" + old_path + "\n"); @@ -907,13 +920,32 @@ void FileSystemDock::_update_dependencies_after_move(const Map<String, String> & } } +void FileSystemDock::_update_favorite_dirs_list_after_move(const Map<String, String> &p_renames) const { + + Vector<String> favorite_dirs = EditorSettings::get_singleton()->get_favorite_dirs(); + Vector<String> new_favorite_dirs; + + for (int i = 0; i < favorite_dirs.size(); i++) { + String old_path = favorite_dirs[i] + "/"; + + if (p_renames.has(old_path)) { + String new_path = p_renames[old_path]; + new_favorite_dirs.push_back(new_path.substr(0, new_path.length() - 1)); + } else { + new_favorite_dirs.push_back(favorite_dirs[i]); + } + } + + EditorSettings::get_singleton()->set_favorite_dirs(new_favorite_dirs); +} + void FileSystemDock::_make_dir_confirm() { String dir_name = make_dir_dialog_text->get_text().strip_edges(); if (dir_name.length() == 0) { EditorNode::get_singleton()->show_warning(TTR("No name provided")); return; - } else if (dir_name.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1) { + } else if (dir_name.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1 || dir_name.ends_with(".") || dir_name.ends_with(" ")) { EditorNode::get_singleton()->show_warning(TTR("Provided name contains invalid characters")); return; } @@ -953,17 +985,24 @@ void FileSystemDock::_rename_operation_confirm() { //Present a more user friendly warning for name conflict DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); +#if defined(WINDOWS_ENABLED) || defined(UWP_ENABLED) + // Workaround case insensitivity on Windows + if ((da->file_exists(new_path) || da->dir_exists(new_path)) && new_path.to_lower() != old_path.to_lower()) { +#else if (da->file_exists(new_path) || da->dir_exists(new_path)) { +#endif EditorNode::get_singleton()->show_warning(TTR("A file or folder with this name already exists.")); memdelete(da); return; } memdelete(da); - Map<String, String> renames; - _try_move_item(to_rename, new_path, renames); - _update_dependencies_after_move(renames); - _update_resource_paths_after_move(renames); + Map<String, String> file_renames; + Map<String, String> folder_renames; + _try_move_item(to_rename, new_path, file_renames, folder_renames); + _update_dependencies_after_move(file_renames); + _update_resource_paths_after_move(file_renames); + _update_favorite_dirs_list_after_move(folder_renames); //Rescan everything print_line("call rescan!"); @@ -1007,15 +1046,17 @@ void FileSystemDock::_duplicate_operation_confirm() { void FileSystemDock::_move_operation_confirm(const String &p_to_path) { - Map<String, String> renames; + Map<String, String> file_renames; + Map<String, String> folder_renames; for (int i = 0; i < to_move.size(); i++) { String old_path = to_move[i].path.ends_with("/") ? to_move[i].path.substr(0, to_move[i].path.length() - 1) : to_move[i].path; String new_path = p_to_path.plus_file(old_path.get_file()); - _try_move_item(to_move[i], new_path, renames); + _try_move_item(to_move[i], new_path, file_renames, folder_renames); } - _update_dependencies_after_move(renames); - _update_resource_paths_after_move(renames); + _update_dependencies_after_move(file_renames); + _update_resource_paths_after_move(file_renames); + _update_favorite_dirs_list_after_move(folder_renames); print_line("call rescan!"); _rescan(); @@ -1024,8 +1065,19 @@ void FileSystemDock::_move_operation_confirm(const String &p_to_path) { void FileSystemDock::_file_option(int p_option) { switch (p_option) { case FILE_SHOW_IN_EXPLORER: { - String dir = ProjectSettings::get_singleton()->globalize_path(this->path); - OS::get_singleton()->shell_open(String("file://") + dir); + + String path = this->path; + + // first try to grab directory from selected file, so that it works for searched files + int idx = files->get_current(); + + if (idx >= 0 && idx < files->get_item_count()) { + path = files->get_item_metadata(idx); + path = path.get_base_dir(); + } + + path = ProjectSettings::get_singleton()->globalize_path(path); + OS::get_singleton()->shell_open(String("file://") + path); } break; case FILE_OPEN: { for (int i = 0; i < files->get_item_count(); i++) { @@ -1185,6 +1237,15 @@ void FileSystemDock::_file_option(int p_option) { make_dir_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE); make_dir_dialog_text->grab_focus(); } break; + case FILE_NEW_SCRIPT: { + String tarDir = path; + if (tarDir != "res://" && !tarDir.ends_with("/")) { + tarDir += "/"; + } + + make_script_dialog_text->config("Node", tarDir + "new_script.gd"); + make_script_dialog_text->popup_centered(Size2(300, 300) * EDSCALE); + } break; case FILE_COPY_PATH: { int idx = files->get_current(); if (idx < 0 || idx >= files->get_item_count()) @@ -1297,12 +1358,12 @@ void FileSystemDock::_dir_rmb_pressed(const Vector2 &p_pos) { folder_options->add_separator(); folder_options->add_item(TTR("Copy Path"), FOLDER_COPY_PATH); if (fpath != "res://") { - folder_options->add_item(TTR("Rename.."), FOLDER_RENAME); - folder_options->add_item(TTR("Move To.."), FOLDER_MOVE); + folder_options->add_item(TTR("Rename..."), FOLDER_RENAME); + folder_options->add_item(TTR("Move To..."), FOLDER_MOVE); folder_options->add_item(TTR("Delete"), FOLDER_REMOVE); } folder_options->add_separator(); - folder_options->add_item(TTR("New Folder.."), FOLDER_NEW_FOLDER); + folder_options->add_item(TTR("New Folder..."), FOLDER_NEW_FOLDER); folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER); } folder_options->set_position(tree->get_global_position() + p_pos); @@ -1587,8 +1648,8 @@ void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) { } if (filenames.size() == 1) { - file_options->add_item(TTR("Edit Dependencies.."), FILE_DEPENDENCIES); - file_options->add_item(TTR("View Owners.."), FILE_OWNERS); + file_options->add_item(TTR("Edit Dependencies..."), FILE_DEPENDENCIES); + file_options->add_item(TTR("View Owners..."), FILE_OWNERS); file_options->add_separator(); } @@ -1601,15 +1662,16 @@ void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) { if (num_items >= 1) { if (num_items == 1) { file_options->add_item(TTR("Copy Path"), FILE_COPY_PATH); - file_options->add_item(TTR("Rename.."), FILE_RENAME); - file_options->add_item(TTR("Duplicate.."), FILE_DUPLICATE); + file_options->add_item(TTR("Rename..."), FILE_RENAME); + file_options->add_item(TTR("Duplicate..."), FILE_DUPLICATE); } - file_options->add_item(TTR("Move To.."), FILE_MOVE); + file_options->add_item(TTR("Move To..."), FILE_MOVE); file_options->add_item(TTR("Delete"), FILE_REMOVE); file_options->add_separator(); } - file_options->add_item(TTR("New Folder.."), FILE_NEW_FOLDER); + file_options->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); + file_options->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); file_options->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER); file_options->set_position(files->get_global_position() + p_pos); @@ -1620,7 +1682,8 @@ void FileSystemDock::_rmb_pressed(const Vector2 &p_pos) { file_options->clear(); file_options->set_size(Size2(1, 1)); - file_options->add_item(TTR("New Folder.."), FILE_NEW_FOLDER); + file_options->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); + file_options->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); file_options->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER); file_options->set_position(files->get_global_position() + p_pos); file_options->popup(); @@ -1637,6 +1700,25 @@ void FileSystemDock::_file_multi_selected(int p_index, bool p_selected) { call_deferred("_update_import_dock"); } +void FileSystemDock::_files_gui_input(Ref<InputEvent> p_event) { + + if (get_viewport()->get_modal_stack_top()) + return; //ignore because of modal window + + Ref<InputEventKey> key = p_event; + if (key.is_valid() && key->is_pressed() && !key->is_echo()) { + if (ED_IS_SHORTCUT("filesystem_dock/duplicate", p_event)) { + _file_option(FILE_DUPLICATE); + } else if (ED_IS_SHORTCUT("filesystem_dock/copy_path", p_event)) { + _file_option(FILE_COPY_PATH); + } else if (ED_IS_SHORTCUT("filesystem_dock/delete", p_event)) { + _file_option(FILE_REMOVE); + } else if (ED_IS_SHORTCUT("filesystem_dock/rename", p_event)) { + _file_option(FILE_RENAME); + } + } +} + void FileSystemDock::_file_selected() { import_dock_needs_update = true; @@ -1693,6 +1775,7 @@ void FileSystemDock::_update_import_dock() { void FileSystemDock::_bind_methods() { + ClassDB::bind_method(D_METHOD("_files_gui_input"), &FileSystemDock::_files_gui_input); ClassDB::bind_method(D_METHOD("_update_tree"), &FileSystemDock::_update_tree); ClassDB::bind_method(D_METHOD("_rescan"), &FileSystemDock::_rescan); ClassDB::bind_method(D_METHOD("_favorites_pressed"), &FileSystemDock::_favorites_pressed); @@ -1739,6 +1822,11 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { editor = p_editor; path = "res://"; + ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KEY_MASK_CMD | 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")); + HBoxContainer *toolbar_hbc = memnew(HBoxContainer); add_child(toolbar_hbc); @@ -1845,6 +1933,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { files->set_select_mode(ItemList::SELECT_MULTI); files->set_drag_forwarding(this); files->connect("item_rmb_selected", this, "_files_list_rmb_select"); + files->connect("gui_input", this, "_files_gui_input"); files->connect("item_selected", this, "_file_selected"); files->connect("multi_selected", this, "_file_multi_selected"); files->connect("rmb_clicked", this, "_rmb_pressed"); @@ -1856,7 +1945,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(scanning_vb); Label *slabel = memnew(Label); - slabel->set_text(TTR("Scanning Files,\nPlease Wait..")); + slabel->set_text(TTR("Scanning Files,\nPlease Wait...")); slabel->set_align(Label::ALIGN_CENTER); scanning_vb->add_child(slabel); @@ -1910,6 +1999,10 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { make_dir_dialog->register_text_enter(make_dir_dialog_text); make_dir_dialog->connect("confirmed", this, "_make_dir_confirm"); + make_script_dialog_text = memnew(ScriptCreateDialog); + make_script_dialog_text->set_title(TTR("Create Script")); + add_child(make_script_dialog_text); + updating_tree = false; initialized = false; import_dock_needs_update = false; diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index af80557465..e59d4c96e1 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -50,6 +50,7 @@ #include "dependency_editor.h" #include "editor_dir_dialog.h" #include "editor_file_system.h" +#include "script_create_dialog.h" class EditorNode; @@ -75,6 +76,7 @@ private: FILE_REIMPORT, FILE_INFO, FILE_NEW_FOLDER, + FILE_NEW_SCRIPT, FILE_SHOW_IN_EXPLORER, FILE_COPY_PATH }; @@ -126,6 +128,7 @@ private: LineEdit *duplicate_dialog_text; ConfirmationDialog *make_dir_dialog; LineEdit *make_dir_dialog_text; + ScriptCreateDialog *make_script_dialog_text; class FileOrFolder { public: @@ -157,7 +160,9 @@ private: bool import_dock_needs_update; bool _create_tree(TreeItem *p_parent, EditorFileSystemDirectory *p_dir, Vector<String> &uncollapsed_paths); - void _update_tree(bool keep_collapse_state); + void _update_tree(bool keep_collapse_state, bool p_uncollapse_root = false); + + void _files_gui_input(Ref<InputEvent> p_event); void _update_files(bool p_keep_selection); void _update_file_display_toggle_button(); @@ -174,12 +179,13 @@ private: void _file_selected(); void _dir_selected(); - void _get_all_files_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files) const; + void _get_all_items_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files, Vector<String> &folders) const; void _find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const; - void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const; + void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const; void _try_duplicate_item(const FileOrFolder &p_item, const String &p_new_path) const; void _update_dependencies_after_move(const Map<String, String> &p_renames) const; void _update_resource_paths_after_move(const Map<String, String> &p_renames) const; + void _update_favorite_dirs_list_after_move(const Map<String, String> &p_renames) const; void _make_dir_confirm(); void _rename_operation_confirm(); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp new file mode 100644 index 0000000000..74ea46838b --- /dev/null +++ b/editor/find_in_files.cpp @@ -0,0 +1,824 @@ +/*************************************************************************/ +/* find_in_files.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (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 "find_in_files.h" +#include "core/os/dir_access.h" +#include "core/os/os.h" +#include "editor_scale.h" +#include "scene/gui/box_container.h" +#include "scene/gui/button.h" +#include "scene/gui/check_box.h" +#include "scene/gui/file_dialog.h" +#include "scene/gui/grid_container.h" +#include "scene/gui/item_list.h" +#include "scene/gui/label.h" +#include "scene/gui/line_edit.h" +#include "scene/gui/progress_bar.h" + +#define ROOT_PREFIX "res://" + +const char *FindInFiles::SIGNAL_RESULT_FOUND = "result_found"; +const char *FindInFiles::SIGNAL_FINISHED = "finished"; + +// TODO Would be nice in Vector and PoolVectors +template <typename T> +inline void pop_back(T &container) { + container.resize(container.size() - 1); +} + +// TODO Copied from TextEdit private, would be nice to extract it in a single place +static bool is_text_char(CharType c) { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; +} + +FindInFiles::FindInFiles() { + _root_prefix = ROOT_PREFIX; + _extension_filter.insert("gd"); + _extension_filter.insert("cs"); + _searching = false; + _whole_words = true; + _match_case = true; +} + +void FindInFiles::set_search_text(String p_pattern) { + _pattern = p_pattern; +} + +void FindInFiles::set_whole_words(bool p_whole_word) { + _whole_words = p_whole_word; +} + +void FindInFiles::set_match_case(bool p_match_case) { + _match_case = p_match_case; +} + +void FindInFiles::set_folder(String folder) { + _root_dir = folder; +} + +void FindInFiles::set_filter(const Set<String> &exts) { + _extension_filter = exts; +} + +void FindInFiles::_notification(int p_notification) { + if (p_notification == NOTIFICATION_PROCESS) { + _process(); + } +} + +void FindInFiles::start() { + if (_pattern == "") { + print_line("Nothing to search, pattern is empty"); + emit_signal(SIGNAL_FINISHED); + return; + } + if (_extension_filter.size() == 0) { + print_line("Nothing to search, filter matches no files"); + emit_signal(SIGNAL_FINISHED); + return; + } + + // Init search + _current_dir = ""; + PoolStringArray init_folder; + init_folder.append(_root_dir); + _folders_stack.push_back(init_folder); + + _initial_files_count = 0; + + _searching = true; + set_process(true); +} + +void FindInFiles::stop() { + _searching = false; + _current_dir = ""; + set_process(false); +} + +void FindInFiles::_process() { + // This part can be moved to a thread if needed + + OS &os = *OS::get_singleton(); + float duration = 0.0; + while (duration < 1.0 / 120.0) { + float time_before = os.get_ticks_msec(); + _iterate(); + duration += (os.get_ticks_msec() - time_before); + } +} + +void FindInFiles::_iterate() { + + if (_folders_stack.size() != 0) { + + // Scan folders first so we can build a list of files and have progress info later + + PoolStringArray &folders_to_scan = _folders_stack[_folders_stack.size() - 1]; + + if (folders_to_scan.size() != 0) { + // Scan one folder below + + String folder_name = folders_to_scan[folders_to_scan.size() - 1]; + pop_back(folders_to_scan); + + _current_dir = _current_dir.plus_file(folder_name); + + PoolStringArray sub_dirs; + _scan_dir(_root_prefix + _current_dir, sub_dirs); + + _folders_stack.push_back(sub_dirs); + + } else { + // Go back one level + + pop_back(_folders_stack); + _current_dir = _current_dir.get_base_dir(); + + if (_folders_stack.size() == 0) { + // All folders scanned + _initial_files_count = _files_to_scan.size(); + } + } + + } else if (_files_to_scan.size() != 0) { + + // Then scan files + + String fpath = _files_to_scan[_files_to_scan.size() - 1]; + pop_back(_files_to_scan); + _scan_file(fpath); + + } else { + print_line("Search complete"); + set_process(false); + _current_dir = ""; + _searching = false; + emit_signal(SIGNAL_FINISHED); + } +} + +float FindInFiles::get_progress() const { + if (_initial_files_count != 0) { + return static_cast<float>(_initial_files_count - _files_to_scan.size()) / static_cast<float>(_initial_files_count); + } + return 0; +} + +void FindInFiles::_scan_dir(String path, PoolStringArray &out_folders) { + + DirAccess *dir = DirAccess::open(path); + if (dir == NULL) { + print_line("Cannot open directory! " + path); + return; + } + + dir->list_dir_begin(); + + for (int i = 0; i < 1000; ++i) { + String file = dir->get_next(); + + if (file == "") + break; + + // Ignore special dirs and hidden dirs (such as .git and .import) + if (file == "." || file == ".." || file.begins_with(".")) + continue; + + if (dir->current_is_dir()) + out_folders.append(file); + + else { + String file_ext = file.get_extension(); + if (_extension_filter.has(file_ext)) { + _files_to_scan.push_back(path.plus_file(file)); + } + } + } +} + +void FindInFiles::_scan_file(String fpath) { + + FileAccess *f = FileAccess::open(fpath, FileAccess::READ); + if (f == NULL) { + print_line(String("Cannot open file ") + fpath); + return; + } + + int line_number = 0; + + while (!f->eof_reached()) { + + // line number starts at 1 + ++line_number; + + int begin = 0; + int end = 0; + + String line = f->get_line(); + + // Find all occurrences in the current line + while (true) { + begin = _match_case ? line.find(_pattern, end) : line.findn(_pattern, end); + + if (begin == -1) + break; + + end = begin + _pattern.length(); + + if (_whole_words) { + if (begin > 0 && is_text_char(line[begin - 1])) { + continue; + } + if (end < line.size() && is_text_char(line[end])) { + continue; + } + } + + emit_signal(SIGNAL_RESULT_FOUND, fpath, line_number, begin, end, line); + } + } + + f->close(); +} + +void FindInFiles::_bind_methods() { + + ADD_SIGNAL(MethodInfo(SIGNAL_RESULT_FOUND, + PropertyInfo(Variant::STRING, "path"), + PropertyInfo(Variant::INT, "line_number"), + PropertyInfo(Variant::INT, "begin"), + PropertyInfo(Variant::INT, "end"), + PropertyInfo(Variant::STRING, "text"))); + + ADD_SIGNAL(MethodInfo(SIGNAL_FINISHED)); +} + +//----------------------------------------------------------------------------- +const char *FindInFilesDialog::SIGNAL_FIND_REQUESTED = "find_requested"; +const char *FindInFilesDialog::SIGNAL_REPLACE_REQUESTED = "replace_requested"; + +FindInFilesDialog::FindInFilesDialog() { + + set_custom_minimum_size(Size2(400, 190)); + set_resizable(true); + set_title(TTR("Find in files")); + + VBoxContainer *vbc = memnew(VBoxContainer); + vbc->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 8 * EDSCALE); + vbc->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -8 * EDSCALE); + vbc->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -8 * EDSCALE); + add_child(vbc); + + GridContainer *gc = memnew(GridContainer); + gc->set_columns(2); + vbc->add_child(gc); + + Label *find_label = memnew(Label); + find_label->set_text(TTR("Find: ")); + gc->add_child(find_label); + + _search_text_line_edit = memnew(LineEdit); + _search_text_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + _search_text_line_edit->connect("text_changed", this, "_on_search_text_modified"); + _search_text_line_edit->connect("text_entered", this, "_on_search_text_entered"); + gc->add_child(_search_text_line_edit); + + { + Control *placeholder = memnew(Control); + gc->add_child(placeholder); + } + + { + HBoxContainer *hbc = memnew(HBoxContainer); + + _whole_words_checkbox = memnew(CheckBox); + _whole_words_checkbox->set_text(TTR("Whole words")); + _whole_words_checkbox->set_pressed(true); + hbc->add_child(_whole_words_checkbox); + + _match_case_checkbox = memnew(CheckBox); + _match_case_checkbox->set_text(TTR("Match case")); + _match_case_checkbox->set_pressed(true); + hbc->add_child(_match_case_checkbox); + + gc->add_child(hbc); + } + + Label *folder_label = memnew(Label); + folder_label->set_text(TTR("Folder: ")); + gc->add_child(folder_label); + + { + HBoxContainer *hbc = memnew(HBoxContainer); + + Label *prefix_label = memnew(Label); + prefix_label->set_text(ROOT_PREFIX); + hbc->add_child(prefix_label); + + _folder_line_edit = memnew(LineEdit); + _folder_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + hbc->add_child(_folder_line_edit); + + Button *folder_button = memnew(Button); + folder_button->set_text("..."); + folder_button->connect("pressed", this, "_on_folder_button_pressed"); + hbc->add_child(folder_button); + + _folder_dialog = memnew(FileDialog); + _folder_dialog->set_mode(FileDialog::MODE_OPEN_DIR); + _folder_dialog->connect("dir_selected", this, "_on_folder_selected"); + add_child(_folder_dialog); + + gc->add_child(hbc); + } + + Label *filter_label = memnew(Label); + filter_label->set_text(TTR("Filter: ")); + gc->add_child(filter_label); + + { + HBoxContainer *hbc = memnew(HBoxContainer); + + Vector<String> exts; + exts.push_back("gd"); + exts.push_back("cs"); + + for (int i = 0; i < exts.size(); ++i) { + CheckBox *cb = memnew(CheckBox); + cb->set_text(exts[i]); + cb->set_pressed(true); + hbc->add_child(cb); + _filters.push_back(cb); + } + + gc->add_child(hbc); + } + + { + Control *placeholder = memnew(Control); + placeholder->set_custom_minimum_size(Size2(0, EDSCALE * 16)); + vbc->add_child(placeholder); + } + + { + HBoxContainer *hbc = memnew(HBoxContainer); + hbc->set_alignment(HBoxContainer::ALIGN_CENTER); + + _find_button = memnew(Button); + _find_button->set_text(TTR("Find...")); + _find_button->connect("pressed", this, "_on_find_button_pressed"); + _find_button->set_disabled(true); + hbc->add_child(_find_button); + + { + Control *placeholder = memnew(Control); + placeholder->set_custom_minimum_size(Size2(EDSCALE * 16, 0)); + hbc->add_child(placeholder); + } + + _replace_button = memnew(Button); + _replace_button->set_text(TTR("Replace...")); + _replace_button->connect("pressed", this, "_on_replace_button_pressed"); + _replace_button->set_disabled(true); + hbc->add_child(_replace_button); + + { + Control *placeholder = memnew(Control); + placeholder->set_custom_minimum_size(Size2(EDSCALE * 16, 0)); + hbc->add_child(placeholder); + } + + Button *cancel_button = memnew(Button); + cancel_button->set_text(TTR("Cancel")); + cancel_button->connect("pressed", this, "hide"); + hbc->add_child(cancel_button); + + vbc->add_child(hbc); + } +} + +void FindInFilesDialog::set_search_text(String text) { + _search_text_line_edit->set_text(text); +} + +String FindInFilesDialog::get_search_text() const { + String text = _search_text_line_edit->get_text(); + return text.strip_edges(); +} + +bool FindInFilesDialog::is_match_case() const { + return _match_case_checkbox->is_pressed(); +} + +bool FindInFilesDialog::is_whole_words() const { + return _whole_words_checkbox->is_pressed(); +} + +String FindInFilesDialog::get_folder() const { + String text = _folder_line_edit->get_text(); + return text.strip_edges(); +} + +Set<String> FindInFilesDialog::get_filter() const { + Set<String> filters; + for (int i = 0; i < _filters.size(); ++i) { + CheckBox *cb = _filters[i]; + if (cb->is_pressed()) { + filters.insert(_filters[i]->get_text()); + } + } + return filters; +} + +void FindInFilesDialog::_notification(int p_what) { + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + if (is_visible()) { + // Doesn't work more than once if not deferred... + _search_text_line_edit->call_deferred("grab_focus"); + _search_text_line_edit->select_all(); + } + } +} + +void FindInFilesDialog::_on_folder_button_pressed() { + _folder_dialog->popup_centered_ratio(); +} + +void FindInFilesDialog::_on_find_button_pressed() { + emit_signal(SIGNAL_FIND_REQUESTED); + hide(); +} + +void FindInFilesDialog::_on_replace_button_pressed() { + emit_signal(SIGNAL_REPLACE_REQUESTED); + hide(); +} + +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()); +} + +void FindInFilesDialog::_on_search_text_entered(String text) { + // This allows to trigger a global search without leaving the keyboard + if (!_find_button->is_disabled()) + _on_find_button_pressed(); +} + +void FindInFilesDialog::_on_folder_selected(String path) { + int i = path.find("://"); + if (i != -1) + path = path.right(i + 3); + _folder_line_edit->set_text(path); +} + +void FindInFilesDialog::_bind_methods() { + + ClassDB::bind_method("_on_folder_button_pressed", &FindInFilesDialog::_on_folder_button_pressed); + ClassDB::bind_method("_on_find_button_pressed", &FindInFilesDialog::_on_find_button_pressed); + ClassDB::bind_method("_on_replace_button_pressed", &FindInFilesDialog::_on_replace_button_pressed); + ClassDB::bind_method("_on_folder_selected", &FindInFilesDialog::_on_folder_selected); + ClassDB::bind_method("_on_search_text_modified", &FindInFilesDialog::_on_search_text_modified); + ClassDB::bind_method("_on_search_text_entered", &FindInFilesDialog::_on_search_text_entered); + + ADD_SIGNAL(MethodInfo(SIGNAL_FIND_REQUESTED)); + ADD_SIGNAL(MethodInfo(SIGNAL_REPLACE_REQUESTED)); +} + +//----------------------------------------------------------------------------- +const char *FindInFilesPanel::SIGNAL_RESULT_SELECTED = "result_selected"; +const char *FindInFilesPanel::SIGNAL_FILES_MODIFIED = "files_modified"; + +FindInFilesPanel::FindInFilesPanel() { + + _finder = memnew(FindInFiles); + _finder->connect(FindInFiles::SIGNAL_RESULT_FOUND, this, "_on_result_found"); + _finder->connect(FindInFiles::SIGNAL_FINISHED, this, "_on_finished"); + 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); + add_child(vbc); + + { + HBoxContainer *hbc = memnew(HBoxContainer); + + Label *find_label = memnew(Label); + find_label->set_text(TTR("Find: ")); + hbc->add_child(find_label); + + _search_text_label = memnew(Label); + _search_text_label->add_font_override("font", get_font("source", "EditorFonts")); + hbc->add_child(_search_text_label); + + _progress_bar = memnew(ProgressBar); + _progress_bar->set_h_size_flags(SIZE_EXPAND_FILL); + hbc->add_child(_progress_bar); + set_progress_visible(false); + + _status_label = memnew(Label); + hbc->add_child(_status_label); + + _cancel_button = memnew(Button); + _cancel_button->set_text(TTR("Cancel")); + _cancel_button->connect("pressed", this, "_on_cancel_button_clicked"); + _cancel_button->set_disabled(true); + hbc->add_child(_cancel_button); + + vbc->add_child(hbc); + } + + // In the future, this should be replaced by a more specific list container, + // which can highlight text regions and change opacity for enabled/disabled states + _results_display = memnew(ItemList); + _results_display->add_font_override("font", get_font("source", "EditorFonts")); + _results_display->set_v_size_flags(SIZE_EXPAND_FILL); + _results_display->connect("item_selected", this, "_on_result_selected"); + vbc->add_child(_results_display); + + { + _replace_container = memnew(HBoxContainer); + + Label *replace_label = memnew(Label); + replace_label->set_text(TTR("Replace: ")); + _replace_container->add_child(replace_label); + + _replace_line_edit = memnew(LineEdit); + _replace_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + _replace_line_edit->connect("text_changed", this, "_on_replace_text_changed"); + _replace_container->add_child(_replace_line_edit); + + _replace_all_button = memnew(Button); + _replace_all_button->set_text(TTR("Replace all (no undo)")); + _replace_all_button->connect("pressed", this, "_on_replace_all_clicked"); + _replace_container->add_child(_replace_all_button); + + _replace_container->hide(); + + vbc->add_child(_replace_container); + } +} + +void FindInFilesPanel::set_with_replace(bool with_replace) { + + _replace_container->set_visible(with_replace); +} + +void FindInFilesPanel::start_search() { + + _results_display->clear(); + _status_label->set_text(TTR("Searching...")); + _search_text_label->set_text(_finder->get_search_text()); + + set_process(true); + set_progress_visible(true); + + _finder->start(); + + update_replace_buttons(); + _cancel_button->set_disabled(false); +} + +void FindInFilesPanel::stop_search() { + + _finder->stop(); + + _status_label->set_text(""); + update_replace_buttons(); + set_progress_visible(false); + _cancel_button->set_disabled(true); +} + +void FindInFilesPanel::_notification(int p_what) { + if (p_what == NOTIFICATION_PROCESS) { + _progress_bar->set_as_ratio(_finder->get_progress()); + } +} + +void FindInFilesPanel::_on_result_found(String fpath, int line_number, int begin, int end, String text) { + + int i = _results_display->get_item_count(); + _results_display->add_item(fpath + ": " + String::num(line_number) + ": " + text.replace("\t", " ")); + _results_display->set_item_metadata(i, varray(fpath, line_number, begin, end)); +} + +void FindInFilesPanel::_on_finished() { + + _status_label->set_text(TTR("Search complete")); + update_replace_buttons(); + set_progress_visible(false); + _cancel_button->set_disabled(true); +} + +void FindInFilesPanel::_on_cancel_button_clicked() { + stop_search(); +} + +void FindInFilesPanel::_on_result_selected(int i) { + + Array meta = _results_display->get_item_metadata(i); + emit_signal(SIGNAL_RESULT_SELECTED, meta[0], meta[1], meta[2], meta[3]); +} + +void FindInFilesPanel::_on_replace_text_changed(String text) { + update_replace_buttons(); +} + +void FindInFilesPanel::_on_replace_all_clicked() { + + String replace_text = get_replace_text(); + ERR_FAIL_COND(replace_text.empty()); + + String last_fpath; + PoolIntArray locations; + PoolStringArray modified_files; + + for (int i = 0; i < _results_display->get_item_count(); ++i) { + + Array meta = _results_display->get_item_metadata(i); + + String fpath = meta[0]; + + // Results are sorted by file, so we can batch replaces + if (fpath != last_fpath) { + if (locations.size() != 0) { + apply_replaces_in_file(last_fpath, locations, replace_text); + modified_files.append(last_fpath); + locations.resize(0); + } + } + + locations.append(meta[1]); // line_number + locations.append(meta[2]); // begin + locations.append(meta[3]); // end + + last_fpath = fpath; + } + + if (locations.size() != 0) { + apply_replaces_in_file(last_fpath, locations, replace_text); + modified_files.append(last_fpath); + } + + // Hide replace bar so we can't trigger the action twice without doing a new search + set_with_replace(false); + + emit_signal(SIGNAL_FILES_MODIFIED, modified_files); +} + +// Same as get_line, but preserves line ending characters +class ConservativeGetLine { +public: + String get_line(FileAccess *f) { + + _line_buffer.clear(); + + CharType c = f->get_8(); + + while (!f->eof_reached()) { + + if (c == '\n') { + _line_buffer.push_back(c); + _line_buffer.push_back(0); + return String::utf8(_line_buffer.ptr()); + + } else if (c == '\0') { + _line_buffer.push_back(c); + return String::utf8(_line_buffer.ptr()); + + } else if (c != '\r') { + _line_buffer.push_back(c); + } + + c = f->get_8(); + } + + _line_buffer.push_back(0); + return String::utf8(_line_buffer.ptr()); + } + +private: + Vector<char> _line_buffer; +}; + +void FindInFilesPanel::apply_replaces_in_file(String fpath, PoolIntArray locations, String text) { + + ERR_FAIL_COND(locations.size() % 3 != 0); + + //print_line(String("Replacing {0} occurrences in {1}").format(varray(fpath, locations.size() / 3))); + + // If the file is already open, I assume the editor will reload it. + // If there are unsaved changes, the user will be asked on focus, + // however that means either loosing changes or loosing replaces. + + FileAccess *f = FileAccess::open(fpath, FileAccess::READ); + ERR_FAIL_COND(f == NULL); + + String buffer; + int current_line = 1; + + ConservativeGetLine conservative; + + String line = conservative.get_line(f); + + PoolIntArray::Read locations_read = locations.read(); + for (int i = 0; i < locations.size(); i += 3) { + + int repl_line_number = locations_read[i]; + int repl_begin = locations_read[i + 1]; + int repl_end = locations_read[i + 2]; + + while (current_line < repl_line_number) { + buffer += line; + line = conservative.get_line(f); + ++current_line; + } + + line = line.left(repl_begin) + text + line.right(repl_end); + } + + buffer += line; + + while (!f->eof_reached()) { + buffer += conservative.get_line(f); + } + + // Now the modified contents are in the buffer, rewrite the file with our changes + + Error err = f->reopen(fpath, FileAccess::WRITE); + ERR_FAIL_COND(err != OK); + + f->store_string(buffer); + + f->close(); +} + +String FindInFilesPanel::get_replace_text() { + return _replace_line_edit->get_text().strip_edges(); +} + +void FindInFilesPanel::update_replace_buttons() { + + String text = get_replace_text(); + bool disabled = text.empty() || _finder->is_searching(); + + _replace_all_button->set_disabled(disabled); +} + +void FindInFilesPanel::set_progress_visible(bool visible) { + _progress_bar->set_self_modulate(Color(1, 1, 1, visible ? 1 : 0)); +} + +void FindInFilesPanel::_bind_methods() { + + ClassDB::bind_method("_on_result_found", &FindInFilesPanel::_on_result_found); + ClassDB::bind_method("_on_finished", &FindInFilesPanel::_on_finished); + ClassDB::bind_method("_on_cancel_button_clicked", &FindInFilesPanel::_on_cancel_button_clicked); + ClassDB::bind_method("_on_result_selected", &FindInFilesPanel::_on_result_selected); + ClassDB::bind_method("_on_replace_text_changed", &FindInFilesPanel::_on_replace_text_changed); + ClassDB::bind_method("_on_replace_all_clicked", &FindInFilesPanel::_on_replace_all_clicked); + + ADD_SIGNAL(MethodInfo(SIGNAL_RESULT_SELECTED, + PropertyInfo(Variant::STRING, "path"), + PropertyInfo(Variant::INT, "line_number"), + PropertyInfo(Variant::INT, "begin"), + PropertyInfo(Variant::INT, "end"))); + + ADD_SIGNAL(MethodInfo(SIGNAL_FILES_MODIFIED, PropertyInfo(Variant::STRING, "paths"))); +} diff --git a/editor/find_in_files.h b/editor/find_in_files.h new file mode 100644 index 0000000000..d57184960b --- /dev/null +++ b/editor/find_in_files.h @@ -0,0 +1,184 @@ +/*************************************************************************/ +/* find_in_files.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (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 FIND_IN_FILES_H +#define FIND_IN_FILES_H + +#include "scene/gui/dialogs.h" + +// Performs the actual search +class FindInFiles : public Node { + GDCLASS(FindInFiles, Node) +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); + void set_folder(String folder); + void set_filter(const Set<String> &exts); + + String get_search_text() const { return _pattern; } + + bool is_whole_words() const { return _whole_words; } + bool is_match_case() const { return _match_case; } + + void start(); + void stop(); + + bool is_searching() const { return _searching; } + float get_progress() const; + +protected: + void _notification(int p_notification); + + static void _bind_methods(); + +private: + void _process(); + void _iterate(); + void _scan_dir(String path, PoolStringArray &out_folders); + void _scan_file(String fpath); + + // Config + String _pattern; + Set<String> _extension_filter; + String _root_prefix; + String _root_dir; + bool _whole_words; + bool _match_case; + + // State + bool _searching; + String _current_dir; + Vector<PoolStringArray> _folders_stack; + Vector<String> _files_to_scan; + int _initial_files_count; +}; + +class LineEdit; +class CheckBox; +class FileDialog; + +// Prompts search parameters +class FindInFilesDialog : public WindowDialog { + GDCLASS(FindInFilesDialog, WindowDialog) +public: + static const char *SIGNAL_FIND_REQUESTED; + static const char *SIGNAL_REPLACE_REQUESTED; + + FindInFilesDialog(); + + void set_search_text(String text); + + String get_search_text() const; + bool is_match_case() const; + bool is_whole_words() const; + String get_folder() const; + Set<String> get_filter() const; + +protected: + static void _bind_methods(); + + void _notification(int p_what); + +private: + void _on_folder_button_pressed(); + void _on_find_button_pressed(); + void _on_replace_button_pressed(); + void _on_folder_selected(String path); + void _on_search_text_modified(String text); + void _on_search_text_entered(String text); + + LineEdit *_search_text_line_edit; + LineEdit *_folder_line_edit; + Vector<CheckBox *> _filters; + CheckBox *_match_case_checkbox; + CheckBox *_whole_words_checkbox; + Button *_find_button; + Button *_replace_button; + FileDialog *_folder_dialog; +}; + +class Button; +class ItemList; +class ProgressBar; + +// Display search results +class FindInFilesPanel : public Control { + GDCLASS(FindInFilesPanel, Control) +public: + static const char *SIGNAL_RESULT_SELECTED; + static const char *SIGNAL_FILES_MODIFIED; + + FindInFilesPanel(); + + FindInFiles *get_finder() const { return _finder; } + + void set_with_replace(bool with_replace); + + void start_search(); + void stop_search(); + +protected: + static void _bind_methods(); + + void _notification(int p_what); + +private: + void _on_result_found(String fpath, int line_number, int begin, int end, String text); + void _on_finished(); + void _on_cancel_button_clicked(); + void _on_result_selected(int i); + void _on_replace_text_changed(String text); + void _on_replace_all_clicked(); + + void apply_replaces_in_file(String fpath, PoolIntArray locations, String text); + + void update_replace_buttons(); + String get_replace_text(); + void set_progress_visible(bool visible); + + FindInFiles *_finder; + Label *_search_text_label; + ItemList *_results_display; + Label *_status_label; + Button *_cancel_button; + ProgressBar *_progress_bar; + + HBoxContainer *_replace_container; + LineEdit *_replace_line_edit; + Button *_replace_all_button; +}; + +#endif // FIND_IN_FILES_H diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index bac18be4a9..8443311a54 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -29,12 +29,426 @@ /*************************************************************************/ #include "groups_editor.h" - +#include "editor/scene_tree_editor.h" #include "editor_node.h" #include "scene/gui/box_container.h" #include "scene/gui/label.h" #include "scene/resources/packed_scene.h" +void GroupDialog::ok_pressed() { +} + +void GroupDialog::_cancel_pressed() { +} + +void GroupDialog::_group_selected() { + nodes_to_add->clear(); + add_node_root = nodes_to_add->create_item(); + + nodes_to_remove->clear(); + remove_node_root = nodes_to_remove->create_item(); + + if (!groups->is_anything_selected()) { + return; + } + + selected_group = groups->get_selected()->get_text(0); + _load_nodes(scene_tree->get_edited_scene_root()); +} + +void GroupDialog::_load_nodes(Node *p_current) { + String item_name = p_current->get_name(); + if (p_current != scene_tree->get_edited_scene_root()) { + item_name = String(p_current->get_parent()->get_name()) + "/" + String(item_name); + } + + bool keep = true; + Node *root = scene_tree->get_edited_scene_root(); + Node *owner = p_current->get_owner(); + if (owner != root && p_current != root && !owner && !root->is_editable_instance(owner)) { + keep = false; + } + + TreeItem *node; + NodePath path = scene_tree->get_edited_scene_root()->get_path_to(p_current); + if (keep && p_current->is_in_group(selected_group)) { + if (remove_filter->get_text().is_subsequence_ofi(String(p_current->get_name()))) { + node = nodes_to_remove->create_item(remove_node_root); + keep = true; + } else { + keep = false; + } + } else if (keep && add_filter->get_text().is_subsequence_ofi(String(p_current->get_name()))) { + node = nodes_to_add->create_item(add_node_root); + keep = true; + } else { + keep = false; + } + + if (keep) { + node->set_text(0, item_name); + node->set_metadata(0, path); + node->set_tooltip(0, path); + + Ref<Texture> icon; + if (p_current->has_meta("_editor_icon")) { + icon = p_current->get_meta("_editor_icon"); + } else { + icon = get_icon((has_icon(p_current->get_class(), "EditorIcons") ? p_current->get_class() : String("Object")), "EditorIcons"); + } + node->set_icon(0, icon); + + if (!_can_edit(p_current, selected_group)) { + node->set_selectable(0, false); + node->set_custom_color(0, get_color("disabled_font_color", "Editor")); + } + } + + for (int i = 0; i < p_current->get_child_count(); i++) { + _load_nodes(p_current->get_child(i)); + } +} + +bool GroupDialog::_can_edit(Node *p_node, String p_group) { + Node *n = p_node; + bool can_edit = true; + while (n) { + Ref<SceneState> ss = (n == EditorNode::get_singleton()->get_edited_scene()) ? n->get_scene_inherited_state() : n->get_scene_instance_state(); + if (ss.is_valid()) { + int path = ss->find_node_by_path(n->get_path_to(p_node)); + if (path != -1) { + if (ss->is_node_in_group(path, p_group)) { + can_edit = false; + } + } + } + n = n->get_owner(); + } + return can_edit; +} + +void GroupDialog::_add_pressed() { + TreeItem *selected = nodes_to_add->get_selected(); + + if (!selected) { + return; + } + + while (selected) { + Node *node = scene_tree->get_edited_scene_root()->get_node(selected->get_metadata(0)); + node->add_to_group(selected_group, true); + + selected = nodes_to_add->get_next_selected(selected); + } + + _group_selected(); + EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->update_tree(); +} + +void GroupDialog::_removed_pressed() { + TreeItem *selected = nodes_to_remove->get_selected(); + + if (!selected) { + return; + } + + while (selected) { + Node *node = scene_tree->get_edited_scene_root()->get_node(selected->get_metadata(0)); + node->remove_from_group(selected_group); + + selected = nodes_to_add->get_next_selected(selected); + } + + _group_selected(); + EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->update_tree(); +} + +void GroupDialog::_remove_filter_changed(const String &p_filter) { + _group_selected(); +} + +void GroupDialog::_add_filter_changed(const String &p_filter) { + _group_selected(); +} + +void GroupDialog::_add_group_pressed() { + _add_group(add_group_text->get_text()); + add_group_text->clear(); +} + +void GroupDialog::_group_renamed() { + TreeItem *renamed_group = groups->get_edited(); + if (!renamed_group) { + return; + } + + String name = renamed_group->get_text(0).strip_edges(); + for (TreeItem *E = groups_root->get_children(); E; E = E->get_next()) { + if (E != renamed_group && E->get_text(0) == name) { + renamed_group->set_text(0, selected_group); + error->set_text(TTR("Group name already exists.")); + error->popup_centered(); + return; + } + } + + if (name == "") { + renamed_group->set_text(0, selected_group); + error->set_text(TTR("invalid Group name.")); + error->popup_centered(); + return; + } + + List<Node *> nodes; + scene_tree->get_nodes_in_group(selected_group, &nodes); + bool removed_all = true; + for (List<Node *>::Element *E = nodes.front(); E; E = E->next()) { + Node *node = E->get(); + if (_can_edit(node, selected_group)) { + node->remove_from_group(selected_group); + node->add_to_group(name, true); + } else { + removed_all = false; + } + } + + if (!removed_all) { + _add_group(selected_group); + } + + selected_group = renamed_group->get_text(0); + _group_selected(); +} + +void GroupDialog::_add_group(String p_name) { + + String name = p_name.strip_edges(); + if (name == "" || groups->search_item_text(name)) { + return; + } + + TreeItem *new_group = groups->create_item(groups_root); + new_group->set_text(0, name); + new_group->add_button(0, get_icon("Remove", "EditorIcons"), 0); + new_group->set_editable(0, true); +} + +void GroupDialog::_load_groups(Node *p_current) { + List<Node::GroupInfo> gi; + p_current->get_groups(&gi); + + for (List<Node::GroupInfo>::Element *E = gi.front(); E; E = E->next()) { + if (!E->get().persistent) { + continue; + } + _add_group(E->get().name); + } + + for (int i = 0; i < p_current->get_child_count(); i++) { + _load_groups(p_current->get_child(i)); + } +} + +void GroupDialog::_delete_group_pressed(Object *p_item, int p_column, int p_id) { + TreeItem *ti = Object::cast_to<TreeItem>(p_item); + if (!ti) + return; + + String name = ti->get_text(0); + + List<Node *> nodes; + scene_tree->get_nodes_in_group(name, &nodes); + bool removed_all = true; + for (List<Node *>::Element *E = nodes.front(); E; E = E->next()) { + if (_can_edit(E->get(), name)) { + E->get()->remove_from_group(name); + } else { + removed_all = false; + } + } + + if (removed_all) { + if (selected_group == name) { + add_filter->clear(); + remove_filter->clear(); + nodes_to_remove->clear(); + nodes_to_add->clear(); + groups->deselect_all(); + selected_group = ""; + } + groups_root->remove_child(ti); + } + EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->update_tree(); +} + +void GroupDialog::_notification(int p_what) { + switch (p_what) { + case NOTIFICATION_ENTER_TREE: { + add_button->set_icon(get_icon("Forward", "EditorIcons")); + remove_button->set_icon(get_icon("Back", "EditorIcons")); + } break; + } +} + +void GroupDialog::edit() { + + popup_centered(Size2(600, 400)); + + groups->clear(); + groups_root = groups->create_item(); + + nodes_to_add->clear(); + nodes_to_remove->clear(); + + add_group_text->clear(); + add_filter->clear(); + remove_filter->clear(); + + _load_groups(scene_tree->get_edited_scene_root()); +} + +void GroupDialog::_bind_methods() { + ClassDB::bind_method("_cancel", &GroupDialog::_cancel_pressed); + + ClassDB::bind_method("_add_pressed", &GroupDialog::_add_pressed); + ClassDB::bind_method("_removed_pressed", &GroupDialog::_removed_pressed); + ClassDB::bind_method("_delete_group_pressed", &GroupDialog::_delete_group_pressed); + + ClassDB::bind_method("_group_selected", &GroupDialog::_group_selected); + ClassDB::bind_method("_add_group_pressed", &GroupDialog::_add_group_pressed); + + ClassDB::bind_method("_add_filter_changed", &GroupDialog::_add_filter_changed); + ClassDB::bind_method("_remove_filter_changed", &GroupDialog::_remove_filter_changed); + + ClassDB::bind_method("_group_renamed", &GroupDialog::_group_renamed); +} + +GroupDialog::GroupDialog() { + + scene_tree = SceneTree::get_singleton(); + + VBoxContainer *vbc = memnew(VBoxContainer); + add_child(vbc); + + HBoxContainer *hbc = memnew(HBoxContainer); + vbc->add_child(hbc); + hbc->set_v_size_flags(SIZE_EXPAND_FILL); + + VBoxContainer *vbc_left = memnew(VBoxContainer); + hbc->add_child(vbc_left); + vbc_left->set_h_size_flags(SIZE_EXPAND_FILL); + + Label *group_title = memnew(Label); + group_title->set_text(TTR("Groups")); + vbc_left->add_child(group_title); + + groups = memnew(Tree); + vbc_left->add_child(groups); + groups->set_hide_root(true); + groups->set_v_size_flags(SIZE_EXPAND_FILL); + groups->set_select_mode(Tree::SELECT_SINGLE); + groups->set_allow_reselect(true); + groups->set_allow_rmb_select(true); + groups->connect("item_selected", this, "_group_selected"); + groups->connect("button_pressed", this, "_delete_group_pressed"); + groups->connect("item_edited", this, "_group_renamed"); + + HBoxContainer *chbc = memnew(HBoxContainer); + vbc_left->add_child(chbc); + chbc->set_h_size_flags(SIZE_EXPAND_FILL); + + add_group_text = memnew(LineEdit); + chbc->add_child(add_group_text); + add_group_text->set_h_size_flags(SIZE_EXPAND_FILL); + + Button *add_group_button = memnew(Button); + add_group_button->set_text("Add"); + chbc->add_child(add_group_button); + add_group_button->connect("pressed", this, "_add_group_pressed"); + + VBoxContainer *vbc_add = memnew(VBoxContainer); + hbc->add_child(vbc_add); + vbc_add->set_h_size_flags(SIZE_EXPAND_FILL); + + Label *out_of_group_title = memnew(Label); + out_of_group_title->set_text(TTR("Nodes not in Group")); + vbc_add->add_child(out_of_group_title); + + nodes_to_add = memnew(Tree); + vbc_add->add_child(nodes_to_add); + nodes_to_add->set_hide_root(true); + nodes_to_add->set_hide_folding(true); + nodes_to_add->set_v_size_flags(SIZE_EXPAND_FILL); + nodes_to_add->set_select_mode(Tree::SELECT_MULTI); + nodes_to_add->connect("item_selected", this, "_nodes_to_add_selected"); + + HBoxContainer *add_filter_hbc = memnew(HBoxContainer); + add_filter_hbc->add_constant_override("separate", 0); + vbc_add->add_child(add_filter_hbc); + + add_filter = memnew(LineEdit); + add_filter->set_h_size_flags(SIZE_EXPAND_FILL); + add_filter->set_placeholder(TTR("Filter nodes")); + add_filter_hbc->add_child(add_filter); + add_filter->connect("text_changed", this, "_add_filter_changed"); + + VBoxContainer *vbc_buttons = memnew(VBoxContainer); + hbc->add_child(vbc_buttons); + vbc_buttons->set_h_size_flags(SIZE_SHRINK_CENTER); + vbc_buttons->set_v_size_flags(SIZE_SHRINK_CENTER); + + add_button = memnew(ToolButton); + add_button->set_text(TTR("Add")); + add_button->connect("pressed", this, "_add_pressed"); + + vbc_buttons->add_child(add_button); + vbc_buttons->add_spacer(); + vbc_buttons->add_spacer(); + vbc_buttons->add_spacer(); + + remove_button = memnew(ToolButton); + remove_button->set_text(TTR("Remove")); + remove_button->connect("pressed", this, "_removed_pressed"); + + vbc_buttons->add_child(remove_button); + + VBoxContainer *vbc_remove = memnew(VBoxContainer); + hbc->add_child(vbc_remove); + vbc_remove->set_h_size_flags(SIZE_EXPAND_FILL); + + Label *in_group_title = memnew(Label); + in_group_title->set_text(TTR("Nodes in Group")); + vbc_remove->add_child(in_group_title); + + nodes_to_remove = memnew(Tree); + vbc_remove->add_child(nodes_to_remove); + nodes_to_remove->set_v_size_flags(SIZE_EXPAND_FILL); + nodes_to_remove->set_hide_root(true); + nodes_to_remove->set_hide_folding(true); + nodes_to_remove->set_select_mode(Tree::SELECT_MULTI); + nodes_to_remove->connect("item_selected", this, "_node_to_remove_selected"); + + HBoxContainer *remove_filter_hbc = memnew(HBoxContainer); + remove_filter_hbc->add_constant_override("separate", 0); + vbc_remove->add_child(remove_filter_hbc); + + remove_filter = memnew(LineEdit); + remove_filter->set_h_size_flags(SIZE_EXPAND_FILL); + remove_filter->set_placeholder(TTR("Filter nodes")); + remove_filter_hbc->add_child(remove_filter); + remove_filter->connect("text_changed", this, "_remove_filter_changed"); + + set_title("Group Editor"); + get_cancel()->hide(); + set_as_toplevel(true); + + error = memnew(ConfirmationDialog); + add_child(error); + error->get_ok()->set_text(TTR("Close")); +} + +//////////////////////////////////////////////////////////////////////////////// + void GroupsEditor::_add_group(const String &p_group) { if (!node) @@ -146,11 +560,22 @@ void GroupsEditor::set_current(Node *p_node) { update_tree(); } +void GroupsEditor::_show_group_dialog() { + group_dialog->edit(); +} + +void GroupsEditor::_group_dialog_closed() { + update_tree(); +} + void GroupsEditor::_bind_methods() { ClassDB::bind_method("_add_group", &GroupsEditor::_add_group); ClassDB::bind_method("_remove_group", &GroupsEditor::_remove_group); ClassDB::bind_method("update_tree", &GroupsEditor::update_tree); + + ClassDB::bind_method("_show_group_dialog", &GroupsEditor::_show_group_dialog); + ClassDB::bind_method("_group_dialog_closed", &GroupsEditor::_group_dialog_closed); } GroupsEditor::GroupsEditor() { @@ -159,6 +584,16 @@ GroupsEditor::GroupsEditor() { VBoxContainer *vbc = this; + group_dialog = memnew(GroupDialog); + group_dialog->set_as_toplevel(true); + add_child(group_dialog); + group_dialog->connect("popup_hide", this, "_group_dialog_closed"); + + Button *group_dialog_button = memnew(Button); + group_dialog_button->set_text(TTR("Manage Groups")); + vbc->add_child(group_dialog_button); + group_dialog_button->connect("pressed", this, "_show_group_dialog"); + HBoxContainer *hbc = memnew(HBoxContainer); vbc->add_child(hbc); diff --git a/editor/groups_editor.h b/editor/groups_editor.h index ad3d5cd14f..461cf0f8c2 100644 --- a/editor/groups_editor.h +++ b/editor/groups_editor.h @@ -31,9 +31,13 @@ #ifndef GROUPS_EDITOR_H #define GROUPS_EDITOR_H +#include "editor/scene_tree_editor.h" #include "scene/gui/button.h" #include "scene/gui/dialogs.h" +#include "scene/gui/item_list.h" #include "scene/gui/line_edit.h" +#include "scene/gui/popup.h" +#include "scene/gui/tool_button.h" #include "scene/gui/tree.h" #include "undo_redo.h" @@ -41,12 +45,71 @@ @author Juan Linietsky <reduzio@gmail.com> */ +class GroupDialog : public ConfirmationDialog { + + GDCLASS(GroupDialog, ConfirmationDialog); + + ConfirmationDialog *error; + + SceneTree *scene_tree; + TreeItem *groups_root; + + LineEdit *add_group_text; + + Tree *groups; + + Tree *nodes_to_add; + TreeItem *add_node_root; + LineEdit *add_filter; + + Tree *nodes_to_remove; + TreeItem *remove_node_root; + LineEdit *remove_filter; + + ToolButton *add_button; + ToolButton *remove_button; + + String selected_group; + + void ok_pressed(); + void _cancel_pressed(); + void _group_selected(); + + void _remove_filter_changed(const String &p_filter); + void _add_filter_changed(const String &p_filter); + + void _add_pressed(); + void _removed_pressed(); + void _add_group_pressed(); + + void _group_renamed(); + + void _add_group(String p_name); + void _delete_group_pressed(Object *p_item, int p_column, int p_id); + + bool _can_edit(Node *p_node, String p_group); + + void _load_groups(Node *p_current); + void _load_nodes(Node *p_current); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + void edit(); + + GroupDialog(); +}; + class GroupsEditor : public VBoxContainer { GDCLASS(GroupsEditor, VBoxContainer); Node *node; + GroupDialog *group_dialog; + LineEdit *group_name; Button *add; Tree *tree; @@ -58,6 +121,9 @@ class GroupsEditor : public VBoxContainer { void _remove_group(Object *p_item, int p_column, int p_id); void _close(); + void _show_group_dialog(); + void _group_dialog_closed(); + protected: static void _bind_methods(); diff --git a/editor/icons/SCsub b/editor/icons/SCsub index 9bd036dfa9..7f94073e01 100644 --- a/editor/icons/SCsub +++ b/editor/icons/SCsub @@ -34,7 +34,7 @@ def make_editor_icons_action(target, source, env): s.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") s.write("#ifndef _EDITOR_ICONS_H\n") s.write("#define _EDITOR_ICONS_H\n") - s.write("static const int editor_icons_count = %s;\n" % len(svg_icons)) + s.write("static const int editor_icons_count = {};\n".format(len(svg_icons))) s.write("static const char *editor_icons_sources[] = {\n") s.write(icons_string.getvalue()) s.write('};\n\n') @@ -57,7 +57,7 @@ def make_editor_icons_action(target, source, env): if icon_name.endswith("BigThumb"): # don't know a better way to handle this thumb_big_indices.append(str(index)) - s.write('\t"%s"' % icon_name) + s.write('\t"{0}"'.format(icon_name)) if fname != svg_icons[-1]: s.write(",") @@ -69,23 +69,22 @@ def make_editor_icons_action(target, source, env): if thumb_medium_indices: s.write("\n\n") - s.write("static const int editor_md_thumbs_count = %s;\n" % len(thumb_medium_indices)) + s.write("static const int editor_md_thumbs_count = {};\n".format(len(thumb_medium_indices))) s.write("static const int editor_md_thumbs_indices[] = {") s.write(", ".join(thumb_medium_indices)) s.write("};\n") if thumb_big_indices: s.write("\n\n") - s.write("static const int editor_bg_thumbs_count = %s;\n" % len(thumb_big_indices)) + s.write("static const int editor_bg_thumbs_count = {};\n".format(len(thumb_big_indices))) s.write("static const int editor_bg_thumbs_indices[] = {") s.write(", ".join(thumb_big_indices)) s.write("};\n") s.write("#endif\n") + with open(dst, "w") as f: + f.write(s.getvalue()) - f = open(dst, "w") - f.write(s.getvalue()) - f.close() s.close() icons_string.close() diff --git a/editor/icons/icon_action_copy.svg b/editor/icons/icon_action_copy.svg new file mode 100644 index 0000000000..d5da233bc9 --- /dev/null +++ b/editor/icons/icon_action_copy.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m2 1c-0.554 0-1 0.446-1 1v9c0 0.554 0.446 1 1 1h1v-9h9v-1c0-0.554-0.446-1-1-1h-9zm3 3c-0.554 0-1 0.446-1 1v9c0 0.554 0.446 1 1 1h9c0.554 0 1-0.446 1-1v-9c0-0.554-0.446-1-1-1h-9zm1 2h7v7h-7v-7z" fill="#e0e0e0"/> +</svg> diff --git a/editor/icons/icon_action_cut.svg b/editor/icons/icon_action_cut.svg new file mode 100644 index 0000000000..776ca3a4c4 --- /dev/null +++ b/editor/icons/icon_action_cut.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m3.6348 0.50977c-2.9641 2.866 0.53553 8.9289 2.7676 8.7949l0.44141 0.76562-0.56445 0.97852a3 3 0 0 0 -2.2793 -1.0488 3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 2.5938 -1.502l0.0039062 0.001953 1.4023-2.4277 1.4023 2.4277 0.0019531-0.001953a3 3 0 0 0 2.5957 1.502 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3 3 3 0 0 0 -2.2773 1.0527l-0.56641-0.98242 0.44141-0.76562c2.2321 0.13397 5.7317-5.9289 2.7676-8.7949l-4.3652 7.5605-4.3652-7.5605zm0.36523 11.49a1 1 0 0 1 1 1 1 1 0 0 1 -0.12305 0.47852l-0.011719 0.021484a1 1 0 0 1 -0.86523 0.5 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0"/> +</svg> diff --git a/editor/icons/icon_action_paste.svg b/editor/icons/icon_action_paste.svg new file mode 100644 index 0000000000..b71e5531df --- /dev/null +++ b/editor/icons/icon_action_paste.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 1c-1.3045 0-2.4033 0.8372-2.8164 2h-3.1836c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h12c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-3.1836c-0.41312-1.1628-1.5119-2-2.8164-2zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-5 2h2v2h6v-2h2v8h-10v-8z" fill="#e0e0e0"/> +</svg> diff --git a/editor/icons/icon_add_split.svg b/editor/icons/icon_add_split.svg new file mode 100644 index 0000000000..4555fceb7c --- /dev/null +++ b/editor/icons/icon_add_split.svg @@ -0,0 +1,8 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m3 13 10-10" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> +</g> +<circle cx="4" cy="12" r="2" fill="none"/> +<path d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-10 10a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#e0e0e0"/> +</svg> diff --git a/editor/icons/icon_array_mesh.svg b/editor/icons/icon_array_mesh.svg index 867fc95b0c..7c086e1a44 100644 --- a/editor/icons/icon_array_mesh.svg +++ b/editor/icons/icon_array_mesh.svg @@ -1,3 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm10 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-2 7v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2zm-8 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm10 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-2 7v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2zm-8 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_asset_lib.svg b/editor/icons/icon_asset_lib.svg index fcd670817d..967c5bf708 100644 --- a/editor/icons/icon_asset_lib.svg +++ b/editor/icons/icon_asset_lib.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-1.6569 0-3 1.3431-3 3v2h-4v7c0 1.108 0.89199 2 2 2h10c1.108 0 2-0.89199 2-2v-7h-4v-2c0-1.6569-1.3431-3-3-3zm0 2c0.55228 0 1 0.44772 1 1v2h-2v-2c0-0.55228 0.44772-1 1-1z" fill="#e0e0e0"/> -</g> +<path d="m8 1c-1.6569 0-3 1.3431-3 3v2h-3c-0.66446 3.505e-4 -1.1438 0.6366-0.96094 1.2754l2 7c0.12287 0.42881 0.51487 0.7244 0.96094 0.72461h8c0.44606-2.09e-4 0.83806-0.2958 0.96094-0.72461l2-7c0.1829-0.63879-0.29648-1.275-0.96094-1.2754h-3v-2c0-1.6569-1.3431-3-3-3zm0 2c0.55228 0 1 0.44772 1 1v2h-2v-2c0-0.55228 0.44772-1 1-1z" fill="#e0e0e0"/> </svg> diff --git a/editor/icons/icon_audio_bus_layout.svg b/editor/icons/icon_audio_bus_layout.svg index 9162722eb2..fa6b60bc3e 100644 --- a/editor/icons/icon_audio_bus_layout.svg +++ b/editor/icons/icon_audio_bus_layout.svg @@ -1,9 +1,9 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -1036.4)"> diff --git a/editor/icons/icon_audio_stream_player.svg b/editor/icons/icon_audio_stream_player.svg index 218fd995a0..754b72bc96 100644 --- a/editor/icons/icon_audio_stream_player.svg +++ b/editor/icons/icon_audio_stream_player.svg @@ -1,9 +1,9 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -1036.4)" shape-rendering="auto"> diff --git a/editor/icons/icon_audio_stream_player_2_d.svg b/editor/icons/icon_audio_stream_player_2_d.svg index a431b84a55..0e9c0ca5b1 100644 --- a/editor/icons/icon_audio_stream_player_2_d.svg +++ b/editor/icons/icon_audio_stream_player_2_d.svg @@ -1,9 +1,9 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -1036.4)" shape-rendering="auto"> diff --git a/editor/icons/icon_audio_stream_player_3_d.svg b/editor/icons/icon_audio_stream_player_3_d.svg index 4ce9d6da58..d947586f63 100644 --- a/editor/icons/icon_audio_stream_player_3_d.svg +++ b/editor/icons/icon_audio_stream_player_3_d.svg @@ -1,9 +1,9 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -1036.4)" shape-rendering="auto"> diff --git a/editor/icons/icon_audio_stream_sample.svg b/editor/icons/icon_audio_stream_sample.svg index f0be1dc303..a7c7232ee0 100644 --- a/editor/icons/icon_audio_stream_sample.svg +++ b/editor/icons/icon_audio_stream_sample.svg @@ -1,9 +1,9 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -1036.4)"> diff --git a/editor/icons/icon_bone_2_d.svg b/editor/icons/icon_bone_2_d.svg new file mode 100644 index 0000000000..efcbc17e13 --- /dev/null +++ b/editor/icons/icon_bone_2_d.svg @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg6" + sodipodi:docname="icon_bone_2d.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata12"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs10" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="836" + inkscape:window-height="480" + id="namedview8" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <g + transform="translate(0 -1036.4)" + id="g4" + style="fill:#a5b7f3;fill-opacity:1"> + <path + d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804 0.7205 2.4664 2.4663 0 0 0 -0.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023 0.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397 0.6955 2.4664 2.4663 0 0 0 0.69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 0.31408 -3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004 -0.3102 2.4664 2.4663 0 0 0 0 -3.4875 2.4664 2.4663 0 0 0 -1.397 -0.6974 2.4664 2.4663 0 0 0 -0.69561 -1.3971 2.4664 2.4663 0 0 0 -1.7072 -0.7205z" + fill="#fc9c9c" + id="path2" + style="fill:#a5b7f3;fill-opacity:1" /> + </g> +</svg> diff --git a/editor/icons/icon_bus_vu_db.svg b/editor/icons/icon_bus_vu_db.svg index 23bcd8841c..236e41e1f5 100644 --- a/editor/icons/icon_bus_vu_db.svg +++ b/editor/icons/icon_bus_vu_db.svg @@ -1,9 +1,9 @@ <svg width="32" height="128" version="1.1" viewBox="0 0 32 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="16" x2="16" y2="128" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -924.36)"> diff --git a/editor/icons/icon_bus_vu_empty.svg b/editor/icons/icon_bus_vu_empty.svg index 52c86ac704..60fddc535f 100644 --- a/editor/icons/icon_bus_vu_empty.svg +++ b/editor/icons/icon_bus_vu_empty.svg @@ -1,9 +1,9 @@ <svg width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientTransform="translate(0 924.36)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -924.36)"> diff --git a/editor/icons/icon_bus_vu_full.svg b/editor/icons/icon_bus_vu_full.svg index a91b8a06c6..4f2ce5df11 100644 --- a/editor/icons/icon_bus_vu_full.svg +++ b/editor/icons/icon_bus_vu_full.svg @@ -1,9 +1,9 @@ <svg width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> +<stop stop-color="#ff7a7a" offset="0"/> <stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> +<stop stop-color="#66ff9e" offset="1"/> </linearGradient> </defs> <g transform="translate(0 -924.36)"> diff --git a/editor/icons/icon_c_s_g_box.svg b/editor/icons/icon_c_s_g_box.svg new file mode 100644 index 0000000000..67e34df444 --- /dev/null +++ b/editor/icons/icon_c_s_g_box.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1h-2zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-1z" fill="#84c2ff"/> +<path transform="translate(0 1036.4)" d="m8 0.94531-7 3.5v7.2227l7 3.5 0.29492-0.14844c-0.18282-0.30101-0.29492-0.64737-0.29492-1.0195v-2c0-0.72651 0.40824-1.3664 1-1.7168v-1.6699l4-2v1.3867h1c0.36419 0 0.70336 0.10754 1 0.2832v-3.8379zm0 2.1152 3.9395 1.9707-3.9395 1.9688-3.9395-1.9688zm-5 3.5527 4 2v3.9414l-4-2.002z" fill="#fc9c9c" stroke-width="1.0667"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_capsule.svg b/editor/icons/icon_c_s_g_capsule.svg new file mode 100644 index 0000000000..92a7b5a870 --- /dev/null +++ b/editor/icons/icon_c_s_g_capsule.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g> +<path d="m8 1c-2.7527 0-5 2.2418-5 4.9902v4.0176c0 2.7484 2.2473 4.9922 5 4.9922 0.092943 0 0.18367-0.008623 0.27539-0.013672-0.17055-0.29341-0.27539-0.62792-0.27539-0.98633v-2c0-0.72887 0.41095-1.3691 1.0059-1.7188v-0.28125c0.34771-0.034464 0.68259-0.10691 1.0156-0.19922 0.10394-0.99856 0.95603-1.8008 1.9785-1.8008h1v-2.0098c0-2.7484-2.2473-4.9902-5-4.9902zm-1.0059 2.127v4.8574c-0.66556-0.1047-1.2974-0.37231-1.9941-0.66211v-1.3223c0-1.3474 0.79841-2.4642 1.9941-2.873zm2.0117 0c1.1957 0.4088 1.9941 1.5256 1.9941 2.873v1.3457c-0.68406 0.3054-1.3142 0.57292-1.9941 0.66602v-4.8848zm-4.0059 6.334c0.67836 0.2231 1.3126 0.44599 1.9941 0.52539v2.8848c-1.1957-0.4092-1.9941-1.5237-1.9941-2.8711v-0.53906z" fill="#fc9c9c"/> +<path d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_combiner.svg b/editor/icons/icon_c_s_g_combiner.svg new file mode 100644 index 0000000000..cce2902e24 --- /dev/null +++ b/editor/icons/icon_c_s_g_combiner.svg @@ -0,0 +1,8 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1h-2zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-1z" fill="#84c2ff"/> +<g fill="#fc9c9c"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2h2zm2 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2c0-1.1046-0.89543-2-2-2zm-12 4v2h2v-2zm12 0v2h2v-2zm-12 4v2h2v-2zm0 4c0 1.1046 0.89543 2 2 2v-2zm4 0v2h2v-2z" fill="#fc9c9c"/> +</g> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_cylinder.svg b/editor/icons/icon_c_s_g_cylinder.svg new file mode 100644 index 0000000000..645a74c79b --- /dev/null +++ b/editor/icons/icon_c_s_g_cylinder.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> +<g> +<path transform="scale(.9375)" d="m8 1c-1.7469 0-3.328 0.22648-4.5586 0.63672-0.61528 0.20512-1.1471 0.45187-1.5898 0.80078-0.44272 0.34891-0.85156 0.88101-0.85156 1.5625v8c0 0.68149 0.40884 1.2155 0.85156 1.5645 0.44272 0.34891 0.97457 0.59577 1.5898 0.80078 1.2306 0.41024 2.8117 0.63477 4.5586 0.63477 0.095648 0 0.18467-0.008426 0.2793-0.009766-0.1722-0.29446-0.2793-0.62995-0.2793-0.99023v-1c-1.5668 0-2.9867-0.2195-3.9277-0.5332-0.46329-0.15435-0.90474-0.33752-1.0723-0.4668v-5.8125c0.1468 0.058667 0.2835 0.12515 0.44141 0.17773 1.2306 0.41024 2.8117 0.63477 4.5586 0.63477s3.328-0.22453 4.5586-0.63477c0.15791-0.052267 0.29461-0.11864 0.44141-0.17773v1.8125h1c0.36396 0 0.70348 0.10774 1 0.2832v-4.2832c0-0.68149-0.40884-1.2136-0.85156-1.5625-0.44272-0.34891-0.97457-0.59566-1.5898-0.80078-1.2306-0.41024-2.8117-0.63672-4.5586-0.63672zm0 2c1.5668 0 2.9867 0.22145 3.9277 0.53516 0.46368 0.15456 0.80138 0.33741 0.96875 0.4668-0.16752 0.12928-0.50546 0.3105-0.96875 0.46484-0.94102 0.31371-2.361 0.5332-3.9277 0.5332s-2.9867-0.2195-3.9277-0.5332c-0.46329-0.15435-0.80123-0.33556-0.96875-0.46484 0.16737-0.12939 0.50507-0.31224 0.96875-0.4668 0.94102-0.31371 2.361-0.53516 3.9277-0.53516z" fill="#fc9c9c" stroke-width="1.0667"/> +<path d="m11.25 8.4375c-0.51938 0-0.9375 0.41812-0.9375 0.9375v0.9375h1.875v1.875h0.9375c0.51938 0 0.9375-0.41812 0.9375-0.9375v-1.875c0-0.51938-0.41812-0.9375-0.9375-0.9375zm0.9375 3.75h-1.875v-1.875h-0.9375c-0.51938 0-0.9375 0.41812-0.9375 0.9375v1.875c0 0.51938 0.41812 0.9375 0.9375 0.9375h1.875c0.51938 0 0.9375-0.41812 0.9375-0.9375z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_mesh.svg b/editor/icons/icon_c_s_g_mesh.svg new file mode 100644 index 0000000000..6e940a4aa5 --- /dev/null +++ b/editor/icons/icon_c_s_g_mesh.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h3.2695v-2h-3.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l4.916 4.916c0.31428-0.20669 0.68609-0.33008 1.084-0.33008 0-0.3979 0.12338-0.76971 0.33008-1.084l-4.916-4.916h5.8574c0.17478 0.30301 0.42598 0.55488 0.72852 0.73047v3.2695h2v-3.2715c0.61771-0.35663 0.99874-1.0152 1-1.7285 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1z" fill="#fc9c9c"/> +<path d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_polygon.svg b/editor/icons/icon_c_s_g_polygon.svg new file mode 100644 index 0000000000..71b03cb8e6 --- /dev/null +++ b/editor/icons/icon_c_s_g_polygon.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7.9629 1.002c-0.14254 0.00487-0.28238 0.04016-0.41016 0.10352l-6 3c-0.33878 0.16944-0.55276 0.51574-0.55273 0.89453v5.832c-0.105 0.61631 0.37487 1.1768 1 1.168h5v2c2.16e-5 0.67546 0.64487 1.1297 1.2617 0.95898-0.16118-0.28721-0.26172-0.61135-0.26172-0.95898v-2c0-0.72673 0.40794-1.3664 1-1.7168v-1.666l4-2v1.3828h1c0.36397 0 0.70348 0.10774 1 0.2832v-3.2773c6e-6 -0.00195 6e-6 -0.0039094 0-0.0058594 2.6e-5 -0.37879-0.21395-0.72509-0.55273-0.89453l-6-3c-0.15022-0.074574-0.31679-0.11017-0.48438-0.10352zm0.037109 2.1172l3.7637 1.8809-2.7637 1.3809v-1.3809c-5.52e-5 -0.55226-0.44774-0.99994-1-1h-1.7617l1.7617-0.88086zm-5 2.8809h4v4h-4v-4z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1h-2zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-1z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_sphere.svg b/editor/icons/icon_c_s_g_sphere.svg new file mode 100644 index 0000000000..f81b566993 --- /dev/null +++ b/editor/icons/icon_c_s_g_sphere.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g> +<path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 0.093042 0 0.18321-0.01004 0.27539-0.013672-0.17055-0.29341-0.27539-0.62792-0.27539-0.98633v-2c0-0.72673 0.40794-1.3664 1-1.7168v-0.33398c0.34074-0.019259 0.67728-0.069097 1.0156-0.10547 0.083091-1.0187 0.94713-1.8438 1.9844-1.8438h2c0.35841 0 0.69292 0.10484 0.98633 0.27539 0.003633-0.092184 0.013672-0.18235 0.013672-0.27539 0-3.8541-3.1459-7-7-7zm-1 2.0977v4.8711c-1.2931-0.071342-2.6061-0.29819-3.9434-0.69141 0.30081-2.0978 1.8852-3.7665 3.9434-4.1797zm2 0c2.0549 0.41253 3.637 2.0767 3.9414 4.1699-1.3046 0.36677-2.6158 0.60259-3.9414 0.6875v-4.8574zm-5.7793 6.2988c1.2733 0.31892 2.5337 0.50215 3.7793 0.5625v2.9414c-1.8291-0.36719-3.266-1.7339-3.7793-3.5039z" fill="#fc9c9c"/> +<path d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_c_s_g_torus.svg b/editor/icons/icon_c_s_g_torus.svg new file mode 100644 index 0000000000..3d30aa47b2 --- /dev/null +++ b/editor/icons/icon_c_s_g_torus.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 3c-1.8145 0-3.4691 0.41721-4.7461 1.1621-1.277 0.745-2.2539 1.9082-2.2539 3.3379 0 1.4298 0.9769 2.5949 2.2539 3.3398 1.277 0.7449 2.9316 1.1602 4.7461 1.1602 0-1.0907 0.90931-2 2-2 0-0.080836 0.013744-0.15778 0.023438-0.23633-0.61769 0.14673-1.3008 0.23633-2.0234 0.23633-1.4992 0-2.8437-0.36687-3.7383-0.88867-0.89456-0.5219-1.2617-1.108-1.2617-1.6113 0-0.5032 0.36716-1.0876 1.2617-1.6094 0.89456-0.5219 2.2391-0.89062 3.7383-0.89062s2.8437 0.36872 3.7383 0.89062c0.89456 0.5218 1.2617 1.1062 1.2617 1.6094 0 0.15978-0.053679 0.32822-0.13281 0.5h1.1328c0.32481 0 0.62893 0.088408 0.90234 0.23047 0.057552-0.23582 0.097656-0.47718 0.097656-0.73047 0-1.4297-0.9769-2.5929-2.2539-3.3379-1.277-0.7449-2.9316-1.1621-4.7461-1.1621z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m12 9c-0.55401 0-1 0.44599-1 1v1h2v2h1c0.55401 0 1-0.44599 1-1v-2c0-0.55401-0.44599-1-1-1h-2zm1 4h-2v-2h-1c-0.55401 0-1 0.44599-1 1v2c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-1z" fill="#84c2ff"/> +</g> +</svg> diff --git a/editor/icons/icon_capsule_mesh.svg b/editor/icons/icon_capsule_mesh.svg index bc736200a4..c375e6adfb 100644 --- a/editor/icons/icon_capsule_mesh.svg +++ b/editor/icons/icon_capsule_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1037.4c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922 2.7527 0 5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903zm-1.0059 2.1264v4.8576c-0.66556-0.1047-1.2973-0.372-1.9941-0.6618v-1.3222c0-1.3474 0.79838-2.4648 1.9941-2.8736zm2.0118 0c1.1957 0.4088 1.9941 1.5262 1.9941 2.8736v1.3451c-0.68406 0.3054-1.3142 0.5732-1.9941 0.6663zm-4.0059 6.334c0.67836 0.2231 1.3126 0.447 1.9941 0.5264v2.8848c-1.1957-0.4092-1.9941-1.5242-1.9941-2.8716zm6 0.03v0.5094c0 1.3474-0.79838 2.4619-1.9941 2.8711v-2.8711c0.68606-0.068 1.3207-0.2828 1.9941-0.5094z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m8 1c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922 2.7527 0 5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903zm-1.0059 2.1264v4.8576c-0.66556-0.1047-1.2973-0.372-1.9941-0.6618v-1.3222c0-1.3474 0.79838-2.4648 1.9941-2.8736zm2.0118 0c1.1957 0.4088 1.9941 1.5262 1.9941 2.8736v1.3451c-0.68406 0.3054-1.3142 0.5732-1.9941 0.6663zm-4.0059 6.334c0.67836 0.2231 1.3126 0.447 1.9941 0.5264v2.8848c-1.1957-0.4092-1.9941-1.5242-1.9941-2.8716zm6 0.03v0.5094c0 1.3474-0.79838 2.4619-1.9941 2.8711v-2.8711c0.68606-0.068 1.3207-0.2828 1.9941-0.5094z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_color_rect.svg b/editor/icons/icon_color_rect.svg index c0cd07061e..c2d4cf344d 100644 --- a/editor/icons/icon_color_rect.svg +++ b/editor/icons/icon_color_rect.svg @@ -1,9 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="1" y="1037.4" width="2" height="14" fill="#a5efac"/> -<rect x="1" y="1049.4" width="14" height="2" fill="#a5efac"/> -<rect x="1" y="1037.4" width="14" height="2" fill="#a5efac"/> -<rect x="13" y="1037.4" width="2" height="14" fill="#a5efac"/> +<path transform="translate(0 1036.4)" d="m1 1v14h14v-14zm2 2h10v10h-10z" fill="#a5efac"/> <path d="m12 1048.4h-4.8l4.8-4.8z" fill="#70bfff" fill-rule="evenodd"/> <path d="m4 1040.4h4.8l-4.8 4.8z" fill="#ff7070" fill-rule="evenodd"/> <path d="m4 1048.4v-3.2l4.8-4.8h3.2v3.2l-4.8 4.8z" fill="#7aff70" fill-rule="evenodd"/> diff --git a/editor/icons/icon_cone_twist_joint.svg b/editor/icons/icon_cone_twist_joint.svg index c9d92d6537..8d869fa1d5 100644 --- a/editor/icons/icon_cone_twist_joint.svg +++ b/editor/icons/icon_cone_twist_joint.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#fc9c9c" stroke-linecap="round" stroke-width="2"> -<path transform="translate(0 1036.4)" d="m8 2l-6 9a6 3 0 0 0 3 2.5977 6 3 0 0 0 6 0 6 3 0 0 0 3 -2.5977l-6-9z" stroke-linejoin="round"/> -<ellipse cx="8" cy="1047.4" rx="6" ry="3" stroke-linejoin="round"/> -<path d="m8 1039.4v8"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7.9824 1a1.0001 1.0001 0 0 0 -0.81445 0.44531l-4.7012 7.0527c-0.80117 0.58197-1.3801 1.3563-1.4492 2.3145a1.0001 1.0001 0 0 0 -0.017578 0.1875c0 0.21449 0.033976 0.41628 0.082031 0.61328 0.0071983 0.028314 0.015306 0.055972 0.023438 0.083985 0.053631 0.19149 0.1274 0.37452 0.2207 0.54883 0.19678 0.36764 0.47105 0.69651 0.80273 0.98633 0.007988 0.007025 0.013442 0.016473 0.021484 0.023437 0.016953 0.014679 0.03747 0.026532 0.054688 0.041016 0.10299 0.086112 0.21259 0.16531 0.32422 0.24414 0.23883 0.16992 0.49083 0.33075 0.76953 0.4707 0.0025295 0.00127 0.0052799 0.002638 0.0078125 0.003906 0.001313 6.58e-4 0.0025928 0.001296 0.0039063 0.001953 0.0085785 0.00429 0.018732 0.007456 0.027344 0.011719 0.26499 0.13103 0.55174 0.24596 0.84961 0.35156 0.10487 0.037634 0.21202 0.071147 0.32031 0.10547 0.072945 0.022902 0.1402 0.050715 0.21484 0.072266 0.16777 0.04843 0.34161 0.086385 0.51367 0.12695 0.093562 0.021905 0.18185 0.048745 0.27734 0.068359 0.010733 0.002205 0.022447 0.003684 0.033203 0.00586 0.34623 0.071177 0.69974 0.12196 1.0566 0.16211 0.057889 0.006228 0.11544 0.01213 0.17383 0.017578 0.81052 0.079498 1.6348 0.079498 2.4453 0 0.058387-0.005448 0.11594-0.01135 0.17383-0.017578 0.3569-0.040146 0.71041-0.090932 1.0566-0.16211 0.010948-0.002251 0.022269-0.003578 0.033203-0.00586 0.095491-0.019614 0.18378-0.046454 0.27734-0.068359 0.17206-0.040568 0.3459-0.078523 0.51367-0.12695 0.074642-0.021551 0.1419-0.049364 0.21484-0.072266 0.10829-0.034322 0.21544-0.067835 0.32031-0.10547 0.29787-0.1056 0.58462-0.22053 0.84961-0.35156 0.009951-0.00492 0.021348-0.008715 0.03125-0.013672 0.002626-0.001315 0.005189-0.002588 0.007813-0.003906 0.2787-0.13995 0.5307-0.30078 0.76953-0.4707 0.11163-0.07883 0.22123-0.15803 0.32422-0.24414 0.017218-0.014484 0.037734-0.026337 0.054687-0.041016 0.008042-0.006964 0.013497-0.016412 0.021485-0.023437 0.33169-0.28982 0.60596-0.61869 0.80273-0.98633 0.093299-0.17431 0.16707-0.35733 0.2207-0.54883 0.008132-0.028013 0.016239-0.055671 0.023438-0.083985 0.048055-0.197 0.082031-0.39879 0.082031-0.61328a1.0001 1.0001 0 0 0 -0.017578 -0.18164 1.0001 1.0001 0 0 0 -0.001953 -0.017578c-0.073081-0.95265-0.64941-1.7232-1.4473-2.3027l-4.7012-7.0527a1.0001 1.0001 0 0 0 -0.84961 -0.44531zm-0.98242 4.3027v1.7461c-0.43911 0.033461-0.86366 0.087835-1.2734 0.16406l1.2734-1.9102zm2 0l1.2734 1.9102c-0.40978-0.076228-0.83432-0.1306-1.2734-0.16406v-1.7461zm-2 3.748v1.9492a1.0001 1.0001 0 1 0 2 0v-1.9492c1.1126 0.10487 2.0951 0.37277 2.7949 0.72266 0.12146 0.060728 0.20622 0.12218 0.30664 0.18359l0.80078 1.2012c-0.032965 0.14677-0.089654 0.30658-0.30469 0.51758-0.051464 0.049149-0.10034 0.098137-0.16406 0.14844-0.045193 0.035312-0.091373 0.070148-0.14258 0.10547-0.11245 0.07827-0.24511 0.15838-0.39062 0.23633-0.075428 0.040204-0.1553 0.078371-0.23828 0.11719-0.16195 0.075482-0.33452 0.14662-0.52148 0.21289-0.070588 0.025324-0.14454 0.048409-0.21875 0.072265-0.23425 0.074473-0.48077 0.14392-0.74414 0.20117-0.021343 0.004579-0.041038 0.011189-0.0625 0.015625-0.2559 0.05368-0.53101 0.090517-0.80859 0.125-0.856 0.10229-1.7573 0.10229-2.6133 0-0.27759-0.034483-0.5527-0.07132-0.80859-0.125-0.021462-0.004436-0.041156-0.011046-0.0625-0.015625-0.26337-0.057254-0.50989-0.1267-0.74414-0.20117-0.074211-0.023856-0.14816-0.046941-0.21875-0.072265-0.18697-0.066266-0.35954-0.13741-0.52148-0.21289-0.082979-0.038816-0.16285-0.076983-0.23828-0.11719-0.14552-0.077951-0.27818-0.15806-0.39062-0.23633-0.051205-0.035321-0.097386-0.070157-0.14258-0.10547-0.06372-0.050301-0.1126-0.099289-0.16406-0.14844-0.21503-0.21099-0.27173-0.37081-0.30469-0.51758l0.80078-1.2012c0.10043-0.061415 0.18518-0.12287 0.30664-0.18359 0.69978-0.34989 1.6823-0.61778 2.7949-0.72266z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_cube_mesh.svg b/editor/icons/icon_cube_mesh.svg index 45275216ab..d1897dd710 100644 --- a/editor/icons/icon_cube_mesh.svg +++ b/editor/icons/icon_cube_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1037.4)"> -<path d="m7.5 1038.2-6.5625 3.2804v6.772l6.5625 3.2804 6.5625-3.2804v-6.772zm0 1.9831 3.6926 1.8463-3.6926 1.8463-3.6926-1.8463zm-4.7889 3.2804 3.9022 1.9502v3.6944l-3.9022-1.952zm9.5779 0v3.6926l-3.9022 1.952v-3.6944z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path transform="scale(.9375)" d="m8 0.88867-7 3.5v7.2227l7 3.5 7-3.5v-7.2227zm0 2.1152 3.9395 1.9707-3.9395 1.9688-3.9395-1.9688zm-5 3.5527 4 2v3.9414l-4-2.002zm10 0v3.9395l-4 2.002v-3.9414z" fill="#ffd684" stroke-width="1.0667"/> </svg> diff --git a/editor/icons/icon_cylinder_mesh.svg b/editor/icons/icon_cylinder_mesh.svg index 92a93ec220..21b5fc144b 100644 --- a/editor/icons/icon_cylinder_mesh.svg +++ b/editor/icons/icon_cylinder_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1037.4)"> -<path transform="matrix(.9375 0 0 .9375 0 1037.4)" d="m8 1c-1.7469 0-3.328 0.22648-4.5586 0.63672-0.61528 0.20512-1.1471 0.45187-1.5898 0.80078s-0.85156 0.88101-0.85156 1.5625v8c0 0.68149 0.40884 1.2155 0.85156 1.5645s0.97457 0.59577 1.5898 0.80078c1.2306 0.41024 2.8117 0.63477 4.5586 0.63477s3.328-0.22453 4.5586-0.63477c0.61527-0.20501 1.1471-0.45187 1.5898-0.80078 0.44272-0.34891 0.85156-0.88296 0.85156-1.5645v-8c0-0.68149-0.40884-1.2136-0.85156-1.5625-0.44272-0.34891-0.97457-0.59566-1.5898-0.80078-1.2306-0.41024-2.8117-0.63672-4.5586-0.63672zm0 2c1.5668 0 2.9867 0.22145 3.9277 0.53516 0.46368 0.15456 0.80138 0.33741 0.96875 0.4668-0.16752 0.12928-0.50546 0.3105-0.96875 0.46484-0.94102 0.31371-2.361 0.5332-3.9277 0.5332s-2.9867-0.2195-3.9277-0.5332c-0.46329-0.15435-0.80123-0.33556-0.96875-0.46484 0.16737-0.12939 0.50507-0.31224 0.96875-0.4668 0.94102-0.31371 2.361-0.53516 3.9277-0.53516zm-5 3.1875c0.1468 0.059071 0.2835 0.12512 0.44141 0.17773 1.2306 0.41024 2.8117 0.63477 4.5586 0.63477s3.328-0.22453 4.5586-0.63477c0.15791-0.052617 0.29461-0.11866 0.44141-0.17773v5.8125c-0.16752 0.12928-0.60898 0.31245-1.0723 0.4668-0.94102 0.31371-2.361 0.5332-3.9277 0.5332s-2.9867-0.2195-3.9277-0.5332c-0.46329-0.15435-0.90474-0.33752-1.0723-0.4668z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m7.5 0.9375c-1.6377 0-3.12 0.2123-4.2737 0.5969-0.57682 0.1923-1.0754 0.4237-1.4905 0.7508-0.41505 0.3271-0.79834 0.8259-0.79834 1.4648v7.5c0 0.6389 0.38329 1.1396 0.79834 1.4667 0.41505 0.3271 0.91366 0.5585 1.4905 0.7507 1.1536 0.3846 2.6359 0.5951 4.2737 0.5951s3.12-0.2105 4.2737-0.5951c0.57682-0.1922 1.0754-0.4236 1.4905-0.7507 0.41505-0.3271 0.79834-0.8278 0.79834-1.4667v-7.5c0-0.6389-0.38329-1.1377-0.79834-1.4648-0.41505-0.3271-0.91366-0.5585-1.4905-0.7508-1.1536-0.3846-2.6359-0.5969-4.2737-0.5969zm0 1.875c1.4689 0 2.8 0.2076 3.6823 0.5017 0.4347 0.1449 0.7513 0.3163 0.9082 0.4376-0.15705 0.1212-0.47387 0.2911-0.9082 0.4358-0.88221 0.2941-2.2134 0.4999-3.6823 0.4999s-2.8-0.2058-3.6823-0.4999c-0.43433-0.1447-0.75115-0.3146-0.9082-0.4358 0.15691-0.1213 0.47351-0.2927 0.9082-0.4376 0.88221-0.2941 2.2134-0.5017 3.6823-0.5017zm-4.6875 2.9883c0.13762 0.055 0.26578 0.1173 0.41382 0.1666 1.1536 0.3846 2.6359 0.5951 4.2737 0.5951s3.12-0.2105 4.2737-0.5951c0.14804-0.049 0.2762-0.1112 0.41382-0.1666v5.4492c-0.15705 0.1212-0.57092 0.2929-1.0052 0.4376-0.88221 0.2941-2.2134 0.4999-3.6823 0.4999s-2.8-0.2058-3.6823-0.4999c-0.43433-0.1447-0.8482-0.3164-1.0052-0.4376z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_delete_split.svg b/editor/icons/icon_delete_split.svg new file mode 100644 index 0000000000..c24f7449d6 --- /dev/null +++ b/editor/icons/icon_delete_split.svg @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg4" + sodipodi:docname="icon_delete_split.svg" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="3066" + inkscape:window-height="1689" + id="namedview6" + showgrid="false" + inkscape:zoom="41.7193" + inkscape:cx="7.7924561" + inkscape:cy="6.0148972" + inkscape:window-x="134" + inkscape:window-y="55" + inkscape:window-maximized="1" + inkscape:current-layer="svg4" /> + <rect + style="fill:#800000" + id="rect12" + width="1.8456686" + height="2.0853658" + x="0.62321275" + y="6.9394455" /> + <rect + style="fill:#800000" + id="rect14" + width="1.6299411" + height="1.9894869" + x="12.488225" + y="7.1791425" /> + <rect + style="fill:#e9afaf" + id="rect37" + width="3.1640031" + height="0.40748528" + x="2.5407906" + y="7.9701433" /> + <rect + style="fill:#e9afaf" + id="rect39" + width="3.5235491" + height="0.52733386" + x="9.0126152" + y="8.0420523" /> + <rect + style="fill:#e9afaf" + id="rect41" + width="3.6433976" + height="0.4554247" + x="1.5110972" + y="-9.732645" + transform="rotate(123.99908)" /> + <rect + style="fill:#e9afaf" + id="rect41-3" + width="3.6433976" + height="0.4554247" + x="0.072069742" + y="-12.144793" + transform="rotate(123.99908)" /> +</svg> diff --git a/editor/icons/icon_editor_position.svg b/editor/icons/icon_editor_position.svg new file mode 100644 index 0000000000..7657eb5160 --- /dev/null +++ b/editor/icons/icon_editor_position.svg @@ -0,0 +1,4 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709 -1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051 -1.582v-4.418z" fill="#fff" fill-opacity=".70588"/> +<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#ff8484"/> +</svg> diff --git a/editor/icons/icon_editor_position_previous.svg b/editor/icons/icon_editor_position_previous.svg new file mode 100644 index 0000000000..180156e13a --- /dev/null +++ b/editor/icons/icon_editor_position_previous.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#69f" fill-opacity=".69804"/> +</svg> diff --git a/editor/icons/icon_editor_position_unselected.svg b/editor/icons/icon_editor_position_unselected.svg new file mode 100644 index 0000000000..3c7d479b88 --- /dev/null +++ b/editor/icons/icon_editor_position_unselected.svg @@ -0,0 +1,4 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709 -1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051 -1.582v-4.418h-4z" fill-opacity=".41077"/> +<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#d9d9d9"/> +</svg> diff --git a/editor/icons/icon_enum.svg b/editor/icons/icon_enum.svg new file mode 100644 index 0000000000..e9c3fbbd2e --- /dev/null +++ b/editor/icons/icon_enum.svg @@ -0,0 +1,3 @@ +<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> +<path d="m3 2c-0.5304 8.01e-5 -1.0391 0.21085-1.4141 0.58594-0.37509 0.37501-0.58586 0.88366-0.58594 1.4141v1c-0.2652 4.01e-5 -0.51953 0.10542-0.70703 0.29297-0.18755 0.18751-0.29293 0.44183-0.29297 0.70703 4.0076e-5 0.2652 0.10542 0.51953 0.29297 0.70703 0.18751 0.18755 0.44183 0.29293 0.70703 0.29297v1c8.01e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.37509 0.88366 0.58586 1.4141 0.58594h1v-2h-1v-4h1v-2zm3 0v8h4v-2h-2v-1h2v-2h-2v-1h2v-2zm6 0v2h1v4h-1v2h1c0.5304-8.03e-5 1.0391-0.21085 1.4141-0.58594 0.37509-0.37501 0.58586-0.88366 0.58594-1.4141v-1c0.2652-4.01e-5 0.51953-0.10542 0.70703-0.29297 0.18755-0.18751 0.29293-0.44183 0.29297-0.70703-4e-5 -0.2652-0.10542-0.51953-0.29297-0.70703-0.1875-0.18755-0.44183-0.29293-0.70703-0.29297v-1c-8e-5 -0.5304-0.21085-1.0391-0.58594-1.4141-0.37501-0.37509-0.88366-0.58586-1.4141-0.58594z" fill="#e0e0e0"/> +</svg> diff --git a/editor/icons/icon_help_search.svg b/editor/icons/icon_help_search.svg index c0768ea5ed..8e4f97d781 100644 --- a/editor/icons/icon_help_search.svg +++ b/editor/icons/icon_help_search.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-width="2"> -<path transform="translate(0 1036.4)" d="m0 10v6h2c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3zm5 3c0 1.6569 1.3431 3 3 3s3-1.3431 3-3-1.3431-3-3-3-3 1.3431-3 3zm6 0c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 1e-5 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-9-1c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1zm6 0c0.55228 1e-5 0.99999 0.44772 1 1-9.6e-6 0.55228-0.44772 0.99999-1 1-0.55228-1e-5 -0.99999-0.44772-1-1 9.6e-6 -0.55228 0.44772-0.99999 1-1z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549"/> -<path d="m9 1036.4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549"/> -<path d="m7 1042.4-3 3" fill="none" stroke="#e0e0e0"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m9 0a4 4 0 0 0 -4 4 4 4 0 0 0 0.55859 2.0273l-2.2656 2.2656 1.4141 1.4141 2.2656-2.2656a4 4 0 0 0 2.0273 0.55859 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-9 8v6h2c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3h-2zm5 3c0 1.6569 1.3431 3 3 3s3-1.3431 3-3-1.3431-3-3-3-3 1.3431-3 3zm6 0c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 1e-5 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-9-1c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1v-2zm6 0c0.55228 1e-5 0.99999 0.44772 1 1-9.6e-6 0.55228-0.44772 0.99999-1 1-0.55228-1e-5 -0.99999-0.44772-1-1 9.6e-6 -0.55228 0.44772-0.99999 1-1z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549" stroke-width="2"/> </g> </svg> diff --git a/editor/icons/icon_insert_after.svg b/editor/icons/icon_insert_after.svg new file mode 100644 index 0000000000..4696a2fc22 --- /dev/null +++ b/editor/icons/icon_insert_after.svg @@ -0,0 +1,7 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<circle cx="4" cy="12" r="2" fill="none"/> +<path d="m11.99 0.99023a1.0001 1.0001 0 0 0 -0.69726 1.7168l0.29297 0.29297h-2.5859v2h2.5859l-0.29297 0.29297a1.0001 1.0001 0 1 0 1.4141 1.4141l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.7168 -0.30273zm-8.9902 0.0097656c-1.108 0-2 0.892-2 2v2c0 1.108 0.892 2 2 2h2c1.108 0 2-0.892 2-2v-2c0-1.108-0.892-2-2-2h-2z" fill="#e0e0e0"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> +</g> +</svg> diff --git a/editor/icons/icon_insert_before.svg b/editor/icons/icon_insert_before.svg new file mode 100644 index 0000000000..eb85144214 --- /dev/null +++ b/editor/icons/icon_insert_before.svg @@ -0,0 +1,7 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<circle cx="4" cy="12" r="2" fill="none"/> +<path d="m4.0096 0.99023a1.0001 1.0001 0 0 1 0.69726 1.7168l-0.29297 0.29297h2.5859v2h-2.5859l0.29297 0.29297a1.0001 1.0001 0 1 1 -1.4141 1.4141l-2-2a1.0001 1.0001 0 0 1 0 -1.4141l2-2a1.0001 1.0001 0 0 1 0.7168 -0.30273zm8.9902 0.0097656c1.108 0 2 0.892 2 2v2c0 1.108-0.892 2-2 2h-2c-1.108 0-2-0.892-2-2v-2c0-1.108 0.892-2 2-2z" fill="#e0e0e0"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> +</g> +</svg> diff --git a/editor/icons/icon_key_valid.svg b/editor/icons/icon_key_valid.svg new file mode 100644 index 0000000000..4a3fab4754 --- /dev/null +++ b/editor/icons/icon_key_valid.svg @@ -0,0 +1,5 @@ +<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1044.4)"> +<rect transform="rotate(-45)" x="-741.53" y="741.08" width="6.1027" height="6.1027" ry=".76286" fill="#fff"/> +</g> +</svg> diff --git a/editor/icons/icon_mesh.svg b/editor/icons/icon_mesh.svg index d90dc14b5b..f96efb0430 100644 --- a/editor/icons/icon_mesh.svg +++ b/editor/icons/icon_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#ffd684"/> -</g> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_mesh_instance.svg b/editor/icons/icon_mesh_instance.svg index 3342a3e06d..2860cf6889 100644 --- a/editor/icons/icon_mesh_instance.svg +++ b/editor/icons/icon_mesh_instance.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#fc9c9c" fill-opacity=".99608"/> </svg> diff --git a/editor/icons/icon_mesh_instance_2d.svg b/editor/icons/icon_mesh_instance_2d.svg new file mode 100644 index 0000000000..051547b524 --- /dev/null +++ b/editor/icons/icon_mesh_instance_2d.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#a5b7f3"/> +</svg> diff --git a/editor/icons/icon_mesh_library.svg b/editor/icons/icon_mesh_library.svg index 3bef2df33c..3683650e2e 100644 --- a/editor/icons/icon_mesh_library.svg +++ b/editor/icons/icon_mesh_library.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.2695v-2h-2.2715a2 2 0 0 0 -0.72852 -0.73047v-5.8555l3 3v-0.41406a2.0002 2.0002 0 0 1 0.80859 -1.6055l-2.3945-2.3945h5.8574a2 2 0 0 0 0.72852 0.73047v1.2695a2.0002 2.0002 0 0 1 0.99805 0.27148 2.0002 2.0002 0 0 1 1.002 -0.27148v-1.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm6 7v1 5 1h5c0.55228 0 1-0.4477 1-1v-5c0-0.5523-0.44772-1-1-1v4l-1-1-1 1v-4h-3z" fill="#ffd684"/> -</g> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.2695v-2h-2.2715a2 2 0 0 0 -0.72852 -0.73047v-5.8555l3 3v-0.41406a2.0002 2.0002 0 0 1 0.80859 -1.6055l-2.3945-2.3945h5.8574a2 2 0 0 0 0.72852 0.73047v1.2695a2.0002 2.0002 0 0 1 0.99805 0.27148 2.0002 2.0002 0 0 1 1.002 -0.27148v-1.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm6 7v1 5 1h5c0.55228 0 1-0.4477 1-1v-5c0-0.5523-0.44772-1-1-1v4l-1-1-1 1v-4h-3z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_move_down.svg b/editor/icons/icon_move_down.svg index 466fa10205..70c5abf9e8 100644 --- a/editor/icons/icon_move_down.svg +++ b/editor/icons/icon_move_down.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m7.9964 1051.4a1.0002 1.0001 0 0 1 -0.77738 -0.377l-4.0002-5a1.0001 1 0 0 1 0.15626 -1.4043 1.0001 1 0 0 1 1.4063 0.1563l2.2189 2.7734v-5.1484a1.0001 1 0 0 1 1.0001 -1 1.0001 1 0 0 1 1.0001 1v5.1484l2.2189-2.7734a1.0001 1 0 0 1 1.4063 -0.1563 1.0001 1 0 0 1 0.15626 1.4043l-4.0002 5a1.0002 1.0001 0 0 1 -0.7852 0.377zm0.00391-12a1.0001 1 0 0 1 -1.0001 -1 1.0001 1 0 0 1 1.0001 -1 1.0001 1 0 0 1 1.0001 1 1.0001 1 0 0 1 -1.0001 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m6 1a1.0001 1.0001 0 1 0 0 2h4a1.0001 1.0001 0 1 0 0 -2zm2 4c-0.55231 0-1 0.4477-1 1v5.1484l-2.2188-2.7734c-0.34504-0.4317-0.97482-0.50165-1.4062-0.15625-0.4305 0.3449-0.5004 0.9732-0.15625 1.4043l4 5c0.18868 0.2369 0.4745 0.37695 0.77734 0.37695 0.30559 9e-4 0.59477-0.13795 0.78516-0.37695l4-5c0.34415-0.4311 0.27424-1.0594-0.15625-1.4043-0.43143-0.3454-1.0612-0.27545-1.4062 0.15625l-2.2188 2.7734v-5.1484c0-0.5523-0.44769-1-1-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_move_left.svg b/editor/icons/icon_move_left.svg new file mode 100644 index 0000000000..bab817bfdf --- /dev/null +++ b/editor/icons/icon_move_left.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m15 10a1.0001 1.0001 0 1 1 -2 0v-4a1.0001 1.0001 0 1 1 2 0zm-4-2c0 0.55231-0.4477 1-1 1h-5.1484l2.7734 2.2188c0.4317 0.34504 0.50165 0.97482 0.15625 1.4062-0.3449 0.4305-0.9732 0.5004-1.4043 0.15625l-5-4c-0.2369-0.18868-0.37695-0.4745-0.37695-0.77734-9e-4 -0.30559 0.13795-0.59477 0.37695-0.78516l5-4c0.4311-0.34415 1.0594-0.27424 1.4043 0.15625 0.3454 0.43143 0.27545 1.0612-0.15625 1.4062l-2.7734 2.2188h5.1484c0.5523 0 1 0.44769 1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</svg> diff --git a/editor/icons/icon_move_right.svg b/editor/icons/icon_move_right.svg new file mode 100644 index 0000000000..7721633de5 --- /dev/null +++ b/editor/icons/icon_move_right.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m1 10a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 1 0 -2 0zm4-2c0 0.55231 0.4477 1 1 1h5.1484l-2.7734 2.2188c-0.4317 0.34504-0.50165 0.97482-0.15625 1.4062 0.3449 0.4305 0.9732 0.5004 1.4043 0.15625l5-4c0.2369-0.18868 0.37695-0.4745 0.37695-0.77734 9e-4 -0.30559-0.13795-0.59477-0.37695-0.78516l-5-4c-0.4311-0.34415-1.0594-0.27424-1.4043 0.15625-0.3454 0.43143-0.27545 1.0612 0.15625 1.4062l2.7734 2.2188h-5.1484c-0.5523 0-1 0.44769-1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</svg> diff --git a/editor/icons/icon_move_up.svg b/editor/icons/icon_move_up.svg index 6e148216d2..06bb26fad3 100644 --- a/editor/icons/icon_move_up.svg +++ b/editor/icons/icon_move_up.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m7.9964 1037.4a1.0002 1.0001 0 0 0 -0.77739 0.377l-4.0002 5a1.0001 1 0 0 0 0.15626 1.4043 1.0001 1 0 0 0 1.4063 -0.1563l2.2189-2.7734v5.1484a1.0001 1 0 0 0 1.0001 1 1.0001 1 0 0 0 1.0001 -1v-5.1484l2.2189 2.7734a1.0001 1 0 0 0 1.4063 0.1563 1.0001 1 0 0 0 0.15626 -1.4043l-4.0002-5a1.0002 1.0001 0 0 0 -0.7852 -0.377zm0.00391 12a1.0001 1 0 0 0 -1.0001 1 1.0001 1 0 0 0 1.0001 1 1.0001 1 0 0 0 1.0001 -1 1.0001 1 0 0 0 -1.0001 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m6 15a1.0001 1.0001 0 1 1 0 -2h4a1.0001 1.0001 0 1 1 0 2zm2-4c-0.55231 0-1-0.4477-1-1v-5.1484l-2.2188 2.7734c-0.34504 0.4317-0.97482 0.50165-1.4062 0.15625-0.4305-0.3449-0.5004-0.9732-0.15625-1.4043l4-5c0.18868-0.2369 0.4745-0.37695 0.77734-0.37695 0.30559-9e-4 0.59477 0.13795 0.78516 0.37695l4 5c0.34415 0.4311 0.27424 1.0594-0.15625 1.4043-0.43143 0.3454-1.0612 0.27545-1.4062-0.15625l-2.2188-2.7734v5.1484c0 0.5523-0.44769 1-1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_multi_mesh.svg b/editor/icons/icon_multi_mesh.svg index 2582ba9e51..522561bb28 100644 --- a/editor/icons/icon_multi_mesh.svg +++ b/editor/icons/icon_multi_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#ffd684"/> -</g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_multi_mesh_instance.svg b/editor/icons/icon_multi_mesh_instance.svg index 0140f1137b..f873ac2bf3 100644 --- a/editor/icons/icon_multi_mesh_instance.svg +++ b/editor/icons/icon_multi_mesh_instance.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#fc9c9c" fill-opacity=".99608"/> </svg> diff --git a/editor/icons/icon_navigation_mesh.svg b/editor/icons/icon_navigation_mesh.svg index cc04e06b51..831d1a0769 100644 --- a/editor/icons/icon_navigation_mesh.svg +++ b/editor/icons/icon_navigation_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z" fill="#ffd684"/> -</g> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_navigation_mesh_instance.svg b/editor/icons/icon_navigation_mesh_instance.svg index 85c6292290..e6636807af 100644 --- a/editor/icons/icon_navigation_mesh_instance.svg +++ b/editor/icons/icon_navigation_mesh_instance.svg @@ -1,7 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z"/> -<rect x="12" y="1040.4" width="2" height="1"/> -<rect x="12" y="1040.4" width="2" height="1"/> -</g> +<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z" fill="#fc9c9c" fill-opacity=".99608"/> </svg> diff --git a/editor/icons/icon_paint_vertex.svg b/editor/icons/icon_paint_vertex.svg new file mode 100644 index 0000000000..b53e005dae --- /dev/null +++ b/editor/icons/icon_paint_vertex.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg4" + sodipodi:docname="icon_paint_vertex.svg" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="3066" + inkscape:window-height="1689" + id="namedview6" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="134" + inkscape:window-y="55" + inkscape:window-maximized="1" + inkscape:current-layer="svg4" /> + <ellipse + style="fill:#ffffff" + id="path12" + cx="8.3728809" + cy="8.1694918" + rx="6.6779661" + ry="6.0677967" /> +</svg> diff --git a/editor/icons/icon_panel.svg b/editor/icons/icon_panel.svg index aebf885e7c..7bd3db7c09 100644 --- a/editor/icons/icon_panel.svg +++ b/editor/icons/icon_panel.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2z" fill="#a5efac"/> -</g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_panel_container.svg b/editor/icons/icon_panel_container.svg index a52493b665..df8a2c0a0e 100644 --- a/editor/icons/icon_panel_container.svg +++ b/editor/icons/icon_panel_container.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z" fill="#a5efac"/> -</g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_physical_bone.svg b/editor/icons/icon_physical_bone.svg new file mode 100644 index 0000000000..2efcab3e20 --- /dev/null +++ b/editor/icons/icon_physical_bone.svg @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg2" + inkscape:version="0.91 r13725" + sodipodi:docname="icon_physical_bone.svg"> + <metadata + id="metadata12"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs10" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1027" + id="namedview8" + showgrid="false" + inkscape:zoom="16" + inkscape:cx="14.674088" + inkscape:cy="7.3239349" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg2" /> + <g + id="g4505" + transform="translate(-2.5625,-18.4375)"> + <path + inkscape:connector-curvature="0" + id="path6-9-8" + d="m 13.107422,19.382812 a 2.4664,2.4663 0 0 0 -1.78125,0.720704 2.4664,2.4663 0 0 0 -0.185547,0.21289 L 12.472656,22.75 10.867187,23.353516 7.453125,26.767578 a 2.4664,2.4663 0 0 0 -3.1015625,0.3125 2.4664,2.4663 0 0 0 0,3.488281 2.4664,2.4663 0 0 0 1.3964844,0.695313 2.4664,2.4663 0 0 0 0.6953125,1.396484 2.4664,2.4663 0 0 0 3.4882812,0 2.4664,2.4663 0 0 0 0.3144534,-3.103515 l 3.560547,-3.560547 a 2.4664,2.4663 0 0 0 3.099609,-0.310547 2.4664,2.4663 0 0 0 0,-3.488281 A 2.4664,2.4663 0 0 0 15.509766,21.5 2.4664,2.4663 0 0 0 14.814453,20.103516 2.4664,2.4663 0 0 0 13.107422,19.382812 Z" + style="fill:#fc9c9c" /> + <path + sodipodi:nodetypes="cccc" + id="rect4140-5-1-4-3-7-9-03" + d="m 3.7211033,21.208326 0.9608286,4.82644 1.3962404,-0.524494 z" + style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cccc" + id="rect4140-5-1-4-3-7-9-5-3" + d="m 6.4843278,19.465234 0.9608285,4.82644 1.3962404,-0.524494 z" + style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cccc" + id="rect4140-5-1-4-3-7-9-5-3-8" + d="m 9.6964655,19.33678 0.7108285,3.51394 1.39624,-0.524494 z" + style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/editor/icons/icon_plane_mesh.svg b/editor/icons/icon_plane_mesh.svg index 7a5c8f4354..dae7b02da5 100644 --- a/editor/icons/icon_plane_mesh.svg +++ b/editor/icons/icon_plane_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1048.4h12l-3-8h-6z" fill="none" stroke="#ffd684" stroke-linejoin="round" stroke-width="2"/> -</g> +<path d="m2 12h12l-3-8h-6z" fill="none" stroke="#ffd684" stroke-linejoin="round" stroke-width="2"/> </svg> diff --git a/editor/icons/icon_prism_mesh.svg b/editor/icons/icon_prism_mesh.svg index 68dfa117f7..8f8feb2eb6 100644 --- a/editor/icons/icon_prism_mesh.svg +++ b/editor/icons/icon_prism_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9824 1.002a1.0001 1.0001 0 0 0 -0.81445 0.44336l-5.9727 8.9609-0.027344 0.039062a1 1 0 0 0 -0.0625 0.10742 1 1 0 0 0 0.44727 1.3418l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1 1 0 0 0 0.44726 -1.3418 1 1 0 0 0 -0.0625 -0.10742l-6-9a1.0001 1.0001 0 0 0 -0.84961 -0.44336zm-0.98242 4.3008v7.0801l-3.5391-1.7715 3.5391-5.3086zm2 0l3.5391 5.3086-3.5391 1.7715v-7.0801z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m7.9824 1.002a1.0001 1.0001 0 0 0 -0.81445 0.44336l-5.9727 8.9609-0.027344 0.03906a1 1 0 0 0 -0.0625 0.10742 1 1 0 0 0 0.44727 1.3418l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1 1 0 0 0 0.44726 -1.3418 1 1 0 0 0 -0.0625 -0.10742l-6-9a1.0001 1.0001 0 0 0 -0.84961 -0.44336zm-0.98242 4.3008v7.0801l-3.5391-1.7715zm2 0 3.5391 5.3086l-3.5391 1.7715z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_quad_mesh.svg b/editor/icons/icon_quad_mesh.svg index bf7b593e9e..40a07b36f7 100644 --- a/editor/icons/icon_quad_mesh.svg +++ b/editor/icons/icon_quad_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m15 1037.4v14h-14v-14zm-2 2h-8.5859l8.5859 8.5859zm-10 1.4141v8.5859h8.5859z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m15 1v14h-14v-14zm-2 2h-8.5859l8.5859 8.5859zm-10 1.4141v8.5859h8.5859z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_rayito.svg b/editor/icons/icon_rayito.svg index e1891e783a..937a5cc4d7 100644 --- a/editor/icons/icon_rayito.svg +++ b/editor/icons/icon_rayito.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#ffd684"> -<rect transform="matrix(1 0 -.14142 .98995 0 0)" x="152.19" y="1047.9" width="7" height="7.0711"/> -<path d="m6 1043.4h8l-9 8z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 1l-1 7h2.875l-0.875 7 9-8h-3.8574l0.85742-6h-7z" fill="#ffd684"/> </g> </svg> diff --git a/editor/icons/icon_reflection_probe.svg b/editor/icons/icon_reflection_probe.svg index 0a7f537737..e0f1572317 100644 --- a/editor/icons/icon_reflection_probe.svg +++ b/editor/icons/icon_reflection_probe.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#fc9c9c" stroke-linejoin="round" stroke-opacity=".99608" stroke-width="2"> -<path d="m2 1045.4v5h12v-4"/> -<path d="m2 1040.4 5 6 7-7"/> -<path d="m14 1043.4v-4h-4" stroke-linecap="round"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m10 2a1.0001 1.0001 0 1 0 0 2h1.5859l-4.5195 4.5195-4.2988-5.1582-1.5352 1.2793 5 6a1.0001 1.0001 0 0 0 1.4746 0.064453l5.293-5.293v1.5879a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 0 0 -1 -1h-4zm-9 7v5a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1 -1v-4h-2v3h-10v-4h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_short_cut.svg b/editor/icons/icon_short_cut.svg index 736f1f3c02..8c7978e522 100644 --- a/editor/icons/icon_short_cut.svg +++ b/editor/icons/icon_short_cut.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m4 2c-0.55228 0-1 0.4477-1 1v9.084c4.015e-4 0.506 0.448 0.91602 1 0.91602h8c0.552 0 0.9996-0.41002 1-0.91602v-9.084c0-0.5523-0.44772-1-1-1h-8zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1zm6 0h3l-1 3h2l-4 4 1-3h-2l1-4z" fill="#e0e0e0"/> -<rect x="27" y="1038.4" width="7" height="14" fill="#fff"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 2c-0.55228 0-1 0.4477-1 1v9.084c4.015e-4 0.506 0.448 0.91602 1 0.91602h8c0.552 0 0.9996-0.41002 1-0.91602v-9.084c0-0.5523-0.44772-1-1-1h-8zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1zm6 0h3l-1 3h2l-4 4 1-3h-2l1-4z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_skeleton.svg b/editor/icons/icon_skeleton.svg index d5c5f301bb..ef563338c8 100644 --- a/editor/icons/icon_skeleton.svg +++ b/editor/icons/icon_skeleton.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> +<path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#fc9c9c" fill-opacity=".99608"/> </svg> diff --git a/editor/icons/icon_skeleton_2d.svg b/editor/icons/icon_skeleton_2d.svg new file mode 100644 index 0000000000..1ee9bde2a6 --- /dev/null +++ b/editor/icons/icon_skeleton_2d.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#a5b7f3"/> +</svg> diff --git a/editor/icons/icon_sphere_mesh.svg b/editor/icons/icon_sphere_mesh.svg index 519b69cbd7..e298bbef3d 100644 --- a/editor/icons/icon_sphere_mesh.svg +++ b/editor/icons/icon_sphere_mesh.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.8541 0 7-3.1458 7-7 0-3.8541-3.1459-7-7-7zm-1 2.0977v4.8711c-1.2931-0.071342-2.6061-0.29819-3.9434-0.69141 0.30081-2.0978 1.8852-3.7665 3.9434-4.1797zm2 0c2.0549 0.41253 3.637 2.0767 3.9414 4.1699-1.3046 0.36677-2.6158 0.60259-3.9414 0.6875v-4.8574zm3.7852 6.2812c-0.50864 1.7788-1.9499 3.1531-3.7852 3.5215v-2.9512c1.2792-0.072301 2.5419-0.26704 3.7852-0.57031zm-9.5645 0.017578c1.2733 0.31892 2.5337 0.50215 3.7793 0.5625v2.9414c-1.8291-0.36719-3.266-1.7339-3.7793-3.5039z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.8541 0 7-3.1458 7-7 0-3.8541-3.1459-7-7-7zm-1 2.0977v4.8711c-1.2931-0.071342-2.6061-0.29819-3.9434-0.69141 0.30081-2.0978 1.8852-3.7665 3.9434-4.1797zm2 0c2.0549 0.41253 3.637 2.0767 3.9414 4.1699-1.3046 0.36677-2.6158 0.60259-3.9414 0.6875v-4.8574zm3.7852 6.2812c-0.50864 1.7788-1.9499 3.1531-3.7852 3.5215v-2.9512c1.2792-0.072301 2.5419-0.26704 3.7852-0.57031zm-9.5645 0.017578c1.2733 0.31892 2.5337 0.50215 3.7793 0.5625v2.9414c-1.8291-0.36719-3.266-1.7339-3.7793-3.5039z" fill="#ffd684"/> </svg> diff --git a/editor/icons/icon_timer.svg b/editor/icons/icon_timer.svg index e5907cea20..6bf4a29158 100644 --- a/editor/icons/icon_timer.svg +++ b/editor/icons/icon_timer.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="2" y="1037.4" width="12" height="2" ry="1" fill="#e0e0e0"/> -<rect x="2" y="1049.4" width="12" height="2" ry="1" fill="#e0e0e0"/> -<path d="m3 1050.4h10l-3-6h-4z" fill="#e0e0e0"/> -<path d="m3 1038.4h10c0 2-3 4-4 6 1 2 4 4 4 6h-10c0-2 3-4 4-6-1-2-4-4-4-6z" fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m3 1a1.0001 1.0001 0 0 0 -0.38672 0.078125 1.0001 1.0001 0 0 0 -0.0019531 0c-0.0022762 9.545e-4 -0.0035918 0.0029354-0.0058593 0.0039062a1.0001 1.0001 0 0 0 -0.31055 0.20898c-0.0012857 0.0012787-0.0026276 0.0026206-0.0039063 0.0039063a1.0001 1.0001 0 0 0 -0.20508 0.30469c-0.0029915 0.0068502-0.0069239 0.012601-0.0097656 0.019531a1.0001 1.0001 0 0 0 -0.076172 0.38086c0 1.5 0.96697 2.6247 1.873 3.6602 0.76081 0.8695 1.4161 1.6425 1.875 2.3398-0.45889 0.6974-1.1141 1.4723-1.875 2.3418-0.90608 1.0355-1.873 2.1582-1.873 3.6582a1.0001 1.0001 0 0 0 0.078125 0.38867v0.001953c9.292e-4 0.002204 0.0029617 0.003663 0.0039062 0.005859a1.0001 1.0001 0 0 0 0.20898 0.30664c0.0010185 0.001027 0.0028834 0.004836 0.0039063 0.005859a1.0001 1.0001 0 0 0 0.30078 0.20312c0.0093182 0.004119 0.017877 0.007879 0.027344 0.011719a1.0001 1.0001 0 0 0 0.37695 0.076172h10a1.0001 1.0001 0 0 0 0.375 -0.074219c0.010174-0.0041 0.019294-0.009251 0.029297-0.013672a1.0001 1.0001 0 0 0 0.29297 -0.19922c0.004786-0.004679 0.00898-0.008899 0.013672-0.013672a1.0001 1.0001 0 0 0 0.20117 -0.29492c0.004119-0.009318 0.007879-0.017877 0.011719-0.027344a1.0001 1.0001 0 0 0 0.076172 -0.37695c0-1.5-0.96697-2.6227-1.873-3.6582-0.76087-0.8695-1.4161-1.6444-1.875-2.3418 0.4589-0.6973 1.1142-1.4703 1.875-2.3398 0.90608-1.0355 1.873-2.1602 1.873-3.6602a1.0001 1.0001 0 0 0 -0.078125 -0.39062 1.0001 1.0001 0 0 0 -0.21484 -0.31641 1.0001 1.0001 0 0 0 -0.31055 -0.21094 1.0001 1.0001 0 0 0 -0.011718 -0.0058593 1.0001 1.0001 0 0 0 -0.38477 -0.076172h-10zm1.5879 2h6.8242c-0.2378 0.4408-0.3055 0.7892-0.78906 1.3418-0.84392 0.9645-1.8983 1.9723-2.5176 3.2109a1.0001 1.0001 0 0 0 -0.10547 0.44727 1.0001 1.0001 0 0 0 -0.10547 -0.44727c-0.61926-1.2386-1.6737-2.2464-2.5176-3.2109-0.48356-0.5526-0.55126-0.901-0.78906-1.3418z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_translation.svg b/editor/icons/icon_translation.svg index 81abe5070e..fa6d7e1ff2 100644 --- a/editor/icons/icon_translation.svg +++ b/editor/icons/icon_translation.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1v14h10a2 2 0 0 0 2 -2v-10a2 2 0 0 0 -2 -2v5 2l-2-2-2 2v-2-5h-6z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m4 1c-1.645 0-3 1.355-3 3s1.355 3 3 3c0.46079 0 0.89328-0.11549 1.2852-0.30469 0.18147 0.1867 0.43274 0.30469 0.71484 0.30469 0.554 0 1-0.446 1-1v-2-2c0-0.554-0.446-1-1-1-0.28152 0-0.53345 0.11683-0.71484 0.30273-0.39187-0.1892-0.82436-0.30273-1.2852-0.30273zm0 2c0.56412 0 1 0.4359 1 1s-0.43588 1-1 1-1-0.4359-1-1 0.43588-1 1-1zm6.8867 3.5293l-1.7891 0.89453 0.28906 0.57617h-2.3867v2h0.82031c0.13264 0.9292 0.4994 1.8938 1.1992 2.7305-0.61509 0.163-1.3569 0.26523-2.2656 0.26953l0.0097657 2c1.6777-0.01 3.0414-0.31328 4.1113-0.83398 1.07 0.5208 2.4336 0.82608 4.1113 0.83398l0.009766-2c-0.90873 0-1.6505-0.10653-2.2656-0.26953 0.7-0.8367 1.068-1.8013 1.2012-2.7305h1.0684v-2h-3.3789l-0.73438-1.4707zm-1.0234 3.4707h2.0234c-0.12578 0.5801-0.37537 1.147-0.83594 1.623-0.05313 0.055-0.11651 0.10676-0.17578 0.16016-0.05927-0.053-0.12265-0.10516-0.17578-0.16016-0.46056-0.476-0.71015-1.0429-0.83594-1.623z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_tree.svg b/editor/icons/icon_tree.svg index 62efb9f94f..15be220451 100644 --- a/editor/icons/icon_tree.svg +++ b/editor/icons/icon_tree.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="29" y="1042.4" width="1" height="1" fill="#fefeff"/> <path transform="translate(0 1036.4)" d="m1 1v13c5.52e-5 0.55226 0.44774 0.99994 1 1h13v-2h-12v-6h2v3c5.52e-5 0.55226 0.44774 0.99994 1 1h9v-2h-8v-2h8v-2h-12v-2h12v-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_unpaint_vertex.svg b/editor/icons/icon_unpaint_vertex.svg new file mode 100644 index 0000000000..a4633ee80b --- /dev/null +++ b/editor/icons/icon_unpaint_vertex.svg @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg4" + sodipodi:docname="icon_unpaint_vertex.svg" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="3066" + inkscape:window-height="1689" + id="namedview6" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="134" + inkscape:window-y="55" + inkscape:window-maximized="1" + inkscape:current-layer="svg4" /> + <ellipse + style="fill:#000000" + id="path12" + cx="8.3728809" + cy="8.1694918" + rx="6.6779661" + ry="6.0677967" /> +</svg> diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 863b13cbd7..1d7545f182 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -138,7 +138,7 @@ Error ColladaImport::_populate_skeleton(Skeleton *p_skeleton, Collada::Node *p_n //should map this bone to something for animation? } else { print_line("no rest: " + joint->sid); - WARN_PRINT("Joint has no rest.."); + WARN_PRINT("Joint has no rest..."); } int id = r_bone++; @@ -480,7 +480,7 @@ Error ColladaImport::_create_material(const String &p_target) { } } - float roughness = Math::sqrt(1.0 - ((Math::log(effect.shininess) / Math::log(2.0)) / 8.0)); //not very right.. + float roughness = (effect.shininess - 1.0) / 510; material->set_roughness(roughness); if (effect.double_sided) { diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp index 07c77a9df0..c1c1183692 100644 --- a/editor/import/editor_import_plugin.cpp +++ b/editor/import/editor_import_plugin.cpp @@ -72,6 +72,20 @@ String EditorImportPlugin::get_resource_type() const { return get_script_instance()->call("get_resource_type"); } +float EditorImportPlugin::get_priority() const { + if (!(get_script_instance() && get_script_instance()->has_method("get_priority"))) { + return ResourceImporter::get_priority(); + } + return get_script_instance()->call("get_priority"); +} + +int EditorImportPlugin::get_import_order() const { + if (!(get_script_instance() && get_script_instance()->has_method("get_import_order"))) { + return ResourceImporter::get_import_order(); + } + return get_script_instance()->call("get_import_order"); +} + void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options, int p_preset) const { ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("get_import_options"))); @@ -148,6 +162,8 @@ void EditorImportPlugin::_bind_methods() { ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::ARRAY, "get_import_options", PropertyInfo(Variant::INT, "preset"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_save_extension")); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_resource_type")); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::REAL, "get_priority")); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::INT, "get_import_order")); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "get_option_visibility", PropertyInfo(Variant::STRING, "option"), PropertyInfo(Variant::DICTIONARY, "options"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::INT, "import", PropertyInfo(Variant::STRING, "source_file"), PropertyInfo(Variant::STRING, "save_path"), PropertyInfo(Variant::DICTIONARY, "options"), PropertyInfo(Variant::ARRAY, "r_platform_variants"), PropertyInfo(Variant::ARRAY, "r_gen_files"))); } diff --git a/editor/import/editor_import_plugin.h b/editor/import/editor_import_plugin.h index 61a0a944f5..92d83158ef 100644 --- a/editor/import/editor_import_plugin.h +++ b/editor/import/editor_import_plugin.h @@ -47,6 +47,8 @@ public: virtual int get_preset_count() const; virtual String get_save_extension() const; virtual String get_resource_type() const; + virtual float get_priority() const; + virtual int get_import_order() const; virtual void get_import_options(List<ImportOption> *r_options, int p_preset) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files); diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 1c4617c353..af79f9946a 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -762,14 +762,22 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState & PoolVector<Color> ret; if (attribs.size() == 0) return ret; - ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); + int type = state.accessors[p_accessor].type; + ERR_FAIL_COND_V(!(type == TYPE_VEC3 || type == TYPE_VEC4), ret); + int components; + if (type == TYPE_VEC3) { + components = 3; + } else { // TYPE_VEC4 + components = 4; + } + ERR_FAIL_COND_V(attribs.size() % components != 0, ret); const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size() / 4; + int ret_size = attribs.size() / components; ret.resize(ret_size); { PoolVector<Color>::Write w = ret.write(); for (int i = 0; i < ret_size; i++) { - w[i] = Color(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]); + w[i] = Color(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], components == 4 ? attribs_ptr[i * 4 + 3] : 1.0); } } return ret; @@ -1108,7 +1116,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b if (d.has("uri")) { String uri = d["uri"]; - if (uri.findn("data:application/octet-stream;base64") == 0) { + if (uri.findn("data:application/octet-stream;base64") == 0 || + uri.findn("data:" + mimetype + ";base64") == 0) { //embedded data data = _parse_base64_uri(uri); data_ptr = data.ptr(); @@ -1723,14 +1732,19 @@ void EditorSceneImporterGLTF::_generate_bone(GLTFState &state, int p_node, Vecto for (int i = 0; i < n->joints.size(); i++) { ERR_FAIL_COND(n->joints[i].skin < 0); - int bone_index = skeletons[n->joints[i].skin]->get_bone_count(); - skeletons[n->joints[i].skin]->add_bone(n->name); + int bone_index = n->joints[i].bone; + + Skeleton *s = skeletons[n->joints[i].skin]; + while (s->get_bone_count() <= bone_index) { + s->add_bone("Bone " + itos(s->get_bone_count())); + } + if (p_parent_bones.size()) { - skeletons[n->joints[i].skin]->set_bone_parent(bone_index, p_parent_bones[i]); + s->set_bone_parent(bone_index, p_parent_bones[i]); } - skeletons[n->joints[i].skin]->set_bone_rest(bone_index, state.skins[n->joints[i].skin].bones[n->joints[i].bone].inverse_bind.affine_inverse()); + s->set_bone_rest(bone_index, state.skins[n->joints[i].skin].bones[n->joints[i].bone].inverse_bind.affine_inverse()); - n->godot_nodes.push_back(skeletons[n->joints[i].skin]); + n->godot_nodes.push_back(s); n->joints[i].godot_bone_index = bone_index; parent_bones.push_back(bone_index); } @@ -1874,6 +1888,8 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye animation.instance(); animation->set_name(name); + float length = 0; + for (Map<int, GLTFAnimation::Track>::Element *E = anim.tracks.front(); E; E = E->next()) { const GLTFAnimation::Track &track = E->get(); @@ -1892,8 +1908,6 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye node_path = ap->get_parent()->get_path_to(node->godot_nodes[i]); } - float length = 0; - for (int i = 0; i < track.rotation_track.times.size(); i++) { length = MAX(length, track.rotation_track.times[i]); } @@ -1910,8 +1924,6 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye } } - animation->set_length(length); - 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(); @@ -2029,6 +2041,7 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye } } } + animation->set_length(length); ap->add_animation(name, animation); } diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp index 22c32f5fc9..ec0500361d 100644 --- a/editor/import/resource_importer_csv_translation.cpp +++ b/editor/import/resource_importer_csv_translation.cpp @@ -50,7 +50,7 @@ void ResourceImporterCSVTranslation::get_recognized_extensions(List<String> *p_e } String ResourceImporterCSVTranslation::get_save_extension() const { - return ""; //does not save a single resoure + return ""; //does not save a single resource } String ResourceImporterCSVTranslation::get_resource_type() const { diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 78fc9ec9bd..21803a2184 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -188,7 +188,7 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati return OK; } -static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p_single_mesh, bool p_generate_tangents, List<String> *r_missing_deps) { +static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p_single_mesh, bool p_generate_tangents, Vector3 p_scale_mesh, List<String> *r_missing_deps) { FileAccessRef f = FileAccess::open(p_path, FileAccess::READ); @@ -198,6 +198,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p mesh.instance(); bool generate_tangents = p_generate_tangents; + Vector3 scale_mesh = p_scale_mesh; bool flip_faces = false; //bool flip_faces = p_options["force/flip_faces"]; //bool force_smooth = p_options["force/smooth_shading"]; @@ -227,9 +228,9 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p Vector<String> v = l.split(" ", false); ERR_FAIL_COND_V(v.size() < 4, ERR_FILE_CORRUPT); Vector3 vtx; - vtx.x = v[1].to_float(); - vtx.y = v[2].to_float(); - vtx.z = v[3].to_float(); + vtx.x = v[1].to_float() * scale_mesh.x; + vtx.y = v[2].to_float() * scale_mesh.y; + vtx.z = v[3].to_float() * scale_mesh.z; vertices.push_back(vtx); } else if (l.begins_with("vt ")) { //uv @@ -401,7 +402,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in List<Ref<Mesh> > meshes; - Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, r_missing_deps); + Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, Vector3(1, 1, 1), r_missing_deps); if (err != OK) { if (r_err) { @@ -468,6 +469,7 @@ String ResourceImporterOBJ::get_preset_name(int p_idx) const { void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true)); + r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "scale_mesh"), Vector3(1, 1, 1))); } bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { @@ -478,7 +480,7 @@ Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_s List<Ref<Mesh> > meshes; - Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], NULL); + Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], p_options["scale_mesh"], NULL); ERR_FAIL_COND_V(err != OK, err); ERR_FAIL_COND_V(meshes.size() != 1, ERR_BUG); diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 060953d36a..fdbf66f656 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -46,6 +46,7 @@ #include "scene/resources/box_shape.h" #include "scene/resources/plane_shape.h" #include "scene/resources/ray_shape.h" +#include "scene/resources/scene_format_text.h" #include "scene/resources/sphere_shape.h" uint32_t EditorSceneImporter::get_import_flags() const { @@ -250,7 +251,7 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Array Node *r = _fix_node(p_node->get_child(i), p_root, collision_map, p_light_bake_mode); if (!r) { - print_line("was erased.."); + print_line("was erased..."); i--; //was erased } } @@ -1151,7 +1152,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p String ext = src_path.get_extension().to_lower(); EditorProgress progress("import", TTR("Import Scene"), 104); - progress.step(TTR("Importing Scene.."), 0); + progress.step(TTR("Importing Scene..."), 0); for (Set<Ref<EditorSceneImporter> >::Element *E = importers.front(); E; E = E->next()) { @@ -1323,7 +1324,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p _make_external_resources(scene, base_path, external_animations, keep_custom_tracks, external_materials, keep_materials, external_meshes, anim_map, mat_map, mesh_map); } - progress.step(TTR("Running Custom Script.."), 2); + progress.step(TTR("Running Custom Script..."), 2); String post_import_script_path = p_options["nodes/custom_script"]; Ref<EditorScenePostImport> post_import_script; @@ -1352,7 +1353,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p } } - progress.step(TTR("Saving.."), 104); + progress.step(TTR("Saving..."), 104); if (external_scenes) { //save sub-scenes as instances! @@ -1395,3 +1396,25 @@ ResourceImporterScene *ResourceImporterScene::singleton = NULL; ResourceImporterScene::ResourceImporterScene() { singleton = this; } +/////////////////////////////////////// + +uint32_t EditorSceneImporterESCN::get_import_flags() const { + return IMPORT_SCENE; +} +void EditorSceneImporterESCN::get_extensions(List<String> *r_extensions) const { + r_extensions->push_back("escn"); +} +Node *EditorSceneImporterESCN::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { + + Error error; + Ref<PackedScene> ps = ResourceFormatLoaderText::singleton->load(p_path, p_path, &error); + ERR_FAIL_COND_V(!ps.is_valid(), NULL); + + Node *scene = ps->instance(); + ERR_FAIL_COND_V(!scene, NULL); + + return scene; +} +Ref<Animation> EditorSceneImporterESCN::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) { + ERR_FAIL_V(Ref<Animation>()); +} diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index d5f9d53e91..9c3ec7a29b 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -155,4 +155,14 @@ public: ResourceImporterScene(); }; +class EditorSceneImporterESCN : public EditorSceneImporter { + GDCLASS(EditorSceneImporterESCN, EditorSceneImporter); + +public: + virtual uint32_t get_import_flags() const; + virtual void get_extensions(List<String> *r_extensions) const; + virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = NULL); + virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps); +}; + #endif // RESOURCEIMPORTERSCENE_H diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 8119b84b7e..beaa8d9600 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -295,7 +295,7 @@ void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String case COMPRESS_VIDEO_RAM: { Ref<Image> image = p_image->duplicate(); - image->generate_mipmaps(); + image->generate_mipmaps(p_force_normal); if (p_force_rgbe && image->get_format() >= Image::FORMAT_R8 && image->get_format() <= Image::FORMAT_RGBE9995) { image->convert(Image::FORMAT_RGBE9995); diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index 03155b3a48..debdeb1c4a 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -304,17 +304,23 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s int limit_rate_hz = p_options["force/max_rate_hz"]; if (limit_rate && rate > limit_rate_hz && rate > 0 && frames > 0) { //resampleeee!!! - int new_data_frames = frames * limit_rate_hz / rate; + int new_data_frames = (int)(frames * (float)limit_rate_hz / (float)rate); + + print_line("\tresampling ratio: " + rtos((float)limit_rate_hz / (float)rate)); + print_line("\tnew frames: " + itos(new_data_frames)); + Vector<float> new_data; new_data.resize(new_data_frames * format_channels); for (int c = 0; c < format_channels; c++) { + float frac = .0f; + int ipos = 0; + for (int i = 0; i < new_data_frames; i++) { //simple cubic interpolation should be enough. - float pos = float(i) * frames / new_data_frames; - float mu = pos - Math::floor(pos); - int ipos = int(Math::floor(pos)); + + float mu = frac; float y0 = data[MAX(0, ipos - 1) * format_channels + c]; float y1 = data[ipos * format_channels + c]; @@ -330,14 +336,22 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s float res = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3); new_data[i * format_channels + c] = res; + + // update position and always keep fractional part within ]0...1] + // in order to avoid 32bit floating point precision errors + + frac += (float)rate / (float)limit_rate_hz; + int tpos = (int)Math::floor(frac); + ipos += tpos; + frac -= tpos; } } if (loop) { - - loop_begin = loop_begin * new_data_frames / frames; - loop_end = loop_end * new_data_frames / frames; + loop_begin = (int)(loop_begin * (float)new_data_frames / (float)frames); + loop_end = (int)(loop_end * (float)new_data_frames / (float)frames); } + data = new_data; rate = limit_rate_hz; frames = new_data_frames; diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index ce2a4ec6d8..128196be5a 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -415,7 +415,7 @@ ImportDock::ImportDock() { hb->add_child(import_as); import_as->set_h_size_flags(SIZE_EXPAND_FILL); preset = memnew(MenuButton); - preset->set_text(TTR("Preset..")); + preset->set_text(TTR("Preset...")); preset->get_popup()->connect("index_pressed", this, "_preset_selected"); hb->add_child(preset); diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index c22e1cd88b..b387972558 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -440,7 +440,7 @@ void AnimationPlayerEditor::_animation_save_as(const Ref<Resource> &p_resource) file->set_current_path(existing); } file->popup_centered_ratio(); - file->set_title(TTR("Save Resource As..")); + file->set_title(TTR("Save Resource As...")); current_option = RESOURCE_SAVE; } @@ -459,6 +459,12 @@ void AnimationPlayerEditor::_animation_remove_confirmed() { Ref<Animation> anim = player->get_animation(current); undo_redo->create_action(TTR("Remove Animation")); + if (player->get_autoplay() == current) { + undo_redo->add_do_method(player, "set_autoplay", ""); + undo_redo->add_undo_method(player, "set_autoplay", current); + // Avoid having the autoplay icon linger around if there is only one animation in the player + undo_redo->add_do_method(this, "_animation_player_changed", player); + } undo_redo->add_do_method(player, "remove_animation", current); undo_redo->add_undo_method(player, "add_animation", current, anim); undo_redo->add_do_method(this, "_animation_player_changed", player); @@ -491,7 +497,7 @@ void AnimationPlayerEditor::_animation_name_edited() { String new_name = name->get_text(); if (new_name == "" || new_name.find(":") != -1 || new_name.find("/") != -1) { - error_dialog->set_text(TTR("ERROR: Invalid animation name!")); + error_dialog->set_text(TTR("Invalid animation name!")); error_dialog->popup_centered_minsize(); return; } @@ -502,7 +508,7 @@ void AnimationPlayerEditor::_animation_name_edited() { } if (player->has_animation(new_name)) { - error_dialog->set_text(TTR("ERROR: Animation name already exists!")); + error_dialog->set_text(TTR("Animation name already exists!")); error_dialog->popup_centered_minsize(); return; } @@ -811,6 +817,8 @@ void AnimationPlayerEditor::_update_player() { play_bw->set_disabled(animlist.size() == 0); play_bw_from->set_disabled(animlist.size() == 0); play_from->set_disabled(animlist.size() == 0); + frame->set_editable(animlist.size() != 0); + animation->set_disabled(animlist.size() == 0); autoplay->set_disabled(animlist.size() == 0); duplicate_anim->set_disabled(animlist.size() == 0); rename_anim->set_disabled(animlist.size() == 0); @@ -820,6 +828,7 @@ void AnimationPlayerEditor::_update_player() { save_anim->set_disabled(animlist.size() == 0); tool_anim->set_disabled(player == NULL); onion_skinning->set_disabled(player == NULL); + pin->set_disabled(player == NULL); int active_idx = -1; for (List<StringName>::Element *E = animlist.front(); E; E = E->next()) { @@ -1011,6 +1020,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set) { player->seek_delta(pos, pos - cpos); } else { + player->stop(true); player->seek(pos, true); } @@ -1087,7 +1097,7 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { case TOOL_COPY_ANIM: { if (!animation->get_item_count()) { - error_dialog->set_text(TTR("ERROR: No animation to copy!")); + error_dialog->set_text(TTR("No animation to copy!")); error_dialog->popup_centered_minsize(); return; } @@ -1102,7 +1112,7 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { Ref<Animation> anim = EditorSettings::get_singleton()->get_resource_clipboard(); if (!anim.is_valid()) { - error_dialog->set_text(TTR("ERROR: No animation resource on clipboard!")); + error_dialog->set_text(TTR("No animation resource on clipboard!")); error_dialog->popup_centered_minsize(); return; } @@ -1133,7 +1143,7 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { case TOOL_EDIT_RESOURCE: { if (!animation->get_item_count()) { - error_dialog->set_text(TTR("ERROR: No animation to edit!")); + error_dialog->set_text(TTR("No animation to edit!")); error_dialog->popup_centered_minsize(); return; } @@ -1610,7 +1620,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay hb->add_child(load_anim); save_anim = memnew(MenuButton); - save_anim->set_tooltip(TTR("Save the current animation")); + save_anim->set_tooltip(TTR("Save the current animation.")); save_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/save", TTR("Save")), ANIM_SAVE); save_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/save_as", TTR("Save As")), ANIM_SAVE_AS); save_anim->set_focus_mode(Control::FOCUS_NONE); @@ -1678,10 +1688,10 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay onion_skinning->get_popup()->add_separator(); onion_skinning->get_popup()->add_item(TTR("Depth"), -1); onion_skinning->get_popup()->set_item_disabled(onion_skinning->get_popup()->get_item_count() - 1, true); - onion_skinning->get_popup()->add_check_item(TTR("1 step"), ONION_SKINNING_1_STEP); + onion_skinning->get_popup()->add_radio_check_item(TTR("1 step"), ONION_SKINNING_1_STEP); onion_skinning->get_popup()->set_item_checked(onion_skinning->get_popup()->get_item_count() - 1, true); - onion_skinning->get_popup()->add_check_item(TTR("2 steps"), ONION_SKINNING_2_STEPS); - onion_skinning->get_popup()->add_check_item(TTR("3 steps"), ONION_SKINNING_3_STEPS); + onion_skinning->get_popup()->add_radio_check_item(TTR("2 steps"), ONION_SKINNING_2_STEPS); + onion_skinning->get_popup()->add_radio_check_item(TTR("3 steps"), ONION_SKINNING_3_STEPS); onion_skinning->get_popup()->add_separator(); onion_skinning->get_popup()->add_check_item(TTR("Differences Only"), ONION_SKINNING_DIFFERENCES_ONLY); onion_skinning->get_popup()->add_check_item(TTR("Force White Modulate"), ONION_SKINNING_FORCE_WHITE_MODULATE); @@ -1690,6 +1700,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay pin = memnew(ToolButton); pin->set_toggle_mode(true); + pin->set_tooltip(TTR("Pin AnimationPlayer")); hb->add_child(pin); resource_edit_anim = memnew(Button); @@ -1717,7 +1728,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay error_dialog = memnew(ConfirmationDialog); error_dialog->get_ok()->set_text(TTR("Close")); - error_dialog->set_text(TTR("Error!")); + error_dialog->set_title(TTR("Error!")); add_child(error_dialog); name_dialog->connect("confirmed", this, "_animation_name_edited"); diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp index f0e186e4b0..25582ae0b9 100644 --- a/editor/plugins/animation_tree_editor_plugin.cpp +++ b/editor/plugins/animation_tree_editor_plugin.cpp @@ -578,7 +578,7 @@ void AnimationTreeEditor::_draw_node(const StringName &p_node) { if (anim_tree->animation_node_get_master_animation(p_node) != "") text = anim_tree->animation_node_get_master_animation(p_node); else if (anim.is_null()) - text = "load.."; + text = "load..."; else text = anim->get_name(); @@ -593,7 +593,7 @@ void AnimationTreeEditor::_draw_node(const StringName &p_node) { case AnimationTreePlayer::NODE_TIMESCALE: case AnimationTreePlayer::NODE_TRANSITION: { - font->draw_halign(ci, ofs + ascofs, HALIGN_CENTER, w, "edit..", font_color_title); + font->draw_halign(ci, ofs + ascofs, HALIGN_CENTER, w, "edit...", font_color_title); } break; default: editable = false; } @@ -756,6 +756,7 @@ void AnimationTreeEditor::_gui_input(Ref<InputEvent> p_event) { if (rclick_type == CLICK_INPUT_SLOT || rclick_type == CLICK_OUTPUT_SLOT) { node_popup->clear(); + node_popup->set_size(Size2(1, 1)); node_popup->add_item(TTR("Disconnect"), NODE_DISCONNECT); if (anim_tree->node_get_type(rclick_node) == AnimationTreePlayer::NODE_TRANSITION) { node_popup->add_item(TTR("Add Input"), NODE_ADD_INPUT); @@ -774,6 +775,7 @@ void AnimationTreeEditor::_gui_input(Ref<InputEvent> p_event) { if (rclick_type == CLICK_NODE) { node_popup->clear(); + node_popup->set_size(Size2(1, 1)); node_popup->add_item(TTR("Rename"), NODE_RENAME); node_popup->add_item(TTR("Remove"), NODE_ERASE); if (anim_tree->node_get_type(rclick_node) == AnimationTreePlayer::NODE_TRANSITION) @@ -1288,7 +1290,7 @@ AnimationTreeEditor::AnimationTreeEditor() { p->add_item(TTR("TimeSeek Node"), AnimationTreePlayer::NODE_TIMESEEK); p->add_item(TTR("Transition Node"), AnimationTreePlayer::NODE_TRANSITION); p->add_separator(); - p->add_item(TTR("Import Animations.."), MENU_IMPORT_ANIMATIONS); // wtf + p->add_item(TTR("Import Animations..."), MENU_IMPORT_ANIMATIONS); // wtf p->add_separator(); p->add_item(TTR("Clear"), MENU_GRAPH_CLEAR); @@ -1397,7 +1399,7 @@ AnimationTreeEditor::AnimationTreeEditor() { filter_button->set_margin(MARGIN_RIGHT, -10); edit_dialog->add_child(filter_button); filter_button->hide(); - filter_button->set_text(TTR("Filters..")); + filter_button->set_text(TTR("Filters...")); filter_button->connect("pressed", this, "_edit_filters"); set_clip_contents(true); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 915132c75c..05833704d1 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -30,11 +30,10 @@ #include "asset_library_editor_plugin.h" +#include "core/io/json.h" +#include "core/version.h" #include "editor_node.h" #include "editor_settings.h" -#include "io/json.h" - -#include "version_generated.gen.h" void EditorAssetLibraryItem::configure(const String &p_title, int p_asset_id, const String &p_category, int p_category_id, const String &p_author, int p_author_id, int p_rating, const String &p_cost) { @@ -308,7 +307,7 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { preview_hb->set_v_size_flags(SIZE_EXPAND_FILL); previews->add_child(preview_hb); - get_ok()->set_text(TTR("Install")); + get_ok()->set_text(TTR("Download")); get_cancel()->set_text(TTR("Close")); } /////////////////////////////////////////////////////////////////////////////////// @@ -316,7 +315,6 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data) { String error_text; - print_line("COMPLETED: " + itos(p_status) + " code: " + itos(p_code) + " data size: " + itos(p_data.size())); switch (p_status) { @@ -371,7 +369,6 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int progress->set_max(download->get_body_size()); progress->set_value(download->get_downloaded_bytes()); - print_line("max: " + itos(download->get_body_size()) + " bytes: " + itos(download->get_downloaded_bytes())); install->set_disabled(false); progress->set_value(download->get_downloaded_bytes()); @@ -410,13 +407,13 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) { switch (cstatus) { case HTTPClient::STATUS_RESOLVING: { - status->set_text(TTR("Resolving..")); + status->set_text(TTR("Resolving...")); } break; case HTTPClient::STATUS_CONNECTING: { - status->set_text(TTR("Connecting..")); + status->set_text(TTR("Connecting...")); } break; case HTTPClient::STATUS_REQUESTING: { - status->set_text(TTR("Requesting..")); + status->set_text(TTR("Requesting...")); } break; default: {} } @@ -517,6 +514,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { download = memnew(HTTPRequest); add_child(download); download->connect("request_completed", this, "_http_download_completed"); + download->set_use_threads(EDITOR_DEF("asset_library/use_threads", true)); download_error = memnew(AcceptDialog); add_child(download_error); @@ -536,11 +534,9 @@ void EditorAssetLibrary::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - TextureRect *tf = memnew(TextureRect); - tf->set_texture(get_icon("Error", "EditorIcons")); + error_tr->set_texture(get_icon("Error", "EditorIcons")); reverse->set_icon(get_icon("Sort", "EditorIcons")); - error_hb->add_child(tf); error_label->raise(); } break; @@ -588,6 +584,8 @@ void EditorAssetLibrary::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { library_scroll_bg->add_style_override("panel", get_stylebox("bg", "Tree")); + error_tr->set_texture(get_icon("Error", "EditorIcons")); + reverse->set_icon(get_icon("Sort", "EditorIcons")); } break; } } @@ -641,7 +639,7 @@ const char *EditorAssetLibrary::support_key[SUPPORT_MAX] = { void EditorAssetLibrary::_select_author(int p_id) { - //opemn author window + // Open author window } void EditorAssetLibrary::_select_category(int p_id) { @@ -661,16 +659,6 @@ void EditorAssetLibrary::_select_category(int p_id) { void EditorAssetLibrary::_select_asset(int p_id) { _api_request("asset/" + itos(p_id), REQUESTING_ASSET); - - /* - if (description) { - memdelete(description); - } - - - description = memnew( EditorAssetLibraryItemDescription ); - add_child(description); - description->popup_centered_minsize();*/ } void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByteArray &p_data, int p_queue_id) { @@ -747,8 +735,6 @@ void EditorAssetLibrary::_image_request_completed(int p_status, int p_code, cons if (p_status == HTTPRequest::RESULT_SUCCESS) { - print_line("GOT IMAGE YAY!"); - if (p_code != HTTPClient::RESPONSE_NOT_MODIFIED) { for (int i = 0; i < headers.size(); i++) { if (headers[i].findn("ETag:") == 0) { // Save etag @@ -778,7 +764,7 @@ void EditorAssetLibrary::_image_request_completed(int p_status, int p_code, cons _image_update(p_code == HTTPClient::RESPONSE_NOT_MODIFIED, true, p_data, p_queue_id); } else { - WARN_PRINTS("Error getting PNG file for asset id " + itos(image_queue[p_queue_id].asset_id)); + WARN_PRINTS("Error getting PNG file from URL: " + image_queue[p_queue_id].image_url); Object *obj = ObjectDB::get_instance(image_queue[p_queue_id].target); if (obj) { obj->call("set_image", image_queue[p_queue_id].image_type, image_queue[p_queue_id].image_index, get_icon("ErrorSign", "EditorIcons")); @@ -811,7 +797,6 @@ void EditorAssetLibrary::_update_image_queue() { } } - print_line("REQUEST ICON FOR: " + itos(E->get().asset_id)); Error err = E->get().request->request(E->get().image_url, headers); if (err != OK) { to_delete.push_back(E->key()); @@ -838,6 +823,7 @@ void EditorAssetLibrary::_request_image(ObjectID p_for, String p_image_url, Imag iq.image_index = p_image_index; iq.image_type = p_type; iq.request = memnew(HTTPRequest); + iq.request->set_use_threads(EDITOR_DEF("asset_library/use_threads", true)); iq.target = p_for; iq.queue_id = ++last_queue_id; @@ -855,7 +841,6 @@ void EditorAssetLibrary::_request_image(ObjectID p_for, String p_image_url, Imag void EditorAssetLibrary::_repository_changed(int p_repository_id) { host = repository->get_item_metadata(p_repository_id); - print_line(".." + host); if (templates_only) { _api_request("configure", REQUESTING_CONFIG, "?type=project"); } else { @@ -883,7 +868,8 @@ void EditorAssetLibrary::_search(int p_page) { } args += String() + "sort=" + sort_key[sort->get_selected()]; - args += "&godot_version=" + itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR); + // We use the "branch" version, i.e. major.minor, as patch releases should be compatible + args += "&godot_version=" + String(VERSION_BRANCH); String support_list; for (int i = 0; i < SUPPORT_MAX; i++) { @@ -1066,8 +1052,6 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const return; } - print_line("response: " + itos(p_status) + " code: " + itos(p_code)); - Dictionary d; { Variant js; @@ -1077,8 +1061,6 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const d = js; } - print_line(Variant(d).get_construct_string()); - RequestType requested = requesting; requesting = REQUESTING_NONE; @@ -1390,7 +1372,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { support = memnew(MenuButton); search_hb2->add_child(support); - support->set_text(TTR("Support..")); + support->set_text(TTR("Support...")); support->get_popup()->add_check_item(TTR("Official"), SUPPORT_OFFICIAL); support->get_popup()->add_check_item(TTR("Community"), SUPPORT_COMMUNITY); support->get_popup()->add_check_item(TTR("Testing"), SUPPORT_TESTING); @@ -1462,6 +1444,8 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { error_label = memnew(Label); error_label->add_color_override("color", get_color("error_color", "Editor")); error_hb->add_child(error_label); + error_tr = memnew(TextureRect); + error_hb->add_child(error_tr); description = NULL; diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index b344716c1d..69a65dd3dc 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -194,6 +194,7 @@ class EditorAssetLibrary : public PanelContainer { Button *search; ProgressBar *load_status; HBoxContainer *error_hb; + TextureRect *error_tr; Label *error_label; MenuButton *support; @@ -240,7 +241,6 @@ class EditorAssetLibrary : public PanelContainer { bool active; int queue_id; - int asset_id; ImageType image_type; int image_index; String image_url; diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 7d6025cb03..93aeca6632 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -44,6 +44,7 @@ #include "scene/2d/particles_2d.h" #include "scene/2d/polygon_2d.h" #include "scene/2d/screen_button.h" +#include "scene/2d/skeleton_2d.h" #include "scene/2d/sprite.h" #include "scene/gui/grid_container.h" #include "scene/gui/nine_patch_rect.h" @@ -169,64 +170,10 @@ public: } }; -void CanvasItemEditor::_edit_set_pivot(const Vector2 &mouse_pos) { - List<Node *> &selection = editor_selection->get_selected_node_list(); - - undo_redo->create_action(TTR("Move Pivot")); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - Node2D *n2d = Object::cast_to<Node2D>(E->get()); - if (n2d && n2d->_edit_use_pivot()) { - - Vector2 offset = n2d->_edit_get_pivot(); - Vector2 gpos = n2d->get_global_position(); - - Vector2 local_mouse_pos = n2d->get_canvas_transform().affine_inverse().xform(mouse_pos); - - Vector2 motion_ofs = gpos - local_mouse_pos; - - undo_redo->add_do_method(n2d, "set_global_position", local_mouse_pos); - undo_redo->add_do_method(n2d, "_edit_set_pivot", offset + n2d->get_global_transform().affine_inverse().basis_xform(motion_ofs)); - undo_redo->add_undo_method(n2d, "set_global_position", gpos); - undo_redo->add_undo_method(n2d, "_edit_set_pivot", offset); - for (int i = 0; i < n2d->get_child_count(); i++) { - Node2D *n2dc = Object::cast_to<Node2D>(n2d->get_child(i)); - if (!n2dc) - continue; - - undo_redo->add_do_method(n2dc, "set_global_position", n2dc->get_global_position()); - undo_redo->add_undo_method(n2dc, "set_global_position", n2dc->get_global_position()); - } - } - - Control *cnt = Object::cast_to<Control>(E->get()); - if (cnt) { - - Vector2 old_pivot = cnt->get_pivot_offset(); - Vector2 new_pivot = cnt->get_global_transform_with_canvas().affine_inverse().xform(mouse_pos); - Vector2 old_pos = cnt->get_position(); - - Vector2 top_pos = cnt->get_transform().get_origin(); //remember where top pos was - cnt->set_pivot_offset(new_pivot); - Vector2 new_top_pos = cnt->get_transform().get_origin(); //check where it is now - - Vector2 new_pos = old_pos - (new_top_pos - top_pos); //offset it back - - undo_redo->add_do_method(cnt, "set_pivot_offset", new_pivot); - undo_redo->add_do_method(cnt, "set_position", new_pos); - undo_redo->add_undo_method(cnt, "set_pivot_offset", old_pivot); - undo_redo->add_undo_method(cnt, "set_position", old_pos); - } - } - - undo_redo->commit_action(); -} - void CanvasItemEditor::_snap_if_closer_float(float p_value, float p_target_snap, float &r_current_snap, bool &r_snapped, float p_radius) { float radius = p_radius / zoom; float dist = Math::abs(p_value - p_target_snap); - if (p_radius < 0 || dist < radius && (!r_snapped || dist < Math::abs(r_current_snap - p_value))) { + if ((p_radius < 0 || dist < radius) && (!r_snapped || dist < Math::abs(r_current_snap - p_value))) { r_current_snap = p_target_snap; r_snapped = true; } @@ -250,11 +197,15 @@ void CanvasItemEditor::_snap_other_nodes(Point2 p_value, Point2 &r_current_snap, Transform2D ci_transform = canvas_item->get_global_transform_with_canvas(); Transform2D to_snap_transform = p_to_snap ? p_to_snap->get_global_transform_with_canvas() : Transform2D(); if (fmod(ci_transform.get_rotation() - to_snap_transform.get_rotation(), (real_t)360.0) == 0.0) { - Point2 begin = ci_transform.xform(canvas_item->_edit_get_rect().get_position()); - Point2 end = ci_transform.xform(canvas_item->_edit_get_rect().get_position() + canvas_item->_edit_get_rect().get_size()); - - _snap_if_closer_point(p_value, begin, r_current_snap, r_snapped, ci_transform.get_rotation()); - _snap_if_closer_point(p_value, end, r_current_snap, r_snapped, ci_transform.get_rotation()); + if (canvas_item->_edit_use_rect()) { + Point2 begin = ci_transform.xform(canvas_item->_edit_get_rect().get_position()); + Point2 end = ci_transform.xform(canvas_item->_edit_get_rect().get_position() + canvas_item->_edit_get_rect().get_size()); + _snap_if_closer_point(p_value, begin, r_current_snap, r_snapped, ci_transform.get_rotation()); + _snap_if_closer_point(p_value, end, r_current_snap, r_snapped, ci_transform.get_rotation()); + } else { + Point2 position = ci_transform.xform(Point2()); + _snap_if_closer_point(p_value, position, r_current_snap, r_snapped, ci_transform.get_rotation()); + } } } for (int i = 0; i < p_current->get_child_count(); i++) { @@ -263,63 +214,76 @@ void CanvasItemEditor::_snap_other_nodes(Point2 p_value, Point2 &r_current_snap, } Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, const CanvasItem *p_canvas_item, unsigned int p_forced_modes) { - Point2 dist[2]; bool snapped[2] = { false, false }; + bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); // Smart snap using the canvas position Vector2 output = p_target; real_t rotation = 0.0; if (p_canvas_item) { - Point2 begin; - Point2 end; rotation = p_canvas_item->get_global_transform_with_canvas().get_rotation(); - if ((snap_active && snap_node_parent && (p_modes & SNAP_NODE_PARENT)) || (p_forced_modes & SNAP_NODE_PARENT)) { - // Parent sides and center - bool can_snap = false; + // Parent sides and center + if ((is_snap_active && snap_node_parent && (p_modes & SNAP_NODE_PARENT)) || (p_forced_modes & SNAP_NODE_PARENT)) { if (const Control *c = Object::cast_to<Control>(p_canvas_item)) { - begin = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(0, 0))); - end = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(1, 1))); - can_snap = true; + Point2 begin = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(0, 0))); + Point2 end = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(1, 1))); + _snap_if_closer_point(p_target, begin, output, snapped, rotation); + _snap_if_closer_point(p_target, (begin + end) / 2.0, output, snapped, rotation); + _snap_if_closer_point(p_target, end, output, snapped, rotation); } else if (const CanvasItem *parent_ci = Object::cast_to<CanvasItem>(p_canvas_item->get_parent())) { - begin = p_canvas_item->get_transform().affine_inverse().xform(parent_ci->_edit_get_rect().get_position()); - end = p_canvas_item->get_transform().affine_inverse().xform(parent_ci->_edit_get_rect().get_position() + parent_ci->_edit_get_rect().get_size()); - can_snap = true; + if (parent_ci->_edit_use_rect()) { + Point2 begin = p_canvas_item->get_transform().affine_inverse().xform(parent_ci->_edit_get_rect().get_position()); + Point2 end = p_canvas_item->get_transform().affine_inverse().xform(parent_ci->_edit_get_rect().get_position() + parent_ci->_edit_get_rect().get_size()); + _snap_if_closer_point(p_target, begin, output, snapped, rotation); + _snap_if_closer_point(p_target, (begin + end) / 2.0, output, snapped, rotation); + _snap_if_closer_point(p_target, end, output, snapped, rotation); + } else { + Point2 position = p_canvas_item->get_transform().affine_inverse().xform(Point2()); + _snap_if_closer_point(p_target, position, output, snapped, rotation); + } } + } - if (can_snap) { + // 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_canvas_item)) { + Point2 begin = p_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_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(MARGIN_RIGHT), c->get_anchor(MARGIN_BOTTOM)))); _snap_if_closer_point(p_target, begin, output, snapped, rotation); - _snap_if_closer_point(p_target, (begin + end) / 2.0, output, snapped, rotation); _snap_if_closer_point(p_target, end, output, snapped, rotation); } } - // Self anchors (for sides) - if ((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_canvas_item)) { - begin = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(MARGIN_LEFT), c->get_anchor(MARGIN_TOP)))); - end = p_canvas_item->get_global_transform_with_canvas().xform(_anchor_to_position(c, Point2(c->get_anchor(MARGIN_RIGHT), c->get_anchor(MARGIN_BOTTOM)))); + // Self sides + if ((is_snap_active && snap_node_sides && (p_modes & SNAP_NODE_SIDES)) || (p_forced_modes & SNAP_NODE_SIDES)) { + if (p_canvas_item->_edit_use_rect()) { + Point2 begin = p_canvas_item->get_global_transform_with_canvas().xform(p_canvas_item->_edit_get_rect().get_position()); + Point2 end = p_canvas_item->get_global_transform_with_canvas().xform(p_canvas_item->_edit_get_rect().get_position() + p_canvas_item->_edit_get_rect().get_size()); _snap_if_closer_point(p_target, begin, output, snapped, rotation); _snap_if_closer_point(p_target, end, output, snapped, rotation); } } - // Self sides (for anchors) - if ((snap_active && snap_node_sides && (p_modes & SNAP_NODE_SIDES)) || (p_forced_modes & SNAP_NODE_SIDES)) { - begin = p_canvas_item->get_global_transform_with_canvas().xform(p_canvas_item->_edit_get_rect().get_position()); - end = p_canvas_item->get_global_transform_with_canvas().xform(p_canvas_item->_edit_get_rect().get_position() + p_canvas_item->_edit_get_rect().get_size()); - _snap_if_closer_point(p_target, begin, output, snapped, rotation); - _snap_if_closer_point(p_target, end, output, snapped, rotation); + // Self center + if ((is_snap_active && snap_node_center && (p_modes & SNAP_NODE_CENTER)) || (p_forced_modes & SNAP_NODE_CENTER)) { + if (p_canvas_item->_edit_use_rect()) { + Point2 center = p_canvas_item->get_global_transform_with_canvas().xform(p_canvas_item->_edit_get_rect().get_position() + p_canvas_item->_edit_get_rect().get_size() / 2.0); + _snap_if_closer_point(p_target, center, output, snapped, rotation); + } else { + Point2 position = p_canvas_item->get_global_transform_with_canvas().xform(Point2()); + _snap_if_closer_point(p_target, position, output, snapped, rotation); + } } } // Other nodes sides - if ((snap_active && snap_other_nodes && (p_modes & SNAP_OTHER_NODES)) || (p_forced_modes & SNAP_OTHER_NODES)) { + if ((is_snap_active && snap_other_nodes && (p_modes & SNAP_OTHER_NODES)) || (p_forced_modes & SNAP_OTHER_NODES)) { _snap_other_nodes(p_target, output, snapped, get_tree()->get_edited_scene_root(), p_canvas_item); } - if (((snap_active && snap_guides && (p_modes & SNAP_GUIDES)) || (p_forced_modes & SNAP_GUIDES)) && fmod(rotation, (real_t)360.0) == 0.0) { + if (((is_snap_active && snap_guides && (p_modes & SNAP_GUIDES)) || (p_forced_modes & SNAP_GUIDES)) && fmod(rotation, (real_t)360.0) == 0.0) { // Guides if (EditorNode::get_singleton()->get_edited_scene() && EditorNode::get_singleton()->get_edited_scene()->has_meta("_edit_vertical_guides_")) { Array vguides = EditorNode::get_singleton()->get_edited_scene()->get_meta("_edit_vertical_guides_"); @@ -336,15 +300,15 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, const } } - if (((snap_active && snap_grid && (p_modes & SNAP_GRID)) || (p_forced_modes & SNAP_GRID)) && fmod(rotation, (real_t)360.0) == 0.0) { + if (((is_snap_active && snap_grid && (p_modes & SNAP_GRID)) || (p_forced_modes & SNAP_GRID)) && fmod(rotation, (real_t)360.0) == 0.0) { // Grid Point2 offset = grid_offset; if (snap_relative) { - List<Node *> selection = editor_selection->get_selected_node_list(); + List<CanvasItem *> selection = _get_edited_canvas_items(); if (selection.size() == 1 && Object::cast_to<Node2D>(selection[0])) { offset = Object::cast_to<Node2D>(selection[0])->get_global_position(); - } else { - offset = _find_topleftmost_point(); + } else if (selection.size() > 0) { + offset = _get_encompassing_rect_from_list(selection).position; } } Point2 grid_output; @@ -362,8 +326,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, const } float CanvasItemEditor::snap_angle(float p_target, float p_start) const { - float offset = snap_relative ? p_start : p_target; - return (snap_rotation && snap_rotation_step != 0) ? Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset : p_target; + return (((snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL)) && snap_rotation_step != 0) ? Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset : p_target; } void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { @@ -377,48 +340,20 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { return; if (k->is_pressed() && !k->is_echo()) { - if (drag_pivot_shortcut.is_valid() && drag_pivot_shortcut->is_shortcut(p_ev) && drag == DRAG_NONE && can_move_pivot) { - //move drag pivot - drag = DRAG_PIVOT; - } else if (set_pivot_shortcut.is_valid() && set_pivot_shortcut->is_shortcut(p_ev) && drag == DRAG_NONE && can_move_pivot) { - if (!Input::get_singleton()->is_mouse_button_pressed(0)) { - List<Node *> selection = editor_selection->get_selected_node_list(); - Vector2 mouse_pos = viewport->get_local_mouse_position(); - if (selection.size() && viewport->get_rect().has_point(mouse_pos)) { - //just in case, make it work if over viewport - mouse_pos = transform.affine_inverse().xform(mouse_pos); - mouse_pos = snap_point(mouse_pos, SNAP_DEFAULT, _get_single_item()); - - _edit_set_pivot(mouse_pos); - } - } - } else if ((snap_grid || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { + if ((snap_grid || 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_base->update(); viewport->update(); } else if ((snap_grid || 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_base->update(); viewport->update(); } } } -void CanvasItemEditor::_tool_select(int p_index) { - - ToolButton *tb[TOOL_MAX] = { select_button, list_select_button, move_button, rotate_button, pivot_button, pan_button }; - for (int i = 0; i < TOOL_MAX; i++) { - tb[i]->set_pressed(i == p_index); - } - - viewport->update(); - tool = (Tool)p_index; -} - Object *CanvasItemEditor::_get_editor_data(Object *p_what) { CanvasItem *ci = Object::cast_to<CanvasItem>(p_what); @@ -428,220 +363,129 @@ Object *CanvasItemEditor::_get_editor_data(Object *p_what) { return memnew(CanvasItemEditorSelectedItem); } -Dictionary CanvasItemEditor::get_state() const { +void CanvasItemEditor::_keying_changed() { - Dictionary state; - state["zoom"] = zoom; - state["ofs"] = Point2(h_scroll->get_value(), v_scroll->get_value()); - //state["ofs"]=-transform.get_origin(); - state["grid_offset"] = grid_offset; - state["grid_step"] = grid_step; - state["snap_rotation_offset"] = snap_rotation_offset; - state["snap_rotation_step"] = snap_rotation_step; - state["snap_active"] = snap_active; - state["snap_node_parent"] = snap_node_parent; - state["snap_node_anchors"] = snap_node_anchors; - state["snap_node_sides"] = snap_node_sides; - state["snap_other_nodes"] = snap_other_nodes; - state["snap_grid"] = snap_grid; - state["snap_guides"] = snap_guides; - state["show_grid"] = show_grid; - state["show_rulers"] = show_rulers; - state["show_guides"] = show_guides; - state["show_helpers"] = show_helpers; - state["snap_rotation"] = snap_rotation; - state["snap_relative"] = snap_relative; - state["snap_pixel"] = snap_pixel; - state["skeleton_show_bones"] = skeleton_show_bones; - return state; + if (AnimationPlayerEditor::singleton->get_key_editor()->is_visible_in_tree()) + animation_hb->show(); + else + animation_hb->hide(); } -void CanvasItemEditor::set_state(const Dictionary &p_state) { - - Dictionary state = p_state; - if (state.has("zoom")) { - zoom = p_state["zoom"]; - } - - if (state.has("ofs")) { - _update_scrollbars(); // i wonder how safe is calling this here.. - Point2 ofs = p_state["ofs"]; - h_scroll->set_value(ofs.x); - v_scroll->set_value(ofs.y); - } - if (state.has("grid_offset")) { - grid_offset = state["grid_offset"]; - } - - if (state.has("grid_step")) { - grid_step = state["grid_step"]; - } - - if (state.has("snap_rotation_step")) { - snap_rotation_step = state["snap_rotation_step"]; - } - - if (state.has("snap_rotation_offset")) { - snap_rotation_offset = state["snap_rotation_offset"]; - } - - if (state.has("snap_active")) { - snap_active = state["snap_active"]; - snap_button->set_pressed(snap_active); - } - - if (state.has("snap_node_parent")) { - snap_node_parent = state["snap_node_parent"]; - int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_PARENT); - smartsnap_config_popup->set_item_checked(idx, snap_node_parent); - } - - if (state.has("snap_node_anchors")) { - snap_node_anchors = state["snap_node_anchors"]; - int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_ANCHORS); - smartsnap_config_popup->set_item_checked(idx, snap_node_anchors); - } - - if (state.has("snap_node_sides")) { - snap_node_sides = state["snap_node_sides"]; - int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_SIDES); - smartsnap_config_popup->set_item_checked(idx, snap_node_sides); - } - - if (state.has("snap_other_nodes")) { - snap_other_nodes = state["snap_other_nodes"]; - int idx = smartsnap_config_popup->get_item_index(SNAP_USE_OTHER_NODES); - smartsnap_config_popup->set_item_checked(idx, snap_other_nodes); - } +Rect2 CanvasItemEditor::_get_encompassing_rect_from_list(List<CanvasItem *> p_list) { + ERR_FAIL_COND_V(p_list.empty(), Rect2()); - if (state.has("snap_guides")) { - snap_guides = state["snap_guides"]; - int idx = smartsnap_config_popup->get_item_index(SNAP_USE_GUIDES); - smartsnap_config_popup->set_item_checked(idx, snap_guides); + // Handles the first element + CanvasItem *canvas_item = p_list.front()->get(); + Rect2 rect; + if (canvas_item->_edit_use_rect()) { + rect = Rect2(canvas_item->get_global_transform_with_canvas().xform(canvas_item->_edit_get_rect().position + canvas_item->_edit_get_rect().size / 2), Size2()); + } else { + rect = Rect2(canvas_item->get_global_transform_with_canvas().xform(Point2()), Size2()); } - if (state.has("snap_grid")) { - snap_grid = state["snap_grid"]; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_GRID); - snap_config_menu->get_popup()->set_item_checked(idx, snap_grid); - } + // Expand with the other ones + for (List<CanvasItem *>::Element *E = p_list.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + Transform2D xform = canvas_item->get_global_transform_with_canvas(); + if (canvas_item->_edit_use_rect()) { + Rect2 current_rect = canvas_item->_edit_get_rect(); - if (state.has("show_grid")) { - show_grid = state["show_grid"]; - int idx = view_menu->get_popup()->get_item_index(SHOW_GRID); - view_menu->get_popup()->set_item_checked(idx, show_grid); + rect.expand_to(xform.xform(current_rect.position)); + rect.expand_to(xform.xform(current_rect.position + Vector2(current_rect.size.x, 0))); + rect.expand_to(xform.xform(current_rect.position + current_rect.size)); + rect.expand_to(xform.xform(current_rect.position + Vector2(0, current_rect.size.y))); + } else { + rect.expand_to(xform.xform(Point2())); + } } - if (state.has("show_rulers")) { - show_rulers = state["show_rulers"]; - int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS); - view_menu->get_popup()->set_item_checked(idx, show_rulers); - } + return rect; +} - if (state.has("show_guides")) { - show_guides = state["show_guides"]; - int idx = view_menu->get_popup()->get_item_index(SHOW_GUIDES); - view_menu->get_popup()->set_item_checked(idx, show_guides); - } +void CanvasItemEditor::_expand_encompassing_rect_using_children(Rect2 &r_rect, const Node *p_node, bool &r_first, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { + if (!p_node) + return; + if (Object::cast_to<Viewport>(p_node)) + return; - if (state.has("show_helpers")) { - show_helpers = state["show_helpers"]; - int idx = view_menu->get_popup()->get_item_index(SHOW_HELPERS); - view_menu->get_popup()->set_item_checked(idx, show_helpers); - } + const CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); - if (state.has("snap_rotation")) { - snap_rotation = state["snap_rotation"]; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_ROTATION); - snap_config_menu->get_popup()->set_item_checked(idx, snap_rotation); - } + /*bool inherited = p_node != get_tree()->get_edited_scene_root() && p_node->get_filename() != ""; + bool editable = !inherited || EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(p_node); + bool lock_children = p_node->has_meta("_edit_group_") && p_node->get_meta("_edit_group_"); - if (state.has("snap_relative")) { - snap_relative = state["snap_relative"]; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_RELATIVE); - snap_config_menu->get_popup()->set_item_checked(idx, snap_relative); - } + if (!lock_children && editable) {}*/ - if (state.has("snap_pixel")) { - snap_pixel = state["snap_pixel"]; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_PIXEL); - snap_config_menu->get_popup()->set_item_checked(idx, snap_pixel); + for (int i = p_node->get_child_count() - 1; i >= 0; i--) { + if (canvas_item && !canvas_item->is_set_as_toplevel()) { + _expand_encompassing_rect_using_children(r_rect, p_node->get_child(i), r_first, p_parent_xform * canvas_item->get_transform(), p_canvas_xform); + } else { + const CanvasLayer *canvas_layer = Object::cast_to<CanvasLayer>(p_node); + _expand_encompassing_rect_using_children(r_rect, p_node->get_child(i), r_first, Transform2D(), canvas_layer ? canvas_layer->get_transform() : p_canvas_xform); + } } - if (state.has("skeleton_show_bones")) { - skeleton_show_bones = state["skeleton_show_bones"]; - int idx = skeleton_menu->get_popup()->get_item_index(SKELETON_SHOW_BONES); - skeleton_menu->get_popup()->set_item_checked(idx, skeleton_show_bones); + if (canvas_item && canvas_item->is_visible_in_tree() && !canvas_item->has_meta("_edit_lock_")) { + Transform2D xform = p_parent_xform * p_canvas_xform * canvas_item->get_transform(); + if (canvas_item->_edit_use_rect()) { + Rect2 rect = canvas_item->_edit_get_rect(); + if (r_first) { + r_rect = Rect2(xform.xform(rect.position + rect.size / 2), Size2()); + r_first = false; + } + if (r_rect.size != Size2()) { + r_rect.expand_to(xform.xform(rect.position)); + r_rect.expand_to(xform.xform(rect.position + Point2(rect.size.x, 0))); + r_rect.expand_to(xform.xform(rect.position + Point2(0, rect.size.y))); + r_rect.expand_to(xform.xform(rect.position + rect.size)); + } + } else { + if (r_first) { + r_rect = Rect2(xform.xform(Point2()), Size2()); + r_first = false; + } else { + r_rect.expand_to(xform.xform(Point2())); + } + } } - - viewport->update(); -} - -void CanvasItemEditor::_add_canvas_item(CanvasItem *p_canvas_item) { - - editor_selection->add_node(p_canvas_item); -} - -void CanvasItemEditor::_remove_canvas_item(CanvasItem *p_canvas_item) { - - editor_selection->remove_node(p_canvas_item); -} -void CanvasItemEditor::_clear_canvas_items() { - - editor_selection->clear(); } -void CanvasItemEditor::_keying_changed() { - - if (AnimationPlayerEditor::singleton->get_key_editor()->is_visible_in_tree()) - animation_hb->show(); - else - animation_hb->hide(); -} - -bool CanvasItemEditor::_is_part_of_subscene(CanvasItem *p_item) { - - Node *scene_node = get_tree()->get_edited_scene_root(); - Node *item_owner = p_item->get_owner(); +Rect2 CanvasItemEditor::_get_encompassing_rect(const Node *p_node) { + Rect2 rect; + bool first = true; + _expand_encompassing_rect_using_children(rect, p_node, first); - return item_owner && item_owner != scene_node && p_item != scene_node && item_owner->get_filename() != ""; + return rect; } -void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform, Vector<_SelectResult> &r_items, int limit) { +void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, int p_limit, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { if (!p_node) return; if (Object::cast_to<Viewport>(p_node)) return; const real_t grab_distance = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - CanvasItem *c = Object::cast_to<CanvasItem>(p_node); + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); for (int i = p_node->get_child_count() - 1; i >= 0; i--) { - - if (c && !c->is_set_as_toplevel()) - _find_canvas_items_at_pos(p_pos, p_node->get_child(i), p_parent_xform * c->get_transform(), p_canvas_xform, r_items); - else { + if (canvas_item && !canvas_item->is_set_as_toplevel()) { + _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_limit, p_parent_xform * canvas_item->get_transform(), p_canvas_xform); + } else { CanvasLayer *cl = Object::cast_to<CanvasLayer>(p_node); - _find_canvas_items_at_pos(p_pos, p_node->get_child(i), transform, cl ? cl->get_transform() : p_canvas_xform, r_items); //use base transform + _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_limit, Transform2D(), cl ? cl->get_transform() : p_canvas_xform); } - - if (limit != 0 && r_items.size() >= limit) + if (p_limit != 0 && r_items.size() >= p_limit) return; } - if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !Object::cast_to<CanvasLayer>(c)) { - - Rect2 rect = c->_edit_get_rect(); - Transform2D to_local = (p_parent_xform * p_canvas_xform * c->get_transform()).affine_inverse(); - Point2 local_pos = to_local.xform(p_pos); - const real_t local_grab_distance = (to_local.xform(p_pos + Vector2(grab_distance, 0)) - local_pos).length(); - Rect2 local_pos_rect = Rect2(local_pos, Vector2(0, 0)).grow(local_grab_distance); - - if (rect.intersects(local_pos_rect) && c->_edit_is_selected_on_click(local_pos, local_grab_distance)) { - Node2D *node = Object::cast_to<Node2D>(c); + if (canvas_item && canvas_item->is_visible_in_tree()) { + Transform2D xform = (p_parent_xform * p_canvas_xform * canvas_item->get_transform()).affine_inverse(); + const real_t local_grab_distance = xform.basis_xform(Vector2(grab_distance, 0)).length(); + if (canvas_item->_edit_is_selected_on_click(xform.xform(p_pos), local_grab_distance)) { + Node2D *node = Object::cast_to<Node2D>(canvas_item); _SelectResult res; - res.item = c; + res.item = canvas_item; res.z_index = node ? node->get_z_index() : 0; res.has_z = node; r_items.push_back(res); @@ -651,64 +495,86 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no return; } -void CanvasItemEditor::_find_canvas_items_at_rect(const Rect2 &p_rect, Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform, List<CanvasItem *> *r_items) { +void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, int p_limit) { + + Node *scene = editor->get_edited_scene(); + + _find_canvas_items_at_pos(p_pos, scene, r_items, p_limit); + + //Remove invalid results + for (int i = 0; i < r_items.size(); i++) { + Node *node = r_items[i].item; + + // Make sure the selected node is in the current scene, or editable + while (node && node != get_tree()->get_edited_scene_root() && node->get_owner() != scene && !scene->is_editable_instance(node->get_owner())) { + node = node->get_parent(); + }; + + // Replace the node by the group if grouped + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(node); + while (node && node != scene->get_parent()) { + CanvasItem *canvas_item_tmp = Object::cast_to<CanvasItem>(node); + if (canvas_item_tmp && node->has_meta("_edit_group_")) { + canvas_item = canvas_item_tmp; + } + node = node->get_parent(); + } + //Remove the item if invalid + if (!canvas_item || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || (canvas_item->has_meta("_edit_lock_") && canvas_item->get_meta("_edit_lock_"))) { + r_items.remove(i); + i--; + } else { + r_items[i].item = canvas_item; + } + } +} + +void CanvasItemEditor::_find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_node, List<CanvasItem *> *r_items, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { if (!p_node) return; if (Object::cast_to<Viewport>(p_node)) return; - CanvasItem *c = Object::cast_to<CanvasItem>(p_node); + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); + Node *scene = editor->get_edited_scene(); - bool inherited = p_node != get_tree()->get_edited_scene_root() && p_node->get_filename() != ""; - bool editable = false; - if (inherited) { - editable = EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(p_node); - } + bool editable = p_node == scene || p_node->get_owner() == scene || scene->is_editable_instance(p_node->get_owner()); bool lock_children = p_node->has_meta("_edit_group_") && p_node->get_meta("_edit_group_"); - if (!lock_children && (!inherited || editable)) { - for (int i = p_node->get_child_count() - 1; i >= 0; i--) { + bool locked = p_node->has_meta("_edit_lock_") && p_node->get_meta("_edit_lock_"); - if (c && !c->is_set_as_toplevel()) - _find_canvas_items_at_rect(p_rect, p_node->get_child(i), p_parent_xform * c->get_transform(), p_canvas_xform, r_items); - else { - CanvasLayer *cl = Object::cast_to<CanvasLayer>(p_node); - _find_canvas_items_at_rect(p_rect, p_node->get_child(i), transform, cl ? cl->get_transform() : p_canvas_xform, r_items); + if (!lock_children || !editable) { + for (int i = p_node->get_child_count() - 1; i >= 0; i--) { + if (canvas_item && !canvas_item->is_set_as_toplevel()) { + _find_canvas_items_in_rect(p_rect, p_node->get_child(i), r_items, p_parent_xform * canvas_item->get_transform(), p_canvas_xform); + } else { + CanvasLayer *canvas_layer = Object::cast_to<CanvasLayer>(p_node); + _find_canvas_items_in_rect(p_rect, p_node->get_child(i), r_items, Transform2D(), canvas_layer ? canvas_layer->get_transform() : p_canvas_xform); } } } - if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !Object::cast_to<CanvasLayer>(c)) { - - Rect2 rect = c->_edit_get_rect(); - Transform2D xform = p_parent_xform * p_canvas_xform * c->get_transform(); + if (canvas_item && canvas_item->is_visible_in_tree() && !locked && editable) { + Transform2D xform = p_parent_xform * p_canvas_xform * canvas_item->get_transform(); - if (p_rect.has_point(xform.xform(rect.position)) && - p_rect.has_point(xform.xform(rect.position + Vector2(rect.size.x, 0))) && - p_rect.has_point(xform.xform(rect.position + Vector2(rect.size.x, rect.size.y))) && - p_rect.has_point(xform.xform(rect.position + Vector2(0, rect.size.y)))) { + if (canvas_item->_edit_use_rect()) { + Rect2 rect = canvas_item->_edit_get_rect(); + if (p_rect.has_point(xform.xform(rect.position)) && + p_rect.has_point(xform.xform(rect.position + Vector2(rect.size.x, 0))) && + p_rect.has_point(xform.xform(rect.position + Vector2(rect.size.x, rect.size.y))) && + p_rect.has_point(xform.xform(rect.position + Vector2(0, rect.size.y)))) { - r_items->push_back(c); + r_items->push_back(canvas_item); + } + } else { + if (p_rect.has_point(xform.xform(Point2()))) { + r_items->push_back(canvas_item); + } } } } -void CanvasItemEditor::_select_click_on_empty_area(Point2 p_click_pos, bool p_append, bool p_box_selection) { - if (!p_append) { - editor_selection->clear(); - viewport->update(); - viewport_base->update(); - }; - - if (p_box_selection) { - // Start a box selection - drag_from = transform.affine_inverse().xform(p_click_pos); - box_selecting = true; - box_selecting_to = drag_from; - } -} - -bool CanvasItemEditor::_select_click_on_item(CanvasItem *item, Point2 p_click_pos, bool p_append, bool p_drag) { +bool CanvasItemEditor::_select_click_on_item(CanvasItem *item, Point2 p_click_pos, bool p_append) { bool still_selected = true; if (p_append) { if (editor_selection->is_selected(item)) { @@ -717,7 +583,7 @@ bool CanvasItemEditor::_select_click_on_item(CanvasItem *item, Point2 p_click_po still_selected = false; } else { // Add the item to the selection - _append_canvas_item(item); + editor_selection->add_node(item); } } else { if (!editor_selection->is_selected(item)) { @@ -730,216 +596,33 @@ bool CanvasItemEditor::_select_click_on_item(CanvasItem *item, Point2 p_click_po } } } - - if (still_selected && p_drag) { - // Drag the node(s) if requested - _prepare_drag(p_click_pos); - } - viewport->update(); - viewport_base->update(); return still_selected; } -void CanvasItemEditor::_key_move(const Vector2 &p_dir, bool p_snap, KeyMoveMODE p_move_mode) { - - if (drag != DRAG_NONE) - return; - - if (editor_selection->get_selected_node_list().empty()) - return; - - undo_redo->create_action(TTR("Move Action"), UndoRedo::MERGE_ENDS); - - List<Node *> selection = editor_selection->get_selected_node_list(); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - - if (canvas_item->has_meta("_edit_lock_")) - continue; - - Vector2 drag = p_dir; - if (p_snap) - drag *= grid_step * Math::pow(2.0, grid_step_multiplier); - - undo_redo->add_undo_method(canvas_item, "_edit_set_state", canvas_item->_edit_get_state()); - - if (p_move_mode == MOVE_VIEW_BASE) { - - // drag = transform.affine_inverse().basis_xform(p_dir); // zoom sensitive - drag = canvas_item->get_global_transform_with_canvas().affine_inverse().basis_xform(drag); - Rect2 local_rect = canvas_item->_edit_get_rect(); - local_rect.position += drag; - undo_redo->add_do_method(canvas_item, "_edit_set_rect", local_rect); - - } else { // p_move_mode==MOVE_LOCAL_BASE || p_move_mode==MOVE_LOCAL_WITH_ROT - - Node2D *node_2d = Object::cast_to<Node2D>(canvas_item); - if (node_2d) { - - if (p_move_mode == MOVE_LOCAL_WITH_ROT) { - Transform2D m; - m.rotate(node_2d->get_rotation()); - drag = m.xform(drag); - } - node_2d->set_position(node_2d->get_position() + drag); - - } else { - Control *control = Object::cast_to<Control>(canvas_item); - if (control) - control->set_position(control->get_position() + drag); +List<CanvasItem *> CanvasItemEditor::_get_edited_canvas_items(bool retreive_locked, bool remove_canvas_item_if_parent_in_selection) { + List<CanvasItem *> selection; + for (Map<Node *, Object *>::Element *E = editor_selection->get_selection().front(); E; E = E->next()) { + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->key()); + if (canvas_item && canvas_item->is_visible_in_tree() && canvas_item->get_viewport() == EditorNode::get_singleton()->get_scene_root() && (!retreive_locked || !canvas_item->has_meta("_edit_lock_"))) { + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); + if (se) { + selection.push_back(canvas_item); } } } - undo_redo->commit_action(); -} - -Point2 CanvasItemEditor::_find_topleftmost_point() { - - Vector2 tl = Point2(1e10, 1e10); - Rect2 r2; - r2.position = tl; - - List<Node *> selection = editor_selection->get_selected_node_list(); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - Rect2 rect = canvas_item->_edit_get_rect(); - Transform2D xform = canvas_item->get_global_transform_with_canvas(); - - r2.expand_to(xform.xform(rect.position)); - r2.expand_to(xform.xform(rect.position + Vector2(rect.size.x, 0))); - r2.expand_to(xform.xform(rect.position + rect.size)); - r2.expand_to(xform.xform(rect.position + Vector2(0, rect.size.y))); - } - - return r2.position; -} - -int CanvasItemEditor::get_item_count() { - - List<Node *> selection = editor_selection->get_selected_node_list(); - - int ic = 0; - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - ic++; - }; - - return ic; -} - -CanvasItem *CanvasItemEditor::_get_single_item() { - - Map<Node *, Object *> &selection = editor_selection->get_selection(); - - CanvasItem *single_item = NULL; - - for (Map<Node *, Object *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->key()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - if (single_item) - return NULL; //morethan one - - single_item = canvas_item; - }; - - return single_item; -} - -CanvasItemEditor::DragType CanvasItemEditor::_get_resize_handle_drag_type(const Point2 &p_click, Vector2 &r_point) { - // Returns a drag type if a resize handle is clicked - CanvasItem *canvas_item = _get_single_item(); - - ERR_FAIL_COND_V(!canvas_item, DRAG_NONE); - - Rect2 rect = canvas_item->_edit_get_rect(); - Transform2D xforml = canvas_item->get_global_transform_with_canvas(); - Transform2D xform = transform * xforml; - - Vector2 endpoints[4] = { - - xform.xform(rect.position), - xform.xform(rect.position + Vector2(rect.size.x, 0)), - xform.xform(rect.position + rect.size), - xform.xform(rect.position + Vector2(0, rect.size.y)) - }; - - Vector2 endpointsl[4] = { - - xforml.xform(rect.position), - xforml.xform(rect.position + Vector2(rect.size.x, 0)), - xforml.xform(rect.position + rect.size), - xforml.xform(rect.position + Vector2(0, rect.size.y)) - }; - - DragType dragger[] = { - DRAG_TOP_LEFT, - DRAG_TOP, - DRAG_TOP_RIGHT, - DRAG_RIGHT, - DRAG_BOTTOM_RIGHT, - DRAG_BOTTOM, - DRAG_BOTTOM_LEFT, - DRAG_LEFT - }; - - float radius = (select_handle->get_size().width / 2) * 1.5; - - for (int i = 0; i < 4; i++) { - - int prev = (i + 3) % 4; - int next = (i + 1) % 4; - - r_point = endpointsl[i]; - - Vector2 ofs = ((endpoints[i] - endpoints[prev]).normalized() + ((endpoints[i] - endpoints[next]).normalized())).normalized(); - ofs *= 1.4144 * (select_handle->get_size().width / 2); - - ofs += endpoints[i]; - - if (ofs.distance_to(p_click) < radius) - return dragger[i * 2]; - - ofs = (endpoints[i] + endpoints[next]) / 2; - ofs += (endpoints[next] - endpoints[i]).tangent().normalized() * (select_handle->get_size().width / 2); - - r_point = (endpointsl[i] + endpointsl[next]) / 2; - - if (ofs.distance_to(p_click) < radius) - return dragger[i * 2 + 1]; + if (remove_canvas_item_if_parent_in_selection) { + List<CanvasItem *> filtered_selection; + for (List<CanvasItem *>::Element *E = selection.front(); E; E = E->next()) { + if (!selection.find(E->get()->get_parent())) { + filtered_selection.push_back(E->get()); + } + } + return filtered_selection; + } else { + return selection; } - - return DRAG_NONE; } Vector2 CanvasItemEditor::_anchor_to_position(const Control *p_control, Vector2 anchor) { @@ -958,148 +641,93 @@ Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 return p_control->get_transform().xform(position) / parent_size; } -CanvasItemEditor::DragType CanvasItemEditor::_get_anchor_handle_drag_type(const Point2 &p_click, Vector2 &r_point) { - // Returns a drag type if an anchor handle is clicked - CanvasItem *canvas_item = _get_single_item(); - ERR_FAIL_COND_V(!canvas_item, DRAG_NONE); - - Control *control = Object::cast_to<Control>(canvas_item); - ERR_FAIL_COND_V(!control, DRAG_NONE); - - 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)); - - 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(i == 0 || i == 3, i <= 1); - } - - DragType dragger[] = { - DRAG_ANCHOR_TOP_LEFT, - DRAG_ANCHOR_TOP_RIGHT, - DRAG_ANCHOR_BOTTOM_RIGHT, - DRAG_ANCHOR_BOTTOM_LEFT, - }; - - for (int i = 0; i < 4; i++) { - if (anchor_rects[i].has_point(p_click)) { - r_point = transform.affine_inverse().xform(anchor_pos[i]); - if ((anchor_pos[0] == anchor_pos[2]) && (anchor_pos[0].distance_to(p_click) < anchor_handle->get_size().length() / 3.0)) { - return DRAG_ANCHOR_ALL; +void CanvasItemEditor::_save_canvas_item_state(List<CanvasItem *> p_canvas_items, bool save_bones) { + for (List<CanvasItem *>::Element *E = p_canvas_items.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); + if (se) { + se->undo_state = canvas_item->_edit_get_state(); + se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); + if (canvas_item->_edit_use_rect()) { + se->pre_drag_rect = canvas_item->_edit_get_rect(); } else { - return dragger[i]; + se->pre_drag_rect = Rect2(); + } + se->pre_drag_bones_length = List<float>(); + se->pre_drag_bones_undo_state = List<Dictionary>(); + + // If we have a bone, save the state of all nodes in the IK chain + Node2D *bone = Object::cast_to<Node2D>(canvas_item); + if (bone && bone->has_meta("_edit_bone_")) { + // Check if we have an IK chain + List<Node2D *> bone_ik_list; + bool ik_found = false; + bone = Object::cast_to<Node2D>(bone->get_parent()); + while (bone) { + bone_ik_list.push_back(bone); + if (bone->has_meta("_edit_ik_")) { + ik_found = true; + break; + } else if (!bone->has_meta("_edit_bone_")) { + break; + } + bone = Object::cast_to<Node2D>(bone->get_parent()); + } + + //Save the bone state and length if we have an IK chain + if (ik_found) { + bone = Object::cast_to<Node2D>(canvas_item); + Transform2D bone_xform = bone->get_global_transform(); + for (List<Node2D *>::Element *bone_E = bone_ik_list.front(); bone_E; bone_E = bone_E->next()) { + bone_xform = bone_xform * bone->get_transform().affine_inverse(); + Node2D *parent_bone = bone_E->get(); + se->pre_drag_bones_length.push_back(parent_bone->get_global_transform().get_origin().distance_to(bone->get_global_position())); + se->pre_drag_bones_undo_state.push_back(parent_bone->_edit_get_state()); + bone = parent_bone; + } + } } } } - - return DRAG_NONE; } -void CanvasItemEditor::_prepare_drag(const Point2 &p_click_pos) { - - List<Node *> selection = editor_selection->get_selected_node_list(); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - +void CanvasItemEditor::_restore_canvas_item_state(List<CanvasItem *> p_canvas_items, bool restore_bones) { + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - - se->undo_state = canvas_item->_edit_get_state(); - if (Object::cast_to<Node2D>(canvas_item)) - se->undo_pivot = Object::cast_to<Node2D>(canvas_item)->_edit_get_pivot(); - if (Object::cast_to<Control>(canvas_item)) - se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); - - se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); - se->pre_drag_rect = canvas_item->_edit_get_rect(); - } - - if (selection.size() == 1 && Object::cast_to<Node2D>(selection[0]) && bone_ik_list.size() == 0) { - drag = DRAG_NODE_2D; - drag_point_from = Object::cast_to<Node2D>(selection[0])->get_global_position(); - } else { - drag = DRAG_ALL; - drag_point_from = _find_topleftmost_point(); - } - drag_from = transform.affine_inverse().xform(p_click_pos); -} - -void CanvasItemEditor::incbeg(float &beg, float &end, float inc, float minsize, bool p_symmetric) { - - if (minsize < 0) { - - beg += inc; - if (p_symmetric) - end -= inc; - } else { - - if (p_symmetric) { - beg += inc; - end -= inc; - if (end - beg < minsize) { - float center = (beg + end) / 2.0; - beg = center - minsize / 2.0; - end = center + minsize / 2.0; + canvas_item->_edit_set_state(se->undo_state); + if (restore_bones) { + for (List<Dictionary>::Element *E = se->pre_drag_bones_undo_state.front(); E; E = E->next()) { + canvas_item = Object::cast_to<CanvasItem>(canvas_item->get_parent()); + canvas_item->_edit_set_state(E->get()); } - - } else { - if (end - (beg + inc) < minsize) - beg = end - minsize; - else - beg += inc; } } } -void CanvasItemEditor::incend(float &beg, float &end, float inc, float minsize, bool p_symmetric) { - - if (minsize < 0) { - - end += inc; - if (p_symmetric) - beg -= inc; - } else { - - if (p_symmetric) { - - end += inc; - beg -= inc; - if (end - beg < minsize) { - float center = (beg + end) / 2.0; - beg = center - minsize / 2.0; - end = center + minsize / 2.0; +void CanvasItemEditor::_commit_canvas_item_state(List<CanvasItem *> p_canvas_items, String action_name, bool commit_bones) { + undo_redo->create_action(action_name); + for (List<CanvasItem *>::Element *E = p_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); + if (commit_bones) { + for (List<Dictionary>::Element *E = se->pre_drag_bones_undo_state.front(); E; E = E->next()) { + canvas_item = Object::cast_to<CanvasItem>(canvas_item->get_parent()); + 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", E->get()); } - - } else { - if ((end + inc) - beg < minsize) - end = beg + minsize; - else - end += inc; } } -} - -void CanvasItemEditor::_append_canvas_item(CanvasItem *p_item) { - - editor_selection->add_node(p_item); + undo_redo->add_do_method(viewport, "update"); + undo_redo->add_undo_method(viewport, "update"); + undo_redo->commit_action(); } void CanvasItemEditor::_snap_changed() { ((SnapDialog *)snap_dialog)->get_fields(grid_offset, grid_step, snap_rotation_offset, snap_rotation_step); grid_step_multiplier = 0; - viewport_base->update(); viewport->update(); } @@ -1111,7 +739,7 @@ void CanvasItemEditor::_selection_result_pressed(int p_result) { CanvasItem *item = selection_results[p_result].item; if (item) - _select_click_on_item(item, Point2(), additive_selection, false); + _select_click_on_item(item, Point2(), selection_menu_additive_selection); } void CanvasItemEditor::_selection_menu_hide() { @@ -1121,121 +749,13 @@ void CanvasItemEditor::_selection_menu_hide() { selection_menu->set_size(Vector2(0, 0)); } -void CanvasItemEditor::_list_select(const Ref<InputEventMouseButton> &b) { - - Point2 click = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); - - Node *scene = editor->get_edited_scene(); - if (!scene) - return; - - _find_canvas_items_at_pos(click, scene, transform, Transform2D(), selection_results); - - for (int i = 0; i < selection_results.size(); i++) { - CanvasItem *item = selection_results[i].item; - if (item != scene && item->get_owner() != scene && !scene->is_editable_instance(item->get_owner())) { - //invalid result - selection_results.remove(i); - i--; - } - } - - if (selection_results.size() == 1) { - - CanvasItem *item = selection_results[0].item; - selection_results.clear(); - - additive_selection = b->get_shift(); - - if (!_select_click_on_item(item, click, additive_selection, false)) - return; - - } else if (!selection_results.empty()) { - - selection_results.sort(); - - NodePath root_path = get_tree()->get_edited_scene_root()->get_path(); - StringName root_name = root_path.get_name(root_path.get_name_count() - 1); - - for (int i = 0; i < selection_results.size(); i++) { - - CanvasItem *item = selection_results[i].item; - - Ref<Texture> icon; - if (item->has_meta("_editor_icon")) - icon = item->get_meta("_editor_icon"); - else - icon = get_icon(has_icon(item->get_class(), "EditorIcons") ? item->get_class() : String("Object"), "EditorIcons"); - - String node_path = "/" + root_name + "/" + root_path.rel_path_to(item->get_path()); - - selection_menu->add_item(item->get_name()); - selection_menu->set_item_icon(i, icon); - selection_menu->set_item_metadata(i, node_path); - selection_menu->set_item_tooltip(i, String(item->get_name()) + "\nType: " + item->get_class() + "\nPath: " + node_path); - } - - additive_selection = b->get_shift(); - - selection_menu->set_global_position(b->get_global_position()); - selection_menu->popup(); - selection_menu->call_deferred("grab_click_focus"); - selection_menu->set_invalidate_click_until_motion(); - - return; - } -} - -void CanvasItemEditor::_update_cursor() { - - CursorShape c = CURSOR_ARROW; - switch (drag) { - case DRAG_NONE: - if (Input::get_singleton()->is_mouse_button_pressed(BUTTON_MIDDLE) || Input::get_singleton()->is_key_pressed(KEY_SPACE)) { - c = CURSOR_DRAG; - } else { - switch (tool) { - case TOOL_MOVE: - c = CURSOR_MOVE; - break; - case TOOL_EDIT_PIVOT: - c = CURSOR_CROSS; - break; - case TOOL_PAN: - c = CURSOR_DRAG; - break; - } - } - break; - case DRAG_LEFT: - case DRAG_RIGHT: - c = CURSOR_HSIZE; - break; - case DRAG_TOP: - case DRAG_BOTTOM: - c = CURSOR_VSIZE; - break; - case DRAG_TOP_LEFT: - case DRAG_BOTTOM_RIGHT: - c = CURSOR_FDIAGSIZE; - break; - case DRAG_TOP_RIGHT: - case DRAG_BOTTOM_LEFT: - c = CURSOR_BDIAGSIZE; - break; - case DRAG_ALL: - case DRAG_NODE_2D: - c = CURSOR_MOVE; - break; - } - viewport->set_default_cursor_shape(c); -} - -void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) { - +bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> b = p_event; - if (b.is_valid()) { - if (b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { + Ref<InputEventMouseMotion> m = p_event; + + // Start dragging a guide + if (drag_type == DRAG_NONE) { + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { if (show_guides && show_rulers && EditorNode::get_singleton()->get_edited_scene()) { Transform2D xform = viewport_scrollable->get_transform() * transform; // Retrieve the guide lists @@ -1251,48 +771,64 @@ void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) // Press button if (b->get_position().x < RULER_WIDTH && b->get_position().y < RULER_WIDTH) { // Drag a new double guide - drag = DRAG_DOUBLE_GUIDE; - edited_guide_index = -1; + drag_type = DRAG_DOUBLE_GUIDE; + dragged_guide_index = -1; + return true; } else if (b->get_position().x < RULER_WIDTH) { // Check if we drag an existing horizontal guide float minimum = 1e20; - edited_guide_index = -1; + dragged_guide_index = -1; for (int i = 0; i < hguides.size(); i++) { if (ABS(xform.xform(Point2(0, hguides[i])).y - b->get_position().y) < MIN(minimum, 8)) { - edited_guide_index = i; + dragged_guide_index = i; } } - if (edited_guide_index >= 0) { + if (dragged_guide_index >= 0) { // Drag an existing horizontal guide - drag = DRAG_H_GUIDE; + drag_type = DRAG_H_GUIDE; } else { // Drag a new vertical guide - drag = DRAG_V_GUIDE; + drag_type = DRAG_V_GUIDE; } + return true; } else if (b->get_position().y < RULER_WIDTH) { // Check if we drag an existing vertical guide float minimum = 1e20; - edited_guide_index = -1; + dragged_guide_index = -1; for (int i = 0; i < vguides.size(); i++) { if (ABS(xform.xform(Point2(vguides[i], 0)).x - b->get_position().x) < MIN(minimum, 8)) { - edited_guide_index = i; + dragged_guide_index = i; } } - if (edited_guide_index >= 0) { + if (dragged_guide_index >= 0) { // Drag an existing vertical guide - drag = DRAG_V_GUIDE; + drag_type = DRAG_V_GUIDE; } else { // Drag a new vertical guide - drag = DRAG_H_GUIDE; + drag_type = DRAG_H_GUIDE; } + drag_from = xform.affine_inverse().xform(b->get_position()); + return true; } } } + } + + if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE || drag_type == DRAG_H_GUIDE) { + // Move the guide + if (m.is_valid()) { + Transform2D xform = viewport_scrollable->get_transform() * transform; + drag_to = xform.affine_inverse().xform(m->get_position()); + + dragged_guide_pos = xform.xform(snap_point(drag_to, SNAP_GRID | SNAP_PIXEL | SNAP_OTHER_NODES)); + viewport->update(); + return true; + } - if (b->get_button_index() == BUTTON_LEFT && !b->is_pressed()) { - // Release button + // Release confirms the guide move + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && !b->is_pressed()) { if (show_guides && EditorNode::get_singleton()->get_edited_scene()) { Transform2D xform = viewport_scrollable->get_transform() * transform; @@ -1307,65 +843,65 @@ void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) } Point2 edited = snap_point(xform.affine_inverse().xform(b->get_position()), SNAP_GRID | SNAP_PIXEL | SNAP_OTHER_NODES); - if (drag == DRAG_V_GUIDE) { + if (drag_type == DRAG_V_GUIDE) { Array prev_vguides = vguides.duplicate(); if (b->get_position().x > RULER_WIDTH) { // Adds a new vertical guide - if (edited_guide_index >= 0) { - vguides[edited_guide_index] = edited.x; + if (dragged_guide_index >= 0) { + vguides[dragged_guide_index] = edited.x; undo_redo->create_action(TTR("Move vertical guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", vguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", prev_vguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } else { vguides.push_back(edited.x); undo_redo->create_action(TTR("Create new vertical guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", vguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", prev_vguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } } else { - if (edited_guide_index >= 0) { - vguides.remove(edited_guide_index); + if (dragged_guide_index >= 0) { + vguides.remove(dragged_guide_index); undo_redo->create_action(TTR("Remove vertical guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", vguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", prev_vguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } } - } else if (drag == DRAG_H_GUIDE) { + } else if (drag_type == DRAG_H_GUIDE) { Array prev_hguides = hguides.duplicate(); if (b->get_position().y > RULER_WIDTH) { // Adds a new horizontal guide - if (edited_guide_index >= 0) { - hguides[edited_guide_index] = edited.y; + if (dragged_guide_index >= 0) { + hguides[dragged_guide_index] = edited.y; undo_redo->create_action(TTR("Move horizontal guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", hguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", prev_hguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } else { hguides.push_back(edited.y); undo_redo->create_action(TTR("Create new horizontal guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", hguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", prev_hguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } } else { - if (edited_guide_index >= 0) { - hguides.remove(edited_guide_index); + if (dragged_guide_index >= 0) { + hguides.remove(dragged_guide_index); undo_redo->create_action(TTR("Remove horizontal guide")); undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", hguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", prev_hguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } } - } else if (drag == DRAG_DOUBLE_GUIDE) { + } else if (drag_type == DRAG_DOUBLE_GUIDE) { Array prev_hguides = hguides.duplicate(); Array prev_vguides = vguides.duplicate(); if (b->get_position().x > RULER_WIDTH && b->get_position().y > RULER_WIDTH) { @@ -1377,880 +913,1089 @@ void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) undo_redo->add_do_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", hguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_vertical_guides_", prev_vguides); undo_redo->add_undo_method(EditorNode::get_singleton()->get_edited_scene(), "set_meta", "_edit_horizontal_guides_", prev_hguides); - undo_redo->add_undo_method(viewport_base, "update"); + undo_redo->add_undo_method(viewport, "update"); undo_redo->commit_action(); } } } - if (drag == DRAG_DOUBLE_GUIDE || drag == DRAG_V_GUIDE || drag == DRAG_H_GUIDE) { - drag = DRAG_NONE; - viewport_base->update(); - } + drag_type = DRAG_NONE; + viewport->update(); + return true; } } + return false; +} - Ref<InputEventMouseMotion> m = p_event; - if (m.is_valid()) { - if (!viewport_base->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field())) { - viewport_base->call_deferred("grab_focus"); +bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + if (b.is_valid()) { + if (b->is_pressed() && b->get_button_index() == BUTTON_WHEEL_DOWN) { + // Scroll or pan down + if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { + view_offset.y += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); + _update_scrollbars(); + viewport->update(); + } else { + _zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), b->get_position()); + } + return true; } - if (drag == DRAG_DOUBLE_GUIDE || drag == DRAG_H_GUIDE || drag == DRAG_V_GUIDE) { - Transform2D xform = viewport_scrollable->get_transform() * transform; - Point2 mouse_pos = m->get_position(); - mouse_pos = xform.affine_inverse().xform(mouse_pos); - mouse_pos = xform.xform(snap_point(mouse_pos, SNAP_GRID | SNAP_PIXEL | SNAP_OTHER_NODES)); - edited_guide_pos = mouse_pos; - viewport_base->update(); + if (b->is_pressed() && b->get_button_index() == BUTTON_WHEEL_UP) { + // Scroll or pan up + if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { + view_offset.y -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); + _update_scrollbars(); + viewport->update(); + } else { + _zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), b->get_position()); + } + return true; } - } - Ref<InputEventKey> k = p_event; - if (k.is_valid()) { - if (k->is_pressed() && drag == DRAG_NONE) { - // Move the object with the arrow keys - KeyMoveMODE move_mode = MOVE_VIEW_BASE; - if (k->get_alt()) move_mode = MOVE_LOCAL_BASE; - if (k->get_control() || k->get_metakey()) move_mode = MOVE_LOCAL_WITH_ROT; + if (b->is_pressed() && b->get_button_index() == BUTTON_WHEEL_LEFT) { + // Pan left + if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { + view_offset.x -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); + _update_scrollbars(); + viewport->update(); + return true; + } + } - if (k->get_scancode() == KEY_UP) - _key_move(Vector2(0, -1), k->get_shift(), move_mode); - else if (k->get_scancode() == KEY_DOWN) - _key_move(Vector2(0, 1), k->get_shift(), move_mode); - else if (k->get_scancode() == KEY_LEFT) - _key_move(Vector2(-1, 0), k->get_shift(), move_mode); - else if (k->get_scancode() == KEY_RIGHT) - _key_move(Vector2(1, 0), k->get_shift(), move_mode); - else if (k->get_scancode() == KEY_ESCAPE) { - editor_selection->clear(); + if (b->is_pressed() && b->get_button_index() == BUTTON_WHEEL_RIGHT) { + // Pan right + if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { + view_offset.x += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); + _update_scrollbars(); viewport->update(); - } else - return; + return true; + } + } - accept_event(); + if (drag_type == DRAG_NONE) { + if (b->is_pressed() && + (b->get_button_index() == BUTTON_MIDDLE || + (b->get_button_index() == BUTTON_LEFT && tool == TOOL_PAN) || + (b->get_button_index() == BUTTON_LEFT && !EditorSettings::get_singleton()->get("editors/2d/simple_spacebar_panning") && Input::get_singleton()->is_key_pressed(KEY_SPACE)))) { + // Pan the viewport + drag_type = DRAG_PAN; + } } - } -} -void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { + if (drag_type == DRAG_PAN) { + if (!b->is_pressed()) { + // Stop panning the viewport (for any mouse button press) + drag_type = DRAG_NONE; + } + } + } - { - EditorNode *en = editor; - EditorPluginList *over_plugin_list = en->get_editor_plugins_over(); + Ref<InputEventKey> k = p_event; + if (k.is_valid()) { + if (k->get_scancode() == KEY_SPACE && EditorSettings::get_singleton()->get("editors/2d/simple_spacebar_panning")) { + if (drag_type == DRAG_NONE) { + if (k->is_pressed() && !k->is_echo()) { + //Pan the viewport + drag_type = DRAG_PAN; + } + } else if (drag_type == DRAG_PAN) { + if (!k->is_pressed()) { + // Stop panning the viewport (for any mouse button press) + drag_type = DRAG_NONE; + } + } + } + } - if (!over_plugin_list->empty()) { - bool discard = over_plugin_list->forward_gui_input(p_event); - if (discard) { - accept_event(); - return; + Ref<InputEventMouseMotion> m = p_event; + if (m.is_valid()) { + if (drag_type == DRAG_PAN) { + // Pan the viewport + Point2i relative; + if (bool(EditorSettings::get_singleton()->get("editors/2d/warped_mouse_panning"))) { + relative = Input::get_singleton()->warp_mouse_motion(m, viewport->get_global_rect()); + } else { + relative = m->get_relative(); } + view_offset.x -= relative.x / zoom; + view_offset.y -= relative.y / zoom; + _update_scrollbars(); + viewport->update(); + return true; } } Ref<InputEventMagnifyGesture> magnify_gesture = p_event; if (magnify_gesture.is_valid()) { - + // Zoom gesture _zoom_on_position(zoom * magnify_gesture->get_factor(), magnify_gesture->get_position()); - return; + return true; } Ref<InputEventPanGesture> pan_gesture = p_event; if (pan_gesture.is_valid()) { - + // Pan gesture const Vector2 delta = (int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom) * pan_gesture->get_delta(); - h_scroll->set_value(h_scroll->get_value() + delta.x); - v_scroll->set_value(v_scroll->get_value() + delta.y); - return; + view_offset.x += delta.x; + view_offset.y += delta.y; + _update_scrollbars(); + viewport->update(); + return true; } + return false; +} + +bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseMotion> m = p_event; Ref<InputEventMouseButton> b = p_event; - if (b.is_valid()) { - // Button event + Ref<InputEventKey> k = p_event; - if (b->get_button_index() == BUTTON_WHEEL_DOWN) { - // Scroll or pan down - if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { - v_scroll->set_value(v_scroll->get_value() + int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); - _update_scroll(0); - viewport->update(); - } else { - _zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), b->get_position()); + // Drag the pivot (in pivot mode / with V key) + if (drag_type == DRAG_NONE) { + if ((b.is_valid() && b->is_pressed() && b->get_button_index() == BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) || + (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_scancode() == KEY_V)) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + + // Filters the selection with nodes that allow setting the pivot + drag_selection = List<CanvasItem *>(); + for (List<CanvasItem *>::Element *E = selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + if (canvas_item->_edit_use_pivot()) { + drag_selection.push_back(canvas_item); + } } - return; - } + // Start dragging if we still have nodes + if (drag_selection.size() > 0) { + drag_from = transform.affine_inverse().xform((b.is_valid()) ? b->get_position() : viewport->get_local_mouse_position()); + Vector2 new_pos; + if (drag_selection.size() == 1) + new_pos = snap_point(drag_from, SNAP_NODE_SIDES | SNAP_NODE_CENTER | SNAP_NODE_ANCHORS | SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL, drag_selection[0]); + else + new_pos = snap_point(drag_from, SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL); + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + canvas_item->_edit_set_pivot(canvas_item->get_global_transform_with_canvas().affine_inverse().xform(new_pos)); + } - if (b->get_button_index() == BUTTON_WHEEL_UP) { - // Scroll or pan up - if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { - v_scroll->set_value(v_scroll->get_value() - int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); - _update_scroll(0); - viewport->update(); - } else { - _zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), b->get_position()); + drag_type = DRAG_PIVOT; + _save_canvas_item_state(drag_selection); } + return true; + } + } - return; + if (drag_type == DRAG_PIVOT) { + // Move the pivot + if (m.is_valid()) { + drag_to = transform.affine_inverse().xform(m->get_position()); + _restore_canvas_item_state(drag_selection); + Vector2 new_pos; + if (drag_selection.size() == 1) + new_pos = snap_point(drag_to, SNAP_NODE_SIDES | SNAP_NODE_CENTER | SNAP_NODE_ANCHORS | SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL, drag_selection[0]); + else + new_pos = snap_point(drag_to, SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL); + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + canvas_item->_edit_set_pivot(canvas_item->get_global_transform_with_canvas().affine_inverse().xform(new_pos)); + } + return true; } - if (b->get_button_index() == BUTTON_WHEEL_LEFT) { - // Pan left - if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { + // Confirm the pivot move + if ((b.is_valid() && !b->is_pressed() && b->get_button_index() == BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) || + (k.is_valid() && !k->is_pressed() && k->get_scancode() == KEY_V)) { + _commit_canvas_item_state(drag_selection, TTR("Move pivot")); + drag_type = DRAG_NONE; + return true; + } - h_scroll->set_value(h_scroll->get_value() - int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); - } + // Cancel a drag + if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { + _restore_canvas_item_state(drag_selection); + drag_type = DRAG_NONE; + viewport->update(); + return true; } + } + return false; +} - if (b->get_button_index() == BUTTON_WHEEL_RIGHT) { - // Pan right - if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { +void CanvasItemEditor::_solve_IK(Node2D *leaf_node, Point2 target_position) { + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(leaf_node); + if (se && !se->pre_drag_bones_undo_state.empty()) { + + // Build the node list + Point2 leaf_pos = target_position; + + List<Node2D *> joints_list; + List<Point2> joints_pos; + Node2D *joint = leaf_node; + Transform2D joint_transform = leaf_node->get_global_transform_with_canvas(); + for (int i = 0; i < se->pre_drag_bones_undo_state.size() + 1; i++) { + joints_list.push_back(joint); + joints_pos.push_back(joint_transform.get_origin()); + joint_transform = joint_transform * joint->get_transform().affine_inverse(); + joint = Object::cast_to<Node2D>(joint->get_parent()); + } + Point2 root_pos = joints_list.back()->get()->get_global_transform_with_canvas().get_origin(); - h_scroll->set_value(h_scroll->get_value() + int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); + // Restraints the node to a maximum distance is necessary + float total_len = 0; + for (List<float>::Element *E = se->pre_drag_bones_length.front(); E; E = E->next()) { + total_len += E->get(); + } + if ((root_pos.distance_to(leaf_pos)) > total_len) { + Vector2 rel = leaf_pos - root_pos; + rel = rel.normalized() * total_len; + leaf_pos = root_pos + rel; + } + joints_pos[0] = leaf_pos; + + // Run the solver + int solver_iterations = 64; + float solver_k = 0.3; + + // Build the position list + for (int i = 0; i < solver_iterations; i++) { + // Handle the leaf joint + int node_id = 0; + for (List<float>::Element *E = se->pre_drag_bones_length.front(); E; E = E->next()) { + Vector2 direction = (joints_pos[node_id + 1] - joints_pos[node_id]).normalized(); + int len = E->get(); + if (E == se->pre_drag_bones_length.front()) { + joints_pos[1] = joints_pos[1].linear_interpolate(joints_pos[0] + len * direction, solver_k); + } else if (E == se->pre_drag_bones_length.back()) { + joints_pos[node_id] = joints_pos[node_id].linear_interpolate(joints_pos[node_id + 1] - len * direction, solver_k); + } else { + Vector2 center = (joints_pos[node_id + 1] + joints_pos[node_id]) / 2.0; + joints_pos[node_id] = joints_pos[node_id].linear_interpolate(center - (direction * len) / 2.0, solver_k); + joints_pos[node_id + 1] = joints_pos[node_id + 1].linear_interpolate(center + (direction * len) / 2.0, solver_k); + } + node_id++; } } - if (b->get_button_index() == BUTTON_RIGHT) { - - if (b->is_pressed() && (tool == TOOL_SELECT && b->get_alt())) { - // Open the selection list - _list_select(b); - return; + // Set the position + float total_rot = 0.0f; + for (int node_id = joints_list.size() - 1; node_id > 0; node_id--) { + Point2 current = (joints_list[node_id - 1]->get_global_position() - joints_list[node_id]->get_global_position()).normalized(); + Point2 target = (joints_pos[node_id - 1] - joints_list[node_id]->get_global_position()).normalized(); + float rot = current.angle_to(target); + if (joints_list[node_id]->get_global_transform().basis_determinant() < 0) { + rot = -rot; } + joints_list[node_id]->rotate(rot); + total_rot += rot; + } - if (get_item_count() > 0 && drag != DRAG_NONE) { - // Cancel a drag - if (bone_ik_list.size()) { - for (List<BoneIK>::Element *E = bone_ik_list.back(); E; E = E->prev()) { - E->get().node->_edit_set_state(E->get().orig_state); - } + joints_list[0]->rotate(-total_rot); + } +} - bone_ik_list.clear(); +bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; + // Start rotation + if (drag_type == DRAG_NONE) { + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { + drag_selection = _get_edited_canvas_items(); + if (drag_selection.size() > 0 && ((b->get_control() && tool == TOOL_SELECT) || tool == TOOL_ROTATE)) { + drag_type = DRAG_ROTATE; + drag_from = transform.affine_inverse().xform(b->get_position()); + CanvasItem *canvas_item = drag_selection[0]; + if (canvas_item->_edit_use_pivot()) { + drag_rotation_center = canvas_item->get_global_transform_with_canvas().xform(canvas_item->_edit_get_pivot()); } else { - List<Node *> selection = editor_selection->get_selected_node_list(); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - - canvas_item->_edit_set_state(se->undo_state); - if (Object::cast_to<Node2D>(canvas_item)) - Object::cast_to<Node2D>(canvas_item)->_edit_set_pivot(se->undo_pivot); - if (Object::cast_to<Control>(canvas_item)) - Object::cast_to<Control>(canvas_item)->set_pivot_offset(se->undo_pivot); - } + drag_rotation_center = canvas_item->get_global_transform_with_canvas().get_origin(); } + _save_canvas_item_state(drag_selection); + return true; + } + } + } - drag = DRAG_NONE; - viewport->update(); - can_move_pivot = false; - - } else if (box_selecting) { - // Cancel box selection - box_selecting = false; + if (drag_type == DRAG_ROTATE) { + // Rotate the node + if (m.is_valid()) { + _restore_canvas_item_state(drag_selection); + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + drag_to = transform.affine_inverse().xform(m->get_position()); + canvas_item->_edit_set_rotation(snap_angle(canvas_item->_edit_get_rotation() + (drag_from - drag_rotation_center).angle_to(drag_to - drag_rotation_center), canvas_item->_edit_get_rotation())); viewport->update(); } - return; + return true; } - if (b->get_button_index() == BUTTON_LEFT && tool == TOOL_LIST_SELECT) { - if (b->is_pressed()) - // Open the selection list - _list_select(b); - return; + // Confirms the node rotation + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && !b->is_pressed()) { + _commit_canvas_item_state(drag_selection, TTR("Rotate CanvasItem")); + drag_type = DRAG_NONE; + return true; } - if (b->get_button_index() == BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) { - if (b->is_pressed()) { - // Set the pivot point - Point2 mouse_pos = b->get_position(); - mouse_pos = transform.affine_inverse().xform(mouse_pos); - mouse_pos = snap_point(mouse_pos, SNAP_DEFAULT, _get_single_item()); - _edit_set_pivot(mouse_pos); - } - return; + // Cancel a drag + if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { + _restore_canvas_item_state(drag_selection); + drag_type = DRAG_NONE; + viewport->update(); + return true; } + } + return false; +} - if (tool == TOOL_PAN || b->get_button_index() != BUTTON_LEFT || Input::get_singleton()->is_key_pressed(KEY_SPACE)) - // Pan the view - return; - - // -- From now we consider that the button is BUTTON_LEFT -- - - if (!b->is_pressed()) { - - if (drag != DRAG_NONE) { - // Stop dragging - if (undo_redo) { +bool CanvasItemEditor::_gui_input_open_scene_on_double_click(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; - if (bone_ik_list.size()) { - undo_redo->create_action(TTR("Edit IK Chain")); + // Open a sub-scene on double-click + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && b->is_doubleclick() && tool == TOOL_SELECT) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + if (selection.size() == 1) { + CanvasItem *canvas_item = selection[0]; + if (canvas_item->get_filename() != "" && canvas_item != editor->get_edited_scene()) { + editor->open_request(canvas_item->get_filename()); + return true; + } + } + } + return false; +} - for (List<BoneIK>::Element *E = bone_ik_list.back(); E; E = E->prev()) { +bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; - undo_redo->add_do_method(E->get().node, "_edit_set_state", E->get().node->_edit_get_state()); - undo_redo->add_undo_method(E->get().node, "_edit_set_state", E->get().orig_state); - } + // Starts anchor dragging if needed + if (drag_type == DRAG_NONE) { + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT && show_helpers) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + if (selection.size() == 1) { + Control *control = Object::cast_to<Control>(selection[0]); + if (control && !Object::cast_to<Container>(control->get_parent())) { + 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)); - undo_redo->add_do_method(viewport, "update"); - undo_redo->add_undo_method(viewport, "update"); + 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(i == 0 || i == 3, i <= 1); + } - bone_ik_list.clear(); + DragType dragger[] = { + DRAG_ANCHOR_TOP_LEFT, + DRAG_ANCHOR_TOP_RIGHT, + DRAG_ANCHOR_BOTTOM_RIGHT, + DRAG_ANCHOR_BOTTOM_LEFT, + }; - undo_redo->commit_action(); - } else { - undo_redo->create_action(TTR("Edit CanvasItem")); - - List<Node *> selection = editor_selection->get_selected_node_list(); - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - - Variant state = canvas_item->_edit_get_state(); - undo_redo->add_do_method(canvas_item, "_edit_set_state", state); - undo_redo->add_undo_method(canvas_item, "_edit_set_state", se->undo_state); - { - Node2D *pvt = Object::cast_to<Node2D>(canvas_item); - if (pvt && pvt->_edit_use_pivot()) { - undo_redo->add_do_method(canvas_item, "_edit_set_pivot", pvt->_edit_get_pivot()); - undo_redo->add_undo_method(canvas_item, "_edit_set_pivot", se->undo_pivot); - } - - Control *cnt = Object::cast_to<Control>(canvas_item); - if (cnt) { - undo_redo->add_do_method(canvas_item, "set_pivot_offset", cnt->get_pivot_offset()); - undo_redo->add_undo_method(canvas_item, "set_pivot_offset", se->undo_pivot); - } + for (int i = 0; i < 4; i++) { + if (anchor_rects[i].has_point(b->get_position())) { + if ((anchor_pos[0] == anchor_pos[2]) && (anchor_pos[0].distance_to(b->get_position()) < anchor_handle->get_size().length() / 3.0)) { + drag_type = DRAG_ANCHOR_ALL; + } else { + drag_type = dragger[i]; } + drag_from = transform.affine_inverse().xform(b->get_position()); + drag_selection = List<CanvasItem *>(); + drag_selection.push_back(control); + _save_canvas_item_state(drag_selection); + return true; } - undo_redo->commit_action(); } } - - drag = DRAG_NONE; - viewport->update(); - can_move_pivot = false; } + } + } - if (box_selecting) { - // Stop box selection - Node *scene = editor->get_edited_scene(); - if (scene) { + if (drag_type == DRAG_ANCHOR_TOP_LEFT || drag_type == DRAG_ANCHOR_TOP_RIGHT || drag_type == DRAG_ANCHOR_BOTTOM_RIGHT || drag_type == DRAG_ANCHOR_BOTTOM_LEFT || drag_type == DRAG_ANCHOR_ALL) { + // Drag the anchor + if (m.is_valid()) { + _restore_canvas_item_state(drag_selection); + Control *control = Object::cast_to<Control>(drag_selection[0]); - List<CanvasItem *> selitems; + drag_to = transform.affine_inverse().xform(m->get_position()); - Point2 bsfrom = transform.xform(drag_from); - Point2 bsto = transform.xform(box_selecting_to); - if (bsfrom.x > bsto.x) - SWAP(bsfrom.x, bsto.x); - if (bsfrom.y > bsto.y) - SWAP(bsfrom.y, bsto.y); + Transform2D xform = control->get_global_transform_with_canvas().affine_inverse(); - _find_canvas_items_at_rect(Rect2(bsfrom, bsto - bsfrom), scene, transform, Transform2D(), &selitems); + 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 = xform.affine_inverse().xform(_anchor_to_position(control, previous_anchor)); - for (List<CanvasItem *>::Element *E = selitems.front(); E; E = E->next()) { + Vector2 new_anchor = xform.xform(snap_point(previous_anchor + (drag_to - drag_from), SNAP_GRID | SNAP_OTHER_NODES, control, SNAP_NODE_PARENT | SNAP_NODE_SIDES | SNAP_NODE_CENTER)); + new_anchor = _position_to_anchor(control, new_anchor).snapped(Vector2(0.001, 0.001)); - _append_canvas_item(E->get()); - } - } + bool use_single_axis = m->get_shift(); + Vector2 drag_vector = xform.xform(drag_to) - xform.xform(drag_from); + bool use_y = Math::abs(drag_vector.y) > Math::abs(drag_vector.x); - box_selecting = false; - viewport->update(); + switch (drag_type) { + case DRAG_ANCHOR_TOP_LEFT: + if (!use_single_axis || !use_y) control->set_anchor(MARGIN_LEFT, new_anchor.x, false, false); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_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); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_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); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_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); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_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); + if (!use_single_axis || !use_y) control->set_anchor(MARGIN_RIGHT, new_anchor.x, false, true); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_TOP, new_anchor.y, false, true); + if (!use_single_axis || use_y) control->set_anchor(MARGIN_BOTTOM, new_anchor.y, false, true); + break; + default: + break; } - return; + return true; + } + + // Confirms new anchor position + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && !b->is_pressed()) { + _commit_canvas_item_state(drag_selection, TTR("Move anchor")); + drag_type = DRAG_NONE; + return true; } - // -- From now we consider that the button is BUTTON_LEFT and that it is pressed -- + // Cancel a drag + if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { + _restore_canvas_item_state(drag_selection); + drag_type = DRAG_NONE; + viewport->update(); + return true; + } + } + return false; +} - Map<ObjectID, BoneList>::Element *Cbone = NULL; //closest +bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; - { - bone_ik_list.clear(); - float closest_dist = 1e20; - int bone_width = EditorSettings::get_singleton()->get("editors/2d/bone_width"); - for (Map<ObjectID, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { + // Drag resize handles + if (drag_type == DRAG_NONE) { + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + if (selection.size() == 1) { + CanvasItem *canvas_item = selection[0]; + if (canvas_item->_edit_use_rect()) { + Rect2 rect = canvas_item->_edit_get_rect(); + Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); + + Vector2 endpoints[4] = { + xform.xform(rect.position), + xform.xform(rect.position + Vector2(rect.size.x, 0)), + xform.xform(rect.position + rect.size), + xform.xform(rect.position + Vector2(0, rect.size.y)) + }; + + DragType dragger[] = { + DRAG_TOP_LEFT, + DRAG_TOP, + DRAG_TOP_RIGHT, + DRAG_RIGHT, + DRAG_BOTTOM_RIGHT, + DRAG_BOTTOM, + DRAG_BOTTOM_LEFT, + DRAG_LEFT + }; + + DragType resize_drag = DRAG_NONE; + float radius = (select_handle->get_size().width / 2) * 1.5; - if (E->get().from == E->get().to) - continue; - Vector2 s[2] = { - E->get().from, - E->get().to - }; + for (int i = 0; i < 4; i++) { + int prev = (i + 3) % 4; + int next = (i + 1) % 4; + + Vector2 ofs = ((endpoints[i] - endpoints[prev]).normalized() + ((endpoints[i] - endpoints[next]).normalized())).normalized(); + ofs *= (select_handle->get_size().width / 2); + ofs += endpoints[i]; + if (ofs.distance_to(b->get_position()) < radius) + resize_drag = dragger[i * 2]; + + ofs = (endpoints[i] + endpoints[next]) / 2; + ofs += (endpoints[next] - endpoints[i]).tangent().normalized() * (select_handle->get_size().width / 2); + if (ofs.distance_to(b->get_position()) < radius) + resize_drag = dragger[i * 2 + 1]; + } - Vector2 p = Geometry::get_closest_point_to_segment_2d(b->get_position(), s); - float d = p.distance_to(b->get_position()); - if (d < bone_width && d < closest_dist) { - Cbone = E; - closest_dist = d; + if (resize_drag != DRAG_NONE) { + drag_type = resize_drag; + drag_from = transform.affine_inverse().xform(b->get_position()); + drag_selection = List<CanvasItem *>(); + drag_selection.push_back(canvas_item); + _save_canvas_item_state(drag_selection); + return true; + } } } + } + } - if (Cbone) { - Node2D *b = Object::cast_to<Node2D>(ObjectDB::get_instance(Cbone->get().bone)); - - if (b) { - - bool ik_found = false; - - bool first = true; - - while (b) { + if (drag_type == DRAG_LEFT || drag_type == DRAG_RIGHT || drag_type == DRAG_TOP || drag_type == DRAG_BOTTOM || + drag_type == DRAG_TOP_LEFT || drag_type == DRAG_TOP_RIGHT || drag_type == DRAG_BOTTOM_LEFT || drag_type == DRAG_BOTTOM_RIGHT) { + // Resize the node + if (m.is_valid()) { + CanvasItem *canvas_item = drag_selection[0]; + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); + //Reset state + canvas_item->_edit_set_state(se->undo_state); - CanvasItem *pi = b->get_parent_item(); - if (!pi) - break; + bool uniform = m->get_shift(); + bool symmetric = m->get_alt(); - float len = pi->get_global_transform().get_origin().distance_to(b->get_global_position()); - b = Object::cast_to<Node2D>(pi); - if (!b) - break; + Rect2 local_rect = canvas_item->_edit_get_rect(); + float aspect = local_rect.get_size().y / local_rect.get_size().x; + Point2 current_begin = local_rect.get_position(); + Point2 current_end = local_rect.get_position() + local_rect.get_size(); + Point2 max_begin = (symmetric) ? (current_begin + current_end - canvas_item->_edit_get_minimum_size()) / 2.0 : current_end - canvas_item->_edit_get_minimum_size(); + Point2 min_end = (symmetric) ? (current_begin + current_end + canvas_item->_edit_get_minimum_size()) / 2.0 : current_begin + canvas_item->_edit_get_minimum_size(); + Point2 center = (current_begin + current_end) / 2.0; + + drag_to = transform.affine_inverse().xform(m->get_position()); + + Transform2D xform = canvas_item->get_global_transform_with_canvas().affine_inverse(); + + Point2 drag_to_snapped_begin = snap_point(xform.affine_inverse().xform(current_begin) + (drag_to - drag_from), SNAP_NODE_ANCHORS | SNAP_NODE_PARENT | SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL, canvas_item); + Point2 drag_to_snapped_end = snap_point(xform.affine_inverse().xform(current_end) + (drag_to - drag_from), SNAP_NODE_ANCHORS | SNAP_NODE_PARENT | SNAP_OTHER_NODES | SNAP_GRID | SNAP_PIXEL, canvas_item); + Point2 drag_begin = xform.xform(drag_to_snapped_begin); + Point2 drag_end = xform.xform(drag_to_snapped_end); + + // Horizontal resize + if (drag_type == DRAG_LEFT || drag_type == DRAG_TOP_LEFT || drag_type == DRAG_BOTTOM_LEFT) { + current_begin.x = MIN(drag_begin.x, max_begin.x); + } else if (drag_type == DRAG_RIGHT || drag_type == DRAG_TOP_RIGHT || drag_type == DRAG_BOTTOM_RIGHT) { + current_end.x = MAX(drag_end.x, min_end.x); + } - if (first) { + // Vertical resize + if (drag_type == DRAG_TOP || drag_type == DRAG_TOP_LEFT || drag_type == DRAG_TOP_RIGHT) { + current_begin.y = MIN(drag_begin.y, max_begin.y); + } else if (drag_type == DRAG_BOTTOM || drag_type == DRAG_BOTTOM_LEFT || drag_type == DRAG_BOTTOM_RIGHT) { + current_end.y = MAX(drag_end.y, min_end.y); + } - bone_orig_xform = b->get_global_transform(); - first = false; + // Uniform resize + if (uniform) { + if (drag_type == DRAG_LEFT || drag_type == DRAG_RIGHT) { + current_end.y = current_begin.y + aspect * (current_end.x - current_begin.x); + } else if (drag_type == DRAG_TOP || drag_type == DRAG_BOTTOM) { + current_end.x = current_begin.x + (current_end.y - current_begin.y) / aspect; + } else { + if (aspect >= 1.0) { + if (drag_type == DRAG_TOP_LEFT || drag_type == DRAG_TOP_RIGHT) { + current_begin.y = current_end.y - aspect * (current_end.x - current_begin.x); + } else { + current_end.y = current_begin.y + aspect * (current_end.x - current_begin.x); } - - BoneIK bik; - bik.node = b; - bik.len = len; - bik.orig_state = b->_edit_get_state(); - - bone_ik_list.push_back(bik); - - if (b->has_meta("_edit_ik_")) { - - ik_found = bone_ik_list.size() > 1; - break; + } else { + if (drag_type == DRAG_TOP_LEFT || drag_type == DRAG_BOTTOM_LEFT) { + current_begin.x = current_end.x - (current_end.y - current_begin.y) / aspect; + } else { + current_end.x = current_begin.x + (current_end.y - current_begin.y) / aspect; } - - if (!pi->has_meta("_edit_bone_")) - break; } - - if (!ik_found) - bone_ik_list.clear(); } } - } - - // Single selected item - CanvasItem *canvas_item = _get_single_item(); - if (canvas_item) { - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - ERR_FAIL_COND(!se); - - Point2 click = b->get_position(); - - // Rotation - if ((b->get_control() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { - drag = DRAG_ROTATE; - drag_from = transform.affine_inverse().xform(click); - se->undo_state = canvas_item->_edit_get_state(); - if (Object::cast_to<Node2D>(canvas_item)) - se->undo_pivot = Object::cast_to<Node2D>(canvas_item)->_edit_get_pivot(); - if (Object::cast_to<Control>(canvas_item)) - se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); - se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); - se->pre_drag_rect = canvas_item->_edit_get_rect(); - return; - } - if (tool == TOOL_SELECT) { - // Open a sub-scene on double-click - if (b->is_doubleclick()) { - if (canvas_item->get_filename() != "" && canvas_item != editor->get_edited_scene()) { - editor->open_request(canvas_item->get_filename()); - return; - } - } - - // Drag resize handles - drag = _get_resize_handle_drag_type(click, drag_point_from); - if (drag != DRAG_NONE) { - drag_from = transform.affine_inverse().xform(click); - se->undo_state = canvas_item->_edit_get_state(); - if (Object::cast_to<Node2D>(canvas_item)) - se->undo_pivot = Object::cast_to<Node2D>(canvas_item)->_edit_get_pivot(); - if (Object::cast_to<Control>(canvas_item)) - se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); - se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); - se->pre_drag_rect = canvas_item->_edit_get_rect(); - return; + // Symmetric resize + if (symmetric) { + if (drag_type == DRAG_LEFT || drag_type == DRAG_TOP_LEFT || drag_type == DRAG_BOTTOM_LEFT) { + current_end.x = 2.0 * center.x - current_begin.x; + } else if (drag_type == DRAG_RIGHT || drag_type == DRAG_TOP_RIGHT || drag_type == DRAG_BOTTOM_RIGHT) { + current_begin.x = 2.0 * center.x - current_end.x; } - - // Drag anchor handles - Control *control = Object::cast_to<Control>(canvas_item); - if (control && show_helpers && !Object::cast_to<Container>(control->get_parent())) { - drag = _get_anchor_handle_drag_type(click, drag_point_from); - if (drag != DRAG_NONE) { - drag_from = transform.affine_inverse().xform(click); - se->undo_state = canvas_item->_edit_get_state(); - se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); - se->pre_drag_rect = canvas_item->_edit_get_rect(); - return; - } + if (drag_type == DRAG_TOP || drag_type == DRAG_TOP_LEFT || drag_type == DRAG_TOP_RIGHT) { + current_end.y = 2.0 * center.y - current_begin.y; + } else if (drag_type == DRAG_BOTTOM || drag_type == DRAG_BOTTOM_LEFT || drag_type == DRAG_BOTTOM_RIGHT) { + current_begin.y = 2.0 * center.y - current_end.y; } } + canvas_item->_edit_set_rect(Rect2(current_begin, current_end - current_begin)); + return true; } - // Multiple selected items - Point2 click = b->get_position(); + // Confirm resize + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && !b->is_pressed()) { + _commit_canvas_item_state(drag_selection, TTR("Resize CanvasItem")); + drag_type = DRAG_NONE; + viewport->update(); + return true; + } - if ((b->get_alt() || tool == TOOL_MOVE) && get_item_count()) { - // Drag the nodes - _prepare_drag(click); + // Cancel a drag + if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { + _restore_canvas_item_state(drag_selection); + drag_type = DRAG_NONE; viewport->update(); - return; + return true; } + } + return false; +} + +bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; + Ref<InputEventKey> k = p_event; - CanvasItem *c = NULL; - if (Cbone) { - c = Object::cast_to<CanvasItem>(ObjectDB::get_instance(Cbone->get().bone)); - if (c) - c = c->get_parent_item(); + if (drag_type == DRAG_NONE) { + //Start moving the nodes + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + if ((b->get_alt() || tool == TOOL_MOVE) && selection.size() > 0) { + drag_type = DRAG_ALL; + drag_from = transform.affine_inverse().xform(b->get_position()); + drag_selection = selection; + _save_canvas_item_state(drag_selection); + return true; + } } + } - Node *scene = editor->get_edited_scene(); - if (!scene) - return; - // Find the item to select - if (!c) { - Vector<_SelectResult> selection; - _find_canvas_items_at_pos(click, scene, transform, Transform2D(), selection, 1); - if (!selection.empty()) - c = selection[0].item; + if (drag_type == DRAG_ALL) { + // Move the nodes + if (m.is_valid()) { + _restore_canvas_item_state(drag_selection, true); + + drag_to = transform.affine_inverse().xform(m->get_position()); + Point2 previous_pos; + if (drag_selection.size() == 1) { + Transform2D xform = drag_selection[0]->get_global_transform_with_canvas() * drag_selection[0]->get_transform().affine_inverse(); + previous_pos = xform.xform(drag_selection[0]->_edit_get_position()); + } else { + previous_pos = _get_encompassing_rect_from_list(drag_selection).position; + } + Point2 new_pos = snap_point(previous_pos + (drag_to - drag_from), SNAP_GRID | SNAP_GUIDES | SNAP_PIXEL | SNAP_NODE_PARENT | SNAP_NODE_ANCHORS | SNAP_OTHER_NODES); + bool single_axis = m->get_shift(); + if (single_axis) { + if (ABS(new_pos.x - previous_pos.x) > ABS(new_pos.y - previous_pos.y)) { + new_pos.y = previous_pos.y; + } else { + new_pos.x = previous_pos.x; + } + } + + bool force_no_IK = m->get_alt(); + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); + Transform2D xform = canvas_item->get_global_transform_with_canvas().affine_inverse() * canvas_item->get_transform(); - CanvasItem *cn = c; - while (cn) { - if (cn->has_meta("_edit_group_")) { - c = cn; + Node2D *node2d = Object::cast_to<Node2D>(canvas_item); + if (node2d && se->pre_drag_bones_undo_state.size() > 0 && !force_no_IK) { + _solve_IK(node2d, new_pos); + } else { + canvas_item->_edit_set_position(canvas_item->_edit_get_position() + xform.xform(new_pos) - xform.xform(previous_pos)); } - cn = cn->get_parent_item(); } + return true; } - Node *n = c; - while ((n && n != scene && n->get_owner() != scene) || (n && !n->is_class("CanvasItem"))) { - n = n->get_parent(); - }; + // Confirm the move (only if it was moved) + if (b.is_valid() && !b->is_pressed() && b->get_button_index() == BUTTON_LEFT && (drag_type == DRAG_ALL)) { + if (transform.affine_inverse().xform(b->get_position()) != drag_from) { + _commit_canvas_item_state(drag_selection, TTR("Move CanvasItem"), true); + } - if (n) { - c = Object::cast_to<CanvasItem>(n); - } else { - c = NULL; + drag_type = DRAG_NONE; + viewport->update(); + return true; } - // Select the item - additive_selection = b->get_shift(); - if (!c) { - _select_click_on_empty_area(click, additive_selection, true); - } else if (!_select_click_on_item(c, click, additive_selection, true)) { - return; + // Cancel a drag + if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { + _restore_canvas_item_state(drag_selection, true); + drag_type = DRAG_NONE; + viewport->update(); + return true; } } - Ref<InputEventMouseMotion> m = p_event; - if (m.is_valid()) { - // Mouse motion event - _update_cursor(); - - if (box_selecting) { - // Update box selection - box_selecting_to = transform.affine_inverse().xform(m->get_position()); - viewport->update(); - return; + // Move the canvas items with the arrow keys + if (k.is_valid() && k->is_pressed() && tool == TOOL_SELECT && + (k->get_scancode() == KEY_UP || k->get_scancode() == KEY_DOWN || k->get_scancode() == KEY_LEFT || k->get_scancode() == KEY_RIGHT)) { + if (!k->is_echo()) { + // Start moving the canvas items with the keyboard + drag_selection = _get_edited_canvas_items(); + drag_type = DRAG_KEY_MOVE; + drag_from = Vector2(); + drag_to = Vector2(); + _save_canvas_item_state(drag_selection, true); } - if (drag == DRAG_NONE) { - bool space_pressed = Input::get_singleton()->is_key_pressed(KEY_SPACE); - bool simple_panning = EditorSettings::get_singleton()->get("editors/2d/simple_spacebar_panning"); - int button = m->get_button_mask(); + if (drag_selection.size() > 0) { - // Check if any of the panning triggers are activated - bool panning_tool = (button & BUTTON_MASK_LEFT) && tool == TOOL_PAN; - bool panning_middle_button = button & BUTTON_MASK_MIDDLE; - bool panning_spacebar = (button & BUTTON_MASK_LEFT) && space_pressed; - bool panning_spacebar_simple = space_pressed && simple_panning; + _restore_canvas_item_state(drag_selection, true); - if (panning_tool || panning_middle_button || panning_spacebar || panning_spacebar_simple) { - // Pan the viewport - Point2i relative; - if (bool(EditorSettings::get_singleton()->get("editors/2d/warped_mouse_panning"))) { - relative = Input::get_singleton()->warp_mouse_motion(m, viewport->get_global_rect()); + bool move_local_base = k->get_alt(); + bool move_local_base_rotated = k->get_control() || k->get_metakey(); + + Vector2 dir; + if (k->get_scancode() == KEY_UP) + dir += Vector2(0, -1); + else if (k->get_scancode() == KEY_DOWN) + dir += Vector2(0, 1); + else if (k->get_scancode() == KEY_LEFT) + dir += Vector2(-1, 0); + else if (k->get_scancode() == KEY_RIGHT) + dir += Vector2(1, 0); + if (k->get_shift()) + dir *= grid_step * Math::pow(2.0, grid_step_multiplier); + + drag_to += dir; + if (k->get_shift()) + drag_to = drag_to.snapped(grid_step * Math::pow(2.0, grid_step_multiplier)); + + Point2 previous_pos; + if (drag_selection.size() == 1) { + Transform2D xform = drag_selection[0]->get_global_transform_with_canvas() * drag_selection[0]->get_transform().affine_inverse(); + previous_pos = xform.xform(drag_selection[0]->_edit_get_position()); + } else { + previous_pos = _get_encompassing_rect_from_list(drag_selection).position; + } + + Point2 new_pos; + if (drag_selection.size() == 1) { + Node2D *node_2d = Object::cast_to<Node2D>(drag_selection[0]); + if (node_2d && move_local_base_rotated) { + Transform2D m; + m.rotate(node_2d->get_rotation()); + new_pos += m.xform(drag_to); + } else if (move_local_base) { + new_pos += drag_to; } else { - relative = m->get_relative(); + new_pos = previous_pos + (drag_to - drag_from); } + } else { + new_pos = previous_pos + (drag_to - drag_from); + } - h_scroll->set_value(h_scroll->get_value() - relative.x / zoom); - v_scroll->set_value(v_scroll->get_value() - relative.y / zoom); + for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); + Transform2D xform = canvas_item->get_global_transform_with_canvas().affine_inverse() * canvas_item->get_transform(); + + Node2D *node2d = Object::cast_to<Node2D>(canvas_item); + if (node2d && se->pre_drag_bones_undo_state.size() > 0) { + _solve_IK(node2d, new_pos); + } else { + canvas_item->_edit_set_position(canvas_item->_edit_get_position() + xform.xform(new_pos) - xform.xform(previous_pos)); + } } + } + return true; + } - return; + if (k.is_valid() && !k->is_pressed() && drag_type == DRAG_KEY_MOVE && tool == TOOL_SELECT && + (k->get_scancode() == KEY_UP || k->get_scancode() == KEY_DOWN || k->get_scancode() == KEY_LEFT || k->get_scancode() == KEY_RIGHT)) { + // Confirm canvas items move by arrow keys + if ((!Input::get_singleton()->is_key_pressed(KEY_UP)) && + (!Input::get_singleton()->is_key_pressed(KEY_DOWN)) && + (!Input::get_singleton()->is_key_pressed(KEY_LEFT)) && + (!Input::get_singleton()->is_key_pressed(KEY_RIGHT))) { + _commit_canvas_item_state(drag_selection, TTR("Move CanvasItem"), true); + drag_type = DRAG_NONE; } + viewport->update(); + return true; + } - List<Node *> selection = editor_selection->get_selected_node_list(); - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + if (k.is_valid() && (k->get_scancode() == KEY_UP || k->get_scancode() == KEY_DOWN || k->get_scancode() == KEY_LEFT || k->get_scancode() == KEY_RIGHT)) { + // Accept the key event in any case + return true; + } + return false; +} - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; +bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; + Ref<InputEventKey> k = p_event; - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; + if (drag_type == DRAG_NONE) { + if (b.is_valid() && + ((b->get_button_index() == BUTTON_RIGHT && b->get_alt() && tool == TOOL_SELECT) || + (b->get_button_index() == BUTTON_LEFT && tool == TOOL_LIST_SELECT))) { + // Popup the selection menu list + Point2 click = transform.affine_inverse().xform(b->get_position()); - bool dragging_bone = drag == DRAG_ALL && selection.size() == 1 && bone_ik_list.size(); + _get_canvas_items_at_pos(click, selection_results); - if (!dragging_bone) { - canvas_item->_edit_set_state(se->undo_state); //reset state and reapply - if (Object::cast_to<Node2D>(canvas_item)) - Object::cast_to<Node2D>(canvas_item)->_edit_set_pivot(se->undo_pivot); - if (Object::cast_to<Control>(canvas_item)) - Object::cast_to<Control>(canvas_item)->set_pivot_offset(se->undo_pivot); - } + if (selection_results.size() == 1) { + CanvasItem *item = selection_results[0].item; + selection_results.clear(); - Vector2 dfrom = drag_from; - Vector2 dto = transform.affine_inverse().xform(m->get_position()); - if (canvas_item->has_meta("_edit_lock_")) - continue; + _select_click_on_item(item, click, b->get_shift()); - if (drag == DRAG_ROTATE) { - // Rotate the node - Vector2 center = canvas_item->get_global_transform_with_canvas().get_origin(); - { - Node2D *node = Object::cast_to<Node2D>(canvas_item); - - if (node) { - real_t angle = node->get_rotation(); - node->set_rotation(snap_angle(angle + (dfrom - center).angle_to(dto - center), angle)); - display_rotate_to = dto; - display_rotate_from = center; - viewport->update(); - } - } + return true; + } else if (!selection_results.empty()) { + // Sorts items according the their z-index + selection_results.sort(); - { - Control *node = Object::cast_to<Control>(canvas_item); + NodePath root_path = get_tree()->get_edited_scene_root()->get_path(); + StringName root_name = root_path.get_name(root_path.get_name_count() - 1); - if (node) { - real_t angle = node->get_rotation(); - display_rotate_to = dto; - display_rotate_from = center + node->get_pivot_offset().rotated(angle); - node->set_rotation(snap_angle(angle + (dfrom - display_rotate_from).angle_to(display_rotate_to - display_rotate_from), angle)); - viewport->update(); - } - } + for (int i = 0; i < selection_results.size(); i++) { + CanvasItem *item = selection_results[i].item; - continue; - } + Ref<Texture> icon; + if (item->has_meta("_editor_icon")) + icon = item->get_meta("_editor_icon"); + else + icon = get_icon(has_icon(item->get_class(), "EditorIcons") ? item->get_class() : String("Object"), "EditorIcons"); + String node_path = "/" + root_name + "/" + root_path.rel_path_to(item->get_path()); - bool uniform = m->get_shift(); - bool symmetric = m->get_alt(); + selection_menu->add_item(item->get_name()); + selection_menu->set_item_icon(i, icon); + selection_menu->set_item_metadata(i, node_path); + selection_menu->set_item_tooltip(i, String(item->get_name()) + "\nType: " + item->get_class() + "\nPath: " + node_path); + } - Vector2 drag_vector = - canvas_item->get_global_transform_with_canvas().affine_inverse().xform(dto) - - canvas_item->get_global_transform_with_canvas().affine_inverse().xform(dfrom); - - switch (drag) { - case DRAG_ALL: - case DRAG_NODE_2D: - dto -= drag_from - drag_point_from; - if (uniform) { - if (ABS(dto.x - drag_point_from.x) > ABS(dto.y - drag_point_from.y)) { - dto.y = drag_point_from.y; - } else { - dto.x = drag_point_from.x; - } - } - break; + selection_menu_additive_selection = b->get_shift(); + selection_menu->set_global_position(b->get_global_position()); + selection_menu->popup(); + return true; } + } - Control *control = Object::cast_to<Control>(canvas_item); - if (control) { - // Drag and snap the anchor - Transform2D c_trans_rev = canvas_item->get_global_transform_with_canvas().affine_inverse(); + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) { + // Single item selection + Point2 click = transform.affine_inverse().xform(b->get_position()); - Vector2 anchor = c_trans_rev.xform(dto - drag_from + drag_point_from); - anchor = _position_to_anchor(control, anchor); + Node *scene = editor->get_edited_scene(); + if (!scene) + return true; - Vector2 anchor_snapped = c_trans_rev.xform(snap_point(dto - drag_from + drag_point_from, SNAP_GRID | SNAP_GUIDES | SNAP_OTHER_NODES, _get_single_item(), SNAP_NODE_PARENT | SNAP_NODE_SIDES)); - anchor_snapped = _position_to_anchor(control, anchor_snapped).snapped(Vector2(0.00001, 0.00001)); + // Find the item to select + CanvasItem *canvas_item = NULL; + Vector<_SelectResult> selection; + _get_canvas_items_at_pos(click, selection, editor_selection->get_selection().empty() ? 1 : 0); - bool use_y = Math::abs(drag_vector.y) > Math::abs(drag_vector.x); + for (int i = 0; i < selection.size(); i++) { + if (editor_selection->is_selected(selection[i].item)) { + // Drag the node(s) if requested + List<CanvasItem *> selection = _get_edited_canvas_items(); - switch (drag) { - case DRAG_ANCHOR_TOP_LEFT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); - continue; - break; - case DRAG_ANCHOR_TOP_RIGHT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); - continue; - break; - case DRAG_ANCHOR_BOTTOM_RIGHT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); - break; - case DRAG_ANCHOR_BOTTOM_LEFT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); - continue; - break; - case DRAG_ANCHOR_ALL: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); - continue; - break; + drag_type = DRAG_ALL; + drag_selection = selection; + drag_from = click; + _save_canvas_item_state(drag_selection); + + return true; } } - dfrom = drag_point_from; - dto = snap_point(dto, SNAP_NODE_ANCHORS | SNAP_NODE_PARENT | SNAP_OTHER_NODES | SNAP_GRID | SNAP_GUIDES | SNAP_PIXEL, _get_single_item()); - - drag_vector = - canvas_item->get_global_transform_with_canvas().affine_inverse().xform(dto) - - canvas_item->get_global_transform_with_canvas().affine_inverse().xform(dfrom); + if (!selection.empty()) + canvas_item = selection[0].item; - Rect2 local_rect = canvas_item->_edit_get_rect(); - Vector2 begin = local_rect.position; - Vector2 end = local_rect.position + local_rect.size; - Vector2 minsize = canvas_item->_edit_get_minimum_size(); + if (!canvas_item) { + // Start a box selection + if (!b->get_shift()) { + // Clear the selection if not additive + editor_selection->clear(); + viewport->update(); + }; - if (uniform) { - // Keep the height/width ratio of the item - float aspect = local_rect.size.aspect(); - switch (drag) { - case DRAG_LEFT: - drag_vector.y = -drag_vector.x / aspect; - break; - case DRAG_RIGHT: - drag_vector.y = drag_vector.x / aspect; - break; - case DRAG_TOP: - drag_vector.x = -drag_vector.y * aspect; - break; - case DRAG_BOTTOM: - drag_vector.x = drag_vector.y * aspect; - break; - case DRAG_BOTTOM_LEFT: - case DRAG_TOP_RIGHT: - if (aspect > 1.0) { // width > height, take x as reference - drag_vector.y = -drag_vector.x / aspect; - } else { // height > width, take y as reference - drag_vector.x = -drag_vector.y * aspect; - } - break; - case DRAG_BOTTOM_RIGHT: - case DRAG_TOP_LEFT: - if (aspect > 1.0) { // width > height, take x as reference - drag_vector.y = drag_vector.x / aspect; - } else { // height > width, take y as reference - drag_vector.x = drag_vector.y * aspect; - } - break; - } + drag_from = click; + drag_type = DRAG_BOX_SELECTION; + box_selecting_to = drag_from; + return true; } else { - switch (drag) { - case DRAG_RIGHT: - case DRAG_LEFT: - drag_vector.y = 0; - break; - case DRAG_TOP: - case DRAG_BOTTOM: - drag_vector.x = 0; - break; + bool still_selected = _select_click_on_item(canvas_item, click, b->get_shift()); + // Start dragging + if (still_selected) { + // Drag the node(s) if requested + List<CanvasItem *> selection = _get_edited_canvas_items(); + + drag_type = DRAG_ALL; + drag_selection = selection; + drag_from = click; + _save_canvas_item_state(drag_selection); } + // Select the item + return true; } + } + } - switch (drag) { - case DRAG_ALL: - begin += drag_vector; - end += drag_vector; - break; - case DRAG_RIGHT: - case DRAG_BOTTOM: - case DRAG_BOTTOM_RIGHT: - incend(begin.x, end.x, drag_vector.x, minsize.x, symmetric); - incend(begin.y, end.y, drag_vector.y, minsize.y, symmetric); - break; - case DRAG_TOP_LEFT: - incbeg(begin.x, end.x, drag_vector.x, minsize.x, symmetric); - incbeg(begin.y, end.y, drag_vector.y, minsize.y, symmetric); - break; - case DRAG_TOP: - case DRAG_TOP_RIGHT: - incbeg(begin.y, end.y, drag_vector.y, minsize.y, symmetric); - incend(begin.x, end.x, drag_vector.x, minsize.x, symmetric); - break; - case DRAG_LEFT: - case DRAG_BOTTOM_LEFT: - incbeg(begin.x, end.x, drag_vector.x, minsize.x, symmetric); - incend(begin.y, end.y, drag_vector.y, minsize.y, symmetric); - break; - - case DRAG_PIVOT: + if (drag_type == DRAG_BOX_SELECTION) { + if (b.is_valid() && !b->is_pressed() && b->get_button_index() == BUTTON_LEFT) { + // Confirms box selection + Node *scene = editor->get_edited_scene(); + if (scene) { + List<CanvasItem *> selitems; - if (Object::cast_to<Node2D>(canvas_item)) { - Node2D *n2d = Object::cast_to<Node2D>(canvas_item); - n2d->_edit_set_pivot(se->undo_pivot + drag_vector); - } - if (Object::cast_to<Control>(canvas_item)) { - Object::cast_to<Control>(canvas_item)->set_pivot_offset(se->undo_pivot + drag_vector); - } - continue; - break; - case DRAG_NODE_2D: + Point2 bsfrom = drag_from; + Point2 bsto = box_selecting_to; + if (bsfrom.x > bsto.x) + SWAP(bsfrom.x, bsto.x); + if (bsfrom.y > bsto.y) + SWAP(bsfrom.y, bsto.y); - ERR_FAIL_COND(!Object::cast_to<Node2D>(canvas_item)); - Object::cast_to<Node2D>(canvas_item)->set_global_position(dto); - continue; - break; + _find_canvas_items_in_rect(Rect2(bsfrom, bsto - bsfrom), scene, &selitems); + for (List<CanvasItem *>::Element *E = selitems.front(); E; E = E->next()) { + editor_selection->add_node(E->get()); + } } - if (!dragging_bone) { - - local_rect.position = begin; - local_rect.size = end - begin; - canvas_item->_edit_set_rect(local_rect); - - } else { - //ok, all that had to be done was done, now solve IK - - Node2D *n2d = Object::cast_to<Node2D>(canvas_item); - Transform2D final_xform = bone_orig_xform; + drag_type = DRAG_NONE; + viewport->update(); + return true; + } - if (n2d) { + if (b.is_valid() && b->is_pressed() && b->get_button_index() == BUTTON_RIGHT) { + // Cancel box selection + drag_type = DRAG_NONE; + viewport->update(); + return true; + } - float total_len = 0; - for (List<BoneIK>::Element *E = bone_ik_list.front(); E; E = E->next()) { - if (E->prev()) - total_len += E->get().len; - E->get().pos = E->get().node->get_global_transform().get_origin(); - } + if (m.is_valid()) { + // Update box selection + box_selecting_to = transform.affine_inverse().xform(m->get_position()); + viewport->update(); + return true; + } + } - { + if (k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_ESCAPE && drag_type == DRAG_NONE && tool == TOOL_SELECT) { + // Unselect everything + editor_selection->clear(); + viewport->update(); + } + return false; +} - final_xform.elements[2] += dto - dfrom; //final_xform.affine_inverse().basis_xform_inv(drag_vector); - //n2d->set_global_transform(final_xform); - } +bool CanvasItemEditor::_gui_input_hover(const Ref<InputEvent> &p_event) { - CanvasItem *last = bone_ik_list.back()->get().node; - if (!last) + Ref<InputEventMouseMotion> m = p_event; + if (m.is_valid()) { + if (drag_type == DRAG_NONE && tool == TOOL_SELECT) { + Point2 click = transform.affine_inverse().xform(m->get_position()); + + //Checks if the hovered items changed, update the viewport if so + Vector<_SelectResult> hovering_results_tmp; + _get_canvas_items_at_pos(click, hovering_results_tmp); + hovering_results_tmp.sort(); + bool changed = false; + if (hovering_results.size() == hovering_results_tmp.size()) { + for (int i = 0; i < hovering_results.size(); i++) { + if (hovering_results[i].item != hovering_results_tmp[i].item) { + changed = true; break; - - Vector2 root_pos = last->get_global_transform().get_origin(); - Vector2 leaf_pos = final_xform.get_origin(); - - if ((leaf_pos.distance_to(root_pos)) > total_len) { - //oops dude you went too far - //print_line("TOO FAR!"); - Vector2 rel = leaf_pos - root_pos; - rel = rel.normalized() * total_len; - leaf_pos = root_pos + rel; - } - - bone_ik_list.front()->get().pos = leaf_pos; - - //print_line("BONE IK LIST "+itos(bone_ik_list.size())); - - if (bone_ik_list.size() > 2) { - int solver_iterations = 64; - float solver_k = 0.3; - - for (int i = 0; i < solver_iterations; i++) { - - for (List<BoneIK>::Element *E = bone_ik_list.front(); E; E = E->next()) { - - if (E == bone_ik_list.back()) { - - break; - } - - float len = E->next()->get().len; - - if (E->next() == bone_ik_list.back()) { - - //print_line("back"); - - Vector2 rel = E->get().pos - E->next()->get().pos; - //print_line("PREV "+E->get().pos); - Vector2 desired = E->next()->get().pos + rel.normalized() * len; - //print_line("DESIRED "+desired); - E->get().pos = E->get().pos.linear_interpolate(desired, solver_k); - //print_line("POST "+E->get().pos); - - } else if (E == bone_ik_list.front()) { - //only adjust parent - //print_line("front"); - Vector2 rel = E->next()->get().pos - E->get().pos; - //print_line("PREV "+E->next()->get().pos); - Vector2 desired = E->get().pos + rel.normalized() * len; - //print_line("DESIRED "+desired); - E->next()->get().pos = E->next()->get().pos.linear_interpolate(desired, solver_k); - //print_line("POST "+E->next()->get().pos); - } else { - - Vector2 rel = E->next()->get().pos - E->get().pos; - Vector2 cen = (E->next()->get().pos + E->get().pos) * 0.5; - rel = rel.linear_interpolate(rel.normalized() * len, solver_k); - rel *= 0.5; - E->next()->get().pos = cen + rel; - E->get().pos = cen - rel; - //print_line("mid"); - } - } - } } } + } else { + changed = true; + } - for (List<BoneIK>::Element *E = bone_ik_list.back(); E; E = E->prev()) { - - Node2D *n = E->get().node; - - if (!E->prev()) { - //last goes to what it was - final_xform.set_origin(n->get_global_position()); - n->set_global_transform(final_xform); + if (changed) { + hovering_results = hovering_results_tmp; + viewport->update(); + } - } else { - Vector2 rel = (E->prev()->get().node->get_global_position() - n->get_global_position()).normalized(); - Vector2 rel2 = (E->prev()->get().pos - E->get().pos).normalized(); - float rot = rel.angle_to(rel2); - if (n->get_global_transform().basis_determinant() < 0) { - //mirrored, rotate the other way - rot = -rot; - } + return true; + } + } - n->rotate(rot); - } - } + return false; +} - break; +void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { + bool accepted = false; + if ((accepted = _gui_input_rulers_and_guides(p_event))) { + //printf("Rulers and guides\n"); + } else if ((accepted = editor->get_editor_plugins_over()->forward_gui_input(p_event))) { + //printf("Plugin\n"); + } else if ((accepted = _gui_input_open_scene_on_double_click(p_event))) { + //printf("Open scene on double click\n"); + } else if ((accepted = _gui_input_anchors(p_event))) { + //printf("Anchors\n"); + } else if ((accepted = _gui_input_pivot(p_event))) { + //printf("Set pivot\n"); + } else if ((accepted = _gui_input_resize(p_event))) { + //printf("Resize\n"); + } else if ((accepted = _gui_input_rotate(p_event))) { + //printf("Rotate\n"); + } else if ((accepted = _gui_input_move(p_event))) { + //printf("Move\n"); + } else if ((accepted = _gui_input_zoom_or_pan(p_event))) { + //printf("Zoom or pan\n"); + } else if ((accepted = _gui_input_select(p_event))) { + //printf("Selection\n"); + } + + if (accepted) + accept_event(); + + // Handles the mouse hovering + _gui_input_hover(p_event); + + // Change the cursor + CursorShape c = CURSOR_ARROW; + switch (drag_type) { + case DRAG_NONE: + switch (tool) { + case TOOL_MOVE: + c = CURSOR_MOVE; + break; + case TOOL_EDIT_PIVOT: + c = CURSOR_CROSS; + break; + case TOOL_PAN: + c = CURSOR_DRAG; + break; + default: + break; } - } + break; + case DRAG_LEFT: + case DRAG_RIGHT: + c = CURSOR_HSIZE; + break; + case DRAG_TOP: + case DRAG_BOTTOM: + c = CURSOR_VSIZE; + break; + case DRAG_TOP_LEFT: + case DRAG_BOTTOM_RIGHT: + c = CURSOR_FDIAGSIZE; + break; + case DRAG_TOP_RIGHT: + case DRAG_BOTTOM_LEFT: + c = CURSOR_BDIAGSIZE; + break; + case DRAG_ALL: + c = CURSOR_MOVE; + break; + case DRAG_PAN: + c = CURSOR_DRAG; + default: + break; + } + viewport->set_default_cursor_shape(c); + + // Grab focus + if (!viewport->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field())) { + viewport->call_deferred("grab_focus"); } } @@ -2292,8 +2037,8 @@ void CanvasItemEditor::_draw_percentage_at_position(float p_value, Point2 p_posi void CanvasItemEditor::_draw_focus() { // Draw the focus around the base viewport - if (viewport_base->has_focus()) { - get_stylebox("Focus", "EditorStyles")->draw(viewport_base->get_canvas_item(), Rect2(Point2(), viewport_base->get_size())); + if (viewport->has_focus()) { + get_stylebox("Focus", "EditorStyles")->draw(viewport->get_canvas_item(), Rect2(Point2(), viewport->get_size())); } } @@ -2306,63 +2051,62 @@ void CanvasItemEditor::_draw_guides() { if (EditorNode::get_singleton()->get_edited_scene() && EditorNode::get_singleton()->get_edited_scene()->has_meta("_edit_vertical_guides_")) { Array vguides = EditorNode::get_singleton()->get_edited_scene()->get_meta("_edit_vertical_guides_"); for (int i = 0; i < vguides.size(); i++) { - if (drag == DRAG_V_GUIDE && i == edited_guide_index) + if (drag_type == DRAG_V_GUIDE && i == dragged_guide_index) continue; float x = xform.xform(Point2(vguides[i], 0)).x; - viewport_base->draw_line(Point2(x, 0), Point2(x, viewport_base->get_size().y), guide_color); + viewport->draw_line(Point2(x, 0), Point2(x, viewport->get_size().y), guide_color); } } if (EditorNode::get_singleton()->get_edited_scene() && EditorNode::get_singleton()->get_edited_scene()->has_meta("_edit_horizontal_guides_")) { Array hguides = EditorNode::get_singleton()->get_edited_scene()->get_meta("_edit_horizontal_guides_"); for (int i = 0; i < hguides.size(); i++) { - if (drag == DRAG_H_GUIDE && i == edited_guide_index) + if (drag_type == DRAG_H_GUIDE && i == dragged_guide_index) continue; float y = xform.xform(Point2(0, hguides[i])).y; - viewport_base->draw_line(Point2(0, y), Point2(viewport_base->get_size().x, y), guide_color); + viewport->draw_line(Point2(0, y), Point2(viewport->get_size().x, y), guide_color); } } // Dragged guide Color text_color = get_color("font_color", "Editor"); text_color.a = 0.5; - if (drag == DRAG_DOUBLE_GUIDE || drag == DRAG_V_GUIDE) { - String str = vformat("%d px", xform.affine_inverse().xform(edited_guide_pos).x); + if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE) { + String str = vformat("%d px", xform.affine_inverse().xform(dragged_guide_pos).x); Ref<Font> font = get_font("font", "Label"); Size2 text_size = font->get_string_size(str); - viewport_base->draw_string(font, Point2(edited_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, text_color); - viewport_base->draw_line(Point2(edited_guide_pos.x, 0), Point2(edited_guide_pos.x, viewport_base->get_size().y), guide_color); + viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, text_color); + viewport->draw_line(Point2(dragged_guide_pos.x, 0), Point2(dragged_guide_pos.x, viewport->get_size().y), guide_color); } - if (drag == DRAG_DOUBLE_GUIDE || drag == DRAG_H_GUIDE) { - String str = vformat("%d px", xform.affine_inverse().xform(edited_guide_pos).y); + if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_H_GUIDE) { + String str = vformat("%d px", xform.affine_inverse().xform(dragged_guide_pos).y); Ref<Font> font = get_font("font", "Label"); Size2 text_size = font->get_string_size(str); - viewport_base->draw_string(font, Point2(RULER_WIDTH + 10, edited_guide_pos.y + text_size.y / 2 + 10), str, text_color); - viewport_base->draw_line(Point2(0, edited_guide_pos.y), Point2(viewport_base->get_size().x, edited_guide_pos.y), guide_color); + viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, text_color); + viewport->draw_line(Point2(0, dragged_guide_pos.y), Point2(viewport->get_size().x, dragged_guide_pos.y), guide_color); } } void CanvasItemEditor::_draw_rulers() { - Color graduation_color = get_color("font_color", "Editor"); - graduation_color.a = 0.5; Color bg_color = get_color("dark_color_2", "Editor"); + Color graduation_color = get_color("font_color", "Editor").linear_interpolate(bg_color, 0.5); Color font_color = get_color("font_color", "Editor"); font_color.a = 0.8; Ref<Font> font = get_font("rulers", "EditorFonts"); + bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); // The rule transform - Transform2D ruler_transform; - if (show_grid || snap_grid) { - ruler_transform = Transform2D(); - if (snap_relative && get_item_count() > 0) { - ruler_transform.translate(_find_topleftmost_point()); + Transform2D ruler_transform = Transform2D(); + if (show_grid || (is_snap_active && snap_grid)) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + if (snap_relative && selection.size() > 0) { + ruler_transform.translate(_get_encompassing_rect_from_list(selection).position); ruler_transform.scale_basis(grid_step * Math::pow(2.0, grid_step_multiplier)); } else { ruler_transform.translate(grid_offset); ruler_transform.scale_basis(grid_step * Math::pow(2.0, grid_step_multiplier)); } while ((transform * ruler_transform).get_scale().x < 50 || (transform * ruler_transform).get_scale().y < 50) { - ruler_transform.scale_basis(Point2(2, 2)); } } else { @@ -2373,7 +2117,6 @@ void CanvasItemEditor::_draw_rulers() { for (int i = 0; basic_rule * zoom < 100; i++) { basic_rule *= (i % 2) ? 2.0 : 5.0; } - ruler_transform = Transform2D(); ruler_transform.scale(Size2(basic_rule, basic_rule)); } @@ -2387,43 +2130,43 @@ void CanvasItemEditor::_draw_rulers() { minor_subdivide.scale(Size2(1.0 / minor_subdivision, 1.0 / minor_subdivision)); // First and last graduations to draw (in the ruler space) - Point2 first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(Point2()); + Point2 first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(Point2(RULER_WIDTH, RULER_WIDTH)); Point2 last = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform(viewport->get_size()); // Draw top ruler - viewport_base->draw_rect(Rect2(Point2(RULER_WIDTH, 0), Size2(viewport->get_size().x, RULER_WIDTH)), bg_color); + 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)); if (i % (major_subdivision * minor_subdivision) == 0) { - viewport_base->draw_line(Point2(position.x + RULER_WIDTH, 0), Point2(position.x + RULER_WIDTH, RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(position.x, 0), Point2(position.x, RULER_WIDTH), graduation_color); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(i, 0)).x; - viewport_base->draw_string(font, Point2(position.x + RULER_WIDTH + 2, font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(position.x + 2, font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); } else { if (i % minor_subdivision == 0) { - viewport_base->draw_line(Point2(position.x + RULER_WIDTH, RULER_WIDTH * 0.33), Point2(position.x + RULER_WIDTH, RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(position.x, RULER_WIDTH * 0.33), Point2(position.x, RULER_WIDTH), graduation_color); } else { - viewport_base->draw_line(Point2(position.x + RULER_WIDTH, RULER_WIDTH * 0.66), Point2(position.x + RULER_WIDTH, RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(position.x, RULER_WIDTH * 0.66), Point2(position.x, RULER_WIDTH), graduation_color); } } } // Draw left ruler - viewport_base->draw_rect(Rect2(Point2(0, RULER_WIDTH), Size2(RULER_WIDTH, viewport->get_size().y)), bg_color); + 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)); if (i % (major_subdivision * minor_subdivision) == 0) { - viewport_base->draw_line(Point2(0, position.y + RULER_WIDTH), Point2(RULER_WIDTH, position.y + RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(0, position.y), Point2(RULER_WIDTH, position.y), graduation_color); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(0, i)).y; - viewport_base->draw_string(font, Point2(2, position.y + RULER_WIDTH + 2 + font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(2, position.y + 2 + font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); } else { if (i % minor_subdivision == 0) { - viewport_base->draw_line(Point2(RULER_WIDTH * 0.33, position.y + RULER_WIDTH), Point2(RULER_WIDTH, position.y + RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(RULER_WIDTH * 0.33, position.y), Point2(RULER_WIDTH, position.y), graduation_color); } else { - viewport_base->draw_line(Point2(RULER_WIDTH * 0.66, position.y + RULER_WIDTH), Point2(RULER_WIDTH, position.y + RULER_WIDTH), graduation_color); + viewport->draw_line(Point2(RULER_WIDTH * 0.66, position.y), Point2(RULER_WIDTH, position.y), graduation_color); } } } - viewport_base->draw_rect(Rect2(Point2(), Size2(RULER_WIDTH, RULER_WIDTH)), graduation_color); + viewport->draw_rect(Rect2(Point2(), Size2(RULER_WIDTH, RULER_WIDTH)), graduation_color); } void CanvasItemEditor::_draw_grid() { @@ -2434,8 +2177,9 @@ void CanvasItemEditor::_draw_grid() { Transform2D xform = transform.affine_inverse(); Vector2 real_grid_offset; - if (snap_relative && get_item_count() > 0) { - Vector2 topleft = _find_topleftmost_point(); + List<CanvasItem *> selection = _get_edited_canvas_items(); + if (snap_relative && selection.size() > 0) { + Vector2 topleft = _get_encompassing_rect_from_list(selection).position; real_grid_offset.x = fmod(topleft.x, grid_step.x * (real_t)Math::pow(2.0, grid_step_multiplier)); real_grid_offset.y = fmod(topleft.y, grid_step.y * (real_t)Math::pow(2.0, grid_step_multiplier)); } else { @@ -2468,81 +2212,77 @@ void CanvasItemEditor::_draw_grid() { } void CanvasItemEditor::_draw_selection() { - bool pivot_found = false; Ref<Texture> pivot_icon = get_icon("EditorPivot", "EditorIcons"); - bool single = _get_single_item() != NULL; + Ref<Texture> position_icon = get_icon("EditorPosition", "EditorIcons"); + Ref<Texture> previous_position_icon = get_icon("EditorPositionPrevious", "EditorIcons"); + RID ci = viewport->get_canvas_item(); - Map<Node *, Object *> &selection = editor_selection->get_selection(); - for (Map<Node *, Object *>::Element *E = selection.front(); E; E = E->next()) { + List<CanvasItem *> selection = _get_edited_canvas_items(false, false); - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->key()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; + bool single = selection.size() == 1; + for (List<CanvasItem *>::Element *E = selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - - Rect2 rect = canvas_item->_edit_get_rect(); - if (show_helpers && drag != DRAG_NONE && drag != DRAG_PIVOT) { + // Draw the previous position if we are dragging the node + if (show_helpers && + (drag_type == DRAG_ALL || drag_type == DRAG_ROTATE || + drag_type == DRAG_LEFT || drag_type == DRAG_RIGHT || drag_type == DRAG_TOP || drag_type == DRAG_BOTTOM || + drag_type == DRAG_TOP_LEFT || drag_type == DRAG_TOP_RIGHT || drag_type == DRAG_BOTTOM_LEFT || drag_type == DRAG_BOTTOM_RIGHT)) { const Transform2D pre_drag_xform = transform * se->pre_drag_xform; const Color pre_drag_color = Color(0.4, 0.6, 1, 0.7); - Vector2 pre_drag_endpoints[4] = { + 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), - pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(0, se->pre_drag_rect.size.y)) - }; + 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), + pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(0, se->pre_drag_rect.size.y)) + }; - for (int i = 0; i < 4; i++) { - viewport->draw_line(pre_drag_endpoints[i], pre_drag_endpoints[(i + 1) % 4], pre_drag_color, 2); + for (int i = 0; i < 4; i++) { + viewport->draw_line(pre_drag_endpoints[i], pre_drag_endpoints[(i + 1) % 4], pre_drag_color, 2); + } + } else { + viewport->draw_texture(previous_position_icon, (pre_drag_xform.xform(Point2()) - (previous_position_icon->get_size() / 2)).floor()); } } Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); - VisualServer::get_singleton()->canvas_item_add_set_transform(ci, xform); - - Vector2 endpoints[4] = { - xform.xform(rect.position), - xform.xform(rect.position + Vector2(rect.size.x, 0)), - xform.xform(rect.position + rect.size), - xform.xform(rect.position + Vector2(0, rect.size.y)) - }; + // Draw the selected items position / surrounding boxes + if (canvas_item->_edit_use_rect()) { + Rect2 rect = canvas_item->_edit_get_rect(); + Vector2 endpoints[4] = { + xform.xform(rect.position), + xform.xform(rect.position + Vector2(rect.size.x, 0)), + xform.xform(rect.position + rect.size), + xform.xform(rect.position + Vector2(0, rect.size.y)) + }; - Color c = Color(1, 0.6, 0.4, 0.7); + Color c = Color(1, 0.6, 0.4, 0.7); - VisualServer::get_singleton()->canvas_item_add_set_transform(ci, Transform2D()); + for (int i = 0; i < 4; i++) { + viewport->draw_line(endpoints[i], endpoints[(i + 1) % 4], c, 2); + } + } else { - for (int i = 0; i < 4; i++) { - viewport->draw_line(endpoints[i], endpoints[(i + 1) % 4], c, 2); + Transform2D transform = Transform2D(xform.get_rotation(), xform.get_origin()); + viewport->draw_set_transform_matrix(transform); + viewport->draw_texture(position_icon, -(position_icon->get_size() / 2)); + viewport->draw_set_transform_matrix(Transform2D()); } if (single && (tool == TOOL_SELECT || tool == TOOL_MOVE || tool == TOOL_ROTATE || tool == TOOL_EDIT_PIVOT)) { //kind of sucks - - Node2D *node2d = Object::cast_to<Node2D>(canvas_item); - if (node2d) { - if (node2d->_edit_use_pivot()) { - viewport->draw_texture(pivot_icon, xform.get_origin() + (-pivot_icon->get_size() / 2).floor()); - can_move_pivot = true; - pivot_found = true; - } + // Draw the pivot + if (canvas_item->_edit_get_pivot() != Vector2() || drag_type == DRAG_PIVOT || tool == TOOL_EDIT_PIVOT) { // This is not really clean :/ + viewport->draw_texture(pivot_icon, (xform.xform(canvas_item->_edit_get_pivot()) - (pivot_icon->get_size() / 2)).floor()); } Control *control = Object::cast_to<Control>(canvas_item); if (control) { - Vector2 pivot_ofs = control->get_pivot_offset(); - if (pivot_ofs != Vector2()) { - viewport->draw_texture(pivot_icon, xform.xform(pivot_ofs) + (-pivot_icon->get_size() / 2).floor()); - } - can_move_pivot = true; - pivot_found = true; - if (tool == TOOL_SELECT && show_helpers && !Object::cast_to<Container>(control->get_parent())) { // Draw the helpers Color color_base = Color(0.8, 0.8, 0.8, 0.5); @@ -2561,10 +2301,9 @@ void CanvasItemEditor::_draw_selection() { anchors_pos[i] = xform.xform(_anchor_to_position(control, anchors[i])); } - Map<Node *, Object *> &selection = editor_selection->get_selection(); // Get which anchor is dragged int dragged_anchor = -1; - switch (drag) { + switch (drag_type) { case DRAG_ANCHOR_ALL: case DRAG_ANCHOR_TOP_LEFT: dragged_anchor = 0; @@ -2578,6 +2317,8 @@ void CanvasItemEditor::_draw_selection() { case DRAG_ANCHOR_BOTTOM_LEFT: dragged_anchor = 3; break; + default: + break; } if (dragged_anchor >= 0) { @@ -2639,56 +2380,65 @@ void CanvasItemEditor::_draw_selection() { node_pos_in_parent[2] = control->get_anchor(MARGIN_RIGHT) * control->get_parent_area_size().width + control->get_margin(MARGIN_RIGHT); node_pos_in_parent[3] = control->get_anchor(MARGIN_BOTTOM) * control->get_parent_area_size().height + control->get_margin(MARGIN_BOTTOM); - switch (drag) { + 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); case DRAG_ALL: - Point2 start = Vector2(node_pos_in_parent[0], Math::lerp(node_pos_in_parent[1], node_pos_in_parent[3], ratio)); - Point2 end = start - Vector2(control->get_margin(MARGIN_LEFT), 0); + 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); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, 1); break; + default: + break; } - switch (drag) { + switch (drag_type) { 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); case DRAG_ALL: - Point2 start = Vector2(node_pos_in_parent[2], Math::lerp(node_pos_in_parent[3], node_pos_in_parent[1], ratio)); - Point2 end = start - Vector2(control->get_margin(MARGIN_RIGHT), 0); + 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); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, 1); break; + default: + break; } - switch (drag) { + switch (drag_type) { 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); case DRAG_ALL: - Point2 start = Vector2(Math::lerp(node_pos_in_parent[0], node_pos_in_parent[2], ratio), node_pos_in_parent[1]); - Point2 end = start - Vector2(0, control->get_margin(MARGIN_TOP)); + 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); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, 1); break; + default: + break; } - switch (drag) { + switch (drag_type) { 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); case DRAG_ALL: - Point2 start = Vector2(Math::lerp(node_pos_in_parent[2], node_pos_in_parent[0], ratio), node_pos_in_parent[3]); - Point2 end = start - Vector2(0, control->get_margin(MARGIN_BOTTOM)); + 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); viewport->draw_line(parent_transform.xform(start), parent_transform.xform(end), color_base, 1); break; + default: + break; } - switch (drag) { + switch (drag_type) { //Draw the ghost rect if the node if rotated/scaled case DRAG_LEFT: case DRAG_TOP_LEFT: @@ -2704,14 +2454,22 @@ void CanvasItemEditor::_draw_selection() { viewport->draw_rect(parent_transform.xform(rect), color_base, false); } break; + default: + break; } } } - if (tool == TOOL_SELECT) { - + if (tool == TOOL_SELECT && canvas_item->_edit_use_rect()) { + Rect2 rect = canvas_item->_edit_get_rect(); + Vector2 endpoints[4] = { + xform.xform(rect.position), + xform.xform(rect.position + Vector2(rect.size.x, 0)), + xform.xform(rect.position + rect.size), + xform.xform(rect.position + Vector2(0, rect.size.y)) + }; for (int i = 0; i < 4; i++) { - + // Draw the resize handles int prev = (i + 3) % 4; int next = (i + 1) % 4; @@ -2728,9 +2486,9 @@ void CanvasItemEditor::_draw_selection() { } } } - pivot_button->set_disabled(!pivot_found); - if (box_selecting) { + if (drag_type == DRAG_BOX_SELECTION) { + // Draw the dragging box Point2 bsfrom = transform.xform(drag_from); Point2 bsto = transform.xform(box_selecting_to); @@ -2738,33 +2496,82 @@ void CanvasItemEditor::_draw_selection() { } Color rotate_color(0.4, 0.7, 1.0, 0.8); - if (drag == DRAG_ROTATE) { - VisualServer::get_singleton()->canvas_item_add_line(ci, transform.xform(display_rotate_from), transform.xform(display_rotate_to), rotate_color); + if (drag_type == DRAG_ROTATE) { + // Draw the line when rotating a node + viewport->draw_line(transform.xform(drag_rotation_center), transform.xform(drag_to), rotate_color); } } -void CanvasItemEditor::_draw_axis() { +void CanvasItemEditor::_draw_straight_line(Point2 p_from, Point2 p_to, Color p_color) { + // Draw a line going through the whole screen from a vector RID ci = viewport->get_canvas_item(); + Vector<Point2> points; + Point2 from = transform.xform(p_from); + Point2 to = transform.xform(p_to); + Size2 viewport_size = viewport->get_size(); + + if (to.x == from.x) { + // Vertical line + points.push_back(Point2(to.x, 0)); + points.push_back(Point2(to.x, viewport_size.y)); + } else if (to.y == from.y) { + // Horizontal line + points.push_back(Point2(0, to.y)); + points.push_back(Point2(viewport_size.x, to.y)); + } else { + float y_for_zero_x = (to.y * from.x - from.y * to.x) / (from.x - to.x); + float x_for_zero_y = (to.x * from.y - from.x * to.y) / (from.y - to.y); + float y_for_viewport_x = ((to.y - from.y) * (viewport_size.x - from.x)) / (to.x - from.x) + from.y; + float x_for_viewport_y = ((to.x - from.x) * (viewport_size.y - from.y)) / (to.y - from.y) + from.x; // faux + + //bool start_set = false; + if (y_for_zero_x >= 0 && y_for_zero_x <= viewport_size.y) { + points.push_back(Point2(0, y_for_zero_x)); + } + if (x_for_zero_y >= 0 && x_for_zero_y <= viewport_size.x) { + points.push_back(Point2(x_for_zero_y, 0)); + } + if (y_for_viewport_x >= 0 && y_for_viewport_x <= viewport_size.y) { + points.push_back(Point2(viewport_size.x, y_for_viewport_x)); + } + if (x_for_viewport_y >= 0 && x_for_viewport_y <= viewport_size.x) { + points.push_back(Point2(x_for_viewport_y, viewport_size.y)); + } + } + if (points.size() >= 2) { + VisualServer::get_singleton()->canvas_item_add_line(ci, points[0], points[1], p_color); + } +} - Color x_axis_color(1.0, 0.4, 0.4, 0.6); - Color y_axis_color(0.4, 1.0, 0.4, 0.6); - Color area_axis_color(0.4, 0.4, 1.0, 0.4); +void CanvasItemEditor::_draw_axis() { - Point2 origin = transform.get_origin(); - VisualServer::get_singleton()->canvas_item_add_line(ci, Point2(0, origin.y), Point2(viewport->get_size().x, origin.y), x_axis_color); - VisualServer::get_singleton()->canvas_item_add_line(ci, Point2(origin.x, 0), Point2(origin.x, viewport->get_size().y), y_axis_color); + if (show_origin) { - Size2 screen_size = Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height")); + Color x_axis_color(1.0, 0.4, 0.4, 0.6); + Color y_axis_color(0.4, 1.0, 0.4, 0.6); - Vector2 screen_endpoints[4] = { - transform.xform(Vector2(0, 0)), - transform.xform(Vector2(screen_size.width, 0)), - transform.xform(Vector2(screen_size.width, screen_size.height)), - transform.xform(Vector2(0, screen_size.height)) - }; + _draw_straight_line(Point2(), Point2(1, 0), x_axis_color); + _draw_straight_line(Point2(), Point2(0, 1), y_axis_color); + } + + if (show_viewport) { + + RID ci = viewport->get_canvas_item(); + + Color area_axis_color(0.4, 0.4, 1.0, 0.4); - for (int i = 0; i < 4; i++) { - VisualServer::get_singleton()->canvas_item_add_line(ci, screen_endpoints[i], screen_endpoints[(i + 1) % 4], area_axis_color); + Size2 screen_size = Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height")); + + Vector2 screen_endpoints[4] = { + transform.xform(Vector2(0, 0)), + transform.xform(Vector2(screen_size.width, 0)), + transform.xform(Vector2(screen_size.width, screen_size.height)), + transform.xform(Vector2(0, screen_size.height)) + }; + + for (int i = 0; i < 4; i++) { + VisualServer::get_singleton()->canvas_item_add_line(ci, screen_endpoints[i], screen_endpoints[(i + 1) % 4], area_axis_color); + } } } @@ -2776,43 +2583,52 @@ void CanvasItemEditor::_draw_bones() { Color bone_color1 = EditorSettings::get_singleton()->get("editors/2d/bone_color1"); Color bone_color2 = EditorSettings::get_singleton()->get("editors/2d/bone_color2"); Color bone_ik_color = EditorSettings::get_singleton()->get("editors/2d/bone_ik_color"); + Color bone_outline_color = EditorSettings::get_singleton()->get("editors/2d/bone_outline_color"); Color bone_selected_color = EditorSettings::get_singleton()->get("editors/2d/bone_selected_color"); + int bone_outline_size = EditorSettings::get_singleton()->get("editors/2d/bone_outline_size"); - for (Map<ObjectID, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { + for (Map<BoneKey, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { - E->get().from = Vector2(); - E->get().to = Vector2(); + Node2D *from_node = Object::cast_to<Node2D>(ObjectDB::get_instance(E->key().from)); + Node2D *to_node = Object::cast_to<Node2D>(ObjectDB::get_instance(E->key().to)); - Node2D *n2d = Object::cast_to<Node2D>(ObjectDB::get_instance(E->get().bone)); - if (!n2d) + if (!from_node->is_inside_tree()) + continue; //may have been removed + if (!from_node) continue; - if (!n2d->get_parent()) + if (!to_node && E->get().length == 0) continue; - CanvasItem *pi = n2d->get_parent_item(); + Vector2 from = transform.xform(from_node->get_global_position()); + Vector2 to; - Node2D *pn2d = Object::cast_to<Node2D>(n2d->get_parent()); - - if (!pn2d) - continue; - - Vector2 from = transform.xform(pn2d->get_global_position()); - Vector2 to = transform.xform(n2d->get_global_position()); - - E->get().from = from; - E->get().to = to; + if (to_node) + to = transform.xform(to_node->get_global_position()); + else + to = transform.xform(from_node->get_global_transform().xform(Vector2(E->get().length, 0))); Vector2 rel = to - from; Vector2 relt = rel.tangent().normalized() * bone_width; + Vector2 reln = rel.normalized(); + Vector2 reltn = relt.normalized(); Vector<Vector2> bone_shape; bone_shape.push_back(from); bone_shape.push_back(from + rel * 0.2 + relt); bone_shape.push_back(to); bone_shape.push_back(from + rel * 0.2 - relt); + + Vector<Vector2> bone_shape_outline; + bone_shape_outline.push_back(from + (-reln - reltn) * bone_outline_size); + bone_shape_outline.push_back(from + (-reln + reltn) * bone_outline_size); + bone_shape_outline.push_back(from + rel * 0.2 + relt + reltn * bone_outline_size); + bone_shape_outline.push_back(to + (reln + reltn) * bone_outline_size); + bone_shape_outline.push_back(to + (reln - reltn) * bone_outline_size); + bone_shape_outline.push_back(from + rel * 0.2 - relt - reltn * bone_outline_size); + Vector<Color> colors; - if (pi->has_meta("_edit_ik_")) { + if (from_node->has_meta("_edit_ik_")) { colors.push_back(bone_ik_color); colors.push_back(bone_ik_color); @@ -2825,98 +2641,221 @@ void CanvasItemEditor::_draw_bones() { colors.push_back(bone_color2); } + Vector<Color> outline_colors; + + if (editor_selection->is_selected(from_node)) { + outline_colors.push_back(bone_selected_color); + outline_colors.push_back(bone_selected_color); + outline_colors.push_back(bone_selected_color); + outline_colors.push_back(bone_selected_color); + outline_colors.push_back(bone_selected_color); + outline_colors.push_back(bone_selected_color); + } else { + outline_colors.push_back(bone_outline_color); + outline_colors.push_back(bone_outline_color); + outline_colors.push_back(bone_outline_color); + outline_colors.push_back(bone_outline_color); + outline_colors.push_back(bone_outline_color); + outline_colors.push_back(bone_outline_color); + } + + VisualServer::get_singleton()->canvas_item_add_polygon(ci, bone_shape_outline, outline_colors); VisualServer::get_singleton()->canvas_item_add_primitive(ci, bone_shape, colors, Vector<Vector2>(), RID()); + } + } +} - if (editor_selection->is_selected(pi)) { - for (int i = 0; i < bone_shape.size(); i++) { +void CanvasItemEditor::_draw_invisible_nodes_positions(Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { + ERR_FAIL_COND(!p_node); - VisualServer::get_singleton()->canvas_item_add_line(ci, bone_shape[i], bone_shape[(i + 1) % bone_shape.size()], bone_selected_color, 2); - } + Node *scene = editor->get_edited_scene(); + if (p_node != scene && p_node->get_owner() != scene && !scene->is_editable_instance(p_node->get_owner())) + return; + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); + if (canvas_item && !canvas_item->is_visible()) + return; + + Transform2D parent_xform = p_parent_xform; + Transform2D canvas_xform = p_canvas_xform; + + if (canvas_item && !canvas_item->is_set_as_toplevel()) { + parent_xform = parent_xform * canvas_item->get_transform(); + } else { + CanvasLayer *cl = Object::cast_to<CanvasLayer>(p_node); + parent_xform = Transform2D(); + canvas_xform = cl ? cl->get_transform() : p_canvas_xform; + } + + for (int i = p_node->get_child_count() - 1; i >= 0; i--) { + _draw_invisible_nodes_positions(p_node->get_child(i), parent_xform, canvas_xform); + } + + if (canvas_item && !canvas_item->_edit_use_rect() && !editor_selection->is_selected(canvas_item)) { + Transform2D xform = transform * canvas_xform * parent_xform; + + // Draw the node's position + Ref<Texture> position_icon = get_icon("EditorPositionUnselected", "EditorIcons"); + Transform2D transform = Transform2D(xform.get_rotation(), xform.get_origin()); + viewport->draw_set_transform_matrix(transform); + viewport->draw_texture(position_icon, -position_icon->get_size() / 2, Color(1.0, 1.0, 1.0, 0.5)); + viewport->draw_set_transform_matrix(Transform2D()); + } +} + +void CanvasItemEditor::_draw_hover() { + List<Rect2> previous_rects; + + for (int i = 0; i < hovering_results.size(); i++) { + // Draw the node's name and icon + CanvasItem *canvas_item = hovering_results[i].item; + + if (canvas_item->_edit_use_rect()) + continue; + + Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); + + // Get the resources + Ref<Texture> node_icon; + if (has_icon(canvas_item->get_class(), "EditorIcons")) + node_icon = get_icon(canvas_item->get_class(), "EditorIcons"); + else + node_icon = get_icon("Object", "EditorIcons"); + Ref<Font> font = get_font("font", "Label"); + String node_name = canvas_item->get_name(); + 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)); + + Point2 pos = xform.get_origin() - Point2(0, item_size.y) + (Point2(node_icon->get_size().x, -node_icon->get_size().y) / 4); + // Rectify the position to avoid overlaping items + for (List<Rect2>::Element *E = previous_rects.front(); E; E = E->next()) { + if (E->get().intersects(Rect2(pos, item_size))) { + pos.y = E->get().get_position().y - item_size.y; } } + + previous_rects.push_back(Rect2(pos, item_size)); + + // Draw the node icon and name + viewport->draw_texture(node_icon, pos, 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, Color(1.0, 1.0, 1.0, 0.5)); } } -void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p_xform) { +void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { ERR_FAIL_COND(!p_node); - RID viewport_ci = viewport->get_canvas_item(); + Node *scene = editor->get_edited_scene(); + if (p_node != scene && p_node->get_owner() != scene && !scene->is_editable_instance(p_node->get_owner())) + return; + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); + if (canvas_item && !canvas_item->is_visible()) + return; - Transform2D transform_ci = p_xform; - CanvasItem *ci = Object::cast_to<CanvasItem>(p_node); - if (ci) - transform_ci = transform_ci * ci->get_transform(); + Transform2D parent_xform = p_parent_xform; + Transform2D canvas_xform = p_canvas_xform; + + if (canvas_item && !canvas_item->is_set_as_toplevel()) { + parent_xform = parent_xform * canvas_item->get_transform(); + } else { + CanvasLayer *cl = Object::cast_to<CanvasLayer>(p_node); + parent_xform = Transform2D(); + canvas_xform = cl ? cl->get_transform() : p_canvas_xform; + } for (int i = p_node->get_child_count() - 1; i >= 0; i--) { - _draw_locks_and_groups(p_node->get_child(i), transform_ci); + _draw_locks_and_groups(p_node->get_child(i), parent_xform, canvas_xform); } - if (ci) { + RID viewport_canvas_item = viewport->get_canvas_item(); + if (canvas_item) { + float offset = 0; + Ref<Texture> lock = get_icon("LockViewport", "EditorIcons"); if (p_node->has_meta("_edit_lock_")) { - lock->draw(viewport_ci, transform_ci.xform(Point2(0, 0))); + lock->draw(viewport_canvas_item, (transform * canvas_xform * parent_xform).xform(Point2(0, 0)) + Point2(offset, 0)); + offset += lock->get_size().x; } Ref<Texture> group = get_icon("GroupViewport", "EditorIcons"); - if (ci->has_meta("_edit_group_")) { - Vector2 ofs = transform_ci.xform(Point2(0, 0)); - if (ci->has_meta("_edit_lock_")) - ofs = Point2(ofs.x + lock->get_size().x, ofs.y); - group->draw(viewport_ci, ofs); + if (canvas_item->has_meta("_edit_group_")) { + group->draw(viewport_canvas_item, (transform * canvas_xform * parent_xform).xform(Point2(0, 0)) + Point2(offset, 0)); + //offset += group->get_size().x; } } } -void CanvasItemEditor::_build_bones_list(Node *p_node) { - ERR_FAIL_COND(!p_node); +bool CanvasItemEditor::_build_bones_list(Node *p_node) { + ERR_FAIL_COND_V(!p_node, false); + + bool has_child_bones = false; for (int i = 0; i < p_node->get_child_count(); i++) { - _build_bones_list(p_node->get_child(i)); + if (_build_bones_list(p_node->get_child(i))) { + has_child_bones = true; + } + } + + CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node); + Node *scene = editor->get_edited_scene(); + if (!canvas_item || !canvas_item->is_visible() || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner()))) { + return false; } - CanvasItem *c = Object::cast_to<CanvasItem>(p_node); - if (c && c->is_visible_in_tree()) { - if (c->has_meta("_edit_bone_")) { + Node *parent = canvas_item->get_parent(); - ObjectID id = c->get_instance_id(); - if (!bone_list.has(id)) { - BoneList bone; - bone.bone = id; - bone_list[id] = bone; + if (Object::cast_to<Bone2D>(canvas_item)) { + if (Object::cast_to<Bone2D>(parent)) { + // Add as bone->parent relationship + BoneKey bk; + bk.from = parent->get_instance_id(); + bk.to = canvas_item->get_instance_id(); + if (!bone_list.has(bk)) { + BoneList b; + b.length = 0; + bone_list[bk] = b; } - bone_list[id].last_pass = bone_last_frame; + bone_list[bk].last_pass = bone_last_frame; } - } -} -void CanvasItemEditor::_get_encompassing_rect(Node *p_node, Rect2 &r_rect, const Transform2D &p_xform) { - ERR_FAIL_COND(!p_node); + if (!has_child_bones) { + // Add a last bone if the Bone2D has no Bone2D child + BoneKey bk; + bk.from = canvas_item->get_instance_id(); + bk.to = 0; + if (!bone_list.has(bk)) { + BoneList b; + b.length = 0; + bone_list[bk] = b; + } + bone_list[bk].last_pass = bone_last_frame; + } - for (int i = 0; i < p_node->get_child_count(); i++) { - _get_encompassing_rect(p_node->get_child(i), r_rect, p_xform); + return true; } - CanvasItem *c = Object::cast_to<CanvasItem>(p_node); - if (c && c->is_visible_in_tree()) { - Rect2 rect = c->_edit_get_rect(); - Transform2D xform = p_xform * c->get_transform(); - r_rect.expand_to(xform.xform(rect.position)); - r_rect.expand_to(xform.xform(rect.position + Point2(rect.size.x, 0))); - r_rect.expand_to(xform.xform(rect.position + Point2(0, rect.size.y))); - r_rect.expand_to(xform.xform(rect.position + rect.size)); + if (canvas_item->has_meta("_edit_bone_")) { + // Add a "custom bone" + BoneKey bk; + bk.from = parent->get_instance_id(); + bk.to = canvas_item->get_instance_id(); + if (!bone_list.has(bk)) { + BoneList b; + b.length = 0; + bone_list[bk] = b; + } + bone_list[bk].last_pass = bone_last_frame; } -} -void CanvasItemEditor::_draw_viewport_base() { - if (show_rulers) - _draw_rulers(); - if (show_guides) - _draw_guides(); - _draw_focus(); + return false; } void CanvasItemEditor::_draw_viewport() { + // Update the transform + transform = Transform2D(); + transform.scale_basis(Size2(zoom, zoom)); + transform.elements[2] = -view_offset * zoom; + editor->get_scene_root()->set_global_canvas_transform(transform); // hide/show buttons depending on the selection bool all_locked = true; @@ -2947,13 +2886,13 @@ void CanvasItemEditor::_draw_viewport() { group_button->set_disabled(selection.empty()); ungroup_button->set_visible(all_group); - _update_scrollbars(); - _draw_grid(); _draw_selection(); _draw_axis(); - if (editor->get_edited_scene()) - _draw_locks_and_groups(editor->get_edited_scene(), transform); + if (editor->get_edited_scene()) { + _draw_locks_and_groups(editor->get_edited_scene()); + _draw_invisible_nodes_positions(editor->get_edited_scene()); + } RID ci = viewport->get_canvas_item(); VisualServer::get_singleton()->canvas_item_add_set_transform(ci, Transform2D()); @@ -2968,76 +2907,79 @@ void CanvasItemEditor::_draw_viewport() { } _draw_bones(); + if (show_rulers) + _draw_rulers(); + if (show_guides) + _draw_guides(); + _draw_focus(); + _draw_hover(); } void CanvasItemEditor::_notification(int p_what) { if (p_what == NOTIFICATION_PHYSICS_PROCESS) { - EditorNode::get_singleton()->get_scene_root()->set_snap_controls_to_pixels(GLOBAL_GET("gui/common/snap_controls_to_pixels")); - List<Node *> selection = editor_selection->get_selected_node_list(); - - bool all_control = true; - bool has_control = false; - - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); - if (!canvas_item || !canvas_item->is_visible_in_tree()) - continue; - - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) - continue; - - if (Object::cast_to<Control>(canvas_item)) - has_control = true; - else - all_control = false; + int nb_control = 0; + int nb_having_pivot = 0; + // Update the viewport if the canvas_item changes + List<CanvasItem *> selection = _get_edited_canvas_items(); + for (List<CanvasItem *>::Element *E = selection.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); - if (!se) - continue; - Rect2 r = canvas_item->_edit_get_rect(); + Rect2 rect; + if (canvas_item->_edit_use_rect()) { + rect = canvas_item->_edit_get_rect(); + } else { + rect = Rect2(); + } Transform2D xform = canvas_item->get_transform(); - if (r != se->prev_rect || xform != se->prev_xform) { + if (rect != se->prev_rect || xform != se->prev_xform) { viewport->update(); - se->prev_rect = r; + se->prev_rect = rect; se->prev_xform = xform; } - if (Object::cast_to<Control>(canvas_item)) { + Control *control = Object::cast_to<Control>(canvas_item); + if (control) { float anchors[4]; Vector2 pivot; - pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); - anchors[MARGIN_LEFT] = Object::cast_to<Control>(canvas_item)->get_anchor(MARGIN_LEFT); - anchors[MARGIN_RIGHT] = Object::cast_to<Control>(canvas_item)->get_anchor(MARGIN_RIGHT); - anchors[MARGIN_TOP] = Object::cast_to<Control>(canvas_item)->get_anchor(MARGIN_TOP); - anchors[MARGIN_BOTTOM] = Object::cast_to<Control>(canvas_item)->get_anchor(MARGIN_BOTTOM); + 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); 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]) { - viewport->update(); - viewport_base->update(); 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]; + viewport->update(); } + nb_control++; + } + + if (canvas_item->_edit_use_pivot()) { + nb_having_pivot++; } } - if (all_control && has_control) - presets_menu->show(); - else - presets_menu->hide(); + // Activate / Deactivate the pivot tool + pivot_button->set_disabled(nb_having_pivot == 0); - for (Map<ObjectID, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { + // Show / Hide the layout button + presets_menu->set_visible(nb_control > 0 && nb_control == selection.size()); - Object *b = ObjectDB::get_instance(E->get().bone); + // Update the viewport if bones changes + for (Map<BoneKey, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { + + Object *b = ObjectDB::get_instance(E->key().from); if (!b) { viewport->update(); @@ -3045,13 +2987,22 @@ void CanvasItemEditor::_notification(int p_what) { } Node2D *b2 = Object::cast_to<Node2D>(b); - if (!b2) { + if (!b2 || !b2->is_inside_tree()) { continue; } - if (b2->get_global_transform() != E->get().xform) { + Transform2D global_xform = b2->get_global_transform(); + + if (global_xform != E->get().xform) { - E->get().xform = b2->get_global_transform(); + E->get().xform = global_xform; + viewport->update(); + } + + Bone2D *bone = Object::cast_to<Bone2D>(b); + if (bone && bone->get_default_length() != E->get().length) { + + E->get().length = bone->get_default_length(); viewport->update(); } } @@ -3067,12 +3018,19 @@ void CanvasItemEditor::_notification(int p_what) { AnimationPlayerEditor::singleton->get_key_editor()->connect("visibility_changed", this, "_keying_changed"); _keying_changed(); + get_tree()->connect("node_added", this, "_tree_changed", varray()); + get_tree()->connect("node_removed", this, "_tree_changed", varray()); } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { select_sb->set_texture(get_icon("EditorRect2D", "EditorIcons")); } + if (p_what == NOTIFICATION_EXIT_TREE) { + get_tree()->disconnect("node_added", this, "_tree_changed"); + get_tree()->disconnect("node_removed", this, "_tree_changed"); + } + if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { select_button->set_icon(get_icon("ToolSelect", "EditorIcons")); list_select_button->set_icon(get_icon("ListSelect", "EditorIcons")); @@ -3150,108 +3108,140 @@ void CanvasItemEditor::_notification(int p_what) { void CanvasItemEditor::edit(CanvasItem *p_canvas_item) { - drag = DRAG_NONE; + drag_type = DRAG_NONE; // Clear the selection editor_selection->clear(); //_clear_canvas_items(); editor_selection->add_node(p_canvas_item); - //_add_canvas_item(p_canvas_item); - viewport->update(); - viewport_base->update(); } -void CanvasItemEditor::_update_scrollbars() { - - updating_scroll = true; - - if (show_rulers) - viewport_scrollable->set_begin(Point2(RULER_WIDTH, RULER_WIDTH)); - else - viewport_scrollable->set_begin(Point2()); - - Size2 size = viewport->get_size(); - Size2 hmin = h_scroll->get_minimum_size(); - Size2 vmin = v_scroll->get_minimum_size(); - - v_scroll->set_begin(Point2(size.width - vmin.width, 0)); - v_scroll->set_end(Point2(size.width, size.height)); - - h_scroll->set_begin(Point2(0, size.height - hmin.height)); - h_scroll->set_end(Point2(size.width - vmin.width, size.height)); +void CanvasItemEditor::_queue_update_bone_list() { - Size2 screen_rect = Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height")); + if (bone_list_dirty) + return; - Rect2 local_rect = Rect2(Point2(), viewport->get_size() - Size2(vmin.width, hmin.height)); + call_deferred("_update_bone_list"); + bone_list_dirty = true; +} - Rect2 canvas_item_rect = Rect2(Point2(), screen_rect); +void CanvasItemEditor::_update_bone_list() { bone_last_frame++; if (editor->get_edited_scene()) { _build_bones_list(editor->get_edited_scene()); - _get_encompassing_rect(editor->get_edited_scene(), canvas_item_rect, Transform2D()); } - List<Map<ObjectID, BoneList>::Element *> bone_to_erase; - - for (Map<ObjectID, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { - + List<Map<BoneKey, BoneList>::Element *> bone_to_erase; + for (Map<BoneKey, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { if (E->get().last_pass != bone_last_frame) { bone_to_erase.push_back(E); + continue; } - } + Node *node = Object::cast_to<Node>(ObjectDB::get_instance(E->key().from)); + if (!node || !node->is_inside_tree() || (node != get_tree()->get_edited_scene_root() && !get_tree()->get_edited_scene_root()->is_a_parent_of(node))) { + bone_to_erase.push_back(E); + continue; + } + } while (bone_to_erase.size()) { bone_list.erase(bone_to_erase.front()->get()); bone_to_erase.pop_front(); } + bone_list_dirty = false; +} + +void CanvasItemEditor::_tree_changed(Node *) { + _queue_update_bone_list(); +} + +void CanvasItemEditor::_update_scrollbars() { + + updating_scroll = true; + + // Move the zoom buttons + Point2 zoom_hb_begin = Point2(5, 5); + zoom_hb_begin += (show_rulers) ? Point2(RULER_WIDTH, RULER_WIDTH) : Point2(); + zoom_hb->set_begin(zoom_hb_begin); + + // Move and resize the scrollbars + Size2 size = viewport->get_size(); + Size2 hmin = h_scroll->get_minimum_size(); + Size2 vmin = v_scroll->get_minimum_size(); + + 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->set_begin(Point2((show_rulers) ? RULER_WIDTH : 0, size.height - hmin.height)); + h_scroll->set_end(Point2(size.width - vmin.width, size.height)); - //expand area so it's easier to do animations and stuff at 0,0 + // Get the visible frame + Size2 screen_rect = Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height")); + Rect2 local_rect = Rect2(Point2(), viewport->get_size() - Size2(vmin.width, hmin.height)); + + _queue_update_bone_list(); + + // Calculate scrollable area + Rect2 canvas_item_rect = Rect2(Point2(), screen_rect); + if (editor->get_edited_scene()) { + Rect2 content_rect = _get_encompassing_rect(editor->get_edited_scene()); + canvas_item_rect.expand_to(content_rect.position); + canvas_item_rect.expand_to(content_rect.position + content_rect.size); + } canvas_item_rect.size += screen_rect * 2; canvas_item_rect.position -= screen_rect; - Point2 ofs; + // Constraints the view offset and updates the scrollbars + Point2 begin = canvas_item_rect.position; + Point2 end = canvas_item_rect.position + canvas_item_rect.size - local_rect.size / zoom; if (canvas_item_rect.size.height <= (local_rect.size.y / zoom)) { + if (ABS(begin.y - previous_update_view_offset.y) < ABS(begin.y - view_offset.y)) { + view_offset.y = previous_update_view_offset.y; + } + v_scroll->hide(); - ofs.y = canvas_item_rect.position.y; } else { - - v_scroll->show(); - v_scroll->set_min(canvas_item_rect.position.y); - v_scroll->set_max(canvas_item_rect.position.y + canvas_item_rect.size.y); - v_scroll->set_page(local_rect.size.y / zoom); - if (first_update) { - //so 0,0 is visible - v_scroll->set_value(-10); - h_scroll->set_value(-10); - first_update = false; + if (view_offset.y > end.y && view_offset.y > previous_update_view_offset.y) { + view_offset.y = MAX(end.y, previous_update_view_offset.y); + } + if (view_offset.y < begin.y && view_offset.y < previous_update_view_offset.y) { + view_offset.y = MIN(begin.y, previous_update_view_offset.y); } - ofs.y = v_scroll->get_value(); + v_scroll->show(); + v_scroll->set_min(MIN(view_offset.y, begin.y)); + v_scroll->set_max(MAX(view_offset.y, end.y) + screen_rect.y); + v_scroll->set_page(screen_rect.y); } if (canvas_item_rect.size.width <= (local_rect.size.x / zoom)) { + if (ABS(begin.x - previous_update_view_offset.x) < ABS(begin.x - view_offset.x)) { + view_offset.x = previous_update_view_offset.x; + } h_scroll->hide(); - ofs.x = canvas_item_rect.position.x; } else { + if (view_offset.x > end.x && view_offset.x > previous_update_view_offset.x) { + view_offset.x = MAX(end.x, previous_update_view_offset.x); + } + if (view_offset.x < begin.x && view_offset.x < previous_update_view_offset.x) { + view_offset.x = MIN(begin.x, previous_update_view_offset.x); + } h_scroll->show(); - h_scroll->set_min(canvas_item_rect.position.x); - h_scroll->set_max(canvas_item_rect.position.x + canvas_item_rect.size.x); - h_scroll->set_page(local_rect.size.x / zoom); - ofs.x = h_scroll->get_value(); + h_scroll->set_min(MIN(view_offset.x, begin.x)); + h_scroll->set_max(MAX(view_offset.x, end.x) + screen_rect.x); + h_scroll->set_page(screen_rect.x); } - //transform=Matrix32(); - transform.elements[2] = -ofs * zoom; - - editor->get_scene_root()->set_global_canvas_transform(transform); + // Calculate scrollable area + v_scroll->set_value(view_offset.y); + h_scroll->set_value(view_offset.x); + previous_update_view_offset = view_offset; updating_scroll = false; - - //transform.scale_basis(Vector2(zoom,zoom)); } void CanvasItemEditor::_update_scroll(float) { @@ -3259,62 +3249,45 @@ void CanvasItemEditor::_update_scroll(float) { if (updating_scroll) return; - Point2 ofs; - ofs.x = h_scroll->get_value(); - ofs.y = v_scroll->get_value(); - - //current_window->set_scroll(-ofs); - - transform = Transform2D(); - - transform.scale_basis(Size2(zoom, zoom)); - transform.elements[2] = -ofs; - - editor->get_scene_root()->set_global_canvas_transform(transform); - + view_offset.x = h_scroll->get_value(); + view_offset.y = v_scroll->get_value(); viewport->update(); - viewport_base->update(); } void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_preset) { List<Node *> selection = editor_selection->get_selected_node_list(); undo_redo->create_action(TTR("Change Anchors and Margins")); + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - Control *c = Object::cast_to<Control>(E->get()); - - undo_redo->add_do_method(c, "set_anchors_preset", p_preset); - switch (p_preset) { - case PRESET_TOP_LEFT: - case PRESET_TOP_RIGHT: - case PRESET_BOTTOM_LEFT: - case PRESET_BOTTOM_RIGHT: - case PRESET_CENTER_LEFT: - case PRESET_CENTER_TOP: - case PRESET_CENTER_RIGHT: - case PRESET_CENTER_BOTTOM: - case PRESET_CENTER: - undo_redo->add_do_method(c, "set_margins_preset", p_preset, Control::PRESET_MODE_KEEP_SIZE); - break; - case PRESET_LEFT_WIDE: - case PRESET_TOP_WIDE: - case PRESET_RIGHT_WIDE: - case PRESET_BOTTOM_WIDE: - case PRESET_VCENTER_WIDE: - case PRESET_HCENTER_WIDE: - case PRESET_WIDE: - undo_redo->add_do_method(c, "set_margins_preset", p_preset, Control::PRESET_MODE_MINSIZE); - break; + Control *control = Object::cast_to<Control>(E->get()); + if (control) { + undo_redo->add_do_method(control, "set_anchors_preset", p_preset); + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_TOP_RIGHT: + case PRESET_BOTTOM_LEFT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_LEFT: + case PRESET_CENTER_TOP: + 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); + break; + case PRESET_LEFT_WIDE: + case PRESET_TOP_WIDE: + case PRESET_RIGHT_WIDE: + case PRESET_BOTTOM_WIDE: + 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); + break; + } + undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state()); } - undo_redo->add_undo_method(c, "set_anchor", MARGIN_LEFT, c->get_anchor(MARGIN_LEFT)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_TOP, c->get_anchor(MARGIN_TOP)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_RIGHT, c->get_anchor(MARGIN_RIGHT)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_BOTTOM, c->get_anchor(MARGIN_BOTTOM)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_LEFT, c->get_margin(MARGIN_LEFT)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_TOP, c->get_margin(MARGIN_TOP)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_RIGHT, c->get_margin(MARGIN_RIGHT)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_BOTTOM, c->get_margin(MARGIN_BOTTOM)); } undo_redo->commit_action(); @@ -3326,13 +3299,11 @@ void CanvasItemEditor::_set_anchors_preset(Control::LayoutPreset p_preset) { undo_redo->create_action(TTR("Change Anchors")); for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - Control *c = Object::cast_to<Control>(E->get()); - - undo_redo->add_do_method(c, "set_anchors_preset", p_preset); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_LEFT, c->get_anchor(MARGIN_LEFT)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_TOP, c->get_anchor(MARGIN_TOP)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_RIGHT, c->get_anchor(MARGIN_RIGHT)); - undo_redo->add_undo_method(c, "set_anchor", MARGIN_BOTTOM, c->get_anchor(MARGIN_BOTTOM)); + Control *control = Object::cast_to<Control>(E->get()); + if (control) { + undo_redo->add_do_method(control, "set_anchors_preset", p_preset); + undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state()); + } } undo_redo->commit_action(); @@ -3346,30 +3317,39 @@ void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) { zoom = p_zoom; Point2 ofs = p_position; ofs = ofs / prev_zoom - ofs / zoom; - h_scroll->set_value(Math::round(h_scroll->get_value() + ofs.x)); - v_scroll->set_value(Math::round(v_scroll->get_value() + ofs.y)); + view_offset.x = Math::round(view_offset.x + ofs.x); + view_offset.y = Math::round(view_offset.y + ofs.y); - _update_scroll(0); + _update_scrollbars(); viewport->update(); - viewport_base->update(); } -void CanvasItemEditor::_zoom_minus() { - _zoom_on_position(zoom / 2.0, viewport_scrollable->get_size() / 2.0); +void CanvasItemEditor::_button_zoom_minus() { + _zoom_on_position(zoom / 1.5, viewport_scrollable->get_size() / 2.0); } -void CanvasItemEditor::_zoom_reset() { +void CanvasItemEditor::_button_zoom_reset() { _zoom_on_position(1.0, viewport_scrollable->get_size() / 2.0); } -void CanvasItemEditor::_zoom_plus() { - _zoom_on_position(zoom * 2.0, viewport_scrollable->get_size() / 2.0); +void CanvasItemEditor::_button_zoom_plus() { + _zoom_on_position(zoom * 1.5, viewport_scrollable->get_size() / 2.0); } -void CanvasItemEditor::_toggle_snap(bool p_status) { +void CanvasItemEditor::_button_toggle_snap(bool p_status) { snap_active = p_status; viewport->update(); - viewport_base->update(); +} + +void CanvasItemEditor::_button_tool_select(int p_index) { + + ToolButton *tb[TOOL_MAX] = { select_button, list_select_button, move_button, rotate_button, pivot_button, pan_button }; + for (int i = 0; i < TOOL_MAX; i++) { + tb[i]->set_pressed(i == p_index); + } + + viewport->update(); + tool = (Tool)p_index; } void CanvasItemEditor::_popup_callback(int p_op) { @@ -3382,7 +3362,18 @@ void CanvasItemEditor::_popup_callback(int p_op) { int idx = view_menu->get_popup()->get_item_index(SHOW_GRID); view_menu->get_popup()->set_item_checked(idx, show_grid); viewport->update(); - viewport_base->update(); + } break; + case SHOW_ORIGIN: { + show_origin = !show_origin; + int idx = view_menu->get_popup()->get_item_index(SHOW_ORIGIN); + view_menu->get_popup()->set_item_checked(idx, show_origin); + viewport->update(); + } break; + case SHOW_VIEWPORT: { + show_viewport = !show_viewport; + int idx = view_menu->get_popup()->get_item_index(SHOW_VIEWPORT); + view_menu->get_popup()->set_item_checked(idx, show_viewport); + viewport->update(); } break; case SNAP_USE_NODE_PARENT: { snap_node_parent = !snap_node_parent; @@ -3399,6 +3390,11 @@ void CanvasItemEditor::_popup_callback(int p_op) { int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_SIDES); smartsnap_config_popup->set_item_checked(idx, snap_node_sides); } break; + case SNAP_USE_NODE_CENTER: { + snap_node_center = !snap_node_center; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_CENTER); + smartsnap_config_popup->set_item_checked(idx, snap_node_center); + } break; case SNAP_USE_OTHER_NODES: { snap_other_nodes = !snap_other_nodes; int idx = smartsnap_config_popup->get_item_index(SNAP_USE_OTHER_NODES); @@ -3424,7 +3420,6 @@ void CanvasItemEditor::_popup_callback(int p_op) { int idx = snap_config_menu->get_popup()->get_item_index(SNAP_RELATIVE); snap_config_menu->get_popup()->set_item_checked(idx, snap_relative); viewport->update(); - viewport_base->update(); } break; case SNAP_USE_PIXEL: { snap_pixel = !snap_pixel; @@ -3452,26 +3447,19 @@ void CanvasItemEditor::_popup_callback(int p_op) { int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS); view_menu->get_popup()->set_item_checked(idx, show_rulers); viewport->update(); - viewport_base->update(); } break; case SHOW_GUIDES: { show_guides = !show_guides; int idx = view_menu->get_popup()->get_item_index(SHOW_GUIDES); view_menu->get_popup()->set_item_checked(idx, show_guides); viewport->update(); - viewport_base->update(); } break; - case LOCK_SELECTED: { - List<Node *> selection = editor_selection->get_selected_node_list(); - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); if (!canvas_item || !canvas_item->is_inside_tree()) continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; @@ -3481,35 +3469,25 @@ void CanvasItemEditor::_popup_callback(int p_op) { viewport->update(); } break; case UNLOCK_SELECTED: { - List<Node *> selection = editor_selection->get_selected_node_list(); - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); if (!canvas_item || !canvas_item->is_inside_tree()) continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; canvas_item->set_meta("_edit_lock_", Variant()); emit_signal("item_lock_status_changed"); } - viewport->update(); - } break; case GROUP_SELECTED: { - List<Node *> selection = editor_selection->get_selected_node_list(); - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); if (!canvas_item || !canvas_item->is_inside_tree()) continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; @@ -3519,26 +3497,19 @@ void CanvasItemEditor::_popup_callback(int p_op) { viewport->update(); } break; case UNGROUP_SELECTED: { - List<Node *> selection = editor_selection->get_selected_node_list(); - for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->get()); if (!canvas_item || !canvas_item->is_inside_tree()) continue; - if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; canvas_item->set_meta("_edit_group_", Variant()); emit_signal("item_group_status_changed"); } - viewport->update(); - } break; - case ANCHORS_AND_MARGINS_PRESET_TOP_LEFT: { _set_anchors_and_margins_preset(PRESET_TOP_LEFT); } break; @@ -3723,28 +3694,6 @@ void CanvasItemEditor::_popup_callback(int p_op) { key_scale = key_scale_button->is_pressed(); } break; - /* - case ANIM_INSERT_POS_ROT - case ANIM_INSERT_POS_SCALE: - case ANIM_INSERT_ROT_SCALE: - case ANIM_INSERT_POS_ROT_SCALE: { - static const bool key_toggles[7][3]={ - {true,false,false}, - {false,true,false}, - {false,false,true}, - {true,true,false}, - {true,false,true}, - {false,true,true}, - {true,true,true} - }; - key_pos=key_toggles[p_op-ANIM_INSERT_POS][0]; - key_rot=key_toggles[p_op-ANIM_INSERT_POS][1]; - key_scale=key_toggles[p_op-ANIM_INSERT_POS][2]; - for(int i=ANIM_INSERT_POS;i<=ANIM_INSERT_POS_ROT_SCALE;i++) { - int idx = animation_menu->get_popup()->get_item_index(i); - animation_menu->get_popup()->set_item_checked(idx,i==p_op); - } - } break;*/ case ANIM_COPY_POSE: { pose_clipboard.clear(); @@ -3823,9 +3772,9 @@ void CanvasItemEditor::_popup_callback(int p_op) { if (key_pos) ctrl->set_position(Point2()); /* - if (key_scale) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl,"rect/size",ctrl->get_size()); - */ + if (key_scale) + AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl,"rect/size",ctrl->get_size()); + */ } } @@ -3935,7 +3884,12 @@ void CanvasItemEditor::_focus_selection(int p_op) { //if (!canvas_item->is_visible_in_tree()) continue; ++count; - Rect2 item_rect = canvas_item->_edit_get_rect(); + Rect2 item_rect; + if (canvas_item->_edit_use_rect()) { + item_rect = canvas_item->_edit_get_rect(); + } else { + item_rect = Rect2(); + } Vector2 pos = canvas_item->get_global_transform().get_origin(); Vector2 scale = canvas_item->get_global_transform().get_scale(); @@ -3956,8 +3910,10 @@ void CanvasItemEditor::_focus_selection(int p_op) { center = rect.position + rect.size / 2; Vector2 offset = viewport->get_size() / 2 - editor->get_scene_root()->get_global_canvas_transform().xform(center); - h_scroll->set_value(h_scroll->get_value() - offset.x / zoom); - v_scroll->set_value(v_scroll->get_value() - offset.y / zoom); + view_offset.x -= offset.x / zoom; + view_offset.y -= offset.y / zoom; + _update_scrollbars(); + viewport->update(); } else { // VIEW_FRAME_TO_SELECTION @@ -3966,7 +3922,7 @@ void CanvasItemEditor::_focus_selection(int p_op) { float scale_y = viewport->get_size().y / rect.size.y; zoom = scale_x < scale_y ? scale_x : scale_y; zoom *= 0.90; - _update_scroll(0); + viewport->update(); call_deferred("_popup_callback", VIEW_CENTER_TO_SELECTION); } } @@ -3974,21 +3930,23 @@ void CanvasItemEditor::_focus_selection(int p_op) { void CanvasItemEditor::_bind_methods() { - ClassDB::bind_method("_zoom_minus", &CanvasItemEditor::_zoom_minus); - ClassDB::bind_method("_zoom_reset", &CanvasItemEditor::_zoom_reset); - ClassDB::bind_method("_zoom_plus", &CanvasItemEditor::_zoom_plus); - ClassDB::bind_method("_toggle_snap", &CanvasItemEditor::_toggle_snap); + ClassDB::bind_method("_button_zoom_minus", &CanvasItemEditor::_button_zoom_minus); + ClassDB::bind_method("_button_zoom_reset", &CanvasItemEditor::_button_zoom_reset); + ClassDB::bind_method("_button_zoom_plus", &CanvasItemEditor::_button_zoom_plus); + ClassDB::bind_method("_button_toggle_snap", &CanvasItemEditor::_button_toggle_snap); ClassDB::bind_method("_update_scroll", &CanvasItemEditor::_update_scroll); + ClassDB::bind_method("_update_scrollbars", &CanvasItemEditor::_update_scrollbars); ClassDB::bind_method("_popup_callback", &CanvasItemEditor::_popup_callback); ClassDB::bind_method("_get_editor_data", &CanvasItemEditor::_get_editor_data); - ClassDB::bind_method("_tool_select", &CanvasItemEditor::_tool_select); + ClassDB::bind_method("_button_tool_select", &CanvasItemEditor::_button_tool_select); ClassDB::bind_method("_keying_changed", &CanvasItemEditor::_keying_changed); ClassDB::bind_method("_unhandled_key_input", &CanvasItemEditor::_unhandled_key_input); ClassDB::bind_method("_draw_viewport", &CanvasItemEditor::_draw_viewport); - ClassDB::bind_method("_draw_viewport_base", &CanvasItemEditor::_draw_viewport_base); ClassDB::bind_method("_gui_input_viewport", &CanvasItemEditor::_gui_input_viewport); - ClassDB::bind_method("_gui_input_viewport_base", &CanvasItemEditor::_gui_input_viewport_base); ClassDB::bind_method("_snap_changed", &CanvasItemEditor::_snap_changed); + ClassDB::bind_method("_update_bone_list", &CanvasItemEditor::_update_bone_list); + ClassDB::bind_method("_tree_changed", &CanvasItemEditor::_tree_changed); + ClassDB::bind_method(D_METHOD("_selection_result_pressed"), &CanvasItemEditor::_selection_result_pressed); ClassDB::bind_method(D_METHOD("_selection_menu_hide"), &CanvasItemEditor::_selection_menu_hide); ClassDB::bind_method(D_METHOD("set_state"), &CanvasItemEditor::set_state); @@ -3997,11 +3955,185 @@ void CanvasItemEditor::_bind_methods() { ADD_SIGNAL(MethodInfo("item_group_status_changed")); } +Dictionary CanvasItemEditor::get_state() const { + + Dictionary state; + state["zoom"] = zoom; + state["ofs"] = view_offset; + state["grid_offset"] = grid_offset; + state["grid_step"] = grid_step; + state["snap_rotation_offset"] = snap_rotation_offset; + state["snap_rotation_step"] = snap_rotation_step; + state["snap_active"] = snap_active; + state["snap_node_parent"] = snap_node_parent; + state["snap_node_anchors"] = snap_node_anchors; + state["snap_node_sides"] = snap_node_sides; + state["snap_node_center"] = snap_node_center; + state["snap_other_nodes"] = snap_other_nodes; + state["snap_grid"] = snap_grid; + state["snap_guides"] = snap_guides; + state["show_grid"] = show_grid; + state["show_origin"] = show_origin; + state["show_viewport"] = show_viewport; + state["show_rulers"] = show_rulers; + state["show_guides"] = show_guides; + state["show_helpers"] = show_helpers; + state["snap_rotation"] = snap_rotation; + state["snap_relative"] = snap_relative; + state["snap_pixel"] = snap_pixel; + state["skeleton_show_bones"] = skeleton_show_bones; + return state; +} + +void CanvasItemEditor::set_state(const Dictionary &p_state) { + + Dictionary state = p_state; + if (state.has("zoom")) { + zoom = p_state["zoom"]; + } + + if (state.has("ofs")) { + view_offset = p_state["ofs"]; + previous_update_view_offset = view_offset; + _update_scrollbars(); + } + + if (state.has("grid_offset")) { + grid_offset = state["grid_offset"]; + } + + if (state.has("grid_step")) { + grid_step = state["grid_step"]; + } + + if (state.has("snap_rotation_step")) { + snap_rotation_step = state["snap_rotation_step"]; + } + + if (state.has("snap_rotation_offset")) { + snap_rotation_offset = state["snap_rotation_offset"]; + } + + if (state.has("snap_active")) { + snap_active = state["snap_active"]; + snap_button->set_pressed(snap_active); + } + + if (state.has("snap_node_parent")) { + snap_node_parent = state["snap_node_parent"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_PARENT); + smartsnap_config_popup->set_item_checked(idx, snap_node_parent); + } + + if (state.has("snap_node_anchors")) { + snap_node_anchors = state["snap_node_anchors"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_ANCHORS); + smartsnap_config_popup->set_item_checked(idx, snap_node_anchors); + } + + if (state.has("snap_node_sides")) { + snap_node_sides = state["snap_node_sides"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_SIDES); + smartsnap_config_popup->set_item_checked(idx, snap_node_sides); + } + + if (state.has("snap_node_center")) { + snap_node_center = state["snap_node_center"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_CENTER); + smartsnap_config_popup->set_item_checked(idx, snap_node_center); + } + + if (state.has("snap_other_nodes")) { + snap_other_nodes = state["snap_other_nodes"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_OTHER_NODES); + smartsnap_config_popup->set_item_checked(idx, snap_other_nodes); + } + + if (state.has("snap_guides")) { + snap_guides = state["snap_guides"]; + int idx = smartsnap_config_popup->get_item_index(SNAP_USE_GUIDES); + smartsnap_config_popup->set_item_checked(idx, snap_guides); + } + + if (state.has("snap_grid")) { + snap_grid = state["snap_grid"]; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_GRID); + snap_config_menu->get_popup()->set_item_checked(idx, snap_grid); + } + + if (state.has("show_grid")) { + show_grid = state["show_grid"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_GRID); + view_menu->get_popup()->set_item_checked(idx, show_grid); + } + + if (state.has("show_origin")) { + show_origin = state["show_origin"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_ORIGIN); + view_menu->get_popup()->set_item_checked(idx, show_origin); + } + + if (state.has("show_viewport")) { + show_viewport = state["show_viewport"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_VIEWPORT); + view_menu->get_popup()->set_item_checked(idx, show_viewport); + } + + if (state.has("show_rulers")) { + show_rulers = state["show_rulers"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS); + view_menu->get_popup()->set_item_checked(idx, show_rulers); + } + + if (state.has("show_guides")) { + show_guides = state["show_guides"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_GUIDES); + view_menu->get_popup()->set_item_checked(idx, show_guides); + } + + if (state.has("show_helpers")) { + show_helpers = state["show_helpers"]; + int idx = view_menu->get_popup()->get_item_index(SHOW_HELPERS); + view_menu->get_popup()->set_item_checked(idx, show_helpers); + } + + if (state.has("snap_rotation")) { + snap_rotation = state["snap_rotation"]; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_ROTATION); + snap_config_menu->get_popup()->set_item_checked(idx, snap_rotation); + } + + if (state.has("snap_relative")) { + snap_relative = state["snap_relative"]; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_RELATIVE); + snap_config_menu->get_popup()->set_item_checked(idx, snap_relative); + } + + if (state.has("snap_pixel")) { + snap_pixel = state["snap_pixel"]; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_PIXEL); + snap_config_menu->get_popup()->set_item_checked(idx, snap_pixel); + } + + if (state.has("skeleton_show_bones")) { + skeleton_show_bones = state["skeleton_show_bones"]; + int idx = skeleton_menu->get_popup()->get_item_index(SKELETON_SHOW_BONES); + skeleton_menu->get_popup()->set_item_checked(idx, skeleton_show_bones); + } + + viewport->update(); +} + void CanvasItemEditor::add_control_to_menu_panel(Control *p_control) { hb->add_child(p_control); } +void CanvasItemEditor::remove_control_from_menu_panel(Control *p_control) { + + hb->remove_child(p_control); +} + HSplitContainer *CanvasItemEditor::get_palette_split() { return palette_split; @@ -4018,6 +4150,7 @@ void CanvasItemEditor::focus_selection() { CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { + bone_list_dirty = false; tool = TOOL_SELECT; undo_redo = p_editor->get_undo_redo(); editor = p_editor; @@ -4037,21 +4170,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { bottom_split->add_child(palette_split); palette_split->set_v_size_flags(SIZE_EXPAND_FILL); - viewport_base = memnew(Control); - palette_split->add_child(viewport_base); - viewport_base->set_clip_contents(true); - viewport_base->connect("draw", this, "_draw_viewport_base"); - viewport_base->connect("gui_input", this, "_gui_input_viewport_base"); - viewport_base->set_focus_mode(FOCUS_ALL); - viewport_base->set_v_size_flags(SIZE_EXPAND_FILL); - viewport_base->set_h_size_flags(SIZE_EXPAND_FILL); - viewport_scrollable = memnew(Control); - viewport_base->add_child(viewport_scrollable); + palette_split->add_child(viewport_scrollable); viewport_scrollable->set_mouse_filter(MOUSE_FILTER_PASS); - viewport_scrollable->set_draw_behind_parent(true); - viewport_scrollable->set_anchors_and_margins_preset(Control::PRESET_WIDE); - viewport_scrollable->set_begin(Point2(RULER_WIDTH, RULER_WIDTH)); + viewport_scrollable->set_clip_contents(true); + viewport_scrollable->set_v_size_flags(SIZE_EXPAND_FILL); + viewport_scrollable->set_h_size_flags(SIZE_EXPAND_FILL); + viewport_scrollable->connect("draw", this, "_update_scrollbars"); ViewportContainer *scene_tree = memnew(ViewportContainer); viewport_scrollable->add_child(scene_tree); @@ -4064,46 +4189,48 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport->set_mouse_filter(MOUSE_FILTER_PASS); viewport->set_anchors_and_margins_preset(Control::PRESET_WIDE); viewport->set_clip_contents(true); + viewport->set_focus_mode(FOCUS_ALL); viewport->connect("draw", this, "_draw_viewport"); viewport->connect("gui_input", this, "_gui_input_viewport"); h_scroll = memnew(HScrollBar); viewport->add_child(h_scroll); - h_scroll->connect("value_changed", this, "_update_scroll", Vector<Variant>(), Object::CONNECT_DEFERRED); + h_scroll->connect("value_changed", this, "_update_scroll"); h_scroll->hide(); v_scroll = memnew(VScrollBar); viewport->add_child(v_scroll); - v_scroll->connect("value_changed", this, "_update_scroll", Vector<Variant>(), Object::CONNECT_DEFERRED); + v_scroll->connect("value_changed", this, "_update_scroll"); v_scroll->hide(); - HBoxContainer *zoom_hb = memnew(HBoxContainer); + zoom_hb = memnew(HBoxContainer); viewport->add_child(zoom_hb); zoom_hb->set_begin(Point2(5, 5)); zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); - zoom_minus->connect("pressed", this, "_zoom_minus"); + zoom_minus->connect("pressed", this, "_button_zoom_minus"); + zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom out"), KEY_MASK_CMD | KEY_MINUS)); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); - zoom_reset->connect("pressed", this, "_zoom_reset"); + zoom_reset->connect("pressed", this, "_button_zoom_reset"); + zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom reset"), KEY_MASK_CMD | KEY_0)); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); - zoom_plus->connect("pressed", this, "_zoom_plus"); + zoom_plus->connect("pressed", this, "_button_zoom_plus"); + zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom in"), KEY_MASK_CMD | KEY_PLUS)); zoom_plus->set_focus_mode(FOCUS_NONE); updating_scroll = false; - handle_len = 10; - first_update = true; select_button = memnew(ToolButton); hb->add_child(select_button); select_button->set_toggle_mode(true); - select_button->connect("pressed", this, "_tool_select", make_binds(TOOL_SELECT)); + select_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_SELECT)); select_button->set_pressed(true); select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode", TTR("Select Mode"), KEY_Q)); select_button->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate") + "\n" + TTR("Alt+Drag: Move") + "\n" + TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).") + "\n" + TTR("Alt+RMB: Depth list selection")); @@ -4111,14 +4238,14 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { move_button = memnew(ToolButton); hb->add_child(move_button); move_button->set_toggle_mode(true); - move_button->connect("pressed", this, "_tool_select", make_binds(TOOL_MOVE)); + move_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_MOVE)); move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode", TTR("Move Mode"), KEY_W)); move_button->set_tooltip(TTR("Move Mode")); rotate_button = memnew(ToolButton); hb->add_child(rotate_button); rotate_button->set_toggle_mode(true); - rotate_button->connect("pressed", this, "_tool_select", make_binds(TOOL_ROTATE)); + rotate_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_ROTATE)); rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode", TTR("Rotate Mode"), KEY_E)); rotate_button->set_tooltip(TTR("Rotate Mode")); @@ -4127,19 +4254,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { list_select_button = memnew(ToolButton); hb->add_child(list_select_button); list_select_button->set_toggle_mode(true); - list_select_button->connect("pressed", this, "_tool_select", make_binds(TOOL_LIST_SELECT)); + list_select_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_LIST_SELECT)); list_select_button->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode).")); pivot_button = memnew(ToolButton); hb->add_child(pivot_button); pivot_button->set_toggle_mode(true); - pivot_button->connect("pressed", this, "_tool_select", make_binds(TOOL_EDIT_PIVOT)); + pivot_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_EDIT_PIVOT)); pivot_button->set_tooltip(TTR("Click to change object's rotation pivot.")); pan_button = memnew(ToolButton); hb->add_child(pan_button); pan_button->set_toggle_mode(true); - pan_button->connect("pressed", this, "_tool_select", make_binds(TOOL_PAN)); + pan_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_PAN)); pan_button->set_tooltip(TTR("Pan Mode")); hb->add_child(memnew(VSeparator)); @@ -4147,7 +4274,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_button = memnew(ToolButton); hb->add_child(snap_button); snap_button->set_toggle_mode(true); - snap_button->connect("toggled", this, "_toggle_snap"); + snap_button->connect("toggled", this, "_button_toggle_snap"); snap_button->set_tooltip(TTR("Toggles snapping")); snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_snap", TTR("Use Snap"), KEY_S)); @@ -4174,6 +4301,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_parent", TTR("Snap to parent")), SNAP_USE_NODE_PARENT); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_anchors", TTR("Snap to node anchor")), SNAP_USE_NODE_ANCHORS); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_sides", TTR("Snap to node sides")), SNAP_USE_NODE_SIDES); + smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_center", TTR("Snap to node center")), SNAP_USE_NODE_CENTER); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_other_nodes", TTR("Snap to other nodes")), SNAP_USE_OTHER_NODES); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_guides", TTR("Snap to guides")), SNAP_USE_GUIDES); @@ -4207,13 +4335,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = skeleton_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B), SKELETON_MAKE_BONES); - p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES); - p->add_separator(); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_show_bones", TTR("Show Bones")), SKELETON_SHOW_BONES); p->add_separator(); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN); + p->add_separator(); + p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Custom Bone(s) from Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B), SKELETON_MAKE_BONES); + p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Custom Bones")), SKELETON_CLEAR_BONES); p->connect("id_pressed", this, "_popup_callback"); hb->add_child(memnew(VSeparator)); @@ -4225,9 +4353,11 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = view_menu->get_popup(); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Show Grid"), 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"), KEY_R), SHOW_RULERS); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show guides"), KEY_Y), SHOW_GUIDES); + 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"), KEY_R), SHOW_RULERS); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT); p->add_separator(); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), KEY_F), VIEW_CENTER_TO_SELECTION); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/frame_selection", TTR("Frame Selection"), KEY_MASK_SHIFT | KEY_F), VIEW_FRAME_TO_SELECTION); @@ -4305,9 +4435,6 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { selection_menu->connect("id_pressed", this, "_selection_result_pressed"); selection_menu->connect("popup_hide", this, "_selection_menu_hide"); - drag_pivot_shortcut = ED_SHORTCUT("canvas_item_editor/drag_pivot", TTR("Drag pivot from mouse position"), KEY_MASK_SHIFT | KEY_V); - set_pivot_shortcut = ED_SHORTCUT("canvas_item_editor/set_pivot", TTR("Set pivot at mouse position"), KEY_V); - multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY); divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE); @@ -4315,14 +4442,15 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_rot = true; key_scale = false; - edited_guide_pos = Point2(); - edited_guide_index = -1; - show_grid = false; + show_origin = true; + show_viewport = true; show_helpers = false; show_rulers = true; show_guides = true; zoom = 1; + view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH); + previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen grid_offset = Point2(); grid_step = Point2(10, 10); grid_step_multiplier = 0; @@ -4332,6 +4460,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_node_parent = true; snap_node_anchors = true; snap_node_sides = true; + snap_node_center = true; snap_other_nodes = true; snap_grid = true; snap_guides = true; @@ -4339,17 +4468,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_pixel = false; skeleton_show_bones = true; skeleton_menu->get_popup()->set_item_checked(skeleton_menu->get_popup()->get_item_index(SKELETON_SHOW_BONES), true); - box_selecting = false; - //zoom=0.5; singleton = this; set_process_unhandled_key_input(true); - can_move_pivot = false; - drag = DRAG_NONE; + + drag_type = DRAG_NONE; + drag_from = Vector2(); + drag_to = Vector2(); + dragged_guide_pos = Point2(); + dragged_guide_index = -1; + bone_last_frame = 0; - additive_selection = false; - // Update the menus checkboxes + // Update the menus' checkboxes call_deferred("set_state", get_state()); } @@ -4372,7 +4503,7 @@ void CanvasItemEditorPlugin::make_visible(bool p_visible) { canvas_item_editor->show(); canvas_item_editor->set_physics_process(true); VisualServer::get_singleton()->viewport_set_hide_canvas(editor->get_scene_root()->get_viewport_rid(), false); - canvas_item_editor->viewport_base->grab_focus(); + canvas_item_editor->viewport->grab_focus(); } else { diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index ace87f9fe2..a1957b892e 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -50,9 +50,6 @@ class CanvasItemEditorSelectedItem : public Object { GDCLASS(CanvasItemEditorSelectedItem, Object); public: - Variant undo_state; - Vector2 undo_pivot; - Transform2D prev_xform; float prev_rot; Rect2 prev_rect; @@ -62,6 +59,11 @@ public: Transform2D pre_drag_xform; Rect2 pre_drag_rect; + List<float> pre_drag_bones_length; + List<Dictionary> pre_drag_bones_undo_state; + + Dictionary undo_state; + CanvasItemEditorSelectedItem() { prev_rot = 0; } }; @@ -86,6 +88,7 @@ class CanvasItemEditor : public VBoxContainer { SNAP_USE_NODE_PARENT, SNAP_USE_NODE_ANCHORS, SNAP_USE_NODE_SIDES, + SNAP_USE_NODE_CENTER, SNAP_USE_OTHER_NODES, SNAP_USE_GRID, SNAP_USE_GUIDES, @@ -97,6 +100,8 @@ class CanvasItemEditor : public VBoxContainer { SHOW_HELPERS, SHOW_RULERS, SHOW_GUIDES, + SHOW_ORIGIN, + SHOW_VIEWPORT, LOCK_SELECTED, UNLOCK_SELECTED, GROUP_SELECTED, @@ -169,6 +174,7 @@ class CanvasItemEditor : public VBoxContainer { enum DragType { DRAG_NONE, + DRAG_BOX_SELECTION, DRAG_LEFT, DRAG_TOP_LEFT, DRAG_TOP, @@ -185,29 +191,20 @@ class CanvasItemEditor : public VBoxContainer { DRAG_ALL, DRAG_ROTATE, DRAG_PIVOT, - DRAG_NODE_2D, DRAG_V_GUIDE, DRAG_H_GUIDE, DRAG_DOUBLE_GUIDE, - }; - - enum KeyMoveMODE { - MOVE_VIEW_BASE, - MOVE_LOCAL_BASE, - MOVE_LOCAL_WITH_ROT + DRAG_KEY_MOVE, + DRAG_PAN }; EditorSelection *editor_selection; - bool additive_selection; + bool selection_menu_additive_selection; Tool tool; - bool first_update; Control *viewport; - Control *viewport_base; Control *viewport_scrollable; - bool can_move_pivot; - HScrollBar *h_scroll; VScrollBar *v_scroll; HBoxContainer *hb; @@ -220,8 +217,12 @@ class CanvasItemEditor : public VBoxContainer { bool show_grid; bool show_rulers; bool show_guides; + bool show_origin; + bool show_viewport; bool show_helpers; float zoom; + Point2 view_offset; + Point2 previous_update_view_offset; Point2 grid_offset; Point2 grid_step; @@ -233,6 +234,7 @@ class CanvasItemEditor : public VBoxContainer { bool snap_node_parent; bool snap_node_anchors; bool snap_node_sides; + bool snap_node_center; bool snap_other_nodes; bool snap_grid; bool snap_guides; @@ -240,14 +242,10 @@ class CanvasItemEditor : public VBoxContainer { bool snap_relative; bool snap_pixel; bool skeleton_show_bones; - bool box_selecting; - Point2 box_selecting_to; bool key_pos; bool key_rot; bool key_scale; - void _tool_select(int p_index); - MenuOption last_option; struct _SelectResult { @@ -261,39 +259,36 @@ class CanvasItemEditor : public VBoxContainer { }; Vector<_SelectResult> selection_results; + Vector<_SelectResult> hovering_results; struct BoneList { Transform2D xform; - Vector2 from; - Vector2 to; - ObjectID bone; + float length; uint64_t last_pass; }; uint64_t bone_last_frame; - Map<ObjectID, BoneList> bone_list; - - Transform2D bone_orig_xform; - struct BoneIK { - - Variant orig_state; - Vector2 pos; - float len; - Node2D *node; + struct BoneKey { + ObjectID from; + ObjectID to; + _FORCE_INLINE_ bool operator<(const BoneKey &p_key) const { + if (from == p_key.from) + return to < p_key.to; + else + return from < p_key.from; + } }; - List<BoneIK> bone_ik_list; + Map<BoneKey, BoneList> bone_list; struct PoseClipboard { - Vector2 pos; Vector2 scale; float rot; ObjectID id; }; - List<PoseClipboard> pose_clipboard; ToolButton *select_button; @@ -333,16 +328,17 @@ class CanvasItemEditor : public VBoxContainer { Control *top_ruler; Control *left_ruler; - //PopupMenu *popup; - DragType drag; + DragType drag_type; Point2 drag_from; - Point2 drag_point_from; + Point2 drag_to; + Point2 drag_rotation_center; + List<CanvasItem *> drag_selection; + int dragged_guide_index; + Point2 dragged_guide_pos; + bool updating_value_dialog; - Point2 display_rotate_from; - Point2 display_rotate_to; - int edited_guide_index; - Point2 edited_guide_pos; + Point2 box_selecting_to; Ref<StyleBoxTexture> select_sb; Ref<Texture> select_handle; @@ -353,28 +349,21 @@ class CanvasItemEditor : public VBoxContainer { Ref<ShortCut> multiply_grid_step_shortcut; Ref<ShortCut> divide_grid_step_shortcut; - int handle_len; - bool _is_part_of_subscene(CanvasItem *p_item); - void _find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform, Vector<_SelectResult> &r_items, int limit = 0); - void _find_canvas_items_at_rect(const Rect2 &p_rect, Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform, List<CanvasItem *> *r_items); + void _find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, int p_limit = 0, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + void _get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, int p_limit = 0); - void _select_click_on_empty_area(Point2 p_click_pos, bool p_append, bool p_box_selection); - bool _select_click_on_item(CanvasItem *item, Point2 p_click_pos, bool p_append, bool p_drag); + void _find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_node, List<CanvasItem *> *r_items, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + bool _select_click_on_item(CanvasItem *item, Point2 p_click_pos, bool p_append); ConfirmationDialog *snap_dialog; CanvasItem *ref_item; - void _edit_set_pivot(const Vector2 &mouse_pos); void _add_canvas_item(CanvasItem *p_canvas_item); - void _remove_canvas_item(CanvasItem *p_canvas_item); - void _clear_canvas_items(); - void _key_move(const Vector2 &p_dir, bool p_snap, KeyMoveMODE p_move_mode); - void _list_select(const Ref<InputEventMouseButton> &b); - DragType _get_resize_handle_drag_type(const Point2 &p_click, Vector2 &r_point); - void _prepare_drag(const Point2 &p_click_pos); - DragType _get_anchor_handle_drag_type(const Point2 &p_click, Vector2 &r_point); + void _save_canvas_item_state(List<CanvasItem *> p_canvas_items, bool save_bones = false); + void _restore_canvas_item_state(List<CanvasItem *> p_canvas_items, bool restore_bones = false); + void _commit_canvas_item_state(List<CanvasItem *> p_canvas_items, String action_name, bool commit_bones = false); Vector2 _anchor_to_position(const Control *p_control, Vector2 anchor); Vector2 _position_to_anchor(const Control *p_control, Vector2 position); @@ -383,27 +372,21 @@ class CanvasItemEditor : public VBoxContainer { bool updating_scroll; void _update_scroll(float); void _update_scrollbars(); - void _update_cursor(); - void incbeg(float &beg, float &end, float inc, float minsize, bool p_symmetric); - void incend(float &beg, float &end, float inc, float minsize, bool p_symmetric); - void _append_canvas_item(CanvasItem *p_item); void _snap_changed(); void _selection_result_pressed(int); void _selection_menu_hide(); UndoRedo *undo_redo; + bool _build_bones_list(Node *p_node); - Point2 _find_topleftmost_point(); - - void _build_bones_list(Node *p_node); - - void _get_encompassing_rect(Node *p_node, Rect2 &r_rect, const Transform2D &p_xform); + List<CanvasItem *> _get_edited_canvas_items(bool retreive_locked = false, bool remove_canvas_item_if_parent_in_selection = true); + Rect2 _get_encompassing_rect_from_list(List<CanvasItem *> p_list); + void _expand_encompassing_rect_using_children(Rect2 &p_rect, const Node *p_node, bool &r_first, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + Rect2 _get_encompassing_rect(const Node *p_node); Object *_get_editor_data(Object *p_what); - CanvasItem *_get_single_item(); - int get_item_count(); void _keying_changed(); void _unhandled_key_input(const Ref<InputEvent> &p_ev); @@ -411,6 +394,7 @@ class CanvasItemEditor : public VBoxContainer { 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_straight_line(Point2 p_from, Point2 p_to, Color p_color); void _draw_rulers(); void _draw_guides(); @@ -419,16 +403,29 @@ class CanvasItemEditor : public VBoxContainer { void _draw_selection(); void _draw_axis(); void _draw_bones(); - void _draw_locks_and_groups(Node *p_node, const Transform2D &p_xform); + void _draw_invisible_nodes_positions(Node *p_node, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + void _draw_locks_and_groups(Node *p_node, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + void _draw_hover(); void _draw_viewport(); - void _draw_viewport_base(); + + bool _gui_input_anchors(const Ref<InputEvent> &p_event); + bool _gui_input_move(const Ref<InputEvent> &p_event); + bool _gui_input_open_scene_on_double_click(const Ref<InputEvent> &p_event); + bool _gui_input_pivot(const Ref<InputEvent> &p_event); + bool _gui_input_resize(const Ref<InputEvent> &p_event); + bool _gui_input_rotate(const Ref<InputEvent> &p_event); + bool _gui_input_select(const Ref<InputEvent> &p_event); + bool _gui_input_zoom_or_pan(const Ref<InputEvent> &p_event); + bool _gui_input_rulers_and_guides(const Ref<InputEvent> &p_event); + bool _gui_input_hover(const Ref<InputEvent> &p_event); void _gui_input_viewport(const Ref<InputEvent> &p_event); - void _gui_input_viewport_base(const Ref<InputEvent> &p_event); void _focus_selection(int p_op); + void _solve_IK(Node2D *leaf_node, Point2 target_position); + void _snap_if_closer_float(float p_value, float p_target_snap, float &r_current_snap, bool &r_snapped, float p_radius = 10.0); void _snap_if_closer_point(Point2 p_value, Point2 p_target_snap, Point2 &r_current_snap, bool (&r_snapped)[2], real_t rotation = 0.0, float p_radius = 10.0); void _snap_other_nodes(Point2 p_value, Point2 &r_current_snap, bool (&r_snapped)[2], const Node *p_current, const CanvasItem *p_to_snap = NULL); @@ -437,16 +434,22 @@ class CanvasItemEditor : public VBoxContainer { void _set_margins_preset(Control::LayoutPreset p_preset); void _set_anchors_and_margins_preset(Control::LayoutPreset p_preset); + HBoxContainer *zoom_hb; void _zoom_on_position(float p_zoom, Point2 p_position = Point2()); - void _zoom_minus(); - void _zoom_reset(); - void _zoom_plus(); - - void _toggle_snap(bool p_status); + void _button_zoom_minus(); + void _button_zoom_reset(); + void _button_zoom_plus(); + void _button_toggle_snap(bool p_status); + void _button_tool_select(int p_index); HSplitContainer *palette_split; VSplitContainer *bottom_split; + bool bone_list_dirty; + void _queue_update_bone_list(); + void _update_bone_list(); + void _tree_changed(Node *); + friend class CanvasItemEditorPlugin; protected: @@ -494,9 +497,10 @@ public: SNAP_NODE_PARENT = 1 << 3, SNAP_NODE_ANCHORS = 1 << 4, SNAP_NODE_SIDES = 1 << 5, - SNAP_OTHER_NODES = 1 << 6, + SNAP_NODE_CENTER = 1 << 6, + SNAP_OTHER_NODES = 1 << 7, - SNAP_DEFAULT = 0x07, + SNAP_DEFAULT = SNAP_GRID | SNAP_GUIDES | SNAP_PIXEL, }; Point2 snap_point(Point2 p_target, unsigned int p_modes = SNAP_DEFAULT, const CanvasItem *p_canvas_item = NULL, unsigned int p_forced_modes = 0); @@ -509,6 +513,7 @@ public: void set_state(const Dictionary &p_state); void add_control_to_menu_panel(Control *p_control); + void remove_control_from_menu_panel(Control *p_control); HSplitContainer *get_palette_split(); VSplitContainer *get_bottom_split(); diff --git a/editor/plugins/collision_polygon_editor_plugin.cpp b/editor/plugins/collision_polygon_editor_plugin.cpp index d8d3c0cee6..e837359d0c 100644 --- a/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_editor_plugin.cpp @@ -33,10 +33,12 @@ #include "canvas_item_editor_plugin.h" #include "editor/editor_settings.h" #include "os/file_access.h" +#include "os/input.h" +#include "os/keyboard.h" #include "scene/3d/camera.h" #include "spatial_editor_plugin.h" -void CollisionPolygonEditor::_notification(int p_what) { +void Polygon3DEditor::_notification(int p_what) { switch (p_what) { @@ -53,15 +55,15 @@ void CollisionPolygonEditor::_notification(int p_what) { return; } - if (node->get_depth() != prev_depth) { + if (_get_depth() != prev_depth) { _polygon_draw(); - prev_depth = node->get_depth(); + prev_depth = _get_depth(); } } break; } } -void CollisionPolygonEditor::_node_removed(Node *p_node) { +void Polygon3DEditor::_node_removed(Node *p_node) { if (p_node == node) { node = NULL; @@ -72,7 +74,7 @@ void CollisionPolygonEditor::_node_removed(Node *p_node) { } } -void CollisionPolygonEditor::_menu_option(int p_option) { +void Polygon3DEditor::_menu_option(int p_option) { switch (p_option) { @@ -91,10 +93,10 @@ void CollisionPolygonEditor::_menu_option(int p_option) { } } -void CollisionPolygonEditor::_wip_close() { +void Polygon3DEditor::_wip_close() { undo_redo->create_action(TTR("Create Poly3D")); - undo_redo->add_undo_method(node, "set_polygon", node->get_polygon()); + undo_redo->add_undo_method(node, "set_polygon", node->call("get_polygon")); undo_redo->add_do_method(node, "set_polygon", wip); undo_redo->add_do_method(this, "_polygon_draw"); undo_redo->add_undo_method(this, "_polygon_draw"); @@ -107,14 +109,14 @@ void CollisionPolygonEditor::_wip_close() { undo_redo->commit_action(); } -bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event) { +bool Polygon3DEditor::forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event) { if (!node) return false; Transform gt = node->get_global_transform(); Transform gi = gt.affine_inverse(); - float depth = node->get_depth() * 0.5; + float depth = _get_depth() * 0.5; Vector3 n = gt.basis.get_axis(2).normalized(); Plane p(gt.origin + n * depth, n); @@ -135,12 +137,14 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R Vector2 cpoint(spoint.x, spoint.y); - cpoint = CanvasItemEditor::get_singleton()->snap_point(cpoint); + //DO NOT snap here, it's confusing in 3D for adding points. + //Let the snap happen when the point is being moved, instead. + //cpoint = CanvasItemEditor::get_singleton()->snap_point(cpoint); - Vector<Vector2> poly = node->get_polygon(); + Vector<Vector2> poly = node->call("get_polygon"); //first check if a point is to be added (segment split) - real_t grab_treshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); + real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); switch (mode) { @@ -154,12 +158,13 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R wip.push_back(cpoint); wip_active = true; edited_point_pos = cpoint; + snap_ignore = false; _polygon_draw(); edited_point = 1; return true; } else { - if (wip.size() > 1 && p_camera->unproject_position(gt.xform(Vector3(wip[0].x, wip[0].y, depth))).distance_to(gpoint) < grab_treshold) { + if (wip.size() > 1 && p_camera->unproject_position(gt.xform(Vector3(wip[0].x, wip[0].y, depth))).distance_to(gpoint) < grab_threshold) { //wip closed _wip_close(); @@ -168,6 +173,7 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R wip.push_back(cpoint); edited_point = wip.size(); + snap_ignore = false; _polygon_draw(); return true; } @@ -213,7 +219,7 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R continue; //not valid to reuse point real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_treshold) { + if (d < closest_dist && d < grab_threshold) { closest_dist = d; closest_pos = cp; closest_idx = i; @@ -226,8 +232,10 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R poly.insert(closest_idx + 1, cpoint); edited_point = closest_idx + 1; edited_point_pos = cpoint; - node->set_polygon(poly); + node->call("set_polygon", poly); _polygon_draw(); + snap_ignore = true; + return true; } } else { @@ -242,7 +250,7 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R Vector2 cp = p_camera->unproject_position(gt.xform(Vector3(poly[i].x, poly[i].y, depth))); real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_treshold) { + if (d < closest_dist && d < grab_threshold) { closest_dist = d; closest_pos = cp; closest_idx = i; @@ -255,11 +263,14 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R edited_point = closest_idx; edited_point_pos = poly[closest_idx]; _polygon_draw(); + snap_ignore = false; return true; } } } else { + snap_ignore = false; + if (edited_point != -1) { //apply @@ -288,7 +299,7 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R Vector2 cp = p_camera->unproject_position(gt.xform(Vector3(poly[i].x, poly[i].y, depth))); real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_treshold) { + if (d < closest_dist && d < grab_threshold) { closest_dist = d; closest_pos = cp; closest_idx = i; @@ -315,7 +326,6 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { - if (edited_point != -1 && (wip_active || mm->get_button_mask() & BUTTON_MASK_LEFT)) { Vector2 gpoint = mm->get_position(); @@ -332,7 +342,13 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R Vector2 cpoint(spoint.x, spoint.y); - cpoint = CanvasItemEditor::get_singleton()->snap_point(cpoint); + if (snap_ignore && !Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { + snap_ignore = false; + } + + if (!snap_ignore) { + cpoint = CanvasItemEditor::get_singleton()->snap_point(cpoint); + } edited_point_pos = cpoint; _polygon_draw(); @@ -341,7 +357,16 @@ bool CollisionPolygonEditor::forward_spatial_gui_input(Camera *p_camera, const R return false; } -void CollisionPolygonEditor::_polygon_draw() { + +float Polygon3DEditor::_get_depth() { + + if (bool(node->call("_has_editable_3d_polygon_no_depth"))) + return 0; + + return float(node->call("get_depth")); +} + +void Polygon3DEditor::_polygon_draw() { if (!node) return; @@ -351,9 +376,9 @@ void CollisionPolygonEditor::_polygon_draw() { if (wip_active) poly = wip; else - poly = node->get_polygon(); + poly = node->call("get_polygon"); - float depth = node->get_depth() * 0.5; + float depth = _get_depth() * 0.5; imgeom->clear(); imgeom->set_material_override(line_material); @@ -464,13 +489,13 @@ void CollisionPolygonEditor::_polygon_draw() { m->surface_set_material(0, handle_material); } -void CollisionPolygonEditor::edit(Node *p_collision_polygon) { +void Polygon3DEditor::edit(Node *p_collision_polygon) { if (p_collision_polygon) { - node = Object::cast_to<CollisionPolygon>(p_collision_polygon); + node = Object::cast_to<Spatial>(p_collision_polygon); //Enable the pencil tool if the polygon is empty - if (node->get_polygon().size() == 0) { + if (Vector<Vector2>(node->call("get_polygon")).size() == 0) { _menu_option(MODE_CREATE); } wip.clear(); @@ -491,14 +516,14 @@ void CollisionPolygonEditor::edit(Node *p_collision_polygon) { } } -void CollisionPolygonEditor::_bind_methods() { +void Polygon3DEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_menu_option"), &CollisionPolygonEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_polygon_draw"), &CollisionPolygonEditor::_polygon_draw); - ClassDB::bind_method(D_METHOD("_node_removed"), &CollisionPolygonEditor::_node_removed); + ClassDB::bind_method(D_METHOD("_menu_option"), &Polygon3DEditor::_menu_option); + ClassDB::bind_method(D_METHOD("_polygon_draw"), &Polygon3DEditor::_polygon_draw); + ClassDB::bind_method(D_METHOD("_node_removed"), &Polygon3DEditor::_node_removed); } -CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) { +Polygon3DEditor::Polygon3DEditor(EditorNode *p_editor) { node = NULL; editor = p_editor; @@ -543,24 +568,26 @@ CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) { m.instance(); pointsm->set_mesh(m); pointsm->set_transform(Transform(Basis(), Vector3(0, 0, 0.00001))); + + snap_ignore = false; } -CollisionPolygonEditor::~CollisionPolygonEditor() { +Polygon3DEditor::~Polygon3DEditor() { memdelete(imgeom); } -void CollisionPolygonEditorPlugin::edit(Object *p_object) { +void Polygon3DEditorPlugin::edit(Object *p_object) { collision_polygon_editor->edit(Object::cast_to<Node>(p_object)); } -bool CollisionPolygonEditorPlugin::handles(Object *p_object) const { +bool Polygon3DEditorPlugin::handles(Object *p_object) const { - return p_object->is_class("CollisionPolygon"); + return Object::cast_to<Spatial>(p_object) && bool(p_object->call("_is_editable_3d_polygon")); } -void CollisionPolygonEditorPlugin::make_visible(bool p_visible) { +void Polygon3DEditorPlugin::make_visible(bool p_visible) { if (p_visible) { collision_polygon_editor->show(); @@ -571,14 +598,14 @@ void CollisionPolygonEditorPlugin::make_visible(bool p_visible) { } } -CollisionPolygonEditorPlugin::CollisionPolygonEditorPlugin(EditorNode *p_node) { +Polygon3DEditorPlugin::Polygon3DEditorPlugin(EditorNode *p_node) { editor = p_node; - collision_polygon_editor = memnew(CollisionPolygonEditor(p_node)); + collision_polygon_editor = memnew(Polygon3DEditor(p_node)); SpatialEditor::get_singleton()->add_control_to_menu_panel(collision_polygon_editor); collision_polygon_editor->hide(); } -CollisionPolygonEditorPlugin::~CollisionPolygonEditorPlugin() { +Polygon3DEditorPlugin::~Polygon3DEditorPlugin() { } diff --git a/editor/plugins/collision_polygon_editor_plugin.h b/editor/plugins/collision_polygon_editor_plugin.h index f1f215b092..4229808e2f 100644 --- a/editor/plugins/collision_polygon_editor_plugin.h +++ b/editor/plugins/collision_polygon_editor_plugin.h @@ -44,9 +44,9 @@ class CanvasItemEditor; -class CollisionPolygonEditor : public HBoxContainer { +class Polygon3DEditor : public HBoxContainer { - GDCLASS(CollisionPolygonEditor, HBoxContainer); + GDCLASS(Polygon3DEditor, HBoxContainer); UndoRedo *undo_redo; enum Mode { @@ -66,7 +66,7 @@ class CollisionPolygonEditor : public HBoxContainer { EditorNode *editor; Panel *panel; - CollisionPolygon *node; + Spatial *node; ImmediateGeometry *imgeom; MeshInstance *pointsm; Ref<ArrayMesh> m; @@ -78,6 +78,7 @@ class CollisionPolygonEditor : public HBoxContainer { Vector<Vector2> pre_move_edit; Vector<Vector2> wip; bool wip_active; + bool snap_ignore; float prev_depth; @@ -85,6 +86,8 @@ class CollisionPolygonEditor : public HBoxContainer { void _polygon_draw(); void _menu_option(int p_option); + float _get_depth(); + protected: void _notification(int p_what); void _node_removed(Node *p_node); @@ -93,28 +96,28 @@ protected: public: virtual bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event); void edit(Node *p_collision_polygon); - CollisionPolygonEditor(EditorNode *p_editor); - ~CollisionPolygonEditor(); + Polygon3DEditor(EditorNode *p_editor); + ~Polygon3DEditor(); }; -class CollisionPolygonEditorPlugin : public EditorPlugin { +class Polygon3DEditorPlugin : public EditorPlugin { - GDCLASS(CollisionPolygonEditorPlugin, EditorPlugin); + GDCLASS(Polygon3DEditorPlugin, EditorPlugin); - CollisionPolygonEditor *collision_polygon_editor; + Polygon3DEditor *collision_polygon_editor; EditorNode *editor; public: virtual bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event) { return collision_polygon_editor->forward_spatial_gui_input(p_camera, p_event); } - virtual String get_name() const { return "CollisionPolygon"; } + virtual String get_name() const { return "Polygon3DEditor"; } bool has_main_screen() const { return false; } virtual void edit(Object *p_object); virtual bool handles(Object *p_object) const; virtual void make_visible(bool p_visible); - CollisionPolygonEditorPlugin(EditorNode *p_node); - ~CollisionPolygonEditorPlugin(); + Polygon3DEditorPlugin(EditorNode *p_node); + ~Polygon3DEditorPlugin(); }; #endif // COLLISION_POLYGON_EDITOR_PLUGIN_H diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index 215964235e..8542296bde 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -30,6 +30,7 @@ #include "editor_preview_plugins.h" +#include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "io/file_access_memory.h" @@ -39,6 +40,38 @@ #include "scene/resources/material.h" #include "scene/resources/mesh.h" +void post_process_preview(Ref<Image> p_image) { + + if (p_image->get_format() != Image::FORMAT_RGBA8) + p_image->convert(Image::FORMAT_RGBA8); + + p_image->lock(); + + const int w = p_image->get_width(); + const int h = p_image->get_height(); + + const int r = MIN(w, h) / 32; + const int r2 = r * r; + Color transparent = Color(0, 0, 0, 0); + + for (int i = 0; i < r; i++) { + for (int j = 0; j < r; j++) { + int dx = i - r; + int dy = j - r; + if (dx * dx + dy * dy > r2) { + p_image->set_pixel(i, j, transparent); + p_image->set_pixel(w - 1 - i, j, transparent); + p_image->set_pixel(w - 1 - i, h - 1 - j, transparent); + p_image->set_pixel(i, h - 1 - j, transparent); + } else { + break; + } + } + } + + p_image->unlock(); +} + bool EditorTexturePreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "Texture"); @@ -90,6 +123,7 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from) { } img->resize(width, height); + post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); @@ -162,6 +196,7 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from) { } img->resize(width, height); + post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); @@ -203,6 +238,7 @@ Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_ Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); + post_process_preview(img); ptex->create_from_image(img, 0); return ptex; @@ -258,6 +294,7 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from) { thumbnail_size *= EDSCALE; img->convert(Image::FORMAT_RGBA8); img->resize(thumbnail_size, thumbnail_size); + post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); ptex->create_from_image(img, 0); return ptex; @@ -426,19 +463,36 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) { img->create(thumbnail_size, thumbnail_size, 0, Image::FORMAT_RGBA8); Color bg_color = EditorSettings::get_singleton()->get("text_editor/highlighting/background_color"); - bg_color.a = 1.0; Color keyword_color = EditorSettings::get_singleton()->get("text_editor/highlighting/keyword_color"); Color text_color = EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"); Color symbol_color = EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"); + if (EditorSettings::get_singleton()->get("text_editor/theme/color_theme") == "Adaptive") { + Ref<Theme> tm = EditorNode::get_singleton()->get_theme_base()->get_theme(); + + bg_color = tm->get_color("text_editor/highlighting/background_color", "Editor"); + keyword_color = tm->get_color("text_editor/highlighting/keyword_color", "Editor"); + text_color = tm->get_color("text_editor/highlighting/text_color", "Editor"); + symbol_color = tm->get_color("text_editor/highlighting/symbol_color", "Editor"); + } + img->lock(); + if (bg_color.a == 0) + bg_color = Color(0, 0, 0, 0); + bg_color.a = MAX(bg_color.a, 0.2); // some background + for (int i = 0; i < thumbnail_size; i++) { for (int j = 0; j < thumbnail_size; j++) { img->set_pixel(i, j, bg_color); } } + const int x0 = thumbnail_size / 8; + const int y0 = thumbnail_size / 8; + const int available_height = thumbnail_size - 2 * y0; + col = x0; + bool prev_is_text = false; bool in_keyword = false; for (int i = 0; i < code.length(); i++) { @@ -471,8 +525,8 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) { Color ul = color; ul.a *= 0.5; - img->set_pixel(col, line * 2, bg_color.blend(ul)); - img->set_pixel(col, line * 2 + 1, color); + img->set_pixel(col, y0 + line * 2, bg_color.blend(ul)); + img->set_pixel(col, y0 + line * 2 + 1, color); prev_is_text = _is_text_char(c); } @@ -482,9 +536,9 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) { in_keyword = false; if (c == '\n') { - col = 0; + col = x0; line++; - if (line >= thumbnail_size / 2) + if (line >= available_height / 2) break; } else if (c == '\t') { col += 3; @@ -495,6 +549,8 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) { img->unlock(); + post_process_preview(img); + Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); ptex->create_from_image(img, 0); @@ -762,6 +818,7 @@ Ref<Texture> EditorSamplePreviewPlugin::generate(const RES& p_from) { } imgdata = PoolVector<uint8_t>::Write(); + post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>( memnew( ImageTexture)); ptex->create_from_image(Image(w,h,0,Image::FORMAT_RGB8,img),0); @@ -831,6 +888,7 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from) { thumbnail_size *= EDSCALE; img->convert(Image::FORMAT_RGBA8); img->resize(thumbnail_size, thumbnail_size); + post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); ptex->create_from_image(img, 0); diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h index 2e12515e30..35b5c3a5f0 100644 --- a/editor/plugins/editor_preview_plugins.h +++ b/editor/plugins/editor_preview_plugins.h @@ -33,6 +33,8 @@ #include "editor/editor_resource_preview.h" +void post_process_preview(Ref<Image> p_image); + class EditorTexturePreviewPlugin : public EditorResourcePreviewGenerator { GDCLASS(EditorTexturePreviewPlugin, EditorResourcePreviewGenerator) public: diff --git a/editor/plugins/item_list_editor_plugin.cpp b/editor/plugins/item_list_editor_plugin.cpp index fd5a1f185f..8b44f672b0 100644 --- a/editor/plugins/item_list_editor_plugin.cpp +++ b/editor/plugins/item_list_editor_plugin.cpp @@ -42,9 +42,18 @@ bool ItemListPlugin::_set(const StringName &p_name, const Variant &p_value) { set_item_text(idx, p_value); else if (what == "icon") set_item_icon(idx, p_value); - else if (what == "checkable") - set_item_checkable(idx, p_value); - else if (what == "checked") + else if (what == "checkable") { + // This keeps compatibility to/from versions where this property was a boolean, before radio buttons + switch ((int)p_value) { + case 0: + case 1: + set_item_checkable(idx, p_value); + break; + case 2: + set_item_radio_checkable(idx, true); + break; + } + } else if (what == "checked") set_item_checked(idx, p_value); else if (what == "id") set_item_id(idx, p_value); @@ -68,9 +77,14 @@ bool ItemListPlugin::_get(const StringName &p_name, Variant &r_ret) const { r_ret = get_item_text(idx); else if (what == "icon") r_ret = get_item_icon(idx); - else if (what == "checkable") - r_ret = is_item_checkable(idx); - else if (what == "checked") + else if (what == "checkable") { + // This keeps compatibility to/from versions where this property was a boolean, before radio buttons + if (!is_item_checkable(idx)) { + r_ret = 0; + } else { + r_ret = is_item_radio_checkable(idx) ? 2 : 1; + } + } else if (what == "checked") r_ret = is_item_checked(idx); else if (what == "id") r_ret = get_item_id(idx); @@ -95,7 +109,7 @@ void ItemListPlugin::_get_property_list(List<PropertyInfo> *p_list) const { int flags = get_flags(); if (flags & FLAG_CHECKABLE) { - p_list->push_back(PropertyInfo(Variant::BOOL, base + "checkable")); + p_list->push_back(PropertyInfo(Variant::BOOL, base + "checkable", PROPERTY_HINT_ENUM, "No,As checkbox,As radio button")); p_list->push_back(PropertyInfo(Variant::BOOL, base + "checked")); } @@ -247,7 +261,7 @@ void ItemListEditor::_node_removed(Node *p_node) { void ItemListEditor::_notification(int p_notification) { - if (p_notification == NOTIFICATION_ENTER_TREE) { + if (p_notification == NOTIFICATION_ENTER_TREE || p_notification == NOTIFICATION_THEME_CHANGED) { add_button->set_icon(get_icon("Add", "EditorIcons")); del_button->set_icon(get_icon("Remove", "EditorIcons")); diff --git a/editor/plugins/item_list_editor_plugin.h b/editor/plugins/item_list_editor_plugin.h index bd7d3db10d..d6a071b9b9 100644 --- a/editor/plugins/item_list_editor_plugin.h +++ b/editor/plugins/item_list_editor_plugin.h @@ -74,7 +74,9 @@ public: virtual Ref<Texture> get_item_icon(int p_idx) const { return Ref<Texture>(); }; virtual void set_item_checkable(int p_idx, bool p_check) {} + virtual void set_item_radio_checkable(int p_idx, bool p_check) {} virtual bool is_item_checkable(int p_idx) const { return false; }; + virtual bool is_item_radio_checkable(int p_idx) const { return false; }; virtual void set_item_checked(int p_idx, bool p_checked) {} virtual bool is_item_checked(int p_idx) const { return false; }; @@ -145,7 +147,9 @@ public: virtual Ref<Texture> get_item_icon(int p_idx) const { return pp->get_item_icon(p_idx); } virtual void set_item_checkable(int p_idx, bool p_check) { pp->set_item_as_checkable(p_idx, p_check); } + virtual void set_item_radio_checkable(int p_idx, bool p_check) { pp->set_item_as_radio_checkable(p_idx, p_check); } virtual bool is_item_checkable(int p_idx) const { return pp->is_item_checkable(p_idx); } + virtual bool is_item_radio_checkable(int p_idx) const { return pp->is_item_radio_checkable(p_idx); } virtual void set_item_checked(int p_idx, bool p_checked) { pp->set_item_checked(p_idx, p_checked); } virtual bool is_item_checked(int p_idx) const { return pp->is_item_checked(p_idx); } diff --git a/editor/plugins/mesh_instance_editor_plugin.cpp b/editor/plugins/mesh_instance_editor_plugin.cpp index cb5f7ba76c..74b6f14c2e 100644 --- a/editor/plugins/mesh_instance_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_editor_plugin.cpp @@ -344,6 +344,10 @@ void MeshInstanceEditor::_create_outline_mesh() { err_dialog->set_text(TTR("Mesh has not surface to create outlines from!")); err_dialog->popup_centered_minsize(); return; + } else if (mesh->get_surface_count() == 1 && mesh->surface_get_primitive_type(0) != Mesh::PRIMITIVE_TRIANGLES) { + err_dialog->set_text(TTR("Mesh primitive type is not PRIMITIVE_TRIANGLES!")); + err_dialog->popup_centered_minsize(); + return; } Ref<Mesh> mesho = mesh->create_outline(outline_size->get_value()); @@ -396,7 +400,7 @@ MeshInstanceEditor::MeshInstanceEditor() { options->get_popup()->add_separator(); options->get_popup()->add_item(TTR("Create Navigation Mesh"), MENU_OPTION_CREATE_NAVMESH); options->get_popup()->add_separator(); - options->get_popup()->add_item(TTR("Create Outline Mesh.."), MENU_OPTION_CREATE_OUTLINE_MESH); + options->get_popup()->add_item(TTR("Create Outline Mesh..."), MENU_OPTION_CREATE_OUTLINE_MESH); options->get_popup()->add_separator(); options->get_popup()->add_item(TTR("View UV1"), MENU_OPTION_DEBUG_UV1); options->get_popup()->add_item(TTR("View UV2"), MENU_OPTION_DEBUG_UV2); diff --git a/editor/plugins/navigation_mesh_generator.cpp b/editor/plugins/navigation_mesh_generator.cpp index 5d4e5520f4..0537c5c31f 100644 --- a/editor/plugins/navigation_mesh_generator.cpp +++ b/editor/plugins/navigation_mesh_generator.cpp @@ -280,26 +280,20 @@ void NavigationMeshGenerator::bake(Ref<NavigationMesh> p_nav_mesh, Node *p_node) _build_recast_navigation_mesh(p_nav_mesh, &ep, hf, chf, cset, poly_mesh, detail_mesh, vertices, indices); - if (hf) { - rcFreeHeightField(hf); - hf = 0; - } - if (chf) { - rcFreeCompactHeightfield(chf); - chf = 0; - } - if (cset) { - rcFreeContourSet(cset); - cset = 0; - } - if (poly_mesh) { - rcFreePolyMesh(poly_mesh); - poly_mesh = 0; - } - if (detail_mesh) { - rcFreePolyMeshDetail(detail_mesh); - detail_mesh = 0; - } + rcFreeHeightField(hf); + hf = 0; + + rcFreeCompactHeightfield(chf); + chf = 0; + + rcFreeContourSet(cset); + cset = 0; + + rcFreePolyMesh(poly_mesh); + poly_mesh = 0; + + rcFreePolyMeshDetail(detail_mesh); + detail_mesh = 0; } ep.step(TTR("Done!"), 11); } diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp index abee9a9893..6d11079759 100644 --- a/editor/plugins/particles_2d_editor_plugin.cpp +++ b/editor/plugins/particles_2d_editor_plugin.cpp @@ -94,7 +94,7 @@ void Particles2DEditorPlugin::_generate_visibility_rect() { while (running < time) { uint64_t ticks = OS::get_singleton()->get_ticks_usec(); - ep.step("Generating..", int(running), true); + ep.step("Generating...", int(running), true); OS::get_singleton()->delay_usec(1000); Rect2 capture = particles->capture_rect(); @@ -229,7 +229,7 @@ void Particles2DEditorPlugin::_generate_emission_mask() { valid_normals.resize(vpc); } - ERR_EXPLAIN(TTR("No pixels with transparency > 128 in image..")); + ERR_EXPLAIN(TTR("No pixels with transparency > 128 in image...")); ERR_FAIL_COND(valid_positions.size() == 0); PoolVector<uint8_t> texdata; diff --git a/editor/plugins/particles_editor_plugin.cpp b/editor/plugins/particles_editor_plugin.cpp index d129b6c5c3..7728995a99 100644 --- a/editor/plugins/particles_editor_plugin.cpp +++ b/editor/plugins/particles_editor_plugin.cpp @@ -129,7 +129,7 @@ void ParticlesEditor::_generate_aabb() { while (running < time) { uint64_t ticks = OS::get_singleton()->get_ticks_usec(); - ep.step("Generating..", int(running), true); + ep.step("Generating...", int(running), true); OS::get_singleton()->delay_usec(1000); AABB capture = node->capture_aabb(); diff --git a/editor/plugins/path_editor_plugin.cpp b/editor/plugins/path_editor_plugin.cpp index 056219a575..6dde639c54 100644 --- a/editor/plugins/path_editor_plugin.cpp +++ b/editor/plugins/path_editor_plugin.cpp @@ -167,18 +167,12 @@ void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p Vector3 ofs; - if (p_cancel) { - - return; - } - if (t == 0) { - if (p_cancel) { - c->set_point_in(p_idx, p_restore); return; } + ur->create_action(TTR("Set Curve In Position")); ur->add_do_method(c.ptr(), "set_point_in", idx, c->get_point_in(idx)); ur->add_undo_method(c.ptr(), "set_point_in", idx, p_restore); @@ -186,10 +180,11 @@ void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p } else { if (p_cancel) { - c->set_point_out(idx, p_restore); + return; } + ur->create_action(TTR("Set Curve Out Position")); ur->add_do_method(c.ptr(), "set_point_out", idx, c->get_point_out(idx)); ur->add_undo_method(c.ptr(), "set_point_out", idx, p_restore); diff --git a/editor/plugins/physical_bone_plugin.cpp b/editor/plugins/physical_bone_plugin.cpp new file mode 100644 index 0000000000..42f1adcadf --- /dev/null +++ b/editor/plugins/physical_bone_plugin.cpp @@ -0,0 +1,123 @@ +/*************************************************************************/ +/* physical_bone_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (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 "physical_bone_plugin.h" +#include "editor/plugins/spatial_editor_plugin.h" +#include "scene/3d/physics_body.h" + +void PhysicalBoneEditor::_bind_methods() { + ClassDB::bind_method(D_METHOD("_on_toggle_button_transform_joint", "is_pressed"), &PhysicalBoneEditor::_on_toggle_button_transform_joint); +} + +void PhysicalBoneEditor::_on_toggle_button_transform_joint(bool p_is_pressed) { + + _set_move_joint(); +} + +void PhysicalBoneEditor::_set_move_joint() { + if (selected) { + selected->_set_gizmo_move_joint(button_transform_joint->is_pressed()); + } +} + +PhysicalBoneEditor::PhysicalBoneEditor(EditorNode *p_editor) : + editor(p_editor), + selected(NULL) { + + spatial_editor_hb = memnew(HBoxContainer); + spatial_editor_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL); + spatial_editor_hb->set_alignment(BoxContainer::ALIGN_BEGIN); + SpatialEditor::get_singleton()->add_control_to_menu_panel(spatial_editor_hb); + + spatial_editor_hb->add_child(memnew(VSeparator)); + + button_transform_joint = memnew(ToolButton); + spatial_editor_hb->add_child(button_transform_joint); + + button_transform_joint->set_text(TTR("Move joint")); + button_transform_joint->set_icon(SpatialEditor::get_singleton()->get_icon("PhysicalBone", "EditorIcons")); + button_transform_joint->set_toggle_mode(true); + button_transform_joint->connect("toggled", this, "_on_toggle_button_transform_joint"); + + hide(); +} + +PhysicalBoneEditor::~PhysicalBoneEditor() { + // TODO the spatial_editor_hb should be removed from SpatialEditor, but in this moment it's not possible + for (int i = spatial_editor_hb->get_child_count() - 1; 0 <= i; --i) { + Node *n = spatial_editor_hb->get_child(i); + spatial_editor_hb->remove_child(n); + memdelete(n); + } + memdelete(spatial_editor_hb); +} + +void PhysicalBoneEditor::set_selected(PhysicalBone *p_pb) { + + button_transform_joint->set_pressed(false); + + _set_move_joint(); + selected = p_pb; + _set_move_joint(); +} + +void PhysicalBoneEditor::hide() { + spatial_editor_hb->hide(); +} + +void PhysicalBoneEditor::show() { + spatial_editor_hb->show(); +} + +PhysicalBonePlugin::PhysicalBonePlugin(EditorNode *p_editor) : + editor(p_editor), + selected(NULL) { + + physical_bone_editor = memnew(PhysicalBoneEditor(editor)); +} + +void PhysicalBonePlugin::make_visible(bool p_visible) { + if (p_visible) { + + physical_bone_editor->show(); + } else { + + physical_bone_editor->hide(); + physical_bone_editor->set_selected(NULL); + selected = NULL; + } +} + +void PhysicalBonePlugin::edit(Object *p_node) { + selected = static_cast<PhysicalBone *>(p_node); // Trust it + ERR_FAIL_COND(!selected); + + physical_bone_editor->set_selected(selected); +} diff --git a/editor/plugins/physical_bone_plugin.h b/editor/plugins/physical_bone_plugin.h new file mode 100644 index 0000000000..9e7a50307a --- /dev/null +++ b/editor/plugins/physical_bone_plugin.h @@ -0,0 +1,78 @@ +/*************************************************************************/ +/* physical_bone_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (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 PHYSICAL_BONE_PLUGIN_H +#define PHYSICAL_BONE_PLUGIN_H + +#include "editor/editor_node.h" + +class PhysicalBoneEditor : public Object { + GDCLASS(PhysicalBoneEditor, Object); + + EditorNode *editor; + HBoxContainer *spatial_editor_hb; + ToolButton *button_transform_joint; + + PhysicalBone *selected; + +protected: + static void _bind_methods(); + +private: + void _on_toggle_button_transform_joint(bool p_is_pressed); + void _set_move_joint(); + +public: + PhysicalBoneEditor(EditorNode *p_editor); + ~PhysicalBoneEditor(); + + void set_selected(PhysicalBone *p_pb); + + void hide(); + void show(); +}; + +class PhysicalBonePlugin : public EditorPlugin { + GDCLASS(PhysicalBonePlugin, EditorPlugin); + + EditorNode *editor; + PhysicalBone *selected; + PhysicalBoneEditor *physical_bone_editor; + +public: + virtual String get_name() const { return "PhysicalBone"; } + virtual bool handles(Object *p_object) const { return p_object->is_class("PhysicalBone"); } + virtual void make_visible(bool p_visible); + virtual void edit(Object *p_node); + + PhysicalBonePlugin(EditorNode *p_editor); +}; + +#endif diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 1db6621718..f04e0a801c 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -35,7 +35,7 @@ #include "os/file_access.h" #include "os/input.h" #include "os/keyboard.h" - +#include "scene/2d/skeleton_2d.h" Node2D *Polygon2DEditor::_get_node() const { return node; @@ -59,10 +59,15 @@ void Polygon2DEditor::_notification(int p_what) { button_uv->set_icon(get_icon("Uv", "EditorIcons")); + uv_button[UV_MODE_CREATE]->set_icon(get_icon("Add", "EditorIcons")); uv_button[UV_MODE_EDIT_POINT]->set_icon(get_icon("ToolSelect", "EditorIcons")); uv_button[UV_MODE_MOVE]->set_icon(get_icon("ToolMove", "EditorIcons")); uv_button[UV_MODE_ROTATE]->set_icon(get_icon("ToolRotate", "EditorIcons")); uv_button[UV_MODE_SCALE]->set_icon(get_icon("ToolScale", "EditorIcons")); + uv_button[UV_MODE_ADD_SPLIT]->set_icon(get_icon("AddSplit", "EditorIcons")); + uv_button[UV_MODE_REMOVE_SPLIT]->set_icon(get_icon("DeleteSplit", "EditorIcons")); + uv_button[UV_MODE_PAINT_WEIGHT]->set_icon(get_icon("PaintVertex", "EditorIcons")); + uv_button[UV_MODE_CLEAR_WEIGHT]->set_icon(get_icon("UnpaintVertex", "EditorIcons")); b_snap_grid->set_icon(get_icon("Grid", "EditorIcons")); b_snap_enable->set_icon(get_icon("SnapGrid", "EditorIcons")); @@ -75,6 +80,172 @@ void Polygon2DEditor::_notification(int p_what) { } } +void Polygon2DEditor::_sync_bones() { + + print_line("syncinc"); + if (!node->has_node(node->get_skeleton())) { + error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); + error->popup_centered_minsize(); + return; + } + + Node *sn = node->get_node(node->get_skeleton()); + Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(sn); + + if (!skeleton) { + error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); + error->popup_centered_minsize(); + return; + } + + Array prev_bones = node->call("_get_bones"); + node->clear_bones(); + + print_line("bones in skeleton: " + itos(skeleton->get_bone_count())); + + for (int i = 0; i < skeleton->get_bone_count(); i++) { + NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); + PoolVector<float> weights; + int wc = node->get_polygon().size(); + + for (int j = 0; j < prev_bones.size(); j += 2) { + NodePath pvp = prev_bones[j]; + PoolVector<float> pv = prev_bones[j + 1]; + if (pvp == path && pv.size() == wc) { + weights = pv; + } + } + + if (weights.size() == 0) { //create them + weights.resize(node->get_polygon().size()); + PoolVector<float>::Write w = weights.write(); + for (int j = 0; j < wc; j++) { + w[j] = 0.0; + } + } + + node->add_bone(path, weights); + } + Array new_bones = node->call("_get_bones"); + + undo_redo->create_action(TTR("Sync bones")); + undo_redo->add_do_method(node, "_set_bones", new_bones); + undo_redo->add_undo_method(node, "_set_bones", prev_bones); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->add_do_method(this, "_update_bone_list"); + undo_redo->add_undo_method(this, "_update_bone_list"); + undo_redo->commit_action(); +} + +void Polygon2DEditor::_update_bone_list() { + + NodePath selected; + while (bone_scroll_vb->get_child_count()) { + CheckBox *cb = Object::cast_to<CheckBox>(bone_scroll_vb->get_child(0)); + if (cb && cb->is_pressed()) { + selected = cb->get_meta("bone_path"); + } + memdelete(bone_scroll_vb->get_child(0)); + } + + Ref<ButtonGroup> bg; + bg.instance(); + for (int i = 0; i < node->get_bone_count(); i++) { + CheckBox *cb = memnew(CheckBox); + NodePath np = node->get_bone_path(i); + String name; + if (np.get_name_count()) { + name = np.get_name(np.get_name_count() - 1); + } + if (name == String()) { + name = "Bone " + itos(i); + } + cb->set_text(name); + cb->set_button_group(bg); + cb->set_meta("bone_path", np); + bone_scroll_vb->add_child(cb); + + if (np == selected) + cb->set_pressed(true); + + cb->connect("pressed", this, "_bone_paint_selected", varray(i)); + } + + uv_edit_draw->update(); +} + +void Polygon2DEditor::_bone_paint_selected(int p_index) { + uv_edit_draw->update(); +} + +void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { + + if (p_mode == 0) { //uv + uv_button[UV_MODE_CREATE]->hide(); + for (int i = UV_MODE_MOVE; i <= UV_MODE_SCALE; i++) { + uv_button[i]->show(); + } + uv_button[UV_MODE_ADD_SPLIT]->hide(); + uv_button[UV_MODE_REMOVE_SPLIT]->hide(); + uv_button[UV_MODE_PAINT_WEIGHT]->hide(); + uv_button[UV_MODE_CLEAR_WEIGHT]->hide(); + _uv_mode(UV_MODE_EDIT_POINT); + + bone_scroll_main_vb->hide(); + bone_paint_strength->hide(); + bone_paint_radius->hide(); + bone_paint_radius_label->hide(); + + } else if (p_mode == 1) { //poly + for (int i = 0; i <= UV_MODE_SCALE; i++) { + uv_button[i]->show(); + } + uv_button[UV_MODE_ADD_SPLIT]->hide(); + uv_button[UV_MODE_REMOVE_SPLIT]->hide(); + uv_button[UV_MODE_PAINT_WEIGHT]->hide(); + uv_button[UV_MODE_CLEAR_WEIGHT]->hide(); + _uv_mode(UV_MODE_EDIT_POINT); + + bone_scroll_main_vb->hide(); + bone_paint_strength->hide(); + bone_paint_radius->hide(); + bone_paint_radius_label->hide(); + + } else if (p_mode == 2) { //splits + for (int i = 0; i <= UV_MODE_SCALE; i++) { + uv_button[i]->hide(); + } + uv_button[UV_MODE_ADD_SPLIT]->show(); + uv_button[UV_MODE_REMOVE_SPLIT]->show(); + uv_button[UV_MODE_PAINT_WEIGHT]->hide(); + uv_button[UV_MODE_CLEAR_WEIGHT]->hide(); + _uv_mode(UV_MODE_ADD_SPLIT); + + bone_scroll_main_vb->hide(); + bone_paint_strength->hide(); + bone_paint_radius->hide(); + bone_paint_radius_label->hide(); + + } else if (p_mode == 3) { //bones´ + for (int i = 0; i <= UV_MODE_REMOVE_SPLIT; i++) { + uv_button[i]->hide(); + } + uv_button[UV_MODE_PAINT_WEIGHT]->show(); + uv_button[UV_MODE_CLEAR_WEIGHT]->show(); + _uv_mode(UV_MODE_PAINT_WEIGHT); + + bone_scroll_main_vb->show(); + bone_paint_strength->show(); + bone_paint_radius->show(); + bone_paint_radius_label->show(); + _update_bone_list(); + bone_paint_pos = Vector2(-100000, -100000); //send brush away when switching + } + + uv_edit_draw->update(); +} + void Polygon2DEditor::_menu_option(int p_option) { switch (p_option) { @@ -143,6 +314,9 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->commit_action(); } break; + case UVEDIT_GRID_SETTINGS: { + grid_settings->popup_centered_minsize(); + } break; default: { AbstractPolygon2DEditor::_menu_option(p_option); } break; @@ -180,6 +354,10 @@ void Polygon2DEditor::_set_snap_step_y(float p_val) { void Polygon2DEditor::_uv_mode(int p_mode) { + split_create = false; + uv_drag = false; + uv_create = false; + uv_mode = UVMode(p_mode); for (int i = 0; i < UV_MODE_MAX; i++) { uv_button[i]->set_pressed(p_mode == i); @@ -202,8 +380,60 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { uv_drag_from = Vector2(mb->get_position().x, mb->get_position().y); uv_drag = true; - uv_prev = node->get_uv(); + points_prev = node->get_uv(); + + if (uv_edit_mode[0]->is_pressed()) { //edit uv + points_prev = node->get_uv(); + } else { //edit polygon + points_prev = node->get_polygon(); + } + uv_move_current = uv_mode; + if (uv_move_current == UV_MODE_CREATE) { + + if (!uv_create) { + points_prev.resize(0); + Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); + points_prev.push_back(tuv); + uv_create_to = tuv; + point_drag_index = 0; + uv_drag_from = tuv; + uv_drag = true; + uv_create = true; + uv_create_uv_prev = node->get_uv(); + uv_create_poly_prev = node->get_polygon(); + uv_create_bones_prev = node->call("_get_bones"); + splits_prev = node->get_splits(); + node->set_polygon(points_prev); + node->set_uv(points_prev); + + } else { + Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); + + if (points_prev.size() > 3 && tuv.distance_to(points_prev[0]) < 8) { + undo_redo->create_action(TTR("Create Polygon & UV")); + undo_redo->add_do_method(node, "set_uv", node->get_uv()); + undo_redo->add_undo_method(node, "set_uv", points_prev); + undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); + undo_redo->add_undo_method(node, "set_polygon", points_prev); + undo_redo->add_do_method(node, "clear_bones"); + undo_redo->add_undo_method(node, "_set_bones", node->call("_get_bones")); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->commit_action(); + uv_drag = false; + uv_create = false; + _uv_mode(UV_MODE_EDIT_POINT); + } else { + points_prev.push_back(tuv); + point_drag_index = points_prev.size() - 1; + uv_drag_from = tuv; + } + node->set_polygon(points_prev); + node->set_uv(points_prev); + } + } + if (uv_move_current == UV_MODE_EDIT_POINT) { if (mb->get_shift() && mb->get_command()) @@ -216,39 +446,219 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { if (uv_move_current == UV_MODE_EDIT_POINT) { - uv_drag_index = -1; - for (int i = 0; i < uv_prev.size(); i++) { + point_drag_index = -1; + for (int i = 0; i < points_prev.size(); i++) { - Vector2 tuv = mtx.xform(uv_prev[i]); + Vector2 tuv = mtx.xform(points_prev[i]); if (tuv.distance_to(Vector2(mb->get_position().x, mb->get_position().y)) < 8) { uv_drag_from = tuv; - uv_drag_index = i; + point_drag_index = i; } } - if (uv_drag_index == -1) { + if (point_drag_index == -1) { uv_drag = false; } } - } else if (uv_drag) { + + if (uv_move_current == UV_MODE_ADD_SPLIT) { + + int split_to_index = -1; + split_to_index = -1; + for (int i = 0; i < points_prev.size(); i++) { + + Vector2 tuv = mtx.xform(points_prev[i]); + if (tuv.distance_to(Vector2(mb->get_position().x, mb->get_position().y)) < 8) { + split_to_index = i; + } + } + + if (split_to_index == -1) { + split_create = false; + return; + } + + if (split_create) { + + split_create = false; + if (split_to_index < point_drag_index) { + SWAP(split_to_index, point_drag_index); + } + bool valid = true; + String split_error; + if (split_to_index == point_drag_index) { + split_error = TTR("Split point with itself."); + valid = false; + } + if (split_to_index + 1 == point_drag_index) { + //not a split,goes along the edge + split_error = TTR("Split can't form an existing edge."); + valid = false; + } + if (split_to_index == points_prev.size() - 1 && point_drag_index == 0) { + //not a split,goes along the edge + split_error = TTR("Split can't form an existing edge."); + valid = false; + } + + for (int i = 0; i < splits_prev.size(); i += 2) { + + if (splits_prev[i] == point_drag_index && splits_prev[i + 1] == split_to_index) { + //already exists + split_error = TTR("Split already exists."); + valid = false; + break; + } + + int a_state; //-1, outside split, 0 split point, +1, inside split + if (point_drag_index == splits_prev[i] || point_drag_index == splits_prev[i + 1]) { + a_state = 0; + } else if (point_drag_index < splits_prev[i] || point_drag_index > splits_prev[i + 1]) { + a_state = -1; + } else { + a_state = 1; + } + + int b_state; //-1, outside split, 0 split point, +1, inside split + if (split_to_index == splits_prev[i] || split_to_index == splits_prev[i + 1]) { + b_state = 0; + } else if (split_to_index < splits_prev[i] || split_to_index > splits_prev[i + 1]) { + b_state = -1; + } else { + b_state = 1; + } + + if (b_state * a_state < 0) { + //crossing + split_error = "Split crosses another split."; + valid = false; + break; + } + } + + if (valid) { + + splits_prev.push_back(point_drag_index); + splits_prev.push_back(split_to_index); + + undo_redo->create_action(TTR("Add Split")); + + undo_redo->add_do_method(node, "set_splits", splits_prev); + undo_redo->add_undo_method(node, "set_splits", node->get_splits()); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->commit_action(); + } else { + error->set_text(TTR("Invalid Split: ") + split_error); + error->popup_centered_minsize(); + } + + } else { + point_drag_index = split_to_index; + split_create = true; + splits_prev = node->get_splits(); + uv_create_to = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); + } + } + + if (uv_move_current == UV_MODE_REMOVE_SPLIT) { + + for (int i = 0; i < splits_prev.size(); i += 2) { + if (splits_prev[i] < 0 || splits_prev[i] >= points_prev.size()) + continue; + if (splits_prev[i + 1] < 0 || splits_prev[i] >= points_prev.size()) + continue; + Vector2 e[2] = { mtx.xform(points_prev[splits_prev[i]]), mtx.xform(points_prev[splits_prev[i + 1]]) }; + Vector2 mp = Vector2(mb->get_position().x, mb->get_position().y); + Vector2 cp = Geometry::get_closest_point_to_segment_2d(mp, e); + if (cp.distance_to(mp) < 8) { + splits_prev.remove(i); + splits_prev.remove(i); + + undo_redo->create_action(TTR("Remove Split")); + + undo_redo->add_do_method(node, "set_splits", splits_prev); + undo_redo->add_undo_method(node, "set_splits", node->get_splits()); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->commit_action(); + + break; + } + } + } + + if (uv_move_current == UV_MODE_PAINT_WEIGHT || uv_move_current == UV_MODE_CLEAR_WEIGHT) { + + int bone_selected = -1; + for (int i = 0; i < bone_scroll_vb->get_child_count(); i++) { + CheckBox *c = Object::cast_to<CheckBox>(bone_scroll_vb->get_child(i)); + if (c && c->is_pressed()) { + bone_selected = i; + break; + } + } + + if (bone_selected != -1 && node->get_bone_weights(bone_selected).size() == points_prev.size()) { + + prev_weights = node->get_bone_weights(bone_selected); + bone_painting = true; + bone_painting_bone = bone_selected; + } + } + + } else if (uv_drag && !uv_create) { undo_redo->create_action(TTR("Transform UV Map")); - undo_redo->add_do_method(node, "set_uv", node->get_uv()); - undo_redo->add_undo_method(node, "set_uv", uv_prev); + + if (uv_edit_mode[0]->is_pressed()) { //edit uv + undo_redo->add_do_method(node, "set_uv", node->get_uv()); + undo_redo->add_undo_method(node, "set_uv", points_prev); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); + undo_redo->add_undo_method(node, "set_polygon", points_prev); + } undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); uv_drag = false; + } else if (bone_painting) { + + undo_redo->create_action(TTR("Paint bone weights")); + undo_redo->add_do_method(node, "set_bone_weights", bone_painting_bone, node->get_bone_weights(bone_painting_bone)); + undo_redo->add_undo_method(node, "set_bone_weights", bone_painting_bone, prev_weights); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->commit_action(); + bone_painting = false; } } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { - if (uv_drag) { + if (uv_create) { + + uv_drag = false; + uv_create = false; + node->set_uv(uv_create_uv_prev); + node->set_polygon(uv_create_poly_prev); + node->call("_set_bones", uv_create_bones_prev); + node->set_splits(splits_prev); + uv_edit_draw->update(); + } else if (uv_drag) { uv_drag = false; - node->set_uv(uv_prev); + if (uv_edit_mode[0]->is_pressed()) { //edit uv + node->set_uv(points_prev); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + node->set_polygon(points_prev); + } uv_edit_draw->update(); + } else if (split_create) { + split_create = false; + uv_edit_draw->update(); + } else if (bone_painting) { + node->set_bone_weights(bone_painting_bone, prev_weights); } } else if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) { @@ -277,48 +687,66 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { switch (uv_move_current) { + case UV_MODE_CREATE: { + if (uv_create) { + uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); + } + } break; case UV_MODE_EDIT_POINT: { - PoolVector<Vector2> uv_new = uv_prev; - uv_new.set(uv_drag_index, uv_new[uv_drag_index] + drag); - node->set_uv(uv_new); + PoolVector<Vector2> uv_new = points_prev; + uv_new.set(point_drag_index, uv_new[point_drag_index] + drag); + + if (uv_edit_mode[0]->is_pressed()) { //edit uv + node->set_uv(uv_new); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + node->set_polygon(uv_new); + } } break; case UV_MODE_MOVE: { - PoolVector<Vector2> uv_new = uv_prev; + PoolVector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) uv_new.set(i, uv_new[i] + drag); - node->set_uv(uv_new); + if (uv_edit_mode[0]->is_pressed()) { //edit uv + node->set_uv(uv_new); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + node->set_polygon(uv_new); + } } break; case UV_MODE_ROTATE: { Vector2 center; - PoolVector<Vector2> uv_new = uv_prev; + PoolVector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) - center += uv_prev[i]; + center += points_prev[i]; center /= uv_new.size(); float angle = (uv_drag_from - mtx.xform(center)).normalized().angle_to((uv_drag_to - mtx.xform(center)).normalized()); for (int i = 0; i < uv_new.size(); i++) { - Vector2 rel = uv_prev[i] - center; + Vector2 rel = points_prev[i] - center; rel = rel.rotated(angle); uv_new.set(i, center + rel); } - node->set_uv(uv_new); + if (uv_edit_mode[0]->is_pressed()) { //edit uv + node->set_uv(uv_new); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + node->set_polygon(uv_new); + } } break; case UV_MODE_SCALE: { Vector2 center; - PoolVector<Vector2> uv_new = uv_prev; + PoolVector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) - center += uv_prev[i]; + center += points_prev[i]; center /= uv_new.size(); float from_dist = uv_drag_from.distance_to(mtx.xform(center)); @@ -329,14 +757,51 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { float scale = to_dist / from_dist; for (int i = 0; i < uv_new.size(); i++) { - Vector2 rel = uv_prev[i] - center; + Vector2 rel = points_prev[i] - center; rel = rel * scale; uv_new.set(i, center + rel); } - node->set_uv(uv_new); + if (uv_edit_mode[0]->is_pressed()) { //edit uv + node->set_uv(uv_new); + } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + node->set_polygon(uv_new); + } } break; } + + if (bone_painting) { + bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); + PoolVector<float> painted_weights = node->get_bone_weights(bone_painting_bone); + + { + int pc = painted_weights.size(); + float amount = bone_paint_strength->get_value(); + float radius = bone_paint_radius->get_value() * EDSCALE; + + if (uv_mode == UV_MODE_CLEAR_WEIGHT) { + amount = -amount; + } + + PoolVector<float>::Write w = painted_weights.write(); + PoolVector<float>::Read r = prev_weights.read(); + PoolVector<Vector2>::Read rv = points_prev.read(); + + for (int i = 0; i < pc; i++) { + if (mtx.xform(rv[i]).distance_to(bone_paint_pos) < radius) { + w[i] = CLAMP(r[i] + amount, 0, 1); + } + } + } + + node->set_bone_weights(bone_painting_bone, painted_weights); + } + uv_edit_draw->update(); + } else if (split_create) { + uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); + uv_edit_draw->update(); + } else if (uv_mode == UV_MODE_PAINT_WEIGHT || uv_mode == UV_MODE_CLEAR_WEIGHT) { + bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); uv_edit_draw->update(); } } @@ -372,6 +837,8 @@ void Polygon2DEditor::_uv_draw() { if (base_tex.is_null()) return; + String warning; + Transform2D mtx; mtx.elements[2] = -uv_draw_ofs; mtx.scale_basis(Vector2(uv_draw_zoom, uv_draw_zoom)); @@ -407,7 +874,31 @@ void Polygon2DEditor::_uv_draw() { } } - PoolVector<Vector2> uvs = node->get_uv(); + PoolVector<Vector2> uvs; + if (uv_edit_mode[0]->is_pressed()) { //edit uv + uvs = node->get_uv(); + } else { //edit polygon + uvs = node->get_polygon(); + } + + PoolVector<float>::Read weight_r; + + if (uv_edit_mode[3]->is_pressed()) { + int bone_selected = -1; + for (int i = 0; i < bone_scroll_vb->get_child_count(); i++) { + CheckBox *c = Object::cast_to<CheckBox>(bone_scroll_vb->get_child(i)); + if (c && c->is_pressed()) { + bone_selected = i; + break; + } + } + + if (bone_selected != -1 && node->get_bone_weights(bone_selected).size() == uvs.size()) { + + weight_r = node->get_bone_weights(bone_selected).read(); + } + } + Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); Rect2 rect(Point2(), mtx.basis_xform(base_tex->get_size())); @@ -416,11 +907,87 @@ void Polygon2DEditor::_uv_draw() { for (int i = 0; i < uvs.size(); i++) { int next = (i + 1) % uvs.size(); - uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(uvs[next]), Color(0.9, 0.5, 0.5), 2); - uv_edit_draw->draw_texture(handle, mtx.xform(uvs[i]) - handle->get_size() * 0.5); + Vector2 next_point = uvs[next]; + if (uv_create && i == uvs.size() - 1) { + next_point = uv_create_to; + } + uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), Color(0.9, 0.5, 0.5), 2); + if (weight_r.ptr()) { + + Vector2 draw_pos = mtx.xform(uvs[i]); + float weight = weight_r[i]; + uv_edit_draw->draw_rect(Rect2(draw_pos - Vector2(2, 2) * EDSCALE, Vector2(5, 5) * EDSCALE), Color(weight, weight, weight, 1.0)); + } else { + uv_edit_draw->draw_texture(handle, mtx.xform(uvs[i]) - handle->get_size() * 0.5); + } rect.expand_to(mtx.basis_xform(uvs[i])); } + if (split_create) { + Vector2 from = uvs[point_drag_index]; + Vector2 to = uv_create_to; + uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), Color(0.9, 0.5, 0.5), 2); + } + + PoolVector<int> splits = node->get_splits(); + + for (int i = 0; i < splits.size(); i += 2) { + int idx_from = splits[i]; + int idx_to = splits[i + 1]; + if (idx_from < 0 || idx_to >= uvs.size()) + continue; + uv_edit_draw->draw_line(mtx.xform(uvs[idx_from]), mtx.xform(uvs[idx_to]), Color(0.9, 0.5, 0.5), 2); + } + + if (uv_mode == UV_MODE_PAINT_WEIGHT || uv_mode == UV_MODE_CLEAR_WEIGHT) { + + NodePath bone_path; + for (int i = 0; i < bone_scroll_vb->get_child_count(); i++) { + CheckBox *c = Object::cast_to<CheckBox>(bone_scroll_vb->get_child(i)); + if (c && c->is_pressed()) { + bone_path = node->get_bone_path(i); + break; + } + } + + //draw skeleton + NodePath skeleton_path = node->get_skeleton(); + if (node->has_node(skeleton_path)) { + Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(node->get_node(skeleton_path)); + if (skeleton) { + for (int i = 0; i < skeleton->get_bone_count(); i++) { + + Bone2D *bone = skeleton->get_bone(i); + if (bone->get_rest() == Transform2D(0, 0, 0, 0, 0, 0)) + continue; //not set + + bool current = bone_path == skeleton->get_path_to(bone); + + for (int j = 0; j < bone->get_child_count(); j++) { + + Node2D *n = Object::cast_to<Node2D>(bone->get_child(j)); + if (!n) + continue; + + bool edit_bone = n->has_meta("_edit_bone_") && n->get_meta("_edit_bone_"); + if (edit_bone) { + + Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest()); + Transform2D endpoint_xform = bone_xform * n->get_transform(); + + Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2); + } + } + } + } + } + + //draw paint circle + uv_edit_draw->draw_circle(bone_paint_pos, bone_paint_radius->get_value() * EDSCALE, Color(1, 1, 1, 0.1)); + } + rect = rect.grow(200); updating_uv_scroll = true; uv_hscroll->set_min(rect.position.x); @@ -449,6 +1016,11 @@ void Polygon2DEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_snap_off_y"), &Polygon2DEditor::_set_snap_off_y); ClassDB::bind_method(D_METHOD("_set_snap_step_x"), &Polygon2DEditor::_set_snap_step_x); ClassDB::bind_method(D_METHOD("_set_snap_step_y"), &Polygon2DEditor::_set_snap_step_y); + ClassDB::bind_method(D_METHOD("_uv_edit_mode_select"), &Polygon2DEditor::_uv_edit_mode_select); + ClassDB::bind_method(D_METHOD("_sync_bones"), &Polygon2DEditor::_sync_bones); + ClassDB::bind_method(D_METHOD("_update_bone_list"), &Polygon2DEditor::_update_bone_list); + + ClassDB::bind_method(D_METHOD("_bone_paint_selected"), &Polygon2DEditor::_bone_paint_selected); } Vector2 Polygon2DEditor::snap_point(Vector2 p_target) const { @@ -481,6 +1053,40 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_edit->add_child(uv_main_vb); //uv_edit->set_child_rect(uv_main_vb); HBoxContainer *uv_mode_hb = memnew(HBoxContainer); + + uv_edit_group.instance(); + + uv_edit_mode[0] = memnew(ToolButton); + uv_mode_hb->add_child(uv_edit_mode[0]); + uv_edit_mode[0]->set_toggle_mode(true); + uv_edit_mode[1] = memnew(ToolButton); + uv_mode_hb->add_child(uv_edit_mode[1]); + uv_edit_mode[1]->set_toggle_mode(true); + uv_edit_mode[2] = memnew(ToolButton); + uv_mode_hb->add_child(uv_edit_mode[2]); + uv_edit_mode[2]->set_toggle_mode(true); + uv_edit_mode[3] = memnew(ToolButton); + uv_mode_hb->add_child(uv_edit_mode[3]); + uv_edit_mode[3]->set_toggle_mode(true); + + uv_edit_mode[0]->set_text(TTR("UV")); + uv_edit_mode[0]->set_pressed(true); + uv_edit_mode[1]->set_text(TTR("Poly")); + uv_edit_mode[2]->set_text(TTR("Splits")); + uv_edit_mode[3]->set_text(TTR("Bones")); + + uv_edit_mode[0]->set_button_group(uv_edit_group); + uv_edit_mode[1]->set_button_group(uv_edit_group); + uv_edit_mode[2]->set_button_group(uv_edit_group); + uv_edit_mode[3]->set_button_group(uv_edit_group); + + uv_edit_mode[0]->connect("pressed", this, "_uv_edit_mode_select", varray(0)); + uv_edit_mode[1]->connect("pressed", this, "_uv_edit_mode_select", varray(1)); + uv_edit_mode[2]->connect("pressed", this, "_uv_edit_mode_select", varray(2)); + uv_edit_mode[3]->connect("pressed", this, "_uv_edit_mode_select", varray(3)); + + uv_mode_hb->add_child(memnew(VSeparator)); + uv_main_vb->add_child(uv_mode_hb); for (int i = 0; i < UV_MODE_MAX; i++) { @@ -491,12 +1097,45 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_button[i]->set_focus_mode(FOCUS_NONE); } - uv_button[0]->set_tooltip(TTR("Move Point") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); - uv_button[1]->set_tooltip(TTR("Move Polygon")); - uv_button[2]->set_tooltip(TTR("Rotate Polygon")); - uv_button[3]->set_tooltip(TTR("Scale Polygon")); + uv_button[0]->set_tooltip(TTR("Create Polygon")); + uv_button[1]->set_tooltip(TTR("Move Point") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); + uv_button[2]->set_tooltip(TTR("Move Polygon")); + uv_button[3]->set_tooltip(TTR("Rotate Polygon")); + uv_button[4]->set_tooltip(TTR("Scale Polygon")); + uv_button[5]->set_tooltip(TTR("Connect two points to make a split")); + uv_button[6]->set_tooltip(TTR("Select a split to erase it")); + uv_button[7]->set_tooltip(TTR("Paint weights with specified intensity")); + uv_button[8]->set_tooltip(TTR("UnPaint weights with specified intensity")); + + uv_button[0]->hide(); + uv_button[5]->hide(); + uv_button[6]->hide(); + uv_button[7]->hide(); + uv_button[8]->hide(); + uv_button[1]->set_pressed(true); + + bone_paint_strength = memnew(HSlider); + uv_mode_hb->add_child(bone_paint_strength); + bone_paint_strength->set_custom_minimum_size(Size2(75 * EDSCALE, 0)); + bone_paint_strength->set_v_size_flags(SIZE_SHRINK_CENTER); + bone_paint_strength->set_min(0); + bone_paint_strength->set_max(1); + bone_paint_strength->set_step(0.01); + bone_paint_strength->set_value(0.5); + + bone_paint_radius_label = memnew(Label(" " + TTR("Radius:") + " ")); + uv_mode_hb->add_child(bone_paint_radius_label); + bone_paint_radius = memnew(SpinBox); + uv_mode_hb->add_child(bone_paint_radius); + + bone_paint_strength->hide(); + bone_paint_radius->hide(); + bone_paint_radius_label->hide(); + bone_paint_radius->set_min(1); + bone_paint_radius->set_max(100); + bone_paint_radius->set_step(1); + bone_paint_radius->set_value(32); - uv_button[0]->set_pressed(true); HBoxContainer *uv_main_hb = memnew(HBoxContainer); uv_main_vb->add_child(uv_main_hb); uv_edit_draw = memnew(Control); @@ -510,6 +1149,8 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_menu->get_popup()->add_item(TTR("UV->Polygon"), UVEDIT_UV_TO_POLYGON); uv_menu->get_popup()->add_separator(); uv_menu->get_popup()->add_item(TTR("Clear UV"), UVEDIT_UV_CLEAR); + uv_menu->get_popup()->add_separator(); + uv_menu->get_popup()->add_item(TTR("Grid Settings"), UVEDIT_GRID_SETTINGS); uv_menu->get_popup()->connect("id_pressed", this, "_menu_option"); uv_mode_hb->add_child(memnew(VSeparator)); @@ -532,8 +1173,11 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : b_snap_grid->set_tooltip(TTR("Show Grid")); b_snap_grid->connect("toggled", this, "_set_show_grid"); - uv_mode_hb->add_child(memnew(VSeparator)); - uv_mode_hb->add_child(memnew(Label(TTR("Grid Offset:")))); + grid_settings = memnew(AcceptDialog); + grid_settings->set_title(TTR("Configure Grid:")); + add_child(grid_settings); + VBoxContainer *grid_settings_vb = memnew(VBoxContainer); + grid_settings->add_child(grid_settings_vb); SpinBox *sb_off_x = memnew(SpinBox); sb_off_x->set_min(-256); @@ -542,7 +1186,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_off_x->set_value(snap_offset.x); sb_off_x->set_suffix("px"); sb_off_x->connect("value_changed", this, "_set_snap_off_x"); - uv_mode_hb->add_child(sb_off_x); + grid_settings_vb->add_margin_child(TTR("Grid Offset X:"), sb_off_x); SpinBox *sb_off_y = memnew(SpinBox); sb_off_y->set_min(-256); @@ -551,10 +1195,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_off_y->set_value(snap_offset.y); sb_off_y->set_suffix("px"); sb_off_y->connect("value_changed", this, "_set_snap_off_y"); - uv_mode_hb->add_child(sb_off_y); - - uv_mode_hb->add_child(memnew(VSeparator)); - uv_mode_hb->add_child(memnew(Label(TTR("Grid Step:")))); + grid_settings_vb->add_margin_child(TTR("Grid Offset Y:"), sb_off_y); SpinBox *sb_step_x = memnew(SpinBox); sb_step_x->set_min(-256); @@ -563,7 +1204,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_step_x->set_value(snap_step.x); sb_step_x->set_suffix("px"); sb_step_x->connect("value_changed", this, "_set_snap_step_x"); - uv_mode_hb->add_child(sb_step_x); + grid_settings_vb->add_margin_child(TTR("Grid Step X:"), sb_step_x); SpinBox *sb_step_y = memnew(SpinBox); sb_step_y->set_min(-256); @@ -572,7 +1213,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_step_y->set_value(snap_step.y); sb_step_y->set_suffix("px"); sb_step_y->connect("value_changed", this, "_set_snap_step_y"); - uv_mode_hb->add_child(sb_step_y); + grid_settings_vb->add_margin_child(TTR("Grid Step Y:"), sb_step_y); uv_mode_hb->add_child(memnew(VSeparator)); uv_icon_zoom = memnew(TextureRect); @@ -582,8 +1223,10 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_zoom->set_max(4); uv_zoom->set_value(1); uv_zoom->set_step(0.01); + uv_zoom->set_v_size_flags(SIZE_SHRINK_CENTER); + uv_mode_hb->add_child(uv_zoom); - uv_zoom->set_custom_minimum_size(Size2(200, 0)); + uv_zoom->set_custom_minimum_size(Size2(80 * EDSCALE, 0)); uv_zoom_value = memnew(SpinBox); uv_zoom->share(uv_zoom_value); uv_zoom_value->set_custom_minimum_size(Size2(50, 0)); @@ -597,12 +1240,29 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_main_vb->add_child(uv_hscroll); uv_hscroll->connect("value_changed", this, "_uv_scroll_changed"); + bone_scroll_main_vb = memnew(VBoxContainer); + bone_scroll_main_vb->hide(); + sync_bones = memnew(Button(TTR("Sync Bones to Polygon"))); + bone_scroll_main_vb->add_child(sync_bones); + uv_main_hb->add_child(bone_scroll_main_vb); + bone_scroll = memnew(ScrollContainer); + bone_scroll->set_v_scroll(true); + bone_scroll->set_h_scroll(false); + bone_scroll_main_vb->add_child(bone_scroll); + bone_scroll->set_v_size_flags(SIZE_EXPAND_FILL); + bone_scroll_vb = memnew(VBoxContainer); + bone_scroll->add_child(bone_scroll_vb); + sync_bones->connect("pressed", this, "_sync_bones"); + uv_edit_draw->connect("draw", this, "_uv_draw"); uv_edit_draw->connect("gui_input", this, "_uv_input"); uv_draw_zoom = 1.0; - uv_drag_index = -1; + point_drag_index = -1; uv_drag = false; + uv_create = false; updating_uv_scroll = false; + split_create = false; + bone_painting = false; error = memnew(AcceptDialog); add_child(error); diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index f1472e4522..f9b42a21c2 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -32,7 +32,7 @@ #define POLYGON_2D_EDITOR_PLUGIN_H #include "editor/plugins/abstract_polygon_2d_editor.h" - +#include "scene/gui/scroll_container.h" /** @author Juan Linietsky <reduzio@gmail.com> */ @@ -45,23 +45,32 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { MODE_EDIT_UV = MODE_CONT, UVEDIT_POLYGON_TO_UV, UVEDIT_UV_TO_POLYGON, - UVEDIT_UV_CLEAR + UVEDIT_UV_CLEAR, + UVEDIT_GRID_SETTINGS }; enum UVMode { + UV_MODE_CREATE, UV_MODE_EDIT_POINT, UV_MODE_MOVE, UV_MODE_ROTATE, UV_MODE_SCALE, + UV_MODE_ADD_SPLIT, + UV_MODE_REMOVE_SPLIT, + UV_MODE_PAINT_WEIGHT, + UV_MODE_CLEAR_WEIGHT, UV_MODE_MAX }; + ToolButton *uv_edit_mode[4]; + Ref<ButtonGroup> uv_edit_group; + Polygon2D *node; UVMode uv_mode; AcceptDialog *uv_edit; - ToolButton *uv_button[4]; + ToolButton *uv_button[UV_MODE_MAX]; ToolButton *b_snap_enable; ToolButton *b_snap_grid; Control *uv_edit_draw; @@ -72,11 +81,35 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { MenuButton *uv_menu; TextureRect *uv_icon_zoom; + VBoxContainer *bone_scroll_main_vb; + ScrollContainer *bone_scroll; + VBoxContainer *bone_scroll_vb; + Button *sync_bones; + HSlider *bone_paint_strength; + SpinBox *bone_paint_radius; + Label *bone_paint_radius_label; + bool bone_painting; + int bone_painting_bone; + PoolVector<float> prev_weights; + Vector2 bone_paint_pos; + AcceptDialog *grid_settings; + + void _sync_bones(); + void _update_bone_list(); + Vector2 uv_draw_ofs; float uv_draw_zoom; - PoolVector<Vector2> uv_prev; - int uv_drag_index; + PoolVector<Vector2> points_prev; + PoolVector<Vector2> uv_create_uv_prev; + PoolVector<Vector2> uv_create_poly_prev; + Array uv_create_bones_prev; + PoolVector<int> splits_prev; + + Vector2 uv_create_to; + int point_drag_index; bool uv_drag; + bool uv_create; + bool split_create; UVMode uv_move_current; Vector2 uv_drag_from; bool updating_uv_scroll; @@ -104,6 +137,9 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { void _set_snap_step_x(float p_val); void _set_snap_step_y(float p_val); + void _uv_edit_mode_select(int p_mode); + void _bone_paint_selected(int p_index); + protected: virtual Node2D *_get_node() const; virtual void _set_node(Node *p_polygon); diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index a47cb40240..c6e8ec1a2b 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -229,17 +229,34 @@ void ResourcePreloaderEditor::_update_library() { ERR_CONTINUE(r.is_null()); ti->set_tooltip(0, r->get_path()); - String type = r->get_class(); - ti->set_text(1, type); + ti->set_text(1, r->get_path()); + ti->add_button(1, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Open in Editor")); + ti->set_tooltip(1, TTR("Instance:") + " " + r->get_path() + "\n" + TTR("Type:") + " " + r->get_class()); + ti->set_editable(1, false); ti->set_selectable(1, false); + String type = r->get_class(); + ti->set_text(2, type); + ti->set_selectable(2, false); if (has_icon(type, "EditorIcons")) - ti->set_icon(1, get_icon(type, "EditorIcons")); + ti->set_icon(2, get_icon(type, "EditorIcons")); } //player->add_resource("default",resource); } +void ResourcePreloaderEditor::_cell_button_pressed(Object *p_item, int p_column, int p_id) { + + TreeItem *item = Object::cast_to<TreeItem>(p_item); + ERR_FAIL_COND(!item); + + String rpath = item->get_text(p_column); + + if (p_id == BUTTON_SUBSCENE) { + EditorInterface::get_singleton()->open_scene_from_path(rpath); + } +} + void ResourcePreloaderEditor::edit(ResourcePreloader *p_preloader) { preloader = p_preloader; @@ -354,6 +371,7 @@ void ResourcePreloaderEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_delete_confirm_pressed"), &ResourcePreloaderEditor::_delete_confirm_pressed); ClassDB::bind_method(D_METHOD("_files_load_request"), &ResourcePreloaderEditor::_files_load_request); ClassDB::bind_method(D_METHOD("_update_library"), &ResourcePreloaderEditor::_update_library); + ClassDB::bind_method(D_METHOD("_cell_button_pressed"), &ResourcePreloaderEditor::_cell_button_pressed); ClassDB::bind_method(D_METHOD("get_drag_data_fw"), &ResourcePreloaderEditor::get_drag_data_fw); ClassDB::bind_method(D_METHOD("can_drop_data_fw"), &ResourcePreloaderEditor::can_drop_data_fw); @@ -385,11 +403,14 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { add_child(file); tree = memnew(Tree); - tree->set_columns(2); + tree->connect("button_pressed", this, "_cell_button_pressed"); + tree->set_columns(3); tree->set_column_min_width(0, 3); tree->set_column_min_width(1, 1); + tree->set_column_min_width(2, 1); tree->set_column_expand(0, true); tree->set_column_expand(1, true); + tree->set_column_expand(2, true); tree->set_v_size_flags(SIZE_EXPAND_FILL); tree->set_drag_forwarding(this); diff --git a/editor/plugins/resource_preloader_editor_plugin.h b/editor/plugins/resource_preloader_editor_plugin.h index 6e04c70741..e737157785 100644 --- a/editor/plugins/resource_preloader_editor_plugin.h +++ b/editor/plugins/resource_preloader_editor_plugin.h @@ -42,6 +42,10 @@ class ResourcePreloaderEditor : public PanelContainer { GDCLASS(ResourcePreloaderEditor, PanelContainer); + enum { + BUTTON_SUBSCENE = 0, + }; + Button *load; Button *_delete; Button *paste; @@ -61,6 +65,7 @@ class ResourcePreloaderEditor : public PanelContainer { void _delete_pressed(); void _delete_confirm_pressed(); void _update_library(); + void _cell_button_pressed(Object *p_item, int p_column, int p_id); void _item_edited(); UndoRedo *undo_redo; diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index d18422c0c0..fa674e1e34 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -39,9 +39,11 @@ #include "core/project_settings.h" #include "editor/editor_node.h" #include "editor/editor_settings.h" +#include "editor/find_in_files.h" #include "editor/node_dock.h" #include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" +#include "script_text_editor.h" /*** SCRIPT EDITOR ****/ @@ -54,6 +56,8 @@ void ScriptEditorBase::_bind_methods() { ADD_SIGNAL(MethodInfo("request_open_script_at_line", PropertyInfo(Variant::OBJECT, "script"), PropertyInfo(Variant::INT, "line"))); ADD_SIGNAL(MethodInfo("request_save_history")); ADD_SIGNAL(MethodInfo("go_to_help", PropertyInfo(Variant::STRING, "what"))); + // TODO This signal is no use for VisualScript... + ADD_SIGNAL(MethodInfo("search_in_files_requested", PropertyInfo(Variant::STRING, "text"))); } static bool _can_open_in_editor(Script *p_script) { @@ -148,8 +152,6 @@ public: } }; -#define SORT_SCRIPT_LIST - void ScriptEditorQuickOpen::popup(const Vector<String> &p_functions, bool p_dontclear) { popup_centered_ratio(0.6); @@ -300,37 +302,34 @@ void ScriptEditor::_script_created(Ref<Script> p_script) { void ScriptEditor::_goto_script_line2(int p_line) { - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return; - - ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); - if (!current) - return; - - current->goto_line(p_line); + ScriptEditorBase *current = _get_current_editor(); + if (current) + current->goto_line(p_line); } void ScriptEditor::_goto_script_line(REF p_script, int p_line) { Ref<Script> script = Object::cast_to<Script>(*p_script); - if (!script.is_null() && script->get_path().is_resource_file()) { + if (!script.is_null() && script->has_source_code()) { if (edit(p_script, p_line, 0)) { editor->push_item(p_script.ptr()); - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return; - - ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); - if (!current) - return; - - current->goto_line(p_line, true); + ScriptEditorBase *current = _get_current_editor(); + if (current) + current->goto_line(p_line, true); } } } +ScriptEditorBase *ScriptEditor::_get_current_editor() const { + + int selected = tab_container->get_current_tab(); + if (selected < 0 || selected >= tab_container->get_child_count()) + return NULL; + + return Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); +} + void ScriptEditor::_update_history_arrows() { script_back->set_disabled(history_pos <= 0); @@ -429,36 +428,32 @@ void ScriptEditor::_add_recent_script(String p_path) { return; } - // remove if already stored - int already_recent = previous_scripts.find(p_path); - if (already_recent >= 0) { - previous_scripts.remove(already_recent); + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scripts", Array()); + if (rc.find(p_path) != -1) { + rc.erase(p_path); + } + rc.push_front(p_path); + if (rc.size() > 10) { + rc.resize(10); } - // add to list - previous_scripts.insert(0, p_path); - + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scripts", rc); _update_recent_scripts(); } void ScriptEditor::_update_recent_scripts() { - // make sure we don't exceed max size - const int max_history = EDITOR_DEF("text_editor/files/maximum_recent_files", 20); - if (previous_scripts.size() > max_history) { - previous_scripts.resize(max_history); - } - + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scripts", Array()); recent_scripts->clear(); recent_scripts->add_shortcut(ED_SHORTCUT("script_editor/open_recent", TTR("Open Recent"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_T)); recent_scripts->add_separator(); - const int max_shown = 8; - for (int i = 0; i < previous_scripts.size() && i <= max_shown; i++) { - String path = previous_scripts.get(i); - // just show script name and last dir - recent_scripts->add_item(path.get_slice("/", path.get_slice_count("/") - 2) + "/" + path.get_file()); + String path; + for (int i = 0; i < rc.size(); i++) { + + path = rc[i]; + recent_scripts->add_item(path.replace("res://", "")); } recent_scripts->add_separator(); @@ -471,7 +466,7 @@ void ScriptEditor::_open_recent_script(int p_idx) { // clear button if (p_idx == recent_scripts->get_item_count() - 1) { - previous_scripts.clear(); + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scripts", Array()); call_deferred("_update_recent_scripts"); return; } @@ -481,25 +476,37 @@ void ScriptEditor::_open_recent_script(int p_idx) { p_idx -= 2; } - if (p_idx < previous_scripts.size() && p_idx >= 0) { + Array rc = EditorSettings::get_singleton()->get_project_metadata("recent_files", "scripts", Array()); + ERR_FAIL_INDEX(p_idx, rc.size()); - String path = previous_scripts.get(p_idx); - // if its not on disk its a help file or deleted - if (FileAccess::exists(path)) { - Ref<Script> script = ResourceLoader::load(path); - if (script.is_valid()) { - edit(script, true); - } - // if it's a path then its most likely a delted file not help - } else if (!path.is_resource_file()) { - _help_class_open(path); + String path = rc[p_idx]; + // if its not on disk its a help file or deleted + if (FileAccess::exists(path)) { + Ref<Script> script = ResourceLoader::load(path); + if (script.is_valid()) { + edit(script, true); + return; } - previous_scripts.remove(p_idx); - _update_recent_scripts(); + + // if it's a path then its most likely a deleted file not help + } else if (!path.is_resource_file()) { + _help_class_open(path); + return; } + + rc.remove(p_idx); + EditorSettings::get_singleton()->set_project_metadata("recent_files", "scripts", rc); + _update_recent_scripts(); + _show_error_dialog(path); +} + +void ScriptEditor::_show_error_dialog(String p_path) { + + error_dialog->set_text(vformat(TTR("Can't open '%s'. The file could have been moved or deleted."), p_path)); + error_dialog->popup_centered_minsize(); } -void ScriptEditor::_close_tab(int p_idx, bool p_save) { +void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) { int selected = p_idx; if (selected < 0 || selected >= tab_container->get_child_count()) @@ -508,18 +515,16 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save) { Node *tselected = tab_container->get_child(selected); ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); if (current) { - _add_recent_script(current->get_edited_script()->get_path()); if (p_save) { apply_scripts(); } notify_script_close(current->get_edited_script()); - } else { - EditorHelp *help = Object::cast_to<EditorHelp>(tab_container->get_child(selected)); - _add_recent_script(help->get_class()); } // roll back to previous tab - _history_back(); + if (p_history_back) { + _history_back(); + } //remove from history history.resize(history_pos + 1); @@ -577,13 +582,13 @@ void ScriptEditor::_close_docs_tab() { EditorHelp *se = Object::cast_to<EditorHelp>(tab_container->get_child(i)); if (se) { - _close_tab(i); + _close_tab(i, true, false); } } } void ScriptEditor::_copy_script_path() { - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(tab_container->get_current_tab())); + ScriptEditorBase *se = _get_current_editor(); Ref<Script> script = se->get_edited_script(); OS::get_singleton()->set_clipboard(script->get_path()); } @@ -815,11 +820,8 @@ void ScriptEditor::_file_dialog_action(String p_file) { Ref<Script> ScriptEditor::_get_current_script() { - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return NULL; + ScriptEditorBase *current = _get_current_editor(); - ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); if (current) { return current->get_edited_script(); } else { @@ -882,7 +884,7 @@ void ScriptEditor::_menu_option(int p_option) { file_dialog->add_filter("*.tet"); file_dialog->set_current_path(EditorSettings::get_singleton()->get_text_editor_themes_dir().plus_file(EditorSettings::get_singleton()->get("text_editor/theme/color_theme"))); file_dialog->popup_centered_ratio(); - file_dialog->set_title(TTR("Save Theme As..")); + file_dialog->set_title(TTR("Save Theme As...")); } break; case SEARCH_HELP: { @@ -935,11 +937,7 @@ void ScriptEditor::_menu_option(int p_option) { } } - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return; - - ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); + ScriptEditorBase *current = _get_current_editor(); if (current) { switch (p_option) { @@ -1029,7 +1027,7 @@ void ScriptEditor::_menu_option(int p_option) { _copy_script_path(); } break; case SHOW_IN_FILE_SYSTEM: { - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(tab_container->get_current_tab())); + ScriptEditorBase *se = _get_current_editor(); Ref<Script> script = se->get_edited_script(); FileSystemDock *file_system_dock = EditorNode::get_singleton()->get_filesystem_dock(); file_system_dock->navigate_to_path(script->get_path()); @@ -1219,6 +1217,17 @@ void ScriptEditor::_notification(int p_what) { recent_scripts->set_as_minsize(); } break; + case CanvasItem::NOTIFICATION_VISIBILITY_CHANGED: { + + if (is_visible()) { + find_in_files_button->show(); + } else { + find_in_files->hide(); + find_in_files_button->hide(); + } + + } break; + default: break; } @@ -1226,15 +1235,11 @@ void ScriptEditor::_notification(int p_what) { bool ScriptEditor::can_take_away_focus() const { - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return true; - - ScriptEditorBase *current = Object::cast_to<ScriptEditorBase>(tab_container->get_child(selected)); - if (!current) + ScriptEditorBase *current = _get_current_editor(); + if (current) + return current->can_lose_focus_on_node_selection(); + else return true; - - return current->can_lose_focus_on_node_selection(); } void ScriptEditor::close_builtin_scripts_from_scene(const String &p_scene) { @@ -1311,28 +1316,22 @@ void ScriptEditor::ensure_focus_current() { if (!is_inside_tree()) return; - int cidx = tab_container->get_current_tab(); - if (cidx < 0 || cidx >= tab_container->get_tab_count()) - return; - - Control *c = Object::cast_to<Control>(tab_container->get_child(cidx)); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(c); - if (!se) - return; - se->ensure_focus(); + ScriptEditorBase *current = _get_current_editor(); + if (current) + current->ensure_focus(); } void ScriptEditor::_members_overview_selected(int p_idx) { - Node *current = tab_container->get_child(tab_container->get_current_tab()); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(current); + ScriptEditorBase *se = _get_current_editor(); if (!se) { return; } - // Go to the member's line and reset the cursor column. We can't just change scroll_position - // directly, since code might be folded. + // Go to the member's line and reset the cursor column. We can't change scroll_position + // directly until we have gone to the line first, since code might be folded. se->goto_line(members_overview->get_item_metadata(p_idx)); Dictionary state = se->get_edit_state(); state["column"] = 0; + state["scroll_position"] = members_overview->get_item_metadata(p_idx); se->set_edit_state(state); } @@ -1357,18 +1356,12 @@ void ScriptEditor::ensure_select_current() { if (tab_container->get_child_count() && tab_container->get_current_tab() >= 0) { - Node *current = tab_container->get_child(tab_container->get_current_tab()); - - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(current); + ScriptEditorBase *se = _get_current_editor(); if (se) { - Ref<Script> script = se->get_edited_script(); - if (!grab_focus_block && is_visible_in_tree()) se->ensure_focus(); } - - EditorHelp *eh = Object::cast_to<EditorHelp>(current); } _update_selected_editor_menu(); @@ -1408,12 +1401,7 @@ struct _ScriptEditorItemData { void ScriptEditor::_update_members_overview_visibility() { - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return; - - Node *current = tab_container->get_child(tab_container->get_current_tab()); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(current); + ScriptEditorBase *se = _get_current_editor(); if (!se) { members_overview->set_visible(false); return; @@ -1429,12 +1417,7 @@ void ScriptEditor::_update_members_overview_visibility() { void ScriptEditor::_update_members_overview() { members_overview->clear(); - int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) - return; - - Node *current = tab_container->get_child(tab_container->get_current_tab()); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(current); + ScriptEditorBase *se = _get_current_editor(); if (!se) { return; } @@ -1573,6 +1556,9 @@ void ScriptEditor::_update_script_names() { case SORT_BY_PATH: { sd.sort_key = path; } break; + case SORT_BY_NONE: { + sd.sort_key = ""; + } break; } switch (display_as) { @@ -1690,28 +1676,42 @@ bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool String path = EditorSettings::get_singleton()->get("text_editor/external/exec_path"); String flags = EditorSettings::get_singleton()->get("text_editor/external/exec_flags"); - Dictionary keys; - keys["project"] = ProjectSettings::get_singleton()->get_resource_path(); - keys["file"] = ProjectSettings::get_singleton()->globalize_path(p_script->get_path()); - keys["line"] = p_line >= 0 ? p_line : 0; - keys["col"] = p_col; - - flags = flags.format(keys).strip_edges().replace("\\\\", "\\"); - List<String> args; if (flags.size()) { - int from = 0, to = 0; + String project_path = ProjectSettings::get_singleton()->get_resource_path(); + String script_path = ProjectSettings::get_singleton()->globalize_path(p_script->get_path()); + + flags = flags.replacen("{line}", itos(p_line > 0 ? p_line : 0)); + flags = flags.replacen("{col}", itos(p_col)); + flags = flags.strip_edges().replace("\\\\", "\\"); + + int from = 0; + int num_chars = 0; bool inside_quotes = false; + for (int i = 0; i < flags.size(); i++) { + if (flags[i] == '"' && (!i || flags[i - 1] != '\\')) { + + if (!inside_quotes) { + from++; + } inside_quotes = !inside_quotes; + } else if (flags[i] == '\0' || (!inside_quotes && flags[i] == ' ')) { - args.push_back(flags.substr(from, to)); + + String arg = flags.substr(from, num_chars); + + // do path replacement here, else there will be issues with spaces and quotes + arg = arg.replacen("{project}", project_path); + arg = arg.replacen("{file}", script_path); + args.push_back(arg); + from = i + 1; - to = 0; + num_chars = 0; } else { - to++; + num_chars++; } } } @@ -1756,6 +1756,20 @@ bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool } ERR_FAIL_COND_V(!se, false); + bool highlighter_set = false; + for (int i = 0; i < syntax_highlighters_func_count; i++) { + SyntaxHighlighter *highlighter = syntax_highlighters_funcs[i](); + se->add_syntax_highlighter(highlighter); + + if (!highlighter_set) { + List<String> languages = highlighter->get_supported_languages(); + if (languages.find(p_script->get_language()->get_name())) { + se->set_syntax_highlighter(highlighter); + highlighter_set = true; + } + } + } + tab_container->add_child(se); se->set_edited_script(p_script); se->set_tooltip_request_func("_get_debug_tooltip", this); @@ -1777,6 +1791,7 @@ bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool se->connect("request_open_script_at_line", this, "_goto_script_line"); se->connect("go_to_help", this, "_help_class_goto"); se->connect("request_save_history", this, "_save_history"); + se->connect("search_in_files_requested", this, "_on_find_in_files_requested"); //test for modification, maybe the script was not edited but was loaded @@ -1787,6 +1802,7 @@ bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool se->goto_line(p_line - 1); notify_script_changed(p_script); + _add_recent_script(p_script->get_path()); return true; } @@ -2304,6 +2320,7 @@ void ScriptEditor::_help_class_open(const String &p_class) { _go_to_tab(tab_container->get_tab_count() - 1); eh->go_to_class(p_class, 0); eh->connect("go_to_help", this, "_help_class_goto"); + _add_recent_script(p_class); _update_script_names(); _save_layout(); } @@ -2332,6 +2349,7 @@ void ScriptEditor::_help_class_goto(const String &p_desc) { _go_to_tab(tab_container->get_tab_count() - 1); eh->go_to_help(p_desc); eh->connect("go_to_help", this, "_help_class_goto"); + _add_recent_script(eh->get_class()); _update_script_names(); _save_layout(); } @@ -2469,6 +2487,14 @@ void ScriptEditor::_open_script_request(const String &p_path) { } } +int ScriptEditor::syntax_highlighters_func_count = 0; +CreateSyntaxHighlighterFunc ScriptEditor::syntax_highlighters_funcs[ScriptEditor::SYNTAX_HIGHLIGHTER_FUNC_MAX]; + +void ScriptEditor::register_create_syntax_highlighter_function(CreateSyntaxHighlighterFunc p_func) { + ERR_FAIL_COND(syntax_highlighters_func_count == SYNTAX_HIGHLIGHTER_FUNC_MAX); + syntax_highlighters_funcs[syntax_highlighters_func_count++] = p_func; +} + int ScriptEditor::script_editor_func_count = 0; CreateScriptEditorFunc ScriptEditor::script_editor_funcs[ScriptEditor::SCRIPT_EDITOR_FUNC_MAX]; @@ -2483,6 +2509,48 @@ void ScriptEditor::_script_changed() { NodeDock::singleton->update_lists(); } +void ScriptEditor::_on_find_in_files_requested(String text) { + + find_in_files_dialog->set_search_text(text); + find_in_files_dialog->popup_centered_minsize(); +} + +void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_number, int begin, int end) { + + Ref<Resource> res = ResourceLoader::load(fpath); + edit(res); + + ScriptEditorBase *seb = _get_current_editor(); + + ScriptTextEditor *ste = Object::cast_to<ScriptTextEditor>(seb); + if (ste) { + ste->goto_line_selection(line_number - 1, begin, end); + } +} + +void ScriptEditor::_start_find_in_files(bool with_replace) { + + FindInFiles *f = find_in_files->get_finder(); + + f->set_search_text(find_in_files_dialog->get_search_text()); + f->set_match_case(find_in_files_dialog->is_match_case()); + f->set_whole_words(find_in_files_dialog->is_match_case()); + f->set_folder(find_in_files_dialog->get_folder()); + f->set_filter(find_in_files_dialog->get_filter()); + + find_in_files->set_with_replace(with_replace); + find_in_files->start_search(); + + find_in_files_button->set_pressed(true); + find_in_files->show(); +} + +void ScriptEditor::_on_find_in_files_modified_files(PoolStringArray paths) { + + _test_script_times_on_disk(); + _update_modified_scripts_for_external_editor(); +} + void ScriptEditor::_bind_methods() { ClassDB::bind_method("_file_dialog_action", &ScriptEditor::_file_dialog_action); @@ -2530,6 +2598,10 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_script_list_gui_input", &ScriptEditor::_script_list_gui_input); ClassDB::bind_method("_script_changed", &ScriptEditor::_script_changed); ClassDB::bind_method("_update_recent_scripts", &ScriptEditor::_update_recent_scripts); + ClassDB::bind_method("_on_find_in_files_requested", &ScriptEditor::_on_find_in_files_requested); + ClassDB::bind_method("_start_find_in_files", &ScriptEditor::_start_find_in_files); + ClassDB::bind_method("_on_find_in_files_result_selected", &ScriptEditor::_on_find_in_files_result_selected); + ClassDB::bind_method("_on_find_in_files_modified_files", &ScriptEditor::_on_find_in_files_modified_files); ClassDB::bind_method(D_METHOD("get_drag_data_fw", "point", "from"), &ScriptEditor::get_drag_data_fw); ClassDB::bind_method(D_METHOD("can_drop_data_fw", "point", "data", "from"), &ScriptEditor::can_drop_data_fw); @@ -2552,8 +2624,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { waiting_update_names = false; pending_auto_reload = false; auto_reload_running_scripts = false; - members_overview_enabled = true; - help_overview_enabled = true; + members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/show_members_overview"); + help_overview_enabled = EditorSettings::get_singleton()->get("text_editor/help/show_help_index"); editor = p_editor; VBoxContainer *main_container = memnew(VBoxContainer); @@ -2586,11 +2658,13 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { members_overview = memnew(ItemList); list_split->add_child(members_overview); + members_overview->set_allow_reselect(true); members_overview->set_custom_minimum_size(Size2(0, 90)); //need to give a bit of limit to avoid it from disappearing members_overview->set_v_size_flags(SIZE_EXPAND_FILL); help_overview = memnew(ItemList); list_split->add_child(help_overview); + help_overview->set_allow_reselect(true); help_overview->set_custom_minimum_size(Size2(0, 90)); //need to give a bit of limit to avoid it from disappearing help_overview->set_v_size_flags(SIZE_EXPAND_FILL); @@ -2622,7 +2696,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KEY_MASK_ALT | KEY_MASK_CMD | KEY_S), FILE_SAVE); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As..")), FILE_SAVE_AS); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As...")), FILE_SAVE_AS); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_S), FILE_SAVE_ALL); file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R), FILE_TOOL_RELOAD_SOFT); @@ -2651,7 +2725,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { script_search_menu = memnew(MenuButton); menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); - script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND); script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT); script_search_menu->get_popup()->connect("id_pressed", this, "_menu_option"); script_search_menu->hide(); @@ -2738,6 +2812,10 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { add_child(file_dialog); file_dialog->connect("file_selected", this, "_file_dialog_action"); + error_dialog = memnew(AcceptDialog); + add_child(error_dialog); + error_dialog->get_ok()->set_text(TTR("I see..")); + debugger = memnew(ScriptEditorDebugger(editor)); debugger->connect("goto_script_line", this, "_goto_script_line"); debugger->connect("show_debugger", this, "_show_debugger"); @@ -2785,13 +2863,26 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { add_child(help_index); help_index->connect("open_class", this, "_help_class_open"); + find_in_files_dialog = memnew(FindInFilesDialog); + find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_FIND_REQUESTED, this, "_start_find_in_files", varray(false)); + find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_REPLACE_REQUESTED, this, "_start_find_in_files", varray(true)); + add_child(find_in_files_dialog); + find_in_files = memnew(FindInFilesPanel); + find_in_files_button = editor->add_bottom_panel_item(TTR("Search results"), find_in_files); + find_in_files_button->set_tooltip(TTR("Search in files")); + find_in_files->set_custom_minimum_size(Size2(0, 200)); + find_in_files->connect(FindInFilesPanel::SIGNAL_RESULT_SELECTED, this, "_on_find_in_files_result_selected"); + find_in_files->connect(FindInFilesPanel::SIGNAL_FILES_MODIFIED, this, "_on_find_in_files_modified_files"); + find_in_files->hide(); + find_in_files_button->hide(); + history_pos = -1; //debugger_gui->hide(); edit_pass = 0; - trim_trailing_whitespace_on_save = false; - convert_indent_on_save = false; - use_space_indentation = false; + trim_trailing_whitespace_on_save = EditorSettings::get_singleton()->get("text_editor/files/trim_trailing_whitespace_on_save"); + convert_indent_on_save = EditorSettings::get_singleton()->get("text_editor/indent/convert_indent_on_save"); + use_space_indentation = EditorSettings::get_singleton()->get("text_editor/indent/type"); ScriptServer::edit_request_func = _open_script_request; @@ -2900,7 +2991,7 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) { EDITOR_DEF("text_editor/open_scripts/script_temperature_history_size", 15); EDITOR_DEF("text_editor/open_scripts/current_script_background_color", Color(1, 1, 1, 0.3)); EDITOR_DEF("text_editor/open_scripts/group_help_pages", true); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/sort_scripts_by", PROPERTY_HINT_ENUM, "Name,Path")); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/sort_scripts_by", PROPERTY_HINT_ENUM, "Name,Path,None")); EDITOR_DEF("text_editor/open_scripts/sort_scripts_by", 0); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/list_script_names_as", PROPERTY_HINT_ENUM, "Name,Parent Directory And Name,Full Path")); EDITOR_DEF("text_editor/open_scripts/list_script_names_as", 0); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index e60e4cf8c0..9f37b18d7d 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -80,6 +80,9 @@ protected: static void _bind_methods(); public: + virtual void add_syntax_highlighter(SyntaxHighlighter *p_highlighter) = 0; + virtual void set_syntax_highlighter(SyntaxHighlighter *p_highlighter) = 0; + virtual void apply_code() = 0; virtual Ref<Script> get_edited_script() const = 0; virtual Vector<String> get_functions() = 0; @@ -112,9 +115,12 @@ public: ScriptEditorBase() {} }; +typedef SyntaxHighlighter *(*CreateSyntaxHighlighterFunc)(); typedef ScriptEditorBase *(*CreateScriptEditorFunc)(const Ref<Script> &p_script); class EditorScriptCodeCompletionCache; +class FindInFilesDialog; +class FindInFilesPanel; class ScriptEditor : public PanelContainer { @@ -165,6 +171,7 @@ class ScriptEditor : public PanelContainer { enum ScriptSortBy { SORT_BY_NAME, SORT_BY_PATH, + SORT_BY_NONE }; enum ScriptListName { @@ -198,6 +205,7 @@ class ScriptEditor : public PanelContainer { VSplitContainer *list_split; TabContainer *tab_container; EditorFileDialog *file_dialog; + AcceptDialog *error_dialog; ConfirmationDialog *erase_tab_confirm; ScriptCreateDialog *script_create_dialog; ScriptEditorDebugger *debugger; @@ -211,13 +219,21 @@ class ScriptEditor : public PanelContainer { ToolButton *script_back; ToolButton *script_forward; + FindInFilesDialog *find_in_files_dialog; + FindInFilesPanel *find_in_files; + Button *find_in_files_button; + enum { - SCRIPT_EDITOR_FUNC_MAX = 32 + SCRIPT_EDITOR_FUNC_MAX = 32, + SYNTAX_HIGHLIGHTER_FUNC_MAX = 32 }; static int script_editor_func_count; static CreateScriptEditorFunc script_editor_funcs[SCRIPT_EDITOR_FUNC_MAX]; + static int syntax_highlighters_func_count; + static CreateSyntaxHighlighterFunc syntax_highlighters_funcs[SYNTAX_HIGHLIGHTER_FUNC_MAX]; + struct ScriptHistory { Control *control; @@ -227,8 +243,6 @@ class ScriptEditor : public PanelContainer { Vector<ScriptHistory> history; int history_pos; - Vector<String> previous_scripts; - EditorHelpIndex *help_index; void _tab_changed(int p_which); @@ -250,7 +264,9 @@ class ScriptEditor : public PanelContainer { void _update_recent_scripts(); void _open_recent_script(int p_idx); - void _close_tab(int p_idx, bool p_save = true); + void _show_error_dialog(String p_path); + + void _close_tab(int p_idx, bool p_save = true, bool p_history_back = true); void _close_current_tab(); void _close_discard_current_tab(const String &p_str); @@ -294,6 +310,8 @@ class ScriptEditor : public PanelContainer { void _update_window_menu(); void _script_created(Ref<Script> p_script); + ScriptEditorBase *_get_current_editor() const; + void _save_layout(); void _editor_settings_changed(); void _autosave_scripts(); @@ -349,6 +367,11 @@ class ScriptEditor : public PanelContainer { Ref<Script> _get_current_script(); Array _get_open_scripts() const; + void _on_find_in_files_requested(String text); + void _on_find_in_files_result_selected(String fpath, int line_number, int begin, int end); + void _start_find_in_files(bool with_replace); + void _on_find_in_files_modified_files(PoolStringArray paths); + static void _open_script_request(const String &p_path); static ScriptEditor *script_editor; @@ -397,7 +420,9 @@ public: ScriptEditorDebugger *get_debugger() { return debugger; } void set_live_auto_reload_running_scripts(bool p_enabled); + static void register_create_syntax_highlighter_function(CreateSyntaxHighlighterFunc p_func); static void register_create_script_editor_function(CreateScriptEditorFunc p_func); + ScriptEditor(EditorNode *p_editor); ~ScriptEditor(); }; diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index a3728a1d46..45f5e667fa 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -349,7 +349,12 @@ void ScriptTextEditor::_convert_case(CaseStyle p_case) { int end_col = te->get_selection_to_column(); for (int i = begin; i <= end; i++) { - String new_line = te->get_line(i); + int len = te->get_line(i).length(); + if (i == end) + len -= len - end_col; + if (i == begin) + len -= begin_col; + String new_line = te->get_line(i).substr(i == begin ? begin_col : 0, len); switch (p_case) { case UPPER: { @@ -364,10 +369,10 @@ void ScriptTextEditor::_convert_case(CaseStyle p_case) { } if (i == begin) { - new_line = te->get_line(i).left(begin_col) + new_line.right(begin_col); + new_line = te->get_line(i).left(begin_col) + new_line; } if (i == end) { - new_line = new_line.left(end_col) + te->get_line(i).right(end_col); + new_line = new_line + te->get_line(i).right(end_col); } te->set_line(i, new_line); } @@ -519,10 +524,19 @@ void ScriptTextEditor::tag_saved_version() { void ScriptTextEditor::goto_line(int p_line, bool p_with_error) { TextEdit *tx = code_editor->get_text_edit(); + tx->deselect(); tx->unfold_line(p_line); tx->call_deferred("cursor_set_line", p_line); } +void ScriptTextEditor::goto_line_selection(int p_line, int p_begin, int p_end) { + TextEdit *tx = code_editor->get_text_edit(); + tx->unfold_line(p_line); + tx->call_deferred("cursor_set_line", p_line); + tx->call_deferred("cursor_set_column", p_begin); + tx->select(p_line, p_begin, p_line, p_end); +} + void ScriptTextEditor::ensure_focus() { code_editor->get_text_edit()->grab_focus(); @@ -567,6 +581,7 @@ void ScriptTextEditor::set_edited_script(const Ref<Script> &p_script) { ERR_FAIL_COND(!script.is_null()); script = p_script; + _set_theme_for_script(); code_editor->get_text_edit()->set_text(script->get_source_code()); code_editor->get_text_edit()->clear_undo_history(); @@ -574,8 +589,6 @@ void ScriptTextEditor::set_edited_script(const Ref<Script> &p_script) { emit_signal("name_changed"); code_editor->update_line_and_column(); - - _set_theme_for_script(); } void ScriptTextEditor::_validate_script() { @@ -733,6 +746,8 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c _goto_line(p_row); + result.class_name = result.class_name.trim_prefix("_"); + switch (result.type) { case ScriptLanguage::LookupResult::RESULT_SCRIPT_LOCATION: { @@ -783,6 +798,26 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c emit_signal("go_to_help", "class_method:" + result.class_name + ":" + result.class_member); } break; + case ScriptLanguage::LookupResult::RESULT_CLASS_ENUM: { + + StringName cname = result.class_name; + StringName success; + while (true) { + success = ClassDB::get_integer_constant_enum(cname, result.class_member, true); + if (success != StringName()) { + result.class_name = cname; + cname = ClassDB::get_parent_class(cname); + } else { + break; + } + } + + emit_signal("go_to_help", "class_enum:" + result.class_name + ":" + result.class_member); + + } break; + case ScriptLanguage::LookupResult::RESULT_CLASS_TBD_GLOBALSCOPE: { + emit_signal("go_to_help", "class_global:" + result.class_name + ":" + result.class_member); + } break; } } } @@ -934,13 +969,27 @@ void ScriptTextEditor::_edit_option(int p_op) { Ref<Script> scr = get_edited_script(); if (scr.is_null()) return; - tx->begin_complex_operation(); - int line = tx->cursor_get_line(); - tx->set_line(tx->cursor_get_line(), ""); - tx->backspace_at_cursor(); - tx->unfold_line(line); - tx->cursor_set_line(line); + if (tx->is_selection_active()) { + int to_line = tx->get_selection_to_line(); + int from_line = tx->get_selection_from_line(); + int count = Math::abs(to_line - from_line) + 1; + while (count) { + tx->set_line(tx->cursor_get_line(), ""); + tx->backspace_at_cursor(); + count--; + if (count) + tx->unfold_line(from_line); + } + tx->cursor_set_line(from_line - 1); + tx->deselect(); + } else { + int line = tx->cursor_get_line(); + tx->set_line(tx->cursor_get_line(), ""); + tx->backspace_at_cursor(); + tx->unfold_line(line); + tx->cursor_set_line(line); + } tx->end_complex_operation(); } break; case EDIT_CLONE_DOWN: { @@ -960,6 +1009,10 @@ void ScriptTextEditor::_edit_option(int p_op) { } int next_line = to_line + 1; + if (to_line >= tx->get_line_count() - 1) { + tx->set_line(to_line, tx->get_line(to_line) + "\n"); + } + tx->begin_complex_operation(); for (int i = from_line; i <= to_line; i++) { @@ -1134,6 +1187,15 @@ void ScriptTextEditor::_edit_option(int p_op) { code_editor->get_find_replace_bar()->popup_replace(); } break; + case SEARCH_IN_FILES: { + + String selected_text = code_editor->get_text_edit()->get_selection_text(); + + // Yep, because it doesn't make sense to instance this dialog for every single script open... + // So this will be delegated to the ScriptEditor + emit_signal("search_in_files_requested", selected_text); + + } break; case SEARCH_LOCATE_FUNCTION: { quick_open->popup(get_functions()); @@ -1225,11 +1287,26 @@ void ScriptTextEditor::_edit_option(int p_op) { } } +void ScriptTextEditor::add_syntax_highlighter(SyntaxHighlighter *p_highlighter) { + highlighters[p_highlighter->get_name()] = p_highlighter; + highlighter_menu->get_popup()->add_item(p_highlighter->get_name()); +} + +void ScriptTextEditor::set_syntax_highlighter(SyntaxHighlighter *p_highlighter) { + TextEdit *te = code_editor->get_text_edit(); + te->_set_syntax_highlighting(p_highlighter); +} + +void ScriptTextEditor::_change_syntax_highlighter(int p_idx) { + set_syntax_highlighter(highlighters[highlighter_menu->get_popup()->get_item_text(p_idx)]); +} + void ScriptTextEditor::_bind_methods() { ClassDB::bind_method("_validate_script", &ScriptTextEditor::_validate_script); ClassDB::bind_method("_load_theme_settings", &ScriptTextEditor::_load_theme_settings); ClassDB::bind_method("_breakpoint_toggled", &ScriptTextEditor::_breakpoint_toggled); + ClassDB::bind_method("_change_syntax_highlighter", &ScriptTextEditor::_change_syntax_highlighter); ClassDB::bind_method("_edit_option", &ScriptTextEditor::_edit_option); ClassDB::bind_method("_goto_line", &ScriptTextEditor::_goto_line); ClassDB::bind_method("_lookup_symbol", &ScriptTextEditor::_lookup_symbol); @@ -1283,12 +1360,9 @@ Variant ScriptTextEditor::get_drag_data_fw(const Point2 &p_point, Control *p_fro bool ScriptTextEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { Dictionary d = p_data; - if (d.has("type") && - ( - - String(d["type"]) == "resource" || - String(d["type"]) == "files" || - String(d["type"]) == "nodes")) { + if (d.has("type") && (String(d["type"]) == "resource" || + String(d["type"]) == "files" || + String(d["type"]) == "nodes")) { return true; } @@ -1329,6 +1403,10 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data Dictionary d = p_data; + TextEdit *te = code_editor->get_text_edit(); + int row, col; + te->_get_mouse_pos(p_point, row, col); + if (d.has("type") && String(d["type"]) == "resource") { Ref<Resource> res = d["resource"]; @@ -1341,7 +1419,9 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data return; } - code_editor->get_text_edit()->insert_text_at_cursor(res->get_path()); + te->cursor_set_line(row); + te->cursor_set_column(col); + te->insert_text_at_cursor(res->get_path()); } if (d.has("type") && String(d["type"]) == "files") { @@ -1356,7 +1436,9 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data text_to_drop += "\"" + String(files[i]).c_escape() + "\""; } - code_editor->get_text_edit()->insert_text_at_cursor(text_to_drop); + te->cursor_set_line(row); + te->cursor_set_column(col); + te->insert_text_at_cursor(text_to_drop); } if (d.has("type") && String(d["type"]) == "nodes") { @@ -1385,7 +1467,9 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data text_to_drop += "\"" + path.c_escape() + "\""; } - code_editor->get_text_edit()->insert_text_at_cursor(text_to_drop); + te->cursor_set_line(row); + te->cursor_set_column(col); + te->insert_text_at_cursor(text_to_drop); } } @@ -1599,6 +1683,8 @@ ScriptTextEditor::ScriptTextEditor() { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace"), SEARCH_REPLACE); search_menu->get_popup()->add_separator(); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_in_files"), SEARCH_IN_FILES); + search_menu->get_popup()->add_separator(); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_function"), SEARCH_LOCATE_FUNCTION); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_line"), SEARCH_GOTO_LINE); search_menu->get_popup()->add_separator(); @@ -1608,6 +1694,14 @@ ScriptTextEditor::ScriptTextEditor() { edit_hb->add_child(edit_menu); + highlighters["Standard"] = NULL; + + highlighter_menu = memnew(MenuButton); + highlighter_menu->set_text(TTR("Syntax Highlighter")); + highlighter_menu->get_popup()->add_item("Standard"); + highlighter_menu->get_popup()->connect("id_pressed", this, "_change_syntax_highlighter"); + edit_hb->add_child(highlighter_menu); + quick_open = memnew(ScriptEditorQuickOpen); add_child(quick_open); quick_open->connect("goto_line", this, "_goto_line"); @@ -1665,13 +1759,15 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Convert To Lowercase"), KEY_MASK_SHIFT | KEY_F3); ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KEY_MASK_SHIFT | KEY_F2); - ED_SHORTCUT("script_text_editor/find", TTR("Find.."), KEY_MASK_CMD | KEY_F); + ED_SHORTCUT("script_text_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F); ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3); ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3); - ED_SHORTCUT("script_text_editor/replace", TTR("Replace.."), KEY_MASK_CMD | KEY_R); + ED_SHORTCUT("script_text_editor/replace", TTR("Replace..."), KEY_MASK_CMD | KEY_R); + + ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F); - ED_SHORTCUT("script_text_editor/goto_function", TTR("Goto Function.."), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_F); - ED_SHORTCUT("script_text_editor/goto_line", TTR("Goto Line.."), KEY_MASK_CMD | KEY_L); + ED_SHORTCUT("script_text_editor/goto_function", TTR("Goto Function..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F); + ED_SHORTCUT("script_text_editor/goto_line", TTR("Goto Line..."), KEY_MASK_CMD | KEY_L); ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_SHIFT | KEY_F1); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 22e8fbce25..a93e1a6fa8 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -49,6 +49,7 @@ class ScriptTextEditor : public ScriptEditorBase { HBoxContainer *edit_hb; MenuButton *edit_menu; + MenuButton *highlighter_menu; MenuButton *search_menu; PopupMenu *context_menu; @@ -105,6 +106,7 @@ class ScriptTextEditor : public ScriptEditorBase { SEARCH_REPLACE, SEARCH_LOCATE_FUNCTION, SEARCH_GOTO_LINE, + SEARCH_IN_FILES, DEBUG_TOGGLE_BREAKPOINT, DEBUG_REMOVE_ALL_BREAKPOINTS, DEBUG_GOTO_NEXT_BREAKPOINT, @@ -125,6 +127,9 @@ protected: void _notification(int p_what); static void _bind_methods(); + Map<String, SyntaxHighlighter *> highlighters; + void _change_syntax_highlighter(int p_idx); + void _edit_option(int p_op); void _make_context_menu(bool p_selection, bool p_color, bool p_can_fold, bool p_is_folded); void _text_edit_gui_input(const Ref<InputEvent> &ev); @@ -145,6 +150,9 @@ protected: void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); public: + virtual void add_syntax_highlighter(SyntaxHighlighter *p_highlighter); + virtual void set_syntax_highlighter(SyntaxHighlighter *p_highlighter); + virtual void apply_code(); virtual Ref<Script> get_edited_script() const; virtual Vector<String> get_functions(); @@ -163,6 +171,7 @@ public: virtual void tag_saved_version(); virtual void goto_line(int p_line, bool p_with_error = false); + void goto_line_selection(int p_line, int p_begin, int p_end); virtual void reload(bool p_soft); virtual void get_breakpoints(List<int> *p_breakpoints); diff --git a/editor/plugins/shader_graph_editor_plugin.cpp b/editor/plugins/shader_graph_editor_plugin.cpp index 59085c203f..1a9d980feb 100644 --- a/editor/plugins/shader_graph_editor_plugin.cpp +++ b/editor/plugins/shader_graph_editor_plugin.cpp @@ -1478,7 +1478,7 @@ void ShaderGraphView::_create_node(int p_id) { case ShaderGraph::NODE_XFORM_CONST: { gn->set_title("XForm"); ToolButton *edit = memnew( ToolButton ); - edit->set_text("edit.."); + edit->set_text("edit..."); edit->connect("pressed",this,"_xform_const_changed",varray(p_id,edit)); gn->add_child(edit); gn->set_slot(0,false,0,Color(),true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM]); @@ -2289,7 +2289,7 @@ void ShaderGraphView::_create_node(int p_id) { le->set_text(graph->input_node_get_name(type,p_id)); le->connect("text_entered",this,"_input_name_changed",varray(p_id,le)); ToolButton *edit = memnew( ToolButton ); - edit->set_text("edit.."); + edit->set_text("edit..."); edit->connect("pressed",this,"_xform_input_changed",varray(p_id,edit)); gn->add_child(edit); gn->set_slot(1,false,0,Color(),true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM]); @@ -2310,7 +2310,7 @@ void ShaderGraphView::_create_node(int p_id) { tex->set_mouse_filter(MOUSE_FILTER_PASS); tex->set_texture(graph->texture_input_node_get_value(type,p_id)); ToolButton *edit = memnew( ToolButton ); - edit->set_text("edit.."); + edit->set_text("edit..."); edit->connect("pressed",this,"_tex_edited",varray(p_id,edit)); gn->add_child(edit); @@ -2345,7 +2345,7 @@ void ShaderGraphView::_create_node(int p_id) { le->connect("text_entered",this,"_input_name_changed",varray(p_id,le)); ToolButton *edit = memnew( ToolButton ); - edit->set_text("edit.."); + edit->set_text("edit..."); edit->connect("pressed",this,"_cube_edited",varray(p_id,edit)); gn->add_child(edit); @@ -2769,8 +2769,6 @@ void ShaderGraphEditor::_popup_requested(const Vector2 &p_position) popup->set_global_position(p_position); popup->set_size( Size2( 200, 0) ); popup->popup(); - popup->call_deferred("grab_click_focus"); - popup->set_invalidate_click_until_motion(); } void ShaderGraphEditor::_notification(int p_what) { diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp new file mode 100644 index 0000000000..e372f792d6 --- /dev/null +++ b/editor/plugins/skeleton_2d_editor_plugin.cpp @@ -0,0 +1,120 @@ +#include "skeleton_2d_editor_plugin.h" + +#include "canvas_item_editor_plugin.h" +#include "scene/2d/mesh_instance_2d.h" +#include "scene/gui/box_container.h" +#include "thirdparty/misc/clipper.hpp" + +void Skeleton2DEditor::_node_removed(Node *p_node) { + + if (p_node == node) { + node = NULL; + options->hide(); + } +} + +void Skeleton2DEditor::edit(Skeleton2D *p_sprite) { + + node = p_sprite; +} + +void Skeleton2DEditor::_menu_option(int p_option) { + + if (!node) { + return; + } + + switch (p_option) { + case MENU_OPTION_MAKE_REST: { + + if (node->get_bone_count() == 0) { + err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes.")); + err_dialog->popup_centered_minsize(); + return; + } + UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); + ur->create_action("Create Rest Pose from Bones"); + for (int i = 0; i < node->get_bone_count(); i++) { + Bone2D *bone = node->get_bone(i); + ur->add_do_method(bone, "set_rest", bone->get_transform()); + ur->add_undo_method(bone, "set_rest", bone->get_rest()); + } + ur->commit_action(); + + } break; + case MENU_OPTION_SET_REST: { + if (node->get_bone_count() == 0) { + err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes.")); + err_dialog->popup_centered_minsize(); + return; + } + UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); + ur->create_action("Set Rest Pose to Bones"); + for (int i = 0; i < node->get_bone_count(); i++) { + Bone2D *bone = node->get_bone(i); + ur->add_do_method(bone, "set_transform", bone->get_rest()); + ur->add_undo_method(bone, "set_transform", bone->get_transform()); + } + ur->commit_action(); + + } break; + } +} + +void Skeleton2DEditor::_bind_methods() { + + ClassDB::bind_method("_menu_option", &Skeleton2DEditor::_menu_option); +} + +Skeleton2DEditor::Skeleton2DEditor() { + + options = memnew(MenuButton); + + CanvasItemEditor::get_singleton()->add_control_to_menu_panel(options); + + options->set_text(TTR("Skeleton2D")); + options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Skeleton2D", "EditorIcons")); + + options->get_popup()->add_item(TTR("Make Rest Pose (From Bones)"), MENU_OPTION_MAKE_REST); + options->get_popup()->add_separator(); + options->get_popup()->add_item(TTR("Set Bones to Rest Pose"), MENU_OPTION_SET_REST); + + options->get_popup()->connect("id_pressed", this, "_menu_option"); + + err_dialog = memnew(AcceptDialog); + add_child(err_dialog); +} + +void Skeleton2DEditorPlugin::edit(Object *p_object) { + + sprite_editor->edit(Object::cast_to<Skeleton2D>(p_object)); +} + +bool Skeleton2DEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class("Skeleton2D"); +} + +void Skeleton2DEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + sprite_editor->options->show(); + } else { + + sprite_editor->options->hide(); + sprite_editor->edit(NULL); + } +} + +Skeleton2DEditorPlugin::Skeleton2DEditorPlugin(EditorNode *p_node) { + + editor = p_node; + sprite_editor = memnew(Skeleton2DEditor); + editor->get_viewport()->add_child(sprite_editor); + make_visible(false); + + //sprite_editor->options->hide(); +} + +Skeleton2DEditorPlugin::~Skeleton2DEditorPlugin() { +} diff --git a/editor/plugins/skeleton_2d_editor_plugin.h b/editor/plugins/skeleton_2d_editor_plugin.h new file mode 100644 index 0000000000..bbe2a3a6f2 --- /dev/null +++ b/editor/plugins/skeleton_2d_editor_plugin.h @@ -0,0 +1,55 @@ +#ifndef SKELETON_2D_EDITOR_PLUGIN_H +#define SKELETON_2D_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/2d/skeleton_2d.h" +#include "scene/gui/spin_box.h" + +class Skeleton2DEditor : public Control { + + GDCLASS(Skeleton2DEditor, Control); + + enum Menu { + MENU_OPTION_MAKE_REST, + MENU_OPTION_SET_REST, + }; + + Skeleton2D *node; + + MenuButton *options; + AcceptDialog *err_dialog; + + void _menu_option(int p_option); + + //void _create_uv_lines(); + friend class Skeleton2DEditorPlugin; + +protected: + void _node_removed(Node *p_node); + static void _bind_methods(); + +public: + void edit(Skeleton2D *p_sprite); + Skeleton2DEditor(); +}; + +class Skeleton2DEditorPlugin : public EditorPlugin { + + GDCLASS(Skeleton2DEditorPlugin, EditorPlugin); + + Skeleton2DEditor *sprite_editor; + EditorNode *editor; + +public: + virtual String get_name() const { return "Skeleton2D"; } + bool has_main_screen() const { return false; } + virtual void edit(Object *p_object); + virtual bool handles(Object *p_object) const; + virtual void make_visible(bool p_visible); + + Skeleton2DEditorPlugin(EditorNode *p_node); + ~Skeleton2DEditorPlugin(); +}; + +#endif // SKELETON_2D_EDITOR_PLUGIN_H diff --git a/editor/plugins/skeleton_editor_plugin.cpp b/editor/plugins/skeleton_editor_plugin.cpp new file mode 100644 index 0000000000..c41e3b546f --- /dev/null +++ b/editor/plugins/skeleton_editor_plugin.cpp @@ -0,0 +1,189 @@ +/*************************************************************************/ +/* skeleton_editor_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (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 "skeleton_editor_plugin.h" +#include "scene/3d/collision_shape.h" +#include "scene/3d/physics_body.h" +#include "scene/3d/physics_joint.h"; +#include "scene/resources/capsule_shape.h" +#include "scene/resources/sphere_shape.h" +#include "spatial_editor_plugin.h" + +void SkeletonEditor::_on_click_option(int p_option) { + if (!skeleton) { + return; + } + + switch (p_option) { + case MENU_OPTION_CREATE_PHYSICAL_SKELETON: { + create_physical_skeleton(); + } break; + } +} + +void SkeletonEditor::create_physical_skeleton() { + UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); + Node *owner = skeleton == get_tree()->get_edited_scene_root() ? skeleton : skeleton->get_owner(); + + const int bc = skeleton->get_bone_count(); + + if (!bc) { + return; + } + + Vector<BoneInfo> bones_infos; + bones_infos.resize(bc); + + for (int bone_id = 0; bc > bone_id; ++bone_id) { + + const int parent = skeleton->get_bone_parent(bone_id); + const int parent_parent = skeleton->get_bone_parent(parent); + + if (parent < 0) { + + bones_infos[bone_id].relative_rest = skeleton->get_bone_rest(bone_id); + + } else { + + bones_infos[bone_id].relative_rest = bones_infos[parent].relative_rest * skeleton->get_bone_rest(bone_id); + + /// create physical bone on parent + if (!bones_infos[parent].physical_bone) { + + bones_infos[parent].physical_bone = create_physical_bone(parent, bone_id, bones_infos); + + ur->create_action(TTR("Create physical bones")); + ur->add_do_method(skeleton, "add_child", bones_infos[parent].physical_bone); + ur->add_do_reference(bones_infos[parent].physical_bone); + ur->add_undo_method(skeleton, "remove_child", bones_infos[parent].physical_bone); + ur->commit_action(); + + bones_infos[parent].physical_bone->set_bone_name(skeleton->get_bone_name(parent)); + bones_infos[parent].physical_bone->set_owner(owner); + bones_infos[parent].physical_bone->get_child(0)->set_owner(owner); // set shape owner + + /// Create joint between parent of parent + if (-1 != parent_parent) { + + bones_infos[parent].physical_bone->set_joint_type(PhysicalBone::JOINT_TYPE_PIN); + } + } + } + } +} + +PhysicalBone *SkeletonEditor::create_physical_bone(int bone_id, int bone_child_id, const Vector<BoneInfo> &bones_infos) { + + real_t half_height(skeleton->get_bone_rest(bone_child_id).origin.length() * 0.5); + real_t radius(half_height * 0.2); + + CapsuleShape *bone_shape_capsule = memnew(CapsuleShape); + bone_shape_capsule->set_height((half_height - radius) * 2); + bone_shape_capsule->set_radius(radius); + + CollisionShape *bone_shape = memnew(CollisionShape); + bone_shape->set_shape(bone_shape_capsule); + + Transform body_transform; + body_transform.origin = Vector3(0, 0, -half_height); + + Transform joint_transform; + joint_transform.origin = Vector3(0, 0, half_height); + + PhysicalBone *physical_bone = memnew(PhysicalBone); + physical_bone->add_child(bone_shape); + physical_bone->set_name("Physical Bone " + skeleton->get_bone_name(bone_id)); + physical_bone->set_body_offset(body_transform); + physical_bone->set_joint_offset(joint_transform); + return physical_bone; +} + +void SkeletonEditor::edit(Skeleton *p_node) { + skeleton = p_node; +} + +void SkeletonEditor::_node_removed(Node *p_node) { + + if (p_node == skeleton) { + skeleton = NULL; + options->hide(); + } +} + +void SkeletonEditor::_bind_methods() { + ClassDB::bind_method("_on_click_option", &SkeletonEditor::_on_click_option); +} + +SkeletonEditor::SkeletonEditor() { + options = memnew(MenuButton); + SpatialEditor::get_singleton()->add_control_to_menu_panel(options); + + options->set_text(TTR("Skeleton")); + options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Skeleton", "EditorIcons")); + + options->get_popup()->add_item(TTR("Create physical skeleton"), MENU_OPTION_CREATE_PHYSICAL_SKELETON); + + options->get_popup()->connect("id_pressed", this, "_on_click_option"); + options->hide(); +} + +SkeletonEditor::~SkeletonEditor() { + SpatialEditor::get_singleton()->remove_child(options); + memdelete(options); +} + +void SkeletonEditorPlugin::edit(Object *p_object) { + skeleton_editor->edit(Object::cast_to<Skeleton>(p_object)); +} + +bool SkeletonEditorPlugin::handles(Object *p_object) const { + return p_object->is_class("Skeleton"); +} + +void SkeletonEditorPlugin::make_visible(bool p_visible) { + if (p_visible) { + skeleton_editor->options->show(); + } else { + + skeleton_editor->options->hide(); + skeleton_editor->edit(NULL); + } +} + +SkeletonEditorPlugin::SkeletonEditorPlugin(EditorNode *p_node) { + editor = p_node; + skeleton_editor = memnew(SkeletonEditor); + editor->get_viewport()->add_child(skeleton_editor); +} + +SkeletonEditorPlugin::~SkeletonEditorPlugin() { + editor->get_viewport()->remove_child(skeleton_editor); + memdelete(skeleton_editor); +} diff --git a/editor/plugins/skeleton_editor_plugin.h b/editor/plugins/skeleton_editor_plugin.h new file mode 100644 index 0000000000..b9bdf91902 --- /dev/null +++ b/editor/plugins/skeleton_editor_plugin.h @@ -0,0 +1,95 @@ +/*************************************************************************/ +/* skeleton_editor_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (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 SKELETON_EDITOR_PLUGIN_H +#define SKELETON_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/3d/skeleton.h" + +class PhysicalBone; +class Joint; + +class SkeletonEditor : public Node { + GDCLASS(SkeletonEditor, Node); + + enum Menu { + MENU_OPTION_CREATE_PHYSICAL_SKELETON + }; + + struct BoneInfo { + PhysicalBone *physical_bone; + Transform relative_rest; // Relative to skeleton node + BoneInfo() : + physical_bone(NULL) {} + }; + + Skeleton *skeleton; + + MenuButton *options; + + void _on_click_option(int p_option); + + friend class SkeletonEditorPlugin; + +protected: + void _node_removed(Node *p_node); + static void _bind_methods(); + + void create_physical_skeleton(); + PhysicalBone *create_physical_bone(int bone_id, int bone_child_id, const Vector<BoneInfo> &bones_infos); + +public: + void edit(Skeleton *p_mesh); + + SkeletonEditor(); + ~SkeletonEditor(); +}; + +class SkeletonEditorPlugin : public EditorPlugin { + + GDCLASS(SkeletonEditorPlugin, EditorPlugin); + + EditorNode *editor; + SkeletonEditor *skeleton_editor; + +public: + virtual String get_name() const { return "Skeleton"; } + virtual bool has_main_screen() const { return false; } + virtual void edit(Object *p_object); + virtual bool handles(Object *p_object) const; + virtual void make_visible(bool p_visible); + + SkeletonEditorPlugin(EditorNode *p_node); + ~SkeletonEditorPlugin(); +}; + +#endif // SKELETON_EDITOR_PLUGIN_H diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 5e8eb06556..5b713ef3c4 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -72,6 +72,14 @@ #define MIN_FOV 0.01 #define MAX_FOV 179 +#ifdef TOOLS_ENABLED +#define get_global_gizmo_transform get_global_gizmo_transform +#define get_local_gizmo_transform get_local_gizmo_transform +#else +#define get_global_gizmo_transform get_global_transform +#define get_local_gizmo_transform get_transform +#endif + void SpatialEditorViewport::_update_camera(float p_interp_delta) { bool is_orthogonal = camera->get_projection() == Camera::PROJECTION_ORTHOGONAL; @@ -318,6 +326,9 @@ void SpatialEditorViewport::_select(Spatial *p_node, bool p_append, bool p_singl editor_selection->clear(); editor_selection->add_node(p_node); + if (Engine::get_singleton()->is_editor_hint()) + editor->call("edit_node", p_node); + } else { if (editor_selection->is_selected(p_node) && p_single) { @@ -581,8 +592,8 @@ void SpatialEditorViewport::_compute_edit(const Point2 &p_point) { if (!se) continue; - se->original = se->sp->get_global_transform(); - se->original_local = se->sp->get_transform(); + se->original = se->sp->get_global_gizmo_transform(); + se->original_local = se->sp->get_local_gizmo_transform(); } } @@ -883,8 +894,6 @@ void SpatialEditorViewport::_list_select(Ref<InputEventMouseButton> b) { selection_menu->set_global_position(b->get_global_position()); selection_menu->popup(); - selection_menu->call_deferred("grab_click_focus"); - selection_menu->set_invalidate_click_until_motion(); } } @@ -1183,7 +1192,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!se) continue; - undo_redo->add_do_method(sp, "set_global_transform", sp->get_global_transform()); + undo_redo->add_do_method(sp, "set_global_transform", sp->get_global_gizmo_transform()); undo_redo->add_undo_method(sp, "set_global_transform", se->original); } undo_redo->commit_action(); @@ -1904,8 +1913,13 @@ void SpatialEditorViewport::_nav_orbit(Ref<InputEventWithModifiers> p_event, con real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); + bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y-axis"); - cursor.x_rot += p_relative.y * radians_per_pixel; + if (invert_y_axis) { + cursor.x_rot -= p_relative.y * radians_per_pixel; + } else { + cursor.x_rot += p_relative.y * radians_per_pixel; + } cursor.y_rot += p_relative.x * radians_per_pixel; if (cursor.x_rot > Math_PI / 2.0) cursor.x_rot = Math_PI / 2.0; @@ -1922,11 +1936,16 @@ void SpatialEditorViewport::_nav_look(Ref<InputEventWithModifiers> p_event, cons if (!orthogonal) { real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); + bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y-axis"); // Note: do NOT assume the camera has the "current" transform, because it is interpolated and may have "lag". Transform prev_camera_transform = to_camera_transform(cursor); - cursor.x_rot += p_relative.y * radians_per_pixel; + if (invert_y_axis) { + cursor.x_rot -= p_relative.y * radians_per_pixel; + } else { + cursor.x_rot += p_relative.y * radians_per_pixel; + } cursor.y_rot += p_relative.x * radians_per_pixel; if (cursor.x_rot > Math_PI / 2.0) cursor.x_rot = Math_PI / 2.0; @@ -2139,7 +2158,7 @@ void SpatialEditorViewport::_notification(int p_what) { se->aabb = vi ? vi->get_aabb() : AABB(Vector3(-0.2, -0.2, -0.2), Vector3(0.4, 0.4, 0.4)); } - Transform t = sp->get_global_transform(); + Transform t = sp->get_global_gizmo_transform(); t.translate(se->aabb.position); // apply AABB scaling before item's global transform @@ -2492,7 +2511,7 @@ void SpatialEditorViewport::_menu_option(int p_option) { xform.scale_basis(sp->get_scale()); undo_redo->add_do_method(sp, "set_global_transform", xform); - undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_transform()); + undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_gizmo_transform()); } undo_redo->commit_action(); } break; @@ -2950,7 +2969,7 @@ void SpatialEditorViewport::focus_selection() { if (!se) continue; - center += sp->get_global_transform().origin; + center += sp->get_global_gizmo_transform().origin; count++; } @@ -3032,7 +3051,7 @@ AABB SpatialEditorViewport::_calculate_spatial_bounds(const Spatial *p_parent, c MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(child); if (mesh_instance) { AABB mesh_instance_bounds = mesh_instance->get_aabb(); - mesh_instance_bounds.position += mesh_instance->get_global_transform().origin - p_parent->get_global_transform().origin; + mesh_instance_bounds.position += mesh_instance->get_global_gizmo_transform().origin - p_parent->get_global_gizmo_transform().origin; bounds.merge_with(mesh_instance_bounds); } bounds = _calculate_spatial_bounds(child, bounds); @@ -3110,7 +3129,7 @@ bool SpatialEditorViewport::_create_instance(Node *parent, String &path, const P if (!scene.is_valid()) { // invalid scene return false; } else { - instanced_scene = scene->instance(); + instanced_scene = scene->instance(PackedScene::GEN_EDIT_STATE_INSTANCE); } } } @@ -3143,7 +3162,7 @@ bool SpatialEditorViewport::_create_instance(Node *parent, String &path, const P Transform global_transform; Spatial *parent_spatial = Object::cast_to<Spatial>(parent); if (parent_spatial) - global_transform = parent_spatial->get_global_transform(); + global_transform = parent_spatial->get_global_gizmo_transform(); global_transform.origin = spatial_editor->snap_point(_get_instance_position(p_point)); @@ -3272,7 +3291,7 @@ void SpatialEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p } } if (list.size() != 1) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation requires a single selected node.")); accept->popup_centered_minsize(); _remove_preview(); @@ -3340,14 +3359,14 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/front_view"), VIEW_FRONT); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/rear_view"), VIEW_REAR); view_menu->get_popup()->add_separator(); - view_menu->get_popup()->add_check_item(TTR("Perspective") + " (" + ED_GET_SHORTCUT("spatial_editor/switch_perspective_orthogonal")->get_as_text() + ")", VIEW_PERSPECTIVE); - view_menu->get_popup()->add_check_item(TTR("Orthogonal") + " (" + ED_GET_SHORTCUT("spatial_editor/switch_perspective_orthogonal")->get_as_text() + ")", VIEW_ORTHOGONAL); + view_menu->get_popup()->add_radio_check_item(TTR("Perspective") + " (" + ED_GET_SHORTCUT("spatial_editor/switch_perspective_orthogonal")->get_as_text() + ")", VIEW_PERSPECTIVE); + view_menu->get_popup()->add_radio_check_item(TTR("Orthogonal") + " (" + ED_GET_SHORTCUT("spatial_editor/switch_perspective_orthogonal")->get_as_text() + ")", VIEW_ORTHOGONAL); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_PERSPECTIVE), true); view_menu->get_popup()->add_separator(); - view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_normal", TTR("Display Normal")), VIEW_DISPLAY_NORMAL); - view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_wireframe", TTR("Display Wireframe")), VIEW_DISPLAY_WIREFRAME); - view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_overdraw", TTR("Display Overdraw")), VIEW_DISPLAY_OVERDRAW); - view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_unshaded", TTR("Display Unshaded")), VIEW_DISPLAY_SHADELESS); + view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_normal", TTR("Display Normal")), VIEW_DISPLAY_NORMAL); + view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_wireframe", TTR("Display Wireframe")), VIEW_DISPLAY_WIREFRAME); + view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_overdraw", TTR("Display Overdraw")), VIEW_DISPLAY_OVERDRAW); + view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_unshaded", TTR("Display Unshaded")), VIEW_DISPLAY_SHADELESS); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), true); view_menu->get_popup()->add_separator(); view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_environment", TTR("View Environment")), VIEW_ENVIRONMENT); @@ -3776,7 +3795,8 @@ void SpatialEditor::update_transform_gizmo() { if (!se) continue; - Transform xf = se->sp->get_global_transform(); + Transform xf = se->sp->get_global_gizmo_transform(); + if (first) { center.position = xf.origin; first = false; @@ -3827,9 +3847,6 @@ Object *SpatialEditor::_get_editor_data(Object *p_what) { si->sbox_instance = VisualServer::get_singleton()->instance_create2(selection_box->get_rid(), sp->get_world()->get_scenario()); VS::get_singleton()->instance_geometry_set_cast_shadows_setting(si->sbox_instance, VS::SHADOW_CASTING_SETTING_OFF); - if (Engine::get_singleton()->is_editor_hint()) - editor->call("edit_node", sp); - return si; } @@ -4046,7 +4063,7 @@ void SpatialEditor::_xform_dialog_action() { bool post = xform_type->get_selected() > 0; - Transform tr = sp->get_global_transform(); + Transform tr = sp->get_global_gizmo_transform(); if (post) tr = tr * t; else { @@ -4056,7 +4073,7 @@ void SpatialEditor::_xform_dialog_action() { } undo_redo->add_do_method(sp, "set_global_transform", tr); - undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_transform()); + undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_gizmo_transform()); } undo_redo->commit_action(); } @@ -4282,67 +4299,26 @@ void SpatialEditor::_init_indicators() { indicator_mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); indicator_mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - PoolVector<Color> grid_colors[3]; - PoolVector<Vector3> grid_points[3]; Vector<Color> origin_colors; Vector<Vector3> origin_points; - Color grid_color = EditorSettings::get_singleton()->get("editors/3d/grid_color"); - for (int i = 0; i < 3; i++) { Vector3 axis; axis[i] = 1; - Vector3 axis_n1; - axis_n1[(i + 1) % 3] = 1; - Vector3 axis_n2; - axis_n2[(i + 2) % 3] = 1; + + grid_enable[i] = false; + grid_visible[i] = false; origin_colors.push_back(Color(axis.x, axis.y, axis.z)); origin_colors.push_back(Color(axis.x, axis.y, axis.z)); origin_points.push_back(axis * 4096); origin_points.push_back(axis * -4096); -#define ORIGIN_GRID_SIZE 50 - - for (int j = -ORIGIN_GRID_SIZE; j <= ORIGIN_GRID_SIZE; j++) { - - Vector3 p1 = axis_n1 * j + axis_n2 * -ORIGIN_GRID_SIZE; - Vector3 p1_dest = p1 * (-axis_n2 + axis_n1); - Vector3 p2 = axis_n2 * j + axis_n1 * -ORIGIN_GRID_SIZE; - Vector3 p2_dest = p2 * (-axis_n1 + axis_n2); - - Color line_color = grid_color; - if (j == 0) { - continue; - } else if (j % 10 == 0) { - line_color *= 1.5; - } - - grid_points[i].push_back(p1); - grid_points[i].push_back(p1_dest); - grid_colors[i].push_back(line_color); - grid_colors[i].push_back(line_color); - - grid_points[i].push_back(p2); - grid_points[i].push_back(p2_dest); - grid_colors[i].push_back(line_color); - grid_colors[i].push_back(line_color); - } + } - grid[i] = VisualServer::get_singleton()->mesh_create(); - Array d; - d.resize(VS::ARRAY_MAX); - d[VisualServer::ARRAY_VERTEX] = grid_points[i]; - d[VisualServer::ARRAY_COLOR] = grid_colors[i]; - VisualServer::get_singleton()->mesh_add_surface_from_arrays(grid[i], VisualServer::PRIMITIVE_LINES, d); - VisualServer::get_singleton()->mesh_surface_set_material(grid[i], 0, indicator_mat->get_rid()); - grid_instance[i] = VisualServer::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world()->get_scenario()); + grid_enable[1] = true; + grid_visible[1] = true; - grid_visible[i] = false; - grid_enable[i] = false; - VisualServer::get_singleton()->instance_set_visible(grid_instance[i], false); - VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(grid_instance[i], VS::SHADOW_CASTING_SETTING_OFF); - VS::get_singleton()->instance_set_layer_mask(grid_instance[i], 1 << SpatialEditorViewport::GIZMO_GRID_LAYER); - } + _init_grid(); origin = VisualServer::get_singleton()->mesh_create(); Array d; @@ -4358,9 +4334,6 @@ void SpatialEditor::_init_indicators() { VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(origin_instance, VS::SHADOW_CASTING_SETTING_OFF); - VisualServer::get_singleton()->instance_set_visible(grid_instance[1], true); - grid_enable[1] = true; - grid_visible[1] = true; grid_enabled = true; last_grid_snap = 1; } @@ -4629,10 +4602,72 @@ void SpatialEditor::_init_indicators() { _generate_selection_box(); } +void SpatialEditor::_init_grid() { + + PoolVector<Color> grid_colors[3]; + PoolVector<Vector3> grid_points[3]; + + Color primary_grid_color = EditorSettings::get_singleton()->get("editors/3d/primary_grid_color"); + Color secondary_grid_color = EditorSettings::get_singleton()->get("editors/3d/secondary_grid_color"); + int grid_size = EditorSettings::get_singleton()->get("editors/3d/grid_size"); + int primary_grid_steps = EditorSettings::get_singleton()->get("editors/3d/primary_grid_steps"); + + for (int i = 0; i < 3; i++) { + Vector3 axis; + axis[i] = 1; + Vector3 axis_n1; + axis_n1[(i + 1) % 3] = 1; + Vector3 axis_n2; + axis_n2[(i + 2) % 3] = 1; + + for (int j = -grid_size; j <= grid_size; j++) { + Vector3 p1 = axis_n1 * j + axis_n2 * -grid_size; + Vector3 p1_dest = p1 * (-axis_n2 + axis_n1); + Vector3 p2 = axis_n2 * j + axis_n1 * -grid_size; + Vector3 p2_dest = p2 * (-axis_n1 + axis_n2); + + Color line_color = secondary_grid_color; + if (j == 0) { + continue; + } else if (j % primary_grid_steps == 0) { + line_color = primary_grid_color; + } + + grid_points[i].push_back(p1); + grid_points[i].push_back(p1_dest); + grid_colors[i].push_back(line_color); + grid_colors[i].push_back(line_color); + + grid_points[i].push_back(p2); + grid_points[i].push_back(p2_dest); + grid_colors[i].push_back(line_color); + grid_colors[i].push_back(line_color); + } + + grid[i] = VisualServer::get_singleton()->mesh_create(); + Array d; + d.resize(VS::ARRAY_MAX); + d[VisualServer::ARRAY_VERTEX] = grid_points[i]; + d[VisualServer::ARRAY_COLOR] = grid_colors[i]; + VisualServer::get_singleton()->mesh_add_surface_from_arrays(grid[i], VisualServer::PRIMITIVE_LINES, d); + VisualServer::get_singleton()->mesh_surface_set_material(grid[i], 0, indicator_mat->get_rid()); + grid_instance[i] = VisualServer::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world()->get_scenario()); + + VisualServer::get_singleton()->instance_set_visible(grid_instance[i], grid_visible[i]); + VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(grid_instance[i], VS::SHADOW_CASTING_SETTING_OFF); + VS::get_singleton()->instance_set_layer_mask(grid_instance[i], 1 << SpatialEditorViewport::GIZMO_GRID_LAYER); + } +} + void SpatialEditor::_finish_indicators() { VisualServer::get_singleton()->free(origin_instance); VisualServer::get_singleton()->free(origin); + + _finish_grid(); +} + +void SpatialEditor::_finish_grid() { for (int i = 0; i < 3; i++) { VisualServer::get_singleton()->free(grid_instance[i]); VisualServer::get_singleton()->free(grid[i]); @@ -4674,6 +4709,8 @@ void SpatialEditor::_unhandled_key_input(Ref<InputEvent> p_event) { if (!is_visible_in_tree() || get_viewport()->gui_has_modal_stack()) return; + snap_key_enabled = Input::get_singleton()->is_key_pressed(KEY_CONTROL); + Ref<InputEventKey> k = p_event; if (k.is_valid()) { @@ -4770,6 +4807,10 @@ void SpatialEditor::_notification(int p_what) { view_menu->get_popup()->set_item_icon(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_3_VIEWPORTS), get_icon("Panels3", "EditorIcons")); view_menu->get_popup()->set_item_icon(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_3_VIEWPORTS_ALT), get_icon("Panels3Alt", "EditorIcons")); view_menu->get_popup()->set_item_icon(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_4_VIEWPORTS), get_icon("Panels4", "EditorIcons")); + + // Update grid color by rebuilding grid. + _finish_grid(); + _init_grid(); } } @@ -4778,6 +4819,11 @@ void SpatialEditor::add_control_to_menu_panel(Control *p_control) { hbc_menu->add_child(p_control); } +void SpatialEditor::remove_control_from_menu_panel(Control *p_control) { + + hbc_menu->remove_child(p_control); +} + void SpatialEditor::set_can_preview(Camera *p_preview) { for (int i = 0; i < 4; i++) { @@ -4936,6 +4982,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { editor_selection->add_editor_plugin(this); snap_enabled = false; + snap_key_enabled = false; tool_mode = TOOL_MODE_SELECT; hbc_menu = memnew(HBoxContainer); @@ -5045,8 +5092,6 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Tool Rotate"), KEY_E); ED_SHORTCUT("spatial_editor/tool_scale", TTR("Tool Scale"), KEY_R); - ED_SHORTCUT("spatial_editor/display_wireframe", TTR("Display Wireframe"), KEY_Z); - ED_SHORTCUT("spatial_editor/freelook_toggle", TTR("Toggle Freelook"), KEY_MASK_SHIFT + KEY_F); PopupMenu *p; @@ -5056,9 +5101,9 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(transform_menu); p = transform_menu->get_popup(); - p->add_shortcut(ED_SHORTCUT("spatial_editor/configure_snap", TTR("Configure Snap..")), MENU_TRANSFORM_CONFIGURE_SNAP); + p->add_shortcut(ED_SHORTCUT("spatial_editor/configure_snap", TTR("Configure Snap...")), MENU_TRANSFORM_CONFIGURE_SNAP); p->add_separator(); - p->add_shortcut(ED_SHORTCUT("spatial_editor/transform_dialog", TTR("Transform Dialog..")), MENU_TRANSFORM_DIALOG); + p->add_shortcut(ED_SHORTCUT("spatial_editor/transform_dialog", TTR("Transform Dialog...")), MENU_TRANSFORM_DIALOG); p->connect("id_pressed", this, "_menu_item_pressed"); @@ -5072,12 +5117,12 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { accept = memnew(AcceptDialog); editor->get_gui_base()->add_child(accept); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/1_viewport", TTR("1 Viewport"), KEY_MASK_CMD + KEY_1), MENU_VIEW_USE_1_VIEWPORT); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports", TTR("2 Viewports"), KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports_alt", TTR("2 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS_ALT); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports", TTR("3 Viewports"), KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports_alt", TTR("3 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS_ALT); - p->add_check_shortcut(ED_SHORTCUT("spatial_editor/4_viewports", TTR("4 Viewports"), KEY_MASK_CMD + KEY_4), MENU_VIEW_USE_4_VIEWPORTS); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/1_viewport", TTR("1 Viewport"), KEY_MASK_CMD + KEY_1), MENU_VIEW_USE_1_VIEWPORT); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports", TTR("2 Viewports"), KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/2_viewports_alt", TTR("2 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_2), MENU_VIEW_USE_2_VIEWPORTS_ALT); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports", TTR("3 Viewports"), KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/3_viewports_alt", TTR("3 Viewports (Alt)"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_3), MENU_VIEW_USE_3_VIEWPORTS_ALT); + p->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/4_viewports", TTR("4 Viewports"), KEY_MASK_CMD + KEY_4), MENU_VIEW_USE_4_VIEWPORTS); p->add_separator(); p->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_origin", TTR("View Origin")), MENU_VIEW_ORIGIN); diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index e12f7affb7..7736db67b1 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -505,6 +505,7 @@ private: ConfirmationDialog *settings_dialog; bool snap_enabled; + bool snap_key_enabled; LineEdit *snap_translate; LineEdit *snap_rotate; LineEdit *snap_scale; @@ -531,7 +532,9 @@ private: void _instance_scene(); void _init_indicators(); + void _init_grid(); void _finish_indicators(); + void _finish_grid(); void _toggle_maximize_view(Object *p_viewport); @@ -577,7 +580,7 @@ public: ToolMode get_tool_mode() const { return tool_mode; } bool are_local_coords_enabled() const { return tool_option_button[SpatialEditor::TOOL_OPT_LOCAL_COORDS]->is_pressed(); } - bool is_snap_enabled() const { return snap_enabled; } + bool is_snap_enabled() const { return snap_enabled ^ snap_key_enabled; } float get_translate_snap() const { return snap_translate->get_text().to_double(); } float get_rotate_snap() const { return snap_rotate->get_text().to_double(); } float get_scale_snap() const { return snap_scale->get_text().to_double(); } @@ -605,6 +608,7 @@ public: UndoRedo *get_undo_redo() { return undo_redo; } void add_control_to_menu_panel(Control *p_control); + void remove_control_from_menu_panel(Control *p_control); VSplitContainer *get_shader_split(); HSplitContainer *get_palette_split(); diff --git a/editor/plugins/sprite_editor_plugin.cpp b/editor/plugins/sprite_editor_plugin.cpp new file mode 100644 index 0000000000..49816fe2ae --- /dev/null +++ b/editor/plugins/sprite_editor_plugin.cpp @@ -0,0 +1,402 @@ +#include "sprite_editor_plugin.h" + +#include "canvas_item_editor_plugin.h" +#include "scene/2d/mesh_instance_2d.h" +#include "scene/gui/box_container.h" +#include "thirdparty/misc/clipper.hpp" + +void SpriteEditor::_node_removed(Node *p_node) { + + if (p_node == node) { + node = NULL; + options->hide(); + } +} + +void SpriteEditor::edit(Sprite *p_sprite) { + + node = p_sprite; +} + +#define PRECISION 10.0 + +Vector<Vector2> expand(const Vector<Vector2> &points, const Rect2i &rect, float epsilon = 2.0) { + int size = points.size(); + ERR_FAIL_COND_V(size < 2, Vector<Vector2>()); + + ClipperLib::Path subj; + ClipperLib::PolyTree solution; + ClipperLib::PolyTree out; + + for (int i = 0; i < points.size(); i++) { + + subj << ClipperLib::IntPoint(points[i].x * PRECISION, points[i].y * PRECISION); + } + ClipperLib::ClipperOffset co; + co.AddPath(subj, ClipperLib::jtMiter, ClipperLib::etClosedPolygon); + co.Execute(solution, epsilon * PRECISION); + + ClipperLib::PolyNode *p = solution.GetFirst(); + + ERR_FAIL_COND_V(!p, points); + + while (p->IsHole()) { + p = p->GetNext(); + } + + //turn the result into simply polygon (AKA, fix overlap) + + //clamp into the specified rect + ClipperLib::Clipper cl; + cl.StrictlySimple(true); + cl.AddPath(p->Contour, ClipperLib::ptSubject, true); + //create the clipping rect + ClipperLib::Path clamp; + clamp.push_back(ClipperLib::IntPoint(0, 0)); + clamp.push_back(ClipperLib::IntPoint(rect.size.width * PRECISION, 0)); + clamp.push_back(ClipperLib::IntPoint(rect.size.width * PRECISION, rect.size.height * PRECISION)); + clamp.push_back(ClipperLib::IntPoint(0, rect.size.height * PRECISION)); + cl.AddPath(clamp, ClipperLib::ptClip, true); + cl.Execute(ClipperLib::ctIntersection, out); + + Vector<Vector2> outPoints; + ClipperLib::PolyNode *p2 = out.GetFirst(); + while (p2->IsHole()) { + p2 = p2->GetNext(); + } + + int lasti = p2->Contour.size() - 1; + Vector2 prev = Vector2(p2->Contour[lasti].X / PRECISION, p2->Contour[lasti].Y / PRECISION); + for (int i = 0; i < p2->Contour.size(); i++) { + + Vector2 cur = Vector2(p2->Contour[i].X / PRECISION, p2->Contour[i].Y / PRECISION); + if (cur.distance_to(prev) > 0.5) { + outPoints.push_back(cur); + prev = cur; + } + } + return outPoints; +} + +void SpriteEditor::_menu_option(int p_option) { + + if (!node) { + return; + } + + switch (p_option) { + case MENU_OPTION_CREATE_MESH_2D: { + + _update_mesh_data(); + debug_uv_dialog->popup_centered(); + debug_uv->update(); + + } break; + } +} + +void SpriteEditor::_update_mesh_data() { + + Ref<Texture> texture = node->get_texture(); + if (texture.is_null()) { + err_dialog->set_text(TTR("Sprite is empty!")); + err_dialog->popup_centered_minsize(); + return; + } + + if (node->get_hframes() > 1 || node->get_vframes() > 1) { + err_dialog->set_text(TTR("Can't convert a sprite using animation frames to mesh.")); + err_dialog->popup_centered_minsize(); + return; + } + Ref<Image> image = texture->get_data(); + ERR_FAIL_COND(image.is_null()); + Rect2 rect; + if (node->is_region()) + rect = node->get_region_rect(); + else + rect.size = Size2(image->get_width(), image->get_height()); + + Ref<BitMap> bm; + bm.instance(); + bm->create_from_image_alpha(image); + + int grow = island_merging->get_value(); + if (grow > 0) { + bm->grow_mask(grow, rect); + } + + float epsilon = simplification->get_value(); + + Vector<Vector<Vector2> > lines = bm->clip_opaque_to_polygons(rect, epsilon); + + print_line("lines: " + itos(lines.size())); + uv_lines.clear(); + + computed_vertices.clear(); + computed_uv.clear(); + computed_indices.clear(); + + Size2 img_size = Vector2(image->get_width(), image->get_height()); + for (int j = 0; j < lines.size(); j++) { + lines[j] = expand(lines[j], rect, epsilon); + + int index_ofs = computed_vertices.size(); + + for (int i = 0; i < lines[j].size(); i++) { + Vector2 vtx = lines[j][i]; + computed_uv.push_back(vtx / img_size); + + vtx -= rect.position; //offset by rect position + + //flip if flipped + if (node->is_flipped_h()) + vtx.x = rect.size.x - vtx.x - 1.0; + if (node->is_flipped_v()) + vtx.y = rect.size.y - vtx.y - 1.0; + + if (node->is_centered()) + vtx -= rect.size / 2.0; + + computed_vertices.push_back(vtx); + } +#if 0 + Vector<Vector<Vector2> > polys = Geometry::decompose_polygon(lines[j]); + print_line("polygon: " + itos(polys.size())); + + for (int i = 0; i < polys.size(); i++) { + for (int k = 0; k < polys[i].size(); k++) { + + int idxn = (k + 1) % polys[i].size(); + uv_lines.push_back(polys[i][k]); + uv_lines.push_back(polys[i][idxn]); + } + } +#endif + +#if 1 + + Vector<int> poly = Geometry::triangulate_polygon(lines[j]); + + for (int i = 0; i < poly.size(); i += 3) { + for (int k = 0; k < 3; k++) { + int idx = i + k; + int idxn = i + (k + 1) % 3; + uv_lines.push_back(lines[j][poly[idx]]); + uv_lines.push_back(lines[j][poly[idxn]]); + + computed_indices.push_back(poly[idx] + index_ofs); + } + } +#endif + +#if 0 + for (int i = 0; i < lines[j].size() - 1; i++) { + uv_lines.push_back(lines[j][i]); + uv_lines.push_back(lines[j][i + 1]); + } +#endif + } + + debug_uv->update(); +} + +void SpriteEditor::_create_mesh_node() { + + if (computed_vertices.size() < 3) { + err_dialog->set_text(TTR("Invalid geometry, can't replace by mesh.")); + err_dialog->popup_centered_minsize(); + return; + } + + Ref<ArrayMesh> mesh; + mesh.instance(); + + Array a; + a.resize(Mesh::ARRAY_MAX); + a[Mesh::ARRAY_VERTEX] = computed_vertices; + a[Mesh::ARRAY_TEX_UV] = computed_uv; + a[Mesh::ARRAY_INDEX] = computed_indices; + + mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); + + MeshInstance2D *mesh_instance = memnew(MeshInstance2D); + mesh_instance->set_mesh(mesh); + EditorNode::get_singleton()->get_scene_tree_dock()->replace_node(node, mesh_instance); +} + +#if 0 +void SpriteEditor::_create_uv_lines() { + + Ref<Mesh> sprite = node->get_sprite(); + ERR_FAIL_COND(!sprite.is_valid()); + + Set<SpriteEditorEdgeSort> edges; + uv_lines.clear(); + for (int i = 0; i < sprite->get_surface_count(); i++) { + if (sprite->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES) + continue; + Array a = sprite->surface_get_arrays(i); + + PoolVector<Vector2> uv = a[p_layer == 0 ? Mesh::ARRAY_TEX_UV : Mesh::ARRAY_TEX_UV2]; + if (uv.size() == 0) { + err_dialog->set_text(TTR("Model has no UV in this layer")); + err_dialog->popup_centered_minsize(); + return; + } + + PoolVector<Vector2>::Read r = uv.read(); + + PoolVector<int> indices = a[Mesh::ARRAY_INDEX]; + PoolVector<int>::Read ri; + + int ic; + bool use_indices; + + if (indices.size()) { + ic = indices.size(); + ri = indices.read(); + use_indices = true; + } else { + ic = uv.size(); + use_indices = false; + } + + for (int j = 0; j < ic; j += 3) { + + for (int k = 0; k < 3; k++) { + + SpriteEditorEdgeSort edge; + if (use_indices) { + edge.a = r[ri[j + k]]; + edge.b = r[ri[j + ((k + 1) % 3)]]; + } else { + edge.a = r[j + k]; + edge.b = r[j + ((k + 1) % 3)]; + } + + if (edges.has(edge)) + continue; + + uv_lines.push_back(edge.a); + uv_lines.push_back(edge.b); + edges.insert(edge); + } + } + } + + debug_uv_dialog->popup_centered_minsize(); +} +#endif +void SpriteEditor::_debug_uv_draw() { + + if (uv_lines.size() == 0) + return; + + Ref<Texture> tex = node->get_texture(); + ERR_FAIL_COND(!tex.is_valid()); + debug_uv->set_clip_contents(true); + debug_uv->draw_texture(tex, Point2()); + debug_uv->set_custom_minimum_size(tex->get_size()); + //debug_uv->draw_set_transform(Vector2(), 0, debug_uv->get_size()); + debug_uv->draw_multiline(uv_lines, Color(1.0, 0.8, 0.7)); +} + +void SpriteEditor::_bind_methods() { + + ClassDB::bind_method("_menu_option", &SpriteEditor::_menu_option); + ClassDB::bind_method("_debug_uv_draw", &SpriteEditor::_debug_uv_draw); + ClassDB::bind_method("_update_mesh_data", &SpriteEditor::_update_mesh_data); + ClassDB::bind_method("_create_mesh_node", &SpriteEditor::_create_mesh_node); +} + +SpriteEditor::SpriteEditor() { + + options = memnew(MenuButton); + + CanvasItemEditor::get_singleton()->add_control_to_menu_panel(options); + + options->set_text(TTR("Sprite")); + options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Sprite", "EditorIcons")); + + options->get_popup()->add_item(TTR("Convert to 2D Mesh"), MENU_OPTION_CREATE_MESH_2D); + + options->get_popup()->connect("id_pressed", this, "_menu_option"); + + err_dialog = memnew(AcceptDialog); + add_child(err_dialog); + + debug_uv_dialog = memnew(ConfirmationDialog); + debug_uv_dialog->get_ok()->set_text(TTR("Create 2D Mesh")); + debug_uv_dialog->set_title("Mesh 2D Preview"); + VBoxContainer *vb = memnew(VBoxContainer); + debug_uv_dialog->add_child(vb); + ScrollContainer *scroll = memnew(ScrollContainer); + scroll->set_custom_minimum_size(Size2(800, 500) * EDSCALE); + scroll->set_enable_h_scroll(true); + scroll->set_enable_v_scroll(true); + vb->add_margin_child(TTR("Preview:"), scroll, true); + debug_uv = memnew(Control); + debug_uv->connect("draw", this, "_debug_uv_draw"); + scroll->add_child(debug_uv); + debug_uv_dialog->connect("confirmed", this, "_create_mesh_node"); + + HBoxContainer *hb = memnew(HBoxContainer); + hb->add_child(memnew(Label(TTR("Simplification: ")))); + simplification = memnew(SpinBox); + simplification->set_min(0.01); + simplification->set_max(10.00); + simplification->set_step(0.01); + simplification->set_value(2); + hb->add_child(simplification); + hb->add_spacer(); + hb->add_child(memnew(Label(TTR("Grow (Pixels): ")))); + island_merging = memnew(SpinBox); + island_merging->set_min(0); + island_merging->set_max(10); + island_merging->set_step(1); + island_merging->set_value(2); + hb->add_child(island_merging); + hb->add_spacer(); + update_preview = memnew(Button); + update_preview->set_text(TTR("Update Preview")); + update_preview->connect("pressed", this, "_update_mesh_data"); + hb->add_child(update_preview); + vb->add_margin_child(TTR("Settings:"), hb); + + add_child(debug_uv_dialog); +} + +void SpriteEditorPlugin::edit(Object *p_object) { + + sprite_editor->edit(Object::cast_to<Sprite>(p_object)); +} + +bool SpriteEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class("Sprite"); +} + +void SpriteEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + sprite_editor->options->show(); + } else { + + sprite_editor->options->hide(); + sprite_editor->edit(NULL); + } +} + +SpriteEditorPlugin::SpriteEditorPlugin(EditorNode *p_node) { + + editor = p_node; + sprite_editor = memnew(SpriteEditor); + editor->get_viewport()->add_child(sprite_editor); + make_visible(false); + + //sprite_editor->options->hide(); +} + +SpriteEditorPlugin::~SpriteEditorPlugin() { +} diff --git a/editor/plugins/sprite_editor_plugin.h b/editor/plugins/sprite_editor_plugin.h new file mode 100644 index 0000000000..17aa3eb1f9 --- /dev/null +++ b/editor/plugins/sprite_editor_plugin.h @@ -0,0 +1,73 @@ +#ifndef SPRITE_EDITOR_PLUGIN_H +#define SPRITE_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/2d/sprite.h" +#include "scene/gui/spin_box.h" + +class SpriteEditor : public Control { + + GDCLASS(SpriteEditor, Control); + + enum Menu { + MENU_OPTION_CREATE_MESH_2D, + }; + + Sprite *node; + + MenuButton *options; + + ConfirmationDialog *outline_dialog; + + AcceptDialog *err_dialog; + + ConfirmationDialog *debug_uv_dialog; + Control *debug_uv; + Vector<Vector2> uv_lines; + + Vector<Vector2> computed_vertices; + Vector<Vector2> computed_uv; + Vector<int> computed_indices; + + SpinBox *simplification; + SpinBox *island_merging; + Button *update_preview; + + void _menu_option(int p_option); + + //void _create_uv_lines(); + friend class SpriteEditorPlugin; + + void _debug_uv_draw(); + void _update_mesh_data(); + void _create_mesh_node(); + +protected: + void _node_removed(Node *p_node); + static void _bind_methods(); + +public: + void edit(Sprite *p_sprite); + SpriteEditor(); +}; + +class SpriteEditorPlugin : public EditorPlugin { + + GDCLASS(SpriteEditorPlugin, EditorPlugin); + + SpriteEditor *sprite_editor; + EditorNode *editor; + +public: + virtual String get_name() const { return "Sprite"; } + bool has_main_screen() const { return false; } + virtual void edit(Object *p_object); + virtual bool handles(Object *p_object) const; + virtual void make_visible(bool p_visible); + + SpriteEditorPlugin(EditorNode *p_node); + ~SpriteEditorPlugin(); +}; + +#endif // SPRITE_EDITOR_PLUGIN_H diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 7a4eee0344..a9afc7a670 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -45,6 +45,12 @@ void SpriteFramesEditor::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { load->set_icon(get_icon("Load", "EditorIcons")); + copy->set_icon(get_icon("ActionCopy", "EditorIcons")); + paste->set_icon(get_icon("ActionPaste", "EditorIcons")); + empty->set_icon(get_icon("InsertBefore", "EditorIcons")); + empty2->set_icon(get_icon("InsertAfter", "EditorIcons")); + move_up->set_icon(get_icon("MoveLeft", "EditorIcons")); + move_down->set_icon(get_icon("MoveRight", "EditorIcons")); _delete->set_icon(get_icon("Remove", "EditorIcons")); new_anim->set_icon(get_icon("New", "EditorIcons")); remove_anim->set_icon(get_icon("Remove", "EditorIcons")); @@ -398,8 +404,6 @@ void SpriteFramesEditor::_animation_add() { animations->grab_focus(); } void SpriteFramesEditor::_animation_remove() { - - //fuck everything if (updating) return; @@ -460,8 +464,6 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) { List<StringName> anim_names; - anim_names.sort_custom<StringName::AlphCompare>(); - frames->get_animation_list(&anim_names); anim_names.sort_custom<StringName::AlphCompare>(); @@ -740,27 +742,35 @@ SpriteFramesEditor::SpriteFramesEditor() { hbc->add_child(load); copy = memnew(Button); - copy->set_text(TTR("Copy")); + copy->set_flat(true); + copy->set_tooltip(TTR("Copy")); hbc->add_child(copy); paste = memnew(Button); - paste->set_text(TTR("Paste")); + paste->set_flat(true); + paste->set_tooltip(TTR("Paste")); hbc->add_child(paste); empty = memnew(Button); - empty->set_text(TTR("Insert Empty (Before)")); + empty->set_flat(true); + empty->set_tooltip(TTR("Insert Empty (Before)")); hbc->add_child(empty); empty2 = memnew(Button); - empty2->set_text(TTR("Insert Empty (After)")); + empty2->set_flat(true); + empty2->set_tooltip(TTR("Insert Empty (After)")); hbc->add_child(empty2); + hbc->add_spacer(false); + move_up = memnew(Button); - move_up->set_text(TTR("Move (Before)")); + move_up->set_flat(true); + move_up->set_tooltip(TTR("Move (Before)")); hbc->add_child(move_up); move_down = memnew(Button); - move_down->set_text(TTR("Move (After)")); + move_down->set_flat(true); + move_down->set_tooltip(TTR("Move (After)")); hbc->add_child(move_down); _delete = memnew(Button); diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index 36a578037e..e891850870 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -75,6 +75,9 @@ void TextureEditor::_notification(int p_what) { // In the case of CurveTextures we know they are 1 in height, so fill the preview to see the gradient ofs_y = 0; tex_height = size.height; + } else if (Object::cast_to<GradientTexture>(*texture)) { + ofs_y = size.height / 4.0; + tex_height = size.height / 2.0; } draw_texture_rect(texture, Rect2(ofs_x, ofs_y, tex_width, tex_height)); diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index e04798d6d6..5ba3931689 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -57,6 +57,9 @@ void TextureRegionEditor::_region_draw() { base_tex = obj_styleBox->get_texture(); else if (atlas_tex.is_valid()) base_tex = atlas_tex->get_atlas(); + else if (tile_set.is_valid() && selected_tile != -1 && tile_set->has_tile(selected_tile)) + base_tex = tile_set->tile_get_texture(selected_tile); + if (base_tex.is_null()) return; @@ -281,6 +284,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { r = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) r = atlas_tex->get_region(); + else if (tile_set.is_valid() && selected_tile != -1) + r = tile_set->tile_get_region(selected_tile); rect.expand_to(r.position); rect.expand_to(r.position + r.size); } @@ -297,6 +302,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } else if (atlas_tex.is_valid()) { undo_redo->add_do_method(atlas_tex.ptr(), "set_region", rect); undo_redo->add_undo_method(atlas_tex.ptr(), "set_region", atlas_tex->get_region()); + } else if (tile_set.is_valid() && selected_tile != -1) { + undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, rect); + undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile)); } undo_redo->add_do_method(edit_draw, "update"); undo_redo->add_undo_method(edit_draw, "update"); @@ -319,6 +327,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { rect_prev = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) rect_prev = atlas_tex->get_region(); + else if (tile_set.is_valid() && selected_tile != -1) + rect_prev = tile_set->tile_get_region(selected_tile); for (int i = 0; i < 8; i++) { Vector2 tuv = endpoints[i]; @@ -362,6 +372,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } else if (obj_styleBox.is_valid()) { undo_redo->add_do_method(obj_styleBox.ptr(), "set_region_rect", obj_styleBox->get_region_rect()); undo_redo->add_undo_method(obj_styleBox.ptr(), "set_region_rect", rect_prev); + } else if (tile_set.is_valid()) { + undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile)); + undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, rect_prev); } drag_index = -1; } @@ -582,10 +595,13 @@ void TextureRegionEditor::apply_rect(const Rect2 &rect) { obj_styleBox->set_region_rect(rect); else if (atlas_tex.is_valid()) atlas_tex->set_region(rect); + else if (tile_set.is_valid() && selected_tile != -1) + tile_set->tile_set_region(selected_tile, rect); } void TextureRegionEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_THEME_CHANGED: case NOTIFICATION_READY: { zoom_out->set_icon(get_icon("ZoomLess", "EditorIcons")); zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); @@ -596,11 +612,12 @@ void TextureRegionEditor::_notification(int p_what) { } void TextureRegionEditor::_node_removed(Object *p_obj) { - if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr()) { + if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr() || p_obj == tile_set.ptr()) { node_ninepatch = NULL; node_sprite = NULL; obj_styleBox = Ref<StyleBox>(NULL); atlas_tex = Ref<AtlasTexture>(NULL); + tile_set = Ref<TileSet>(NULL); hide(); } } @@ -632,6 +649,8 @@ void TextureRegionEditor::edit(Object *p_obj) { obj_styleBox->remove_change_receptor(this); if (atlas_tex.is_valid()) atlas_tex->remove_change_receptor(this); + if (tile_set.is_valid()) + tile_set->remove_change_receptor(this); if (p_obj) { node_sprite = Object::cast_to<Sprite>(p_obj); node_ninepatch = Object::cast_to<NinePatchRect>(p_obj); @@ -639,6 +658,8 @@ void TextureRegionEditor::edit(Object *p_obj) { obj_styleBox = Ref<StyleBoxTexture>(Object::cast_to<StyleBoxTexture>(p_obj)); if (Object::cast_to<AtlasTexture>(p_obj)) atlas_tex = Ref<AtlasTexture>(Object::cast_to<AtlasTexture>(p_obj)); + if (Object::cast_to<TileSet>(p_obj)) + tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_obj)); p_obj->add_change_receptor(this); _edit_region(); } else { @@ -646,6 +667,7 @@ void TextureRegionEditor::edit(Object *p_obj) { node_ninepatch = NULL; obj_styleBox = Ref<StyleBoxTexture>(NULL); atlas_tex = Ref<AtlasTexture>(NULL); + tile_set = Ref<TileSet>(NULL); } edit_draw->update(); } @@ -668,8 +690,11 @@ void TextureRegionEditor::_edit_region() { texture = obj_styleBox->get_texture(); else if (atlas_tex.is_valid()) texture = atlas_tex->get_atlas(); + else if (tile_set.is_valid() && selected_tile != -1 && tile_set->has_tile(selected_tile)) + texture = tile_set->tile_get_texture(selected_tile); if (texture.is_null()) { + edit_draw->update(); return; } @@ -735,6 +760,8 @@ void TextureRegionEditor::_edit_region() { rect = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) rect = atlas_tex->get_region(); + else if (tile_set.is_valid() && selected_tile != -1) + rect = tile_set->tile_get_region(selected_tile); edit_draw->update(); } @@ -753,11 +780,14 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { node_ninepatch = NULL; obj_styleBox = Ref<StyleBoxTexture>(NULL); atlas_tex = Ref<AtlasTexture>(NULL); + tile_set = Ref<TileSet>(NULL); editor = p_editor; undo_redo = editor->get_undo_redo(); + selected_tile = -1; snap_step = Vector2(10, 10); snap_separation = Vector2(0, 0); + snap_mode = SNAP_NONE; edited_margin = -1; drag_index = -1; drag = false; @@ -775,12 +805,10 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { snap_mode_button->set_text(TTR("<None>")); PopupMenu *p = snap_mode_button->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->add_item(TTR("<None>"), 0); - p->add_item(TTR("Pixel Snap"), 1); - p->add_item(TTR("Grid Snap"), 2); - p->add_item(TTR("Auto Slice"), 3); - for (int i = 0; i < 4; i++) - p->set_item_as_checkable(i, true); + p->add_radio_check_item(TTR("<None>"), 0); + p->add_radio_check_item(TTR("Pixel Snap"), 1); + p->add_radio_check_item(TTR("Grid Snap"), 2); + p->add_radio_check_item(TTR("Auto Slice"), 3); p->set_item_checked(0, true); p->connect("id_pressed", this, "_set_snap_mode"); hb_grid = memnew(HBoxContainer); @@ -903,11 +931,11 @@ bool TextureRegionEditorPlugin::handles(Object *p_object) const { void TextureRegionEditorPlugin::make_visible(bool p_visible) { if (p_visible) { - region_button->show(); - if (region_button->is_pressed()) + texture_region_button->show(); + if (texture_region_button->is_pressed()) region_editor->show(); } else { - region_button->hide(); + texture_region_button->hide(); region_editor->edit(NULL); region_editor->hide(); } @@ -961,10 +989,10 @@ TextureRegionEditorPlugin::TextureRegionEditorPlugin(EditorNode *p_node) { editor = p_node; region_editor = memnew(TextureRegionEditor(p_node)); - region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor); - region_button->set_tooltip(TTR("Texture Region Editor")); + texture_region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor); + texture_region_button->set_tooltip(TTR("Texture Region Editor")); region_editor->set_custom_minimum_size(Size2(0, 200)); region_editor->hide(); - region_button->hide(); + texture_region_button->hide(); } diff --git a/editor/plugins/texture_region_editor_plugin.h b/editor/plugins/texture_region_editor_plugin.h index cf9396bd5b..1244953a3f 100644 --- a/editor/plugins/texture_region_editor_plugin.h +++ b/editor/plugins/texture_region_editor_plugin.h @@ -38,6 +38,7 @@ #include "scene/gui/nine_patch_rect.h" #include "scene/resources/style_box.h" #include "scene/resources/texture.h" +#include "scene/resources/tile_set.h" /** @author Mariano Suligoy @@ -55,6 +56,8 @@ class TextureRegionEditor : public Control { }; friend class TextureRegionEditorPlugin; + friend class TileSetEditor; + friend class TileSetEditorPlugin; MenuButton *snap_mode_button; TextureRect *icon_zoom; ToolButton *zoom_in; @@ -88,12 +91,14 @@ class TextureRegionEditor : public Control { Sprite *node_sprite; Ref<StyleBoxTexture> obj_styleBox; Ref<AtlasTexture> atlas_tex; + Ref<TileSet> tile_set; Rect2 rect; Rect2 rect_prev; float prev_margin; int edited_margin; List<Rect2> autoslice_cache; + int selected_tile; bool drag; bool creating; @@ -134,7 +139,7 @@ public: class TextureRegionEditorPlugin : public EditorPlugin { GDCLASS(TextureRegionEditorPlugin, EditorPlugin); - Button *region_button; + Button *texture_region_button; TextureRegionEditor *region_editor; EditorNode *editor; diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index f51e691be3..92b95963f9 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -244,7 +244,7 @@ void ThemeEditor::_save_template_cbk(String fname) { file->store_line("; "); file->store_line("; ******************* "); file->store_line("; "); - file->store_line("; Template Generated Using: " + String(VERSION_MKSTRING)); + file->store_line("; Template Generated Using: " + String(VERSION_FULL_BUILD)); file->store_line("; "); file->store_line("; "); file->store_line(""); @@ -632,7 +632,7 @@ ThemeEditor::ThemeEditor() { main_vb->add_child(hb_menu); theme_menu = memnew(MenuButton); - theme_menu->set_text(TTR("Edit theme..")); + theme_menu->set_text(TTR("Edit theme...")); theme_menu->set_flat(false); theme_menu->set_tooltip(TTR("Theme editing menu.")); theme_menu->get_popup()->add_item(TTR("Add Item"), POPUP_ADD); @@ -691,7 +691,11 @@ ThemeEditor::ThemeEditor() { test_menu_button->get_popup()->add_separator(); test_menu_button->get_popup()->add_check_item(TTR("Check Item")); test_menu_button->get_popup()->add_check_item(TTR("Checked Item")); - test_menu_button->get_popup()->set_item_checked(2, true); + test_menu_button->get_popup()->set_item_checked(3, true); + test_menu_button->get_popup()->add_separator(); + test_menu_button->get_popup()->add_radio_check_item(TTR("Radio Item")); + test_menu_button->get_popup()->add_radio_check_item(TTR("Checked Radio Item")); + test_menu_button->get_popup()->set_item_checked(6, true); first_vb->add_child(test_menu_button); OptionButton *test_option_button = memnew(OptionButton); @@ -740,7 +744,7 @@ ThemeEditor::ThemeEditor() { item = test_tree->create_item(test_tree->get_root()); item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); item->set_editable(0, true); - item->set_text(0, "check"); + item->set_text(0, "Check"); item = test_tree->create_item(test_tree->get_root()); item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); item->set_editable(0, true); @@ -749,7 +753,7 @@ ThemeEditor::ThemeEditor() { item = test_tree->create_item(test_tree->get_root()); item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); item->set_editable(0, true); - item->set_text(0, TTR("Have,Many,Several,Options!")); + item->set_text(0, TTR("Has,Many,Options")); item->set_range(0, 2); VBoxContainer *third_vb = memnew(VBoxContainer); @@ -780,58 +784,6 @@ ThemeEditor::ThemeEditor() { main_hb->add_constant_override("separation", 20 * EDSCALE); - /* - test_h_scroll = memnew( HScrollBar ); - test_h_scroll->set_position( Point2( 25, 225 ) ); - test_h_scroll->set_size( Point2( 150, 5 ) ); - panel->add_child(test_h_scroll); - - line_edit = memnew( LineEdit ); - line_edit->set_position( Point2( 25, 275 ) ); - line_edit->set_size( Point2( 150, 5 ) ); - line_edit->set_text("Line Edit"); - panel->add_child(line_edit); - - test_v_scroll = memnew( VScrollBar ); - test_v_scroll->set_position( Point2( 200, 25 ) ); - test_v_scroll->set_size( Point2( 5, 150 ) ); - panel->add_child(test_v_scroll); - - test_tree = memnew(Tree); - test_tree->set_position( Point2( 300, 25 ) ); - test_tree->set_size( Point2( 200, 200 ) ); - panel->add_child(test_tree); - - - TreeItem *item = test_tree->create_item(); - item->set_editable(0,true); - item->set_text(0,"root"); - item = test_tree->create_item( test_tree->get_root() ); - item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); - item->set_editable(0,true); - item->set_text(0,"check"); - item = test_tree->create_item( test_tree->get_root() ); - item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); - item->set_editable(0,true); - item->set_range_config(0,0,20,0.1); - item->set_range(0,2); - item = test_tree->create_item( test_tree->get_root() ); - item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); - item->set_editable(0,true); - item->set_text(0,"Have,Many,Several,Options!")); - item->set_range(0,2); - - Button *fd_button= memnew( Button ); - fd_button->set_position(Point2(300,275)); - fd_button->set_text("Open File Dialog"); - panel->add_child(fd_button); - - test_file_dialog = memnew( EditorFileDialog ); - panel->add_child(test_file_dialog); - - fd_button->connect("pressed", this,"_open_file_dialog"); -*/ - add_del_dialog = memnew(ConfirmationDialog); add_del_dialog->hide(); add_child(add_del_dialog); diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index a102d99d1c..72b3af5a09 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -48,6 +48,20 @@ void TileMapEditor::_notification(int p_what) { } break; + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + + bool new_show_tile_info = EditorSettings::get_singleton()->get("editors/tile_map/show_tile_info_on_hover"); + if (new_show_tile_info != show_tile_info) { + show_tile_info = new_show_tile_info; + tile_info->set_visible(show_tile_info); + } + + if (is_visible_in_tree()) { + _update_palette(); + } + + } // fallthrough + case NOTIFICATION_ENTER_TREE: { transp->set_icon(get_icon("Transpose", "EditorIcons")); @@ -60,19 +74,14 @@ void TileMapEditor::_notification(int p_what) { search_box->add_icon_override("right_icon", get_icon("Search", "EditorIcons")); - } break; - - case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - - bool new_show_tile_info = EditorSettings::get_singleton()->get("editors/tile_map/show_tile_info_on_hover"); - if (new_show_tile_info != show_tile_info) { - show_tile_info = new_show_tile_info; - tile_info->set_visible(show_tile_info); - } + PopupMenu *p = options->get_popup(); + p->set_item_icon(p->get_item_index(OPTION_PAINTING), get_icon("Edit", "EditorIcons")); + p->set_item_icon(p->get_item_index(OPTION_PICK_TILE), get_icon("ColorPick", "EditorIcons")); + p->set_item_icon(p->get_item_index(OPTION_SELECT), get_icon("ToolSelect", "EditorIcons")); + p->set_item_icon(p->get_item_index(OPTION_MOVE), get_icon("ToolMove", "EditorIcons")); + p->set_item_icon(p->get_item_index(OPTION_DUPLICATE), get_icon("Duplicate", "EditorIcons")); + p->set_item_icon(p->get_item_index(OPTION_ERASE_SELECTION), get_icon("Remove", "EditorIcons")); - if (is_visible_in_tree()) { - _update_palette(); - } } break; } } @@ -139,6 +148,23 @@ void TileMapEditor::_menu_option(int p_option) { canvas_item_editor->update(); } break; + case OPTION_FIX_INVALID: { + + undo_redo->create_action(TTR("Fix Invalid Tiles")); + undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + node->fix_invalid_tiles(); + undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); + undo_redo->commit_action(); + + } break; + case OPTION_MOVE: { + + if (selection_active) { + _update_copydata(); + tool = TOOL_MOVING; + canvas_item_editor->update(); + } + } break; } } @@ -303,7 +329,7 @@ void TileMapEditor::_update_palette() { if (tex.is_valid()) { Rect2 region = tileset->tile_get_region(entries[i].id); - if (tileset->tile_get_is_autotile(entries[i].id)) { + if (tileset->tile_get_tile_mode(entries[i].id) == TileSet::AUTO_TILE) { int spacing = tileset->autotile_get_spacing(entries[i].id); region.size = tileset->autotile_get_size(entries[i].id); region.position += (region.size + Vector2(spacing, spacing)) * tileset->autotile_get_icon_coordinate(entries[i].id); @@ -506,7 +532,7 @@ void TileMapEditor::_draw_cell(int p_cell, const Point2i &p_point, bool p_flip_h Vector2 tile_ofs = node->get_tileset()->tile_get_texture_offset(p_cell); Rect2 r = node->get_tileset()->tile_get_region(p_cell); - if (node->get_tileset()->tile_get_is_autotile(p_cell)) { + if (node->get_tileset()->tile_get_tile_mode(p_cell) == TileSet::AUTO_TILE) { int spacing = node->get_tileset()->autotile_get_spacing(p_cell); r.size = node->get_tileset()->autotile_get_size(p_cell); r.position += (r.size + Vector2(spacing, spacing)) * node->get_tileset()->autotile_get_icon_coordinate(p_cell); @@ -698,7 +724,11 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (mb->get_shift()) { +#ifdef APPLE_STYLE_KEYS + if (mb->get_command()) +#else if (mb->get_control()) +#endif tool = TOOL_RECTANGLE_PAINT; else tool = TOOL_LINE_PAINT; @@ -708,9 +738,11 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return true; } - +#ifdef APPLE_STYLE_KEYS + if (mb->get_command()) { +#else if (mb->get_control()) { - +#endif tool = TOOL_PICKING; _pick_tile(over_tile); @@ -812,6 +844,29 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { copydata.clear(); canvas_item_editor->update(); + } else if (tool == TOOL_MOVING) { + + Point2 ofs = over_tile - rectangle.position; + + undo_redo->create_action(TTR("Move")); + undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + for (int i = rectangle.position.y; i <= rectangle.position.y + rectangle.size.y; i++) { + for (int j = rectangle.position.x; j <= rectangle.position.x + rectangle.size.x; j++) { + + _set_cell(Point2i(j, i), TileMap::INVALID_CELL, false, false, false); + } + } + for (List<TileData>::Element *E = copydata.front(); E; E = E->next()) { + + _set_cell(E->get().pos + ofs, E->get().cell, E->get().flip_h, E->get().flip_v, E->get().transpose); + } + undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); + undo_redo->commit_action(); + + copydata.clear(); + selection_active = false; + + canvas_item_editor->update(); } else if (tool == TOOL_SELECTING) { @@ -871,6 +926,16 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return true; } + if (tool == TOOL_MOVING) { + + tool = TOOL_NONE; + copydata.clear(); + + canvas_item_editor->update(); + + return true; + } + if (tool == TOOL_NONE) { paint_undo.clear(); @@ -881,8 +946,11 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); if (mb->get_shift()) { - +#ifdef APPLE_STYLE_KEYS + if (mb->get_command()) +#else if (mb->get_control()) +#endif tool = TOOL_RECTANGLE_ERASE; else tool = TOOL_LINE_ERASE; @@ -1078,7 +1146,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (k->get_scancode() == KEY_ESCAPE) { - if (tool == TOOL_DUPLICATING) + if (tool == TOOL_DUPLICATING || tool == TOOL_MOVING) copydata.clear(); else if (tool == TOOL_SELECTING || selection_active) selection_active = false; @@ -1133,6 +1201,14 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return true; } } + if (ED_IS_SHORTCUT("tile_map_editor/move_selection", p_event)) { + if (selection_active) { + _update_copydata(); + tool = TOOL_MOVING; + canvas_item_editor->update(); + return true; + } + } if (ED_IS_SHORTCUT("tile_map_editor/find_tile", p_event)) { search_box->select_all(); search_box->grab_focus(); @@ -1142,18 +1218,21 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (ED_IS_SHORTCUT("tile_map_editor/mirror_x", p_event)) { flip_h = !flip_h; mirror_x->set_pressed(flip_h); + _update_transform_buttons(); canvas_item_editor->update(); return true; } if (ED_IS_SHORTCUT("tile_map_editor/mirror_y", p_event)) { flip_v = !flip_v; mirror_y->set_pressed(flip_v); + _update_transform_buttons(); canvas_item_editor->update(); return true; } if (ED_IS_SHORTCUT("tile_map_editor/transpose", p_event)) { transpose = !transpose; transp->set_pressed(transpose); + _update_transform_buttons(); canvas_item_editor->update(); return true; } @@ -1326,7 +1405,7 @@ void TileMapEditor::forward_draw_over_viewport(Control *p_overlay) { _draw_cell(id, Point2i(j, i), flip_h, flip_v, transpose, xform); } } - } else if (tool == TOOL_DUPLICATING) { + } else if (tool == TOOL_DUPLICATING || tool == TOOL_MOVING) { if (copydata.empty()) return; @@ -1511,8 +1590,8 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { bucket_cache_tile = -1; bucket_cache_visited = 0; - ED_SHORTCUT("tile_map_editor/erase_selection", TTR("Erase selection"), KEY_DELETE); - ED_SHORTCUT("tile_map_editor/find_tile", TTR("Find tile"), KEY_MASK_CMD + KEY_F); + ED_SHORTCUT("tile_map_editor/erase_selection", TTR("Erase Selection"), KEY_DELETE); + ED_SHORTCUT("tile_map_editor/find_tile", TTR("Find Tile"), KEY_MASK_CMD + KEY_F); ED_SHORTCUT("tile_map_editor/transpose", TTR("Transpose"), KEY_T); ED_SHORTCUT("tile_map_editor/mirror_x", TTR("Mirror X"), KEY_A); ED_SHORTCUT("tile_map_editor/mirror_y", TTR("Mirror Y"), KEY_S); @@ -1573,8 +1652,11 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { p->add_item(TTR("Pick Tile"), OPTION_PICK_TILE, KEY_CONTROL); p->add_separator(); p->add_shortcut(ED_SHORTCUT("tile_map_editor/select", TTR("Select"), KEY_MASK_CMD + KEY_B), OPTION_SELECT); + p->add_shortcut(ED_SHORTCUT("tile_map_editor/move_selection", TTR("Move Selection"), KEY_MASK_CMD + KEY_M), OPTION_MOVE); p->add_shortcut(ED_SHORTCUT("tile_map_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_CMD + KEY_D), OPTION_DUPLICATE); p->add_shortcut(ED_GET_SHORTCUT("tile_map_editor/erase_selection"), OPTION_ERASE_SELECTION); + p->add_separator(); + p->add_item(TTR("Fix Invalid Tiles"), OPTION_FIX_INVALID); p->connect("id_pressed", this, "_menu_option"); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index 0a937e200e..642870aec0 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -61,6 +61,7 @@ class TileMapEditor : public VBoxContainer { TOOL_BUCKET, TOOL_PICKING, TOOL_DUPLICATING, + TOOL_MOVING }; enum Options { @@ -71,6 +72,8 @@ class TileMapEditor : public VBoxContainer { OPTION_DUPLICATE, OPTION_ERASE_SELECTION, OPTION_PAINTING, + OPTION_FIX_INVALID, + OPTION_MOVE }; TileMap *node; @@ -122,12 +125,11 @@ class TileMapEditor : public VBoxContainer { bool yf; bool tr; - CellOp() { - idx = -1; - xf = false; - yf = false; - tr = false; - } + CellOp() : + idx(TileMap::INVALID_CELL), + xf(false), + yf(false), + tr(false) {} }; Map<Point2i, CellOp> paint_undo; @@ -138,8 +140,12 @@ class TileMapEditor : public VBoxContainer { bool flip_h; bool flip_v; bool transpose; - int auto_x; - int auto_y; + + TileData() : + cell(TileMap::INVALID_CELL), + flip_h(false), + flip_v(false), + transpose(false) {} }; List<TileData> copydata; diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index dd5127181d..385fa24ad8 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -37,6 +37,9 @@ void TileSetEditor::edit(const Ref<TileSet> &p_tileset) { tileset = p_tileset; + tileset->add_change_receptor(this); + + update_tile_list(); } void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) { @@ -146,6 +149,7 @@ void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) { p_library->tile_set_light_occluder(id, occluder); p_library->tile_set_occluder_offset(id, -phys_offset); p_library->tile_set_navigation_polygon_offset(id, -phys_offset); + p_library->tile_set_z_index(id, mi->get_z_index()); } } @@ -188,6 +192,7 @@ void TileSetEditor::_name_dialog_confirm(const String &name) { if (tileset->has_tile(id)) { tileset->remove_tile(id); + update_tile_list(); } else { err_dialog->set_text(TTR("Could not find tile:") + " " + name); err_dialog->popup_centered(Size2(300, 60)); @@ -202,8 +207,9 @@ void TileSetEditor::_menu_cbk(int p_option) { switch (p_option) { case MENU_OPTION_ADD_ITEM: { - tileset->create_tile(tileset->get_last_unused_tile_id()); + tileset->tile_set_name(tileset->get_last_unused_tile_id() - 1, itos(tileset->get_last_unused_tile_id() - 1)); + update_tile_list(); } break; case MENU_OPTION_REMOVE_ITEM: { @@ -235,106 +241,77 @@ void TileSetEditor::_bind_methods() { ClassDB::bind_method("_menu_cbk", &TileSetEditor::_menu_cbk); ClassDB::bind_method("_menu_confirm", &TileSetEditor::_menu_confirm); ClassDB::bind_method("_name_dialog_confirm", &TileSetEditor::_name_dialog_confirm); + ClassDB::bind_method("_on_tile_list_selected", &TileSetEditor::_on_tile_list_selected); + ClassDB::bind_method("_on_edit_mode_changed", &TileSetEditor::_on_edit_mode_changed); + ClassDB::bind_method("_on_workspace_overlay_draw", &TileSetEditor::_on_workspace_overlay_draw); + ClassDB::bind_method("_on_workspace_draw", &TileSetEditor::_on_workspace_draw); + ClassDB::bind_method("_on_workspace_input", &TileSetEditor::_on_workspace_input); + ClassDB::bind_method("_on_tool_clicked", &TileSetEditor::_on_tool_clicked); + ClassDB::bind_method("_on_priority_changed", &TileSetEditor::_on_priority_changed); + ClassDB::bind_method("_on_grid_snap_toggled", &TileSetEditor::_on_grid_snap_toggled); + ClassDB::bind_method("_set_snap_step_x", &TileSetEditor::_set_snap_step_x); + ClassDB::bind_method("_set_snap_step_y", &TileSetEditor::_set_snap_step_y); + ClassDB::bind_method("_set_snap_off_x", &TileSetEditor::_set_snap_off_x); + ClassDB::bind_method("_set_snap_off_y", &TileSetEditor::_set_snap_off_y); + ClassDB::bind_method("_set_snap_sep_x", &TileSetEditor::_set_snap_sep_x); + ClassDB::bind_method("_set_snap_sep_y", &TileSetEditor::_set_snap_sep_y); } -TileSetEditor::TileSetEditor(EditorNode *p_editor) { - - menu = memnew(MenuButton); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(menu); - menu->hide(); - menu->set_text(TTR("Tile Set")); - menu->get_popup()->add_item(TTR("Add Item"), MENU_OPTION_ADD_ITEM); - menu->get_popup()->add_item(TTR("Remove Item"), MENU_OPTION_REMOVE_ITEM); - menu->get_popup()->add_separator(); - menu->get_popup()->add_item(TTR("Create from Scene"), MENU_OPTION_CREATE_FROM_SCENE); - menu->get_popup()->add_item(TTR("Merge from Scene"), MENU_OPTION_MERGE_FROM_SCENE); - menu->get_popup()->connect("id_pressed", this, "_menu_cbk"); - editor = p_editor; - cd = memnew(ConfirmationDialog); - add_child(cd); - cd->get_ok()->connect("pressed", this, "_menu_confirm"); - - nd = memnew(EditorNameDialog); - add_child(nd); - nd->set_hide_on_ok(true); - nd->get_line_edit()->set_margin(MARGIN_TOP, 28); - nd->connect("name_confirmed", this, "_name_dialog_confirm"); - - err_dialog = memnew(AcceptDialog); - add_child(err_dialog); - err_dialog->set_title(TTR("Error")); -} - -void TileSetEditorPlugin::edit(Object *p_node) { - - if (Object::cast_to<TileSet>(p_node)) { - tileset_editor->edit(Object::cast_to<TileSet>(p_node)); - tileset_editor->show(); - autotile_editor->edit(p_node); - } else - tileset_editor->hide(); -} - -bool TileSetEditorPlugin::handles(Object *p_node) const { - - return p_node->is_class("TileSet"); -} - -void TileSetEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - tileset_editor->show(); - tileset_editor->menu->show(); - autotile_button->show(); - autotile_editor->side_panel->show(); - if (autotile_button->is_pressed()) { - autotile_editor->show(); - } - } else { - tileset_editor->hide(); - tileset_editor->menu->hide(); - autotile_editor->side_panel->hide(); - autotile_editor->hide(); - autotile_button->hide(); +void TileSetEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); + tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); + tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); + tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); + tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); + tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); + tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); + tools[SHAPE_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); + tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); + tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); + tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); } } -TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { - - tileset_editor = memnew(TileSetEditor(p_node)); - - add_control_to_container(CONTAINER_CANVAS_EDITOR_MENU, tileset_editor); - tileset_editor->set_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); - tileset_editor->set_end(Point2(0, 22)); - tileset_editor->hide(); - - autotile_editor = memnew(AutotileEditor(p_node)); - add_control_to_container(CONTAINER_CANVAS_EDITOR_SIDE, autotile_editor->side_panel); - autotile_editor->side_panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); - autotile_editor->side_panel->set_custom_minimum_size(Size2(200, 0)); - autotile_editor->side_panel->hide(); - autotile_button = p_node->add_bottom_panel_item(TTR("Autotiles"), autotile_editor); - autotile_button->hide(); +void TileSetEditor::_changed_callback(Object *p_changed, const char *p_prop) { + if (p_prop == StringName("region")) { + update_tile_list_icon(); + preview->set_region_rect(tileset->tile_get_region(get_current_tile())); + } else if (p_prop == StringName("name")) { + update_tile_list_icon(); + } else if (p_prop == StringName("texture") || p_prop == StringName("modulate") || p_prop == StringName("tile_mode")) { + _on_tile_list_selected(get_current_tile()); + workspace->update(); + preview->set_texture(tileset->tile_get_texture(get_current_tile())); + preview->set_modulate(tileset->tile_get_modulate(get_current_tile())); + preview->set_region_rect(tileset->tile_get_region(get_current_tile())); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) + property_editor->show(); + else + property_editor->hide(); + texture_region_editor->_edit_region(); + update_tile_list_icon(); + } else if (p_prop == StringName("autotile")) { + workspace->update(); + } } -AutotileEditor::AutotileEditor(EditorNode *p_editor) { - - editor = p_editor; +void TileSetEditor::initialize_bottom_editor() { //Side Panel side_panel = memnew(Control); - side_panel->set_name("Autotiles"); + side_panel->set_name("Tile Set"); VSplitContainer *split = memnew(VSplitContainer); side_panel->add_child(split); split->set_anchors_and_margins_preset(Control::PRESET_WIDE); - autotile_list = memnew(ItemList); - autotile_list->set_v_size_flags(SIZE_EXPAND_FILL); - autotile_list->set_h_size_flags(SIZE_EXPAND_FILL); - autotile_list->set_custom_minimum_size(Size2(10, 200)); - autotile_list->connect("item_selected", this, "_on_autotile_selected"); - split->add_child(autotile_list); + tile_list = memnew(ItemList); + tile_list->set_v_size_flags(SIZE_EXPAND_FILL); + tile_list->set_h_size_flags(SIZE_EXPAND_FILL); + tile_list->set_custom_minimum_size(Size2(10, 200)); + tile_list->connect("item_selected", this, "_on_tile_list_selected"); + split->add_child(tile_list); property_editor = memnew(PropertyEditor); property_editor->set_v_size_flags(SIZE_EXPAND_FILL); @@ -342,25 +319,29 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { property_editor->set_custom_minimum_size(Size2(10, 70)); split->add_child(property_editor); - helper = memnew(AutotileEditorHelper(this)); + helper = memnew(TileSetEditorHelper(this)); property_editor->call_deferred("edit", helper); + helper->add_change_receptor(this); //Editor + //Bottom Panel + bottom_panel = memnew(Control); + bottom_panel->set_name("Tile Set Bottom Editor"); dragging_point = -1; creating_shape = false; snap_step = Vector2(32, 32); - set_custom_minimum_size(Size2(0, 150)); + bottom_panel->set_custom_minimum_size(Size2(0, 150)); VBoxContainer *main_vb = memnew(VBoxContainer); - add_child(main_vb); + bottom_panel->add_child(main_vb); main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE); HBoxContainer *tool_hb = memnew(HBoxContainer); Ref<ButtonGroup> g(memnew(ButtonGroup)); - String label[EDITMODE_MAX] = { "Icon", "Bitmask", "Collision", "Occlusion", "Navigation", "Priority" }; + String label[EDITMODE_MAX] = { "Collision", "Occlusion", "Navigation", "Bitmask", "Priority", "Icon" }; for (int i = 0; i < (int)EDITMODE_MAX; i++) { tool_editmode[i] = memnew(Button); @@ -372,7 +353,8 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", args); tool_hb->add_child(tool_editmode[i]); } - tool_editmode[EDITMODE_ICON]->set_pressed(true); + tool_editmode[EDITMODE_COLLISION]->set_pressed(true); + edit_mode = EDITMODE_COLLISION; main_vb->add_child(tool_hb); main_vb->add_child(memnew(HSeparator)); @@ -386,15 +368,17 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { Ref<ButtonGroup> tg(memnew(ButtonGroup)); + Vector<Variant> p; tools[TOOL_SELECT] = memnew(ToolButton); tool_containers[TOOLBAR_DUMMY]->add_child(tools[TOOL_SELECT]); tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.")); tools[TOOL_SELECT]->set_toggle_mode(true); tools[TOOL_SELECT]->set_button_group(tg); tools[TOOL_SELECT]->set_pressed(true); + p.push_back((int)TOOL_SELECT); + tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", p); tool_containers[TOOLBAR_DUMMY]->show(); - Vector<Variant> p; tools[BITMASK_COPY] = memnew(ToolButton); p.push_back((int)BITMASK_COPY); tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", p); @@ -507,6 +491,8 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { spin_priority->hide(); toolbar->add_child(spin_priority); + tool_containers[TOOLBAR_SHAPE]->show(); + Control *separator = memnew(Control); separator->set_h_size_flags(SIZE_EXPAND_FILL); toolbar->add_child(separator); @@ -536,10 +522,15 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { workspace_container = memnew(Control); scroll->add_child(workspace_container); + workspace_overlay = memnew(Control); + workspace_overlay->connect("draw", this, "_on_workspace_overlay_draw"); + workspace_container->add_child(workspace_overlay); + workspace = memnew(Control); workspace->connect("draw", this, "_on_workspace_draw"); workspace->connect("gui_input", this, "_on_workspace_input"); - workspace_container->add_child(workspace); + workspace->set_draw_behind_parent(true); + workspace_overlay->add_child(workspace); preview = memnew(Sprite); workspace->add_child(preview); @@ -548,70 +539,64 @@ AutotileEditor::AutotileEditor(EditorNode *p_editor) { preview->set_region(true); } -AutotileEditor::~AutotileEditor() { - memdelete(helper); -} +TileSetEditor::TileSetEditor(EditorNode *p_editor) { -void AutotileEditor::_bind_methods() { - - ClassDB::bind_method("_on_autotile_selected", &AutotileEditor::_on_autotile_selected); - ClassDB::bind_method("_on_edit_mode_changed", &AutotileEditor::_on_edit_mode_changed); - ClassDB::bind_method("_on_workspace_draw", &AutotileEditor::_on_workspace_draw); - ClassDB::bind_method("_on_workspace_input", &AutotileEditor::_on_workspace_input); - ClassDB::bind_method("_on_tool_clicked", &AutotileEditor::_on_tool_clicked); - ClassDB::bind_method("_on_priority_changed", &AutotileEditor::_on_priority_changed); - ClassDB::bind_method("_on_grid_snap_toggled", &AutotileEditor::_on_grid_snap_toggled); - ClassDB::bind_method("_set_snap_step_x", &AutotileEditor::_set_snap_step_x); - ClassDB::bind_method("_set_snap_step_y", &AutotileEditor::_set_snap_step_y); - ClassDB::bind_method("_set_snap_off_x", &AutotileEditor::_set_snap_off_x); - ClassDB::bind_method("_set_snap_off_y", &AutotileEditor::_set_snap_off_y); - ClassDB::bind_method("_set_snap_sep_x", &AutotileEditor::_set_snap_sep_x); - ClassDB::bind_method("_set_snap_sep_y", &AutotileEditor::_set_snap_sep_y); -} + menu = memnew(MenuButton); + CanvasItemEditor::get_singleton()->add_control_to_menu_panel(menu); + menu->hide(); + menu->set_text(TTR("Tile Set")); + menu->get_popup()->add_item(TTR("Add Item"), MENU_OPTION_ADD_ITEM); + menu->get_popup()->add_item(TTR("Remove Item"), MENU_OPTION_REMOVE_ITEM); + menu->get_popup()->add_separator(); + menu->get_popup()->add_item(TTR("Create from Scene"), MENU_OPTION_CREATE_FROM_SCENE); + menu->get_popup()->add_item(TTR("Merge from Scene"), MENU_OPTION_MERGE_FROM_SCENE); + menu->get_popup()->connect("id_pressed", this, "_menu_cbk"); + editor = p_editor; + cd = memnew(ConfirmationDialog); + add_child(cd); + cd->get_ok()->connect("pressed", this, "_menu_confirm"); -void AutotileEditor::_notification(int p_what) { + nd = memnew(EditorNameDialog); + add_child(nd); + nd->set_hide_on_ok(true); + nd->get_line_edit()->set_margin(MARGIN_TOP, 28); + nd->connect("name_confirmed", this, "_name_dialog_confirm"); - if (p_what == NOTIFICATION_ENTER_TREE) { - tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); - tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); - tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); - tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); - tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); - tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); - tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); - tools[SHAPE_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); - tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); - tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); - tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); - } -} + err_dialog = memnew(AcceptDialog); + add_child(err_dialog); + err_dialog->set_title(TTR("Error")); -void AutotileEditor::_changed_callback(Object *p_changed, const char *p_prop) { - if (p_prop == StringName("texture") || p_prop == StringName("is_autotile")) { - edit(tile_set.ptr()); - autotile_list->update(); - workspace->update(); - } + draw_handles = false; + + initialize_bottom_editor(); } -void AutotileEditor::_on_autotile_selected(int p_index) { +TileSetEditor::~TileSetEditor() { + if (helper) + memdelete(helper); +} +void TileSetEditor::_on_tile_list_selected(int p_index) { if (get_current_tile() >= 0) { current_item_index = p_index; - preview->set_texture(tile_set->tile_get_texture(get_current_tile())); - preview->set_region_rect(tile_set->tile_get_region(get_current_tile())); - workspace->set_custom_minimum_size(tile_set->tile_get_region(get_current_tile()).size); + preview->set_texture(tileset->tile_get_texture(get_current_tile())); + preview->set_modulate(tileset->tile_get_modulate(get_current_tile())); + preview->set_region_rect(tileset->tile_get_region(get_current_tile())); + workspace->set_custom_minimum_size(tileset->tile_get_region(get_current_tile()).size); + update_workspace_tile_mode(); } else { current_item_index = -1; preview->set_texture(NULL); workspace->set_custom_minimum_size(Size2i()); } + texture_region_editor->selected_tile = get_current_tile(); + texture_region_editor->_edit_region(); + helper->selected_tile = get_current_tile(); helper->_change_notify(""); workspace->update(); } -void AutotileEditor::_on_edit_mode_changed(int p_edit_mode) { - +void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { edit_mode = (EditMode)p_edit_mode; switch (edit_mode) { case EDITMODE_BITMASK: { @@ -631,7 +616,6 @@ void AutotileEditor::_on_edit_mode_changed(int p_edit_mode) { tools[TOOL_SELECT]->set_tooltip(TTR("Select current edited sub-tile.")); spin_priority->hide(); - current_shape = PoolVector2Array(); select_coord(edited_shape_coord); } break; default: { @@ -650,17 +634,17 @@ void AutotileEditor::_on_edit_mode_changed(int p_edit_mode) { workspace->update(); } -void AutotileEditor::_on_workspace_draw() { +void TileSetEditor::_on_workspace_draw() { - if (get_current_tile() >= 0 && !tile_set.is_null()) { - int spacing = tile_set->autotile_get_spacing(get_current_tile()); - Vector2 size = tile_set->autotile_get_size(get_current_tile()); - Rect2i region = tile_set->tile_get_region(get_current_tile()); + if (get_current_tile() >= 0 && !tileset.is_null()) { + int spacing = tileset->autotile_get_spacing(get_current_tile()); + Vector2 size = tileset->autotile_get_size(get_current_tile()); + Rect2i region = tileset->tile_get_region(get_current_tile()); Color c(0.347214, 0.722656, 0.617063); switch (edit_mode) { case EDITMODE_ICON: { - Vector2 coord = tile_set->autotile_get_icon_coordinate(get_current_tile()); + Vector2 coord = tileset->autotile_get_icon_coordinate(get_current_tile()); draw_highlight_tile(coord); } break; case EDITMODE_BITMASK: { @@ -669,8 +653,8 @@ void AutotileEditor::_on_workspace_draw() { for (float y = 0; y < region.size.y / (spacing + size.y); y++) { Vector2 coord(x, y); Point2 anchor(coord.x * (spacing + size.x), coord.y * (spacing + size.y)); - uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord); - if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { + uint16_t mask = tileset->autotile_get_bitmask(get_current_tile(), coord); + if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { if (mask & TileSet::BIND_TOPLEFT) { workspace->draw_rect(Rect2(anchor, size / 2), c); } @@ -683,7 +667,7 @@ void AutotileEditor::_on_workspace_draw() { if (mask & TileSet::BIND_BOTTOMRIGHT) { workspace->draw_rect(Rect2(anchor + size / 2, size / 2), c); } - } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { + } else if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { if (mask & TileSet::BIND_TOPLEFT) { workspace->draw_rect(Rect2(anchor, size / 3), c); } @@ -718,19 +702,21 @@ void AutotileEditor::_on_workspace_draw() { case EDITMODE_COLLISION: case EDITMODE_OCCLUSION: case EDITMODE_NAVIGATION: { - Vector2 coord = edited_shape_coord; - draw_highlight_tile(coord); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + Vector2 coord = edited_shape_coord; + draw_highlight_tile(coord); + } draw_polygon_shapes(); draw_grid_snap(); } break; case EDITMODE_PRIORITY: { - spin_priority->set_value(tile_set->autotile_get_subtile_priority(get_current_tile(), edited_shape_coord)); - uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), edited_shape_coord); + spin_priority->set_value(tileset->autotile_get_subtile_priority(get_current_tile(), edited_shape_coord)); + uint16_t mask = tileset->autotile_get_bitmask(get_current_tile(), edited_shape_coord); Vector<Vector2> queue_others; int total = 0; - for (Map<Vector2, uint16_t>::Element *E = tile_set->autotile_get_bitmask_map(get_current_tile()).front(); E; E = E->next()) { + for (Map<Vector2, uint16_t>::Element *E = tileset->autotile_get_bitmask_map(get_current_tile()).front(); E; E = E->next()) { if (E->value() == mask) { - total += tile_set->autotile_get_subtile_priority(get_current_tile(), E->key()); + total += tileset->autotile_get_subtile_priority(get_current_tile(), E->key()); if (E->key() != edited_shape_coord) { queue_others.push_back(E->key()); } @@ -741,53 +727,69 @@ void AutotileEditor::_on_workspace_draw() { } break; } - float j = -size.x; //make sure to draw at 0 - while (j < region.size.x) { - j += size.x; - if (spacing <= 0) { - workspace->draw_line(Point2(j, 0), Point2(j, region.size.y), c); - } else { - workspace->draw_rect(Rect2(Point2(j, 0), Size2(spacing, region.size.y)), c); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + float j = -size.x; //make sure to draw at 0 + while (j < region.size.x) { + j += size.x; + if (spacing <= 0) { + workspace->draw_line(Point2(j, 0), Point2(j, region.size.y), c); + } else { + workspace->draw_rect(Rect2(Point2(j, 0), Size2(spacing, region.size.y)), c); + } + j += spacing; } - j += spacing; - } - j = -size.y; //make sure to draw at 0 - while (j < region.size.y) { - j += size.y; - if (spacing <= 0) { - workspace->draw_line(Point2(0, j), Point2(region.size.x, j), c); - } else { - workspace->draw_rect(Rect2(Point2(0, j), Size2(region.size.x, spacing)), c); + j = -size.y; //make sure to draw at 0 + while (j < region.size.y) { + j += size.y; + if (spacing <= 0) { + workspace->draw_line(Point2(0, j), Point2(region.size.x, j), c); + } else { + workspace->draw_rect(Rect2(Point2(0, j), Size2(region.size.x, spacing)), c); + } + j += spacing; } - j += spacing; } } + workspace_overlay->update(); } -#define MIN_DISTANCE_SQUARED 10 -void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { +void TileSetEditor::_on_workspace_overlay_draw() { - if (get_current_tile() >= 0 && !tile_set.is_null()) { + int t_id = get_current_tile(); + if (t_id < 0 || !draw_handles) + return; + + Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); + + for (int i = 0; i < current_shape.size(); i++) { + workspace_overlay->draw_texture(handle, current_shape[i] * workspace->get_scale().x - handle->get_size() * 0.5); + } +} + +#define MIN_DISTANCE_SQUARED 6 +void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { + + if (get_current_tile() >= 0 && !tileset.is_null()) { Ref<InputEventMouseButton> mb = p_ie; Ref<InputEventMouseMotion> mm = p_ie; static bool dragging; static bool erasing; - int spacing = tile_set->autotile_get_spacing(get_current_tile()); - Vector2 size = tile_set->autotile_get_size(get_current_tile()); + int spacing = tileset->autotile_get_spacing(get_current_tile()); + Vector2 size = tileset->autotile_get_size(get_current_tile()); switch (edit_mode) { case EDITMODE_ICON: { if (mb.is_valid()) { if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y))); - tile_set->autotile_set_icon_coordinate(get_current_tile(), coord); - Rect2 region = tile_set->tile_get_region(get_current_tile()); + tileset->autotile_set_icon_coordinate(get_current_tile(), coord); + Rect2 region = tileset->tile_get_region(get_current_tile()); region.size = size; coord.x *= (spacing + size.x); coord.y *= (spacing + size.y); region.position += coord; - autotile_list->set_item_icon_region(current_item_index, region); + tile_list->set_item_icon_region(current_item_index, region); workspace->update(); } } @@ -804,8 +806,8 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y))); Vector2 pos(coord.x * (spacing + size.x), coord.y * (spacing + size.y)); pos = mb->get_position() - pos; - uint16_t bit; - if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { + uint16_t bit = 0; + if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { if (pos.x < size.x / 2) { if (pos.y < size.y / 2) { bit = TileSet::BIND_TOPLEFT; @@ -819,7 +821,7 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { bit = TileSet::BIND_BOTTOMRIGHT; } } - } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { + } else if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { if (pos.x < size.x / 3) { if (pos.y < size.y / 3) { bit = TileSet::BIND_TOPLEFT; @@ -846,13 +848,13 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } - uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord); + uint16_t mask = tileset->autotile_get_bitmask(get_current_tile(), coord); if (erasing) { mask &= ~bit; } else { mask |= bit; } - tile_set->autotile_set_bitmask(get_current_tile(), coord, mask); + tileset->autotile_set_bitmask(get_current_tile(), coord, mask); workspace->update(); } } else { @@ -867,8 +869,8 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { Vector2 coord((int)(mm->get_position().x / (spacing + size.x)), (int)(mm->get_position().y / (spacing + size.y))); Vector2 pos(coord.x * (spacing + size.x), coord.y * (spacing + size.y)); pos = mm->get_position() - pos; - uint16_t bit; - if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { + uint16_t bit = 0; + if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) { if (pos.x < size.x / 2) { if (pos.y < size.y / 2) { bit = TileSet::BIND_TOPLEFT; @@ -882,7 +884,7 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { bit = TileSet::BIND_BOTTOMRIGHT; } } - } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { + } else if (tileset->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) { if (pos.x < size.x / 3) { if (pos.y < size.y / 3) { bit = TileSet::BIND_TOPLEFT; @@ -909,13 +911,13 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } - uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord); + uint16_t mask = tileset->autotile_get_bitmask(get_current_tile(), coord); if (erasing) { mask &= ~bit; } else { mask |= bit; } - tile_set->autotile_set_bitmask(get_current_tile(), coord, mask); + tileset->autotile_set_bitmask(get_current_tile(), coord, mask); workspace->update(); } } @@ -924,9 +926,12 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { case EDITMODE_OCCLUSION: case EDITMODE_NAVIGATION: case EDITMODE_PRIORITY: { - Vector2 shape_anchor = edited_shape_coord; - shape_anchor.x *= (size.x + spacing); - shape_anchor.y *= (size.y + spacing); + Vector2 shape_anchor = Vector2(0, 0); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + shape_anchor = edited_shape_coord; + shape_anchor.x *= (size.x + spacing); + shape_anchor.y *= (size.y + spacing); + } if (tools[TOOL_SELECT]->is_pressed()) { if (mb.is_valid()) { if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { @@ -939,23 +944,25 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } - Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y))); - if (edited_shape_coord != coord) { - edited_shape_coord = coord; - edited_occlusion_shape = tile_set->autotile_get_light_occluder(get_current_tile(), edited_shape_coord); - edited_navigation_shape = tile_set->autotile_get_navigation_polygon(get_current_tile(), edited_shape_coord); - Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(get_current_tile()); - bool found_collision_shape = false; - for (int i = 0; i < sd.size(); i++) { - if (sd[i].autotile_coord == coord) { - edited_collision_shape = sd[i].shape; - found_collision_shape = true; - break; + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y))); + if (edited_shape_coord != coord) { + edited_shape_coord = coord; + edited_occlusion_shape = tileset->autotile_get_light_occluder(get_current_tile(), edited_shape_coord); + edited_navigation_shape = tileset->autotile_get_navigation_polygon(get_current_tile(), edited_shape_coord); + Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(get_current_tile()); + bool found_collision_shape = false; + for (int i = 0; i < sd.size(); i++) { + if (sd[i].autotile_coord == coord) { + edited_collision_shape = sd[i].shape; + found_collision_shape = true; + break; + } } + if (!found_collision_shape) + edited_collision_shape = Ref<ConvexPolygonShape2D>(NULL); + select_coord(edited_shape_coord); } - if (!found_collision_shape) - edited_collision_shape = Ref<ConvexPolygonShape2D>(NULL); - select_coord(edited_shape_coord); } workspace->update(); } else if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { @@ -1023,6 +1030,7 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } else if (tools[SHAPE_NEW_POLYGON]->is_pressed()) { + if (mb.is_valid()) { if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { Vector2 pos = mb->get_position(); @@ -1043,14 +1051,14 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { int t_id = get_current_tile(); if (t_id >= 0) { if (edit_mode == EDITMODE_COLLISION) { - Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(t_id); + Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(t_id); for (int i = 0; i < sd.size(); i++) { - if (sd[i].autotile_coord == edited_shape_coord) { + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE || sd[i].autotile_coord == edited_shape_coord) { Ref<ConvexPolygonShape2D> shape = sd[i].shape; if (!shape.is_null()) { sd.remove(i); - tile_set->tile_set_shapes(get_current_tile(), sd); + tileset->tile_set_shapes(get_current_tile(), sd); edited_collision_shape = Ref<Shape2D>(); workspace->update(); } @@ -1058,25 +1066,30 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } else if (edit_mode == EDITMODE_OCCLUSION) { - Map<Vector2, Ref<OccluderPolygon2D> > map = tile_set->autotile_get_light_oclusion_map(t_id); - for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = map.front(); E; E = E->next()) { - if (E->key() == edited_shape_coord) { - tile_set->autotile_set_light_occluder(get_current_tile(), Ref<OccluderPolygon2D>(), edited_shape_coord); - break; + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + Map<Vector2, Ref<OccluderPolygon2D> > map = tileset->autotile_get_light_oclusion_map(t_id); + for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = map.front(); E; E = E->next()) { + if (E->key() == edited_shape_coord) { + tileset->autotile_set_light_occluder(get_current_tile(), Ref<OccluderPolygon2D>(), edited_shape_coord); + break; + } } - } + } else + tileset->tile_set_light_occluder(t_id, Ref<OccluderPolygon2D>()); edited_occlusion_shape = Ref<OccluderPolygon2D>(); workspace->update(); } else if (edit_mode == EDITMODE_NAVIGATION) { - Map<Vector2, Ref<NavigationPolygon> > map = tile_set->autotile_get_navigation_map(t_id); - for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = map.front(); E; E = E->next()) { - if (E->key() == edited_shape_coord) { - tile_set->autotile_set_navigation_polygon(t_id, Ref<NavigationPolygon>(), edited_shape_coord); - break; + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + Map<Vector2, Ref<NavigationPolygon> > map = tileset->autotile_get_navigation_map(t_id); + for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = map.front(); E; E = E->next()) { + if (E->key() == edited_shape_coord) { + tileset->autotile_set_navigation_polygon(t_id, Ref<NavigationPolygon>(), edited_shape_coord); + break; + } } - } - + } else + tileset->tile_set_navigation_polygon(t_id, Ref<NavigationPolygon>()); edited_navigation_shape = Ref<NavigationPolygon>(); workspace->update(); } @@ -1112,17 +1125,17 @@ void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } -void AutotileEditor::_on_tool_clicked(int p_tool) { +void TileSetEditor::_on_tool_clicked(int p_tool) { if (p_tool == BITMASK_COPY) { - bitmask_map_copy = tile_set->autotile_get_bitmask_map(get_current_tile()); + bitmask_map_copy = tileset->autotile_get_bitmask_map(get_current_tile()); } else if (p_tool == BITMASK_PASTE) { - tile_set->autotile_clear_bitmask_map(get_current_tile()); + tileset->autotile_clear_bitmask_map(get_current_tile()); for (Map<Vector2, uint16_t>::Element *E = bitmask_map_copy.front(); E; E = E->next()) { - tile_set->autotile_set_bitmask(get_current_tile(), E->key(), E->value()); + tileset->autotile_set_bitmask(get_current_tile(), E->key(), E->value()); } workspace->update(); } else if (p_tool == BITMASK_CLEAR) { - tile_set->autotile_clear_bitmask_map(get_current_tile()); + tileset->autotile_clear_bitmask_map(get_current_tile()); workspace->update(); } else if (p_tool == SHAPE_DELETE) { if (creating_shape) { @@ -1133,8 +1146,8 @@ void AutotileEditor::_on_tool_clicked(int p_tool) { switch (edit_mode) { case EDITMODE_COLLISION: { if (!edited_collision_shape.is_null()) { - Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(get_current_tile()); - int index; + Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(get_current_tile()); + int index = -1; for (int i = 0; i < sd.size(); i++) { if (sd[i].shape == edited_collision_shape) { index = i; @@ -1143,7 +1156,7 @@ void AutotileEditor::_on_tool_clicked(int p_tool) { } if (index >= 0) { sd.remove(index); - tile_set->tile_set_shapes(get_current_tile(), sd); + tileset->tile_set_shapes(get_current_tile(), sd); edited_collision_shape = Ref<Shape2D>(); current_shape.resize(0); workspace->update(); @@ -1152,7 +1165,7 @@ void AutotileEditor::_on_tool_clicked(int p_tool) { } break; case EDITMODE_NAVIGATION: { if (!edited_navigation_shape.is_null()) { - tile_set->autotile_set_navigation_polygon(get_current_tile(), Ref<NavigationPolygon>(), edited_shape_coord); + tileset->autotile_set_navigation_polygon(get_current_tile(), Ref<NavigationPolygon>(), edited_shape_coord); edited_navigation_shape = Ref<NavigationPolygon>(); current_shape.resize(0); workspace->update(); @@ -1160,7 +1173,7 @@ void AutotileEditor::_on_tool_clicked(int p_tool) { } break; case EDITMODE_OCCLUSION: { if (!edited_occlusion_shape.is_null()) { - tile_set->autotile_set_light_occluder(get_current_tile(), Ref<OccluderPolygon2D>(), edited_shape_coord); + tileset->autotile_set_light_occluder(get_current_tile(), Ref<OccluderPolygon2D>(), edited_shape_coord); edited_occlusion_shape = Ref<OccluderPolygon2D>(); current_shape.resize(0); workspace->update(); @@ -1174,24 +1187,34 @@ void AutotileEditor::_on_tool_clicked(int p_tool) { scale /= 2; workspace->set_scale(Vector2(scale, scale)); workspace_container->set_custom_minimum_size(preview->get_region_rect().size * scale); + workspace_overlay->set_custom_minimum_size(preview->get_region_rect().size * scale); } } else if (p_tool == ZOOM_1) { workspace->set_scale(Vector2(1, 1)); workspace_container->set_custom_minimum_size(preview->get_region_rect().size); + workspace_overlay->set_custom_minimum_size(preview->get_region_rect().size); } else if (p_tool == ZOOM_IN) { float scale = workspace->get_scale().x; scale *= 2; workspace->set_scale(Vector2(scale, scale)); workspace_container->set_custom_minimum_size(preview->get_region_rect().size * scale); + workspace_overlay->set_custom_minimum_size(preview->get_region_rect().size * scale); + } else if (p_tool == TOOL_SELECT) { + if (creating_shape) { + //Cancel Creation + creating_shape = false; + current_shape.resize(0); + workspace->update(); + } } } -void AutotileEditor::_on_priority_changed(float val) { - tile_set->autotile_set_subtile_priority(get_current_tile(), edited_shape_coord, (int)val); +void TileSetEditor::_on_priority_changed(float val) { + tileset->autotile_set_subtile_priority(get_current_tile(), edited_shape_coord, (int)val); workspace->update(); } -void AutotileEditor::_on_grid_snap_toggled(bool p_val) { +void TileSetEditor::_on_grid_snap_toggled(bool p_val) { if (p_val) hb_grid->show(); else @@ -1199,40 +1222,40 @@ void AutotileEditor::_on_grid_snap_toggled(bool p_val) { workspace->update(); } -void AutotileEditor::_set_snap_step_x(float p_val) { +void TileSetEditor::_set_snap_step_x(float p_val) { snap_step.x = p_val; workspace->update(); } -void AutotileEditor::_set_snap_step_y(float p_val) { +void TileSetEditor::_set_snap_step_y(float p_val) { snap_step.y = p_val; workspace->update(); } -void AutotileEditor::_set_snap_off_x(float p_val) { +void TileSetEditor::_set_snap_off_x(float p_val) { snap_offset.x = p_val; workspace->update(); } -void AutotileEditor::_set_snap_off_y(float p_val) { +void TileSetEditor::_set_snap_off_y(float p_val) { snap_offset.y = p_val; workspace->update(); } -void AutotileEditor::_set_snap_sep_x(float p_val) { +void TileSetEditor::_set_snap_sep_x(float p_val) { snap_separation.x = p_val; workspace->update(); } -void AutotileEditor::_set_snap_sep_y(float p_val) { +void TileSetEditor::_set_snap_sep_y(float p_val) { snap_separation.y = p_val; workspace->update(); } -void AutotileEditor::draw_highlight_tile(Vector2 coord, const Vector<Vector2> &other_highlighted) { +void TileSetEditor::draw_highlight_tile(Vector2 coord, const Vector<Vector2> &other_highlighted) { - Vector2 size = tile_set->autotile_get_size(get_current_tile()); - int spacing = tile_set->autotile_get_spacing(get_current_tile()); - Rect2 region = tile_set->tile_get_region(get_current_tile()); + Vector2 size = tileset->autotile_get_size(get_current_tile()); + int spacing = tileset->autotile_get_spacing(get_current_tile()); + Rect2 region = tileset->tile_get_region(get_current_tile()); coord.x *= (size.x + spacing); coord.y *= (size.y + spacing); workspace->draw_rect(Rect2(0, 0, region.size.x, coord.y), Color(0.5, 0.5, 0.5, 0.5)); @@ -1250,7 +1273,7 @@ void AutotileEditor::draw_highlight_tile(Vector2 coord, const Vector<Vector2> &o } } -void AutotileEditor::draw_grid_snap() { +void TileSetEditor::draw_grid_snap() { if (tools[SHAPE_GRID_SNAP]->is_pressed()) { Color grid_color = Color(0.39, 0, 1, 0.2f); Size2 s = workspace->get_size(); @@ -1291,27 +1314,33 @@ void AutotileEditor::draw_grid_snap() { } } -void AutotileEditor::draw_polygon_shapes() { +void TileSetEditor::draw_polygon_shapes() { int t_id = get_current_tile(); if (t_id < 0) return; + draw_handles = false; + switch (edit_mode) { case EDITMODE_COLLISION: { - Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(t_id); + Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(t_id); for (int i = 0; i < sd.size(); i++) { - Vector2 coord = sd[i].autotile_coord; - Vector2 anchor = tile_set->autotile_get_size(t_id); - anchor.x += tile_set->autotile_get_spacing(t_id); - anchor.y += tile_set->autotile_get_spacing(t_id); - anchor.x *= coord.x; - anchor.y *= coord.y; + Vector2 coord = Vector2(0, 0); + Vector2 anchor = Vector2(0, 0); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) { + coord = sd[i].autotile_coord; + anchor = tileset->autotile_get_size(t_id); + anchor.x += tileset->autotile_get_spacing(t_id); + anchor.y += tileset->autotile_get_spacing(t_id); + anchor.x *= coord.x; + anchor.y *= coord.y; + } Ref<ConvexPolygonShape2D> shape = sd[i].shape; if (shape.is_valid()) { Color c_bg; Color c_border; - if (coord == edited_shape_coord && sd[i].shape == edited_collision_shape) { + if ((tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE || coord == edited_shape_coord) && sd[i].shape == edited_collision_shape) { c_bg = Color(0, 1, 1, 0.5); c_border = Color(0, 1, 1); } else { @@ -1334,62 +1363,82 @@ void AutotileEditor::draw_polygon_shapes() { if (polygon.size() > 2) { workspace->draw_polygon(polygon, colors); } - if (coord == edited_shape_coord) { + if (coord == edited_shape_coord || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { for (int j = 0; j < shape->get_points().size() - 1; j++) { workspace->draw_line(shape->get_points()[j] + anchor, shape->get_points()[j + 1] + anchor, c_border, 1, true); } if (shape == edited_collision_shape) { - for (int j = 0; j < current_shape.size(); j++) { - workspace->draw_circle(current_shape[j], 8 / workspace->get_scale().x, Color(1, 0, 0, 0.7f)); - } + draw_handles = true; } } } } } break; case EDITMODE_OCCLUSION: { - Map<Vector2, Ref<OccluderPolygon2D> > map = tile_set->autotile_get_light_oclusion_map(t_id); - for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = map.front(); E; E = E->next()) { - Vector2 coord = E->key(); - Vector2 anchor = tile_set->autotile_get_size(t_id); - anchor.x += tile_set->autotile_get_spacing(t_id); - anchor.y += tile_set->autotile_get_spacing(t_id); - anchor.x *= coord.x; - anchor.y *= coord.y; - Ref<OccluderPolygon2D> shape = E->value(); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { + Ref<OccluderPolygon2D> shape = edited_occlusion_shape; if (shape.is_valid()) { - Color c_bg; - Color c_border; - if (coord == edited_shape_coord && shape == edited_occlusion_shape) { - c_bg = Color(0, 1, 1, 0.5); - c_border = Color(0, 1, 1); - } else { - c_bg = Color(0.9, 0.7, 0.07, 0.5); - c_border = Color(0.9, 0.7, 0.07, 1); - } + Color c_bg = Color(0, 1, 1, 0.5); + Color c_border = Color(0, 1, 1); + Vector<Vector2> polygon; Vector<Color> colors; - if (shape == edited_occlusion_shape && current_shape.size() > 2) { - for (int j = 0; j < current_shape.size(); j++) { - polygon.push_back(current_shape[j]); - colors.push_back(c_bg); - } - } else { - for (int j = 0; j < shape->get_polygon().size(); j++) { - polygon.push_back(shape->get_polygon()[j] + anchor); - colors.push_back(c_bg); - } + for (int j = 0; j < shape->get_polygon().size(); j++) { + polygon.push_back(shape->get_polygon()[j]); + colors.push_back(c_bg); } workspace->draw_polygon(polygon, colors); - if (coord == edited_shape_coord) { - for (int j = 0; j < shape->get_polygon().size() - 1; j++) { - workspace->draw_line(shape->get_polygon()[j] + anchor, shape->get_polygon()[j + 1] + anchor, c_border, 1, true); + + for (int j = 0; j < shape->get_polygon().size() - 1; j++) { + workspace->draw_line(shape->get_polygon()[j], shape->get_polygon()[j + 1], c_border, 1, true); + } + workspace->draw_line(shape->get_polygon()[shape->get_polygon().size() - 1], shape->get_polygon()[0], c_border, 1, true); + if (shape == edited_occlusion_shape) { + draw_handles = true; + } + } + } else { + Map<Vector2, Ref<OccluderPolygon2D> > map = tileset->autotile_get_light_oclusion_map(t_id); + for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = map.front(); E; E = E->next()) { + Vector2 coord = E->key(); + Vector2 anchor = tileset->autotile_get_size(t_id); + anchor.x += tileset->autotile_get_spacing(t_id); + anchor.y += tileset->autotile_get_spacing(t_id); + anchor.x *= coord.x; + anchor.y *= coord.y; + Ref<OccluderPolygon2D> shape = E->value(); + if (shape.is_valid()) { + Color c_bg; + Color c_border; + if (coord == edited_shape_coord && shape == edited_occlusion_shape) { + c_bg = Color(0, 1, 1, 0.5); + c_border = Color(0, 1, 1); + } else { + c_bg = Color(0.9, 0.7, 0.07, 0.5); + c_border = Color(0.9, 0.7, 0.07, 1); } - workspace->draw_line(shape->get_polygon()[shape->get_polygon().size() - 1] + anchor, shape->get_polygon()[0] + anchor, c_border, 1, true); - if (shape == edited_occlusion_shape) { + Vector<Vector2> polygon; + Vector<Color> colors; + if (shape == edited_occlusion_shape && current_shape.size() > 2) { for (int j = 0; j < current_shape.size(); j++) { - workspace->draw_circle(current_shape[j], 8 / workspace->get_scale().x, Color(1, 0, 0)); + polygon.push_back(current_shape[j]); + colors.push_back(c_bg); + } + } else { + for (int j = 0; j < shape->get_polygon().size(); j++) { + polygon.push_back(shape->get_polygon()[j] + anchor); + colors.push_back(c_bg); + } + } + workspace->draw_polygon(polygon, colors); + if (coord == edited_shape_coord) { + for (int j = 0; j < shape->get_polygon().size() - 1; j++) { + workspace->draw_line(shape->get_polygon()[j] + anchor, shape->get_polygon()[j + 1] + anchor, c_border, 1, true); + } + workspace->draw_line(shape->get_polygon()[shape->get_polygon().size() - 1] + anchor, shape->get_polygon()[0] + anchor, c_border, 1, true); + if (shape == edited_occlusion_shape) { + draw_handles = true; } } } @@ -1397,49 +1446,77 @@ void AutotileEditor::draw_polygon_shapes() { } } break; case EDITMODE_NAVIGATION: { - Map<Vector2, Ref<NavigationPolygon> > map = tile_set->autotile_get_navigation_map(t_id); - for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = map.front(); E; E = E->next()) { - Vector2 coord = E->key(); - Vector2 anchor = tile_set->autotile_get_size(t_id); - anchor.x += tile_set->autotile_get_spacing(t_id); - anchor.y += tile_set->autotile_get_spacing(t_id); - anchor.x *= coord.x; - anchor.y *= coord.y; - Ref<NavigationPolygon> shape = E->value(); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { + Ref<NavigationPolygon> shape = edited_navigation_shape; + if (shape.is_valid()) { - Color c_bg; - Color c_border; - if (coord == edited_shape_coord && shape == edited_navigation_shape) { - c_bg = Color(0, 1, 1, 0.5); - c_border = Color(0, 1, 1); - } else { - c_bg = Color(0.9, 0.7, 0.07, 0.5); - c_border = Color(0.9, 0.7, 0.07, 1); - } + Color c_bg = Color(0, 1, 1, 0.5); + Color c_border = Color(0, 1, 1); + Vector<Vector2> polygon; Vector<Color> colors; - if (shape == edited_navigation_shape && current_shape.size() > 2) { - for (int j = 0; j < current_shape.size(); j++) { - polygon.push_back(current_shape[j]); - colors.push_back(c_bg); - } - } else if (shape->get_polygon_count() > 0) { + + PoolVector<Vector2> vertices = shape->get_vertices(); + for (int j = 0; j < shape->get_polygon(0).size(); j++) { + polygon.push_back(vertices[shape->get_polygon(0)[j]]); + colors.push_back(c_bg); + } + workspace->draw_polygon(polygon, colors); + + if (shape->get_polygon_count() > 0) { PoolVector<Vector2> vertices = shape->get_vertices(); - for (int j = 0; j < shape->get_polygon(0).size(); j++) { - polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor); - colors.push_back(c_bg); + for (int j = 0; j < shape->get_polygon(0).size() - 1; j++) { + workspace->draw_line(vertices[shape->get_polygon(0)[j]], vertices[shape->get_polygon(0)[j + 1]], c_border, 1, true); + } + if (shape == edited_navigation_shape) { + draw_handles = true; } } - workspace->draw_polygon(polygon, colors); - if (coord == edited_shape_coord) { - if (shape->get_polygon_count() > 0) { + } + + } else { + Map<Vector2, Ref<NavigationPolygon> > map = tileset->autotile_get_navigation_map(t_id); + for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = map.front(); E; E = E->next()) { + Vector2 coord = E->key(); + Vector2 anchor = tileset->autotile_get_size(t_id); + anchor.x += tileset->autotile_get_spacing(t_id); + anchor.y += tileset->autotile_get_spacing(t_id); + anchor.x *= coord.x; + anchor.y *= coord.y; + Ref<NavigationPolygon> shape = E->value(); + if (shape.is_valid()) { + Color c_bg; + Color c_border; + if (coord == edited_shape_coord && shape == edited_navigation_shape) { + c_bg = Color(0, 1, 1, 0.5); + c_border = Color(0, 1, 1); + } else { + c_bg = Color(0.9, 0.7, 0.07, 0.5); + c_border = Color(0.9, 0.7, 0.07, 1); + } + Vector<Vector2> polygon; + Vector<Color> colors; + if (shape == edited_navigation_shape && current_shape.size() > 2) { + for (int j = 0; j < current_shape.size(); j++) { + polygon.push_back(current_shape[j]); + colors.push_back(c_bg); + } + } else if (shape->get_polygon_count() > 0) { PoolVector<Vector2> vertices = shape->get_vertices(); - for (int j = 0; j < shape->get_polygon(0).size() - 1; j++) { - workspace->draw_line(vertices[shape->get_polygon(0)[j]] + anchor, vertices[shape->get_polygon(0)[j + 1]] + anchor, c_border, 1, true); + for (int j = 0; j < shape->get_polygon(0).size(); j++) { + polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor); + colors.push_back(c_bg); } - if (shape == edited_navigation_shape) { - for (int j = 0; j < current_shape.size(); j++) { - workspace->draw_circle(current_shape[j], 8 / workspace->get_scale().x, Color(1, 0, 0)); + } + workspace->draw_polygon(polygon, colors); + if (coord == edited_shape_coord) { + if (shape->get_polygon_count() > 0) { + PoolVector<Vector2> vertices = shape->get_vertices(); + for (int j = 0; j < shape->get_polygon(0).size() - 1; j++) { + workspace->draw_line(vertices[shape->get_polygon(0)[j]] + anchor, vertices[shape->get_polygon(0)[j + 1]] + anchor, c_border, 1, true); + } + if (shape == edited_navigation_shape) { + draw_handles = true; } } } @@ -1456,7 +1533,7 @@ void AutotileEditor::draw_polygon_shapes() { } } -void AutotileEditor::close_shape(const Vector2 &shape_anchor) { +void TileSetEditor::close_shape(const Vector2 &shape_anchor) { creating_shape = false; @@ -1481,7 +1558,11 @@ void AutotileEditor::close_shape(const Vector2 &shape_anchor) { shape->set_points(segments); - tile_set->tile_add_shape(get_current_tile(), shape, Transform2D(), false, edited_shape_coord); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) + tileset->tile_add_shape(get_current_tile(), shape, Transform2D(), false, edited_shape_coord); + else + tileset->tile_set_shape(get_current_tile(), 0, shape); + edited_collision_shape = shape; } @@ -1501,7 +1582,10 @@ void AutotileEditor::close_shape(const Vector2 &shape_anchor) { w = PoolVector<Vector2>::Write(); shape->set_polygon(polygon); - tile_set->autotile_set_light_occluder(get_current_tile(), shape, edited_shape_coord); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) + tileset->autotile_set_light_occluder(get_current_tile(), shape, edited_shape_coord); + else + tileset->tile_set_light_occluder(get_current_tile(), shape); edited_occlusion_shape = shape; tools[TOOL_SELECT]->set_pressed(true); workspace->update(); @@ -1521,55 +1605,99 @@ void AutotileEditor::close_shape(const Vector2 &shape_anchor) { w = PoolVector<Vector2>::Write(); shape->set_vertices(polygon); shape->add_polygon(indices); - tile_set->autotile_set_navigation_polygon(get_current_tile(), shape, edited_shape_coord); + + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE) + tileset->autotile_set_navigation_polygon(get_current_tile(), shape, edited_shape_coord); + else + tileset->tile_set_navigation_polygon(get_current_tile(), shape); edited_navigation_shape = shape; tools[TOOL_SELECT]->set_pressed(true); workspace->update(); } + tileset->_change_notify(""); } -void AutotileEditor::select_coord(const Vector2 &coord) { - int spacing = tile_set->autotile_get_spacing(get_current_tile()); - Vector2 size = tile_set->autotile_get_size(get_current_tile()); - Vector2 shape_anchor = coord; - shape_anchor.x *= (size.x + spacing); - shape_anchor.y *= (size.y + spacing); - if (edit_mode == EDITMODE_COLLISION) { - current_shape.resize(0); - if (edited_collision_shape.is_valid()) { - for (int j = 0; j < edited_collision_shape->get_points().size(); j++) { - current_shape.push_back(edited_collision_shape->get_points()[j] + shape_anchor); +void TileSetEditor::select_coord(const Vector2 &coord) { + current_shape = PoolVector2Array(); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { + if (edited_collision_shape != tileset->tile_get_shape(get_current_tile(), 0)) + edited_collision_shape = tileset->tile_get_shape(get_current_tile(), 0); + if (edited_occlusion_shape != tileset->tile_get_light_occluder(get_current_tile())) + edited_occlusion_shape = tileset->tile_get_light_occluder(get_current_tile()); + if (edited_navigation_shape != tileset->tile_get_navigation_polygon(get_current_tile())) + edited_navigation_shape = tileset->tile_get_navigation_polygon(get_current_tile()); + + if (edit_mode == EDITMODE_COLLISION) { + current_shape.resize(0); + if (edited_collision_shape.is_valid()) { + for (int i = 0; i < edited_collision_shape->get_points().size(); i++) { + current_shape.push_back(edited_collision_shape->get_points()[i]); + } } - } - } else if (edit_mode == EDITMODE_OCCLUSION) { - current_shape.resize(0); - if (edited_occlusion_shape.is_valid()) { - for (int i = 0; i < edited_occlusion_shape->get_polygon().size(); i++) { - current_shape.push_back(edited_occlusion_shape->get_polygon()[i] + shape_anchor); + } else if (edit_mode == EDITMODE_OCCLUSION) { + current_shape.resize(0); + if (edited_occlusion_shape.is_valid()) { + for (int i = 0; i < edited_occlusion_shape->get_polygon().size(); i++) { + current_shape.push_back(edited_occlusion_shape->get_polygon()[i]); + } + } + } else if (edit_mode == EDITMODE_NAVIGATION) { + current_shape.resize(0); + if (edited_navigation_shape.is_valid()) { + if (edited_navigation_shape->get_polygon_count() > 0) { + PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices(); + for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) { + current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]]); + } + } } } - } else if (edit_mode == EDITMODE_NAVIGATION) { - current_shape.resize(0); - if (edited_navigation_shape.is_valid()) { - if (edited_navigation_shape->get_polygon_count() > 0) { - PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices(); - for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) { - current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + shape_anchor); + } else { + int spacing = tileset->autotile_get_spacing(get_current_tile()); + Vector2 size = tileset->autotile_get_size(get_current_tile()); + Vector2 shape_anchor = coord; + shape_anchor.x *= (size.x + spacing); + shape_anchor.y *= (size.y + spacing); + if (edit_mode == EDITMODE_COLLISION) { + current_shape.resize(0); + if (edited_collision_shape.is_valid()) { + for (int j = 0; j < edited_collision_shape->get_points().size(); j++) { + current_shape.push_back(edited_collision_shape->get_points()[j] + shape_anchor); + } + } + } else if (edit_mode == EDITMODE_OCCLUSION) { + current_shape.resize(0); + if (edited_occlusion_shape.is_valid()) { + for (int i = 0; i < edited_occlusion_shape->get_polygon().size(); i++) { + current_shape.push_back(edited_occlusion_shape->get_polygon()[i] + shape_anchor); + } + } + } else if (edit_mode == EDITMODE_NAVIGATION) { + current_shape.resize(0); + if (edited_navigation_shape.is_valid()) { + if (edited_navigation_shape->get_polygon_count() > 0) { + PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices(); + for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) { + current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + shape_anchor); + } } } } } } -Vector2 AutotileEditor::snap_point(const Vector2 &point) { +Vector2 TileSetEditor::snap_point(const Vector2 &point) { Vector2 p = point; Vector2 coord = edited_shape_coord; - Vector2 tile_size = tile_set->autotile_get_size(get_current_tile()); - int spacing = tile_set->autotile_get_spacing(get_current_tile()); + Vector2 tile_size = tileset->autotile_get_size(get_current_tile()); + int spacing = tileset->autotile_get_spacing(get_current_tile()); Vector2 anchor = coord; anchor.x *= (tile_size.x + spacing); anchor.y *= (tile_size.y + spacing); Rect2 region(anchor, tile_size); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) + region.position = Point2(0, 0); + if (tools[SHAPE_GRID_SNAP]->is_pressed()) { p.x = Math::snap_scalar_seperation(snap_offset.x, snap_step.x, p.x, snap_separation.x); p.y = Math::snap_scalar_seperation(snap_offset.y, snap_step.y, p.y, snap_separation.y); @@ -1587,86 +1715,138 @@ Vector2 AutotileEditor::snap_point(const Vector2 &point) { return p; } -void AutotileEditor::edit(Object *p_node) { +void TileSetEditor::update_tile_list() { + int selected_tile = get_current_tile(); + + if (selected_tile < 0) + selected_tile = 0; - tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_node)); - tile_set->add_change_receptor(this); - helper->set_tileset(tile_set); + helper->set_tileset(tileset); - autotile_list->clear(); + tile_list->clear(); List<int> ids; - tile_set->get_tile_list(&ids); + tileset->get_tile_list(&ids); for (List<int>::Element *E = ids.front(); E; E = E->next()) { - if (tile_set->tile_get_is_autotile(E->get())) { - autotile_list->add_item(tile_set->tile_get_name(E->get())); - autotile_list->set_item_metadata(autotile_list->get_item_count() - 1, E->get()); - autotile_list->set_item_icon(autotile_list->get_item_count() - 1, tile_set->tile_get_texture(E->get())); - Rect2 region = tile_set->tile_get_region(E->get()); - region.size = tile_set->autotile_get_size(E->get()); - Vector2 pos = tile_set->autotile_get_icon_coordinate(E->get()); - pos.x *= (tile_set->autotile_get_spacing(E->get()) + region.size.x); - pos.y *= (tile_set->autotile_get_spacing(E->get()) + region.size.y); + tile_list->add_item(tileset->tile_get_name(E->get())); + tile_list->set_item_metadata(tile_list->get_item_count() - 1, E->get()); + tile_list->set_item_icon(tile_list->get_item_count() - 1, tileset->tile_get_texture(E->get())); + Rect2 region = tileset->tile_get_region(E->get()); + if (tileset->tile_get_tile_mode(E->get()) == TileSet::AUTO_TILE) { + region.size = tileset->autotile_get_size(E->get()); + Vector2 pos = tileset->autotile_get_icon_coordinate(E->get()); + pos.x *= (tileset->autotile_get_spacing(E->get()) + region.size.x); + pos.y *= (tileset->autotile_get_spacing(E->get()) + region.size.y); region.position += pos; - autotile_list->set_item_icon_region(autotile_list->get_item_count() - 1, region); } + tile_list->set_item_icon_region(tile_list->get_item_count() - 1, region); + tile_list->set_item_icon_modulate(tile_list->get_item_count() - 1, tileset->tile_get_modulate(E->get())); } - if (autotile_list->get_item_count() > 0) { - autotile_list->select(0); - _on_autotile_selected(0); + if (tile_list->get_item_count() > 0 && selected_tile < tile_list->get_item_count()) { + tile_list->select(selected_tile); + _on_tile_list_selected(selected_tile); } helper->_change_notify(""); } -int AutotileEditor::get_current_tile() { +void TileSetEditor::update_tile_list_icon() { + List<int> ids; + tileset->get_tile_list(&ids); + int current_idx = 0; + for (List<int>::Element *E = ids.front(); E; E = E->next()) { + if (current_idx >= tile_list->get_item_count()) + break; + + Rect2 region = tileset->tile_get_region(E->get()); + if (tileset->tile_get_tile_mode(E->get()) == TileSet::AUTO_TILE) { + region.size = tileset->autotile_get_size(E->get()); + Vector2 pos = tileset->autotile_get_icon_coordinate(E->get()); + pos.x *= (tileset->autotile_get_spacing(E->get()) + region.size.x); + pos.y *= (tileset->autotile_get_spacing(E->get()) + region.size.y); + region.position += pos; + } + tile_list->set_item_metadata(current_idx, E->get()); + tile_list->set_item_icon(current_idx, tileset->tile_get_texture(E->get())); + tile_list->set_item_icon_region(current_idx, region); + tile_list->set_item_icon_modulate(current_idx, tileset->tile_get_modulate(E->get())); + tile_list->set_item_text(current_idx, tileset->tile_get_name(E->get())); + current_idx += 1; + } + tile_list->update(); +} + +void TileSetEditor::update_workspace_tile_mode() { + if (get_current_tile() < 0) + return; + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { + if (tool_editmode[EDITMODE_ICON]->is_pressed() || tool_editmode[EDITMODE_PRIORITY]->is_pressed() || tool_editmode[EDITMODE_BITMASK]->is_pressed()) { + tool_editmode[EDITMODE_COLLISION]->set_pressed(true); + _on_edit_mode_changed(EDITMODE_COLLISION); + } else { + select_coord(Vector2(0, 0)); + } + + tool_editmode[EDITMODE_ICON]->hide(); + tool_editmode[EDITMODE_BITMASK]->hide(); + tool_editmode[EDITMODE_PRIORITY]->hide(); + property_editor->hide(); + } else { + tool_editmode[EDITMODE_ICON]->show(); + tool_editmode[EDITMODE_BITMASK]->show(); + tool_editmode[EDITMODE_PRIORITY]->show(); + property_editor->show(); + } +} - if (autotile_list->get_selected_items().size() == 0) +int TileSetEditor::get_current_tile() { + if (tile_list->get_selected_items().size() == 0) return -1; else - return autotile_list->get_item_metadata(autotile_list->get_selected_items()[0]); + return tile_list->get_item_metadata(tile_list->get_selected_items()[0]); } -void AutotileEditorHelper::set_tileset(const Ref<TileSet> &p_tileset) { +void TileSetEditorHelper::set_tileset(const Ref<TileSet> &p_tileset) { - tile_set = p_tileset; + tileset = p_tileset; } -bool AutotileEditorHelper::_set(const StringName &p_name, const Variant &p_value) { +bool TileSetEditorHelper::_set(const StringName &p_name, const Variant &p_value) { - if (autotile_editor->get_current_tile() < 0 || tile_set.is_null()) + if (selected_tile < 0 || tileset.is_null()) return false; String name = p_name.operator String(); bool v = false; if (name == "bitmask_mode") { - tile_set->set(String::num(autotile_editor->get_current_tile(), 0) + "/autotile/bitmask_mode", p_value, &v); + tileset->set(String::num(selected_tile, 0) + "/autotile/bitmask_mode", p_value, &v); } else if (name.left(7) == "layout/") { - tile_set->set(String::num(autotile_editor->get_current_tile(), 0) + "/autotile" + name.right(6), p_value, &v); + tileset->set(String::num(selected_tile, 0) + "/autotile" + name.right(6), p_value, &v); } if (v) { - tile_set->_change_notify(""); - autotile_editor->workspace->update(); + tileset->_change_notify("autotile"); } return v; } -bool AutotileEditorHelper::_get(const StringName &p_name, Variant &r_ret) const { +bool TileSetEditorHelper::_get(const StringName &p_name, Variant &r_ret) const { - if (autotile_editor->get_current_tile() < 0 || tile_set.is_null()) + if (selected_tile < 0 || tileset.is_null()) + return false; + if (!tileset->has_tile(selected_tile)) return false; String name = p_name.operator String(); bool v = false; if (name == "bitmask_mode") { - r_ret = tile_set->get(String::num(autotile_editor->get_current_tile(), 0) + "/autotile/bitmask_mode", &v); + r_ret = tileset->get(String::num(selected_tile, 0) + "/autotile/bitmask_mode", &v); } else if (name.left(7) == "layout/") { - r_ret = tile_set->get(String::num(autotile_editor->get_current_tile(), 0) + "/autotile" + name.right(6), &v); + r_ret = tileset->get(String::num(selected_tile, 0) + "/autotile" + name.right(6), &v); } return v; } -void AutotileEditorHelper::_get_property_list(List<PropertyInfo> *p_list) const { +void TileSetEditorHelper::_get_property_list(List<PropertyInfo> *p_list) const { - if (autotile_editor->get_current_tile() < 0 || tile_set.is_null()) + if (selected_tile < 0 || tileset.is_null()) return; p_list->push_back(PropertyInfo(Variant::INT, "bitmask_mode", PROPERTY_HINT_ENUM, "2x2,3x3")); @@ -1674,7 +1854,72 @@ void AutotileEditorHelper::_get_property_list(List<PropertyInfo> *p_list) const p_list->push_back(PropertyInfo(Variant::INT, "layout/spacing", PROPERTY_HINT_RANGE, "0,256,1")); } -AutotileEditorHelper::AutotileEditorHelper(AutotileEditor *p_autotile_editor) { +TileSetEditorHelper::TileSetEditorHelper(TileSetEditor *p_tileset_editor) { + + tileset_editor = p_tileset_editor; + selected_tile = -1; +} + +void TileSetEditorPlugin::edit(Object *p_node) { + + if (Object::cast_to<TileSet>(p_node)) { + tileset_editor->edit(Object::cast_to<TileSet>(p_node)); + tileset_editor->show(); + tileset_editor->texture_region_editor->edit(p_node); + } else + tileset_editor->hide(); +} + +bool TileSetEditorPlugin::handles(Object *p_node) const { + + return p_node->is_class("TileSet"); +} + +void TileSetEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + tileset_editor->show(); + tileset_editor->menu->show(); + tileset_editor_button->show(); + tileset_editor->side_panel->show(); + if (tileset_editor_button->is_pressed()) { + tileset_editor->bottom_panel->show(); + } + texture_region_button->show(); + if (texture_region_button->is_pressed()) + tileset_editor->texture_region_editor->show(); + } else { + tileset_editor->hide(); + tileset_editor->menu->hide(); + tileset_editor->side_panel->hide(); + tileset_editor->bottom_panel->hide(); + tileset_editor_button->hide(); + texture_region_button->hide(); + tileset_editor->texture_region_editor->hide(); + } +} + +TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { + + tileset_editor = memnew(TileSetEditor(p_node)); + + add_control_to_container(CONTAINER_CANVAS_EDITOR_MENU, tileset_editor); + tileset_editor->set_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); + tileset_editor->set_end(Point2(0, 22)); + tileset_editor->hide(); + + tileset_editor->texture_region_editor = memnew(TextureRegionEditor(p_node)); + texture_region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), tileset_editor->texture_region_editor); + texture_region_button->set_tooltip(TTR("Texture Region Editor")); + + tileset_editor->texture_region_editor->set_custom_minimum_size(Size2(0, 200)); + tileset_editor->texture_region_editor->hide(); + texture_region_button->hide(); - autotile_editor = p_autotile_editor; + add_control_to_container(CONTAINER_CANVAS_EDITOR_SIDE, tileset_editor->side_panel); + tileset_editor->side_panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); + tileset_editor->side_panel->set_custom_minimum_size(Size2(200, 0)); + tileset_editor->side_panel->hide(); + tileset_editor_button = p_node->add_bottom_panel_item(TTR("Tile Set"), tileset_editor->bottom_panel); + tileset_editor_button->hide(); } diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index 30f6e2b925..4894d641a3 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -33,35 +33,38 @@ #include "editor/editor_name_dialog.h" #include "editor/editor_node.h" +#include "editor/plugins/texture_region_editor_plugin.h" #include "scene/2d/sprite.h" #include "scene/resources/convex_polygon_shape_2d.h" #include "scene/resources/tile_set.h" -class AutotileEditorHelper; -class AutotileEditor : public Control { +class TileSetEditorHelper; + +class TileSetEditor : public Control { friend class TileSetEditorPlugin; - friend class AutotileEditorHelper; - GDCLASS(AutotileEditor, Control); + friend class TextureRegionEditor; + + GDCLASS(TileSetEditor, Control); enum EditMode { - EDITMODE_ICON, - EDITMODE_BITMASK, EDITMODE_COLLISION, EDITMODE_OCCLUSION, EDITMODE_NAVIGATION, + EDITMODE_BITMASK, EDITMODE_PRIORITY, + EDITMODE_ICON, EDITMODE_MAX }; - enum AutotileToolbars { + enum TileSetToolbar { TOOLBAR_DUMMY, TOOLBAR_BITMASK, TOOLBAR_SHAPE, TOOLBAR_MAX }; - enum AutotileTools { + enum TileSetTools { TOOL_SELECT, BITMASK_COPY, BITMASK_PASTE, @@ -78,17 +81,18 @@ class AutotileEditor : public Control { TOOL_MAX }; - Ref<TileSet> tile_set; + Ref<TileSet> tileset; + Ref<ConvexPolygonShape2D> edited_collision_shape; Ref<OccluderPolygon2D> edited_occlusion_shape; Ref<NavigationPolygon> edited_navigation_shape; - EditorNode *editor; - int current_item_index; Sprite *preview; ScrollContainer *scroll; Control *workspace_container; + bool draw_handles; + Control *workspace_overlay; Control *workspace; Button *tool_editmode[EDITMODE_MAX]; HBoxContainer *tool_containers[TOOLBAR_MAX]; @@ -114,22 +118,51 @@ class AutotileEditor : public Control { PoolVector2Array current_shape; Map<Vector2, uint16_t> bitmask_map_copy; + EditorNode *editor; + TextureRegionEditor *texture_region_editor; + Control *bottom_panel; Control *side_panel; - ItemList *autotile_list; + ItemList *tile_list; PropertyEditor *property_editor; - AutotileEditorHelper *helper; + TileSetEditorHelper *helper; + + MenuButton *menu; + ConfirmationDialog *cd; + EditorNameDialog *nd; + AcceptDialog *err_dialog; + + enum { - AutotileEditor(EditorNode *p_editor); - ~AutotileEditor(); + MENU_OPTION_ADD_ITEM, + MENU_OPTION_REMOVE_ITEM, + MENU_OPTION_CREATE_FROM_SCENE, + MENU_OPTION_MERGE_FROM_SCENE + }; + + int option; + void _menu_cbk(int p_option); + void _menu_confirm(); + void _name_dialog_confirm(const String &name); + + static void _import_node(Node *p_node, Ref<TileSet> p_library); + static void _import_scene(Node *p_scene, Ref<TileSet> p_library, bool p_merge); protected: static void _bind_methods(); void _notification(int p_what); virtual void _changed_callback(Object *p_changed, const char *p_prop); +public: + void edit(const Ref<TileSet> &p_tileset); + static Error update_library_file(Node *p_base_scene, Ref<TileSet> ml, bool p_merge = true); + + TileSetEditor(EditorNode *p_editor); + ~TileSetEditor(); + private: - void _on_autotile_selected(int p_index); + void _on_tile_list_selected(int p_index); void _on_edit_mode_changed(int p_edit_mode); + void _on_workspace_overlay_draw(); void _on_workspace_draw(); void _on_workspace_input(const Ref<InputEvent> &p_ie); void _on_tool_clicked(int p_tool); @@ -142,24 +175,28 @@ private: void _set_snap_sep_x(float p_val); void _set_snap_sep_y(float p_val); + void initialize_bottom_editor(); void draw_highlight_tile(Vector2 coord, const Vector<Vector2> &other_highlighted = Vector<Vector2>()); void draw_grid_snap(); void draw_polygon_shapes(); void close_shape(const Vector2 &shape_anchor); void select_coord(const Vector2 &coord); Vector2 snap_point(const Vector2 &point); + void update_tile_list(); + void update_tile_list_icon(); + void update_workspace_tile_mode(); - void edit(Object *p_node); int get_current_tile(); }; -class AutotileEditorHelper : public Object { +class TileSetEditorHelper : public Object { - friend class AutotileEditor; - GDCLASS(AutotileEditorHelper, Object); + friend class TileSetEditor; + GDCLASS(TileSetEditorHelper, Object); - Ref<TileSet> tile_set; - AutotileEditor *autotile_editor; + Ref<TileSet> tileset; + TileSetEditor *tileset_editor; + int selected_tile; public: void set_tileset(const Ref<TileSet> &p_tileset); @@ -169,46 +206,7 @@ protected: bool _get(const StringName &p_name, Variant &r_ret) const; void _get_property_list(List<PropertyInfo> *p_list) const; - AutotileEditorHelper(AutotileEditor *p_autotile_editor); -}; - -class TileSetEditor : public Control { - - friend class TileSetEditorPlugin; - GDCLASS(TileSetEditor, Control); - - Ref<TileSet> tileset; - - EditorNode *editor; - MenuButton *menu; - ConfirmationDialog *cd; - EditorNameDialog *nd; - AcceptDialog *err_dialog; - - enum { - - MENU_OPTION_ADD_ITEM, - MENU_OPTION_REMOVE_ITEM, - MENU_OPTION_CREATE_FROM_SCENE, - MENU_OPTION_MERGE_FROM_SCENE - }; - - int option; - void _menu_cbk(int p_option); - void _menu_confirm(); - void _name_dialog_confirm(const String &name); - - static void _import_node(Node *p_node, Ref<TileSet> p_library); - static void _import_scene(Node *p_scene, Ref<TileSet> p_library, bool p_merge); - -protected: - static void _bind_methods(); - -public: - void edit(const Ref<TileSet> &p_tileset); - static Error update_library_file(Node *p_base_scene, Ref<TileSet> ml, bool p_merge = true); - - TileSetEditor(EditorNode *p_editor); + TileSetEditorHelper(TileSetEditor *p_tileset_editor); }; class TileSetEditorPlugin : public EditorPlugin { @@ -216,10 +214,10 @@ class TileSetEditorPlugin : public EditorPlugin { GDCLASS(TileSetEditorPlugin, EditorPlugin); TileSetEditor *tileset_editor; - AutotileEditor *autotile_editor; EditorNode *editor; - ToolButton *autotile_button; + ToolButton *tileset_editor_button; + ToolButton *texture_region_button; public: virtual String get_name() const { return "TileSet"; } diff --git a/editor/project_export.cpp b/editor/project_export.cpp index d15a37a19c..9f87fc82b5 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -56,6 +56,12 @@ void ProjectExportDialog::_notification(int p_what) { case NOTIFICATION_POPUP_HIDE: { EditorSettings::get_singleton()->set("interface/dialogs/export_bounds", get_rect()); } break; + case NOTIFICATION_THEME_CHANGED: { + delete_preset->set_icon(get_icon("Remove", "EditorIcons")); + Control *panel = custom_feature_display->get_parent_control(); + if (panel) + panel->add_style_override("panel", get_stylebox("bg", "Tree")); + } break; } } @@ -75,7 +81,14 @@ void ProjectExportDialog::popup_export() { if (EditorSettings::get_singleton()->has_setting("interface/dialogs/export_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/export_bounds")); } else { - popup_centered_ratio(); + + Size2 popup_size = Size2(900, 700) * editor_get_scale(); + Size2 window_size = get_viewport_rect().size; + + popup_size.x = MIN(window_size.x * 0.8, popup_size.x); + popup_size.y = MIN(window_size.y * 0.8, popup_size.y); + + popup_centered(popup_size); } } @@ -201,9 +214,9 @@ void ProjectExportDialog::_edit_preset(int p_index) { TreeItem *patch_add = patches->create_item(patch_root); patch_add->set_metadata(0, patchlist.size()); if (patchlist.size() == 0) - patch_add->set_text(0, "Add initial export.."); + patch_add->set_text(0, "Add initial export..."); else - patch_add->set_text(0, "Add previous patches.."); + patch_add->set_text(0, "Add previous patches..."); patch_add->add_button(0, get_icon("folder", "FileDialog"), 1); @@ -697,9 +710,9 @@ void ProjectExportDialog::_export_pck_zip_selected(const String &p_path) { ERR_FAIL_COND(platform.is_null()); if (p_path.ends_with(".zip")) { - platform->save_zip(current, p_path); + platform->export_zip(current, export_pck_zip_debug->is_pressed(), p_path); } else if (p_path.ends_with(".pck")) { - platform->save_pack(current, p_path); + platform->export_pack(current, export_pck_zip_debug->is_pressed(), p_path); } } @@ -797,7 +810,7 @@ ProjectExportDialog::ProjectExportDialog() { preset_vb->add_child(preset_hb); add_preset = memnew(MenuButton); - add_preset->set_text(TTR("Add..")); + add_preset->set_text(TTR("Add...")); add_preset->get_popup()->connect("index_pressed", this, "_add_preset"); preset_hb->add_child(add_preset); MarginContainer *mc = memnew(MarginContainer); @@ -975,11 +988,20 @@ ProjectExportDialog::ProjectExportDialog() { export_debug->set_pressed(true); export_project->get_vbox()->add_child(export_debug); + export_pck_zip_debug = memnew(CheckButton); + export_pck_zip_debug->set_text(TTR("Export With Debug")); + export_pck_zip_debug->set_pressed(true); + export_pck_zip->get_vbox()->add_child(export_pck_zip_debug); + set_hide_on_ok(false); editor_icons = "EditorIcons"; default_filename = EditorSettings::get_singleton()->get_project_metadata("export_options", "default_filename", String()); + + if (default_filename == "") { + default_filename = ProjectSettings::get_singleton()->get("application/config/name"); + } } ProjectExportDialog::~ProjectExportDialog() { diff --git a/editor/project_export.h b/editor/project_export.h index 6c74743769..b62254974d 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -131,6 +131,7 @@ private: FileDialog *export_pck_zip; FileDialog *export_project; CheckButton *export_debug; + CheckButton *export_pck_zip_debug; void _open_export_template_manager(); diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 16605f2ebd..666f08cb2d 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -152,7 +152,7 @@ private: return ""; } - } else if (mode == MODE_NEW) { + } else { // check if the specified folder is empty, even though this is not an error, it is good to check here d->list_dir_begin(); @@ -174,13 +174,6 @@ private: get_ok()->set_disabled(true); return ""; } - - } else if (d->file_exists("project.godot")) { - - set_message(TTR("Please choose a folder that does not contain a 'project.godot' file."), MESSAGE_ERROR); - memdelete(d); - get_ok()->set_disabled(true); - return ""; } set_message(""); @@ -257,8 +250,10 @@ private: void _create_folder() { - if (project_name->get_text() == "" || created_folder_path != "") + if (project_name->get_text() == "" || created_folder_path != "" || project_name->get_text().ends_with(".") || project_name->get_text().ends_with(" ")) { + set_message(TTR("Invalid Project Name."), MESSAGE_WARNING); return; + } DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); if (d->change_dir(project_path->get_text()) == OK) { @@ -311,8 +306,9 @@ private: ProjectSettings *current = memnew(ProjectSettings); - if (current->setup(dir, "")) { - set_message(TTR("Couldn't get project.godot in project path."), MESSAGE_ERROR); + int err = current->setup(dir, ""); + if (err != OK) { + set_message(vformat(TTR("Couldn't load project.godot in project path (error %d). It may be missing or corrupted."), err), MESSAGE_ERROR); } else { ProjectSettings::CustomMap edited_settings; edited_settings["application/config/name"] = project_name->get_text(); @@ -531,11 +527,18 @@ public: set_title(TTR("Rename Project")); get_ok()->set_text(TTR("Rename")); name_container->show(); + status_rect->hide(); + msg->hide(); + get_ok()->set_disabled(false); ProjectSettings *current = memnew(ProjectSettings); - if (current->setup(project_path->get_text(), "")) { - set_message(TTR("Couldn't get project.godot in the project path."), MESSAGE_ERROR); + int err = current->setup(project_path->get_text(), ""); + if (err != OK) { + 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); } else if (current->has_setting("application/config/name")) { project_name->set_text(current->get("application/config/name")); } @@ -543,8 +546,6 @@ public: project_name->call_deferred("grab_focus"); create_dir->hide(); - status_rect->hide(); - msg->hide(); } else { @@ -632,7 +633,7 @@ public: project_path->set_h_size_flags(SIZE_EXPAND_FILL); pphb->add_child(project_path); - // status button + // status icon status_rect = memnew(TextureRect); status_rect->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); pphb->add_child(status_rect); @@ -690,7 +691,7 @@ void ProjectManager::_notification(int p_what) { } break; case NOTIFICATION_READY: { - if (scroll_children->get_child_count() == 0) + if (scroll_children->get_child_count() == 0 && StreamPeerSSL::is_available()) open_templates->popup_centered_minsize(); } break; case NOTIFICATION_VISIBILITY_CHANGED: { @@ -716,6 +717,12 @@ void ProjectManager::_update_project_buttons() { CanvasItem *item = Object::cast_to<CanvasItem>(scroll_children->get_child(i)); item->update(); + + Button *show = Object::cast_to<Button>(item->get_node(NodePath("project/path_box/show"))); + if (show) { + String current = item->get_meta("name"); + show->set_visible(selected_list.has(current)); + } } erase_btn->set_disabled(selected_list.size() < 1); @@ -1095,9 +1102,26 @@ void ProjectManager::_load_recent_projects() { title->add_color_override("font_color", font_color); title->set_clip_text(true); vb->add_child(title); + + HBoxContainer *path_hb = memnew(HBoxContainer); + path_hb->set_name("path_box"); + path_hb->set_h_size_flags(SIZE_EXPAND_FILL); + vb->add_child(path_hb); + + Button *show = memnew(Button); + show->set_name("show"); + show->set_icon(get_icon("Filesystem", "EditorIcons")); + show->set_flat(true); + show->set_modulate(Color(1, 1, 1, 0.5)); + path_hb->add_child(show); + show->connect("pressed", this, "_show_project", varray(path)); + show->set_tooltip(TTR("Show In File Manager")); + show->set_visible(false); + Label *fpath = memnew(Label(path)); fpath->set_name("path"); - vb->add_child(fpath); + path_hb->add_child(fpath); + fpath->set_h_size_flags(SIZE_EXPAND_FILL); fpath->set_modulate(Color(1, 1, 1, 0.5)); fpath->add_color_override("font_color", font_color); fpath->set_clip_text(true); @@ -1127,7 +1151,7 @@ void ProjectManager::_on_project_created(const String &dir) { bool has_already = false; for (int i = 0; i < scroll_children->get_child_count(); i++) { HBoxContainer *hb = Object::cast_to<HBoxContainer>(scroll_children->get_child(i)); - Label *fpath = Object::cast_to<Label>(hb->get_node(NodePath("project/path"))); + Label *fpath = Object::cast_to<Label>(hb->get_node(NodePath("project/path_box/path"))); if (fpath->get_text() == dir) { has_already = true; break; @@ -1145,7 +1169,7 @@ void ProjectManager::_on_project_created(const String &dir) { void ProjectManager::_update_scroll_position(const String &dir) { for (int i = 0; i < scroll_children->get_child_count(); i++) { HBoxContainer *hb = Object::cast_to<HBoxContainer>(scroll_children->get_child(i)); - Label *fpath = Object::cast_to<Label>(hb->get_node(NodePath("project/path"))); + Label *fpath = Object::cast_to<Label>(hb->get_node(NodePath("project/path_box/path"))); if (fpath->get_text() == dir) { last_clicked = hb->get_meta("name"); selected_list.clear(); @@ -1263,6 +1287,11 @@ void ProjectManager::_run_project() { } } +void ProjectManager::_show_project(const String &p_path) { + + OS::get_singleton()->shell_open(String("file://") + p_path); +} + void ProjectManager::_scan_dir(DirAccess *da, float pos, float total, List<String> *r_projects) { List<String> subdirs; @@ -1451,6 +1480,7 @@ void ProjectManager::_bind_methods() { ClassDB::bind_method("_open_project_confirm", &ProjectManager::_open_project_confirm); ClassDB::bind_method("_run_project", &ProjectManager::_run_project); ClassDB::bind_method("_run_project_confirm", &ProjectManager::_run_project_confirm); + ClassDB::bind_method("_show_project", &ProjectManager::_show_project); ClassDB::bind_method("_scan_projects", &ProjectManager::_scan_projects); ClassDB::bind_method("_scan_begin", &ProjectManager::_scan_begin); ClassDB::bind_method("_import_project", &ProjectManager::_import_project); @@ -1489,18 +1519,43 @@ ProjectManager::ProjectManager() { EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came { - int dpi_mode = EditorSettings::get_singleton()->get("interface/editor/hidpi_mode"); - if (dpi_mode == 0) { - const int screen = OS::get_singleton()->get_current_screen(); - editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); - } else if (dpi_mode == 1) { - editor_set_scale(0.75); - } else if (dpi_mode == 2) { - editor_set_scale(1.0); - } else if (dpi_mode == 3) { - editor_set_scale(1.5); - } else if (dpi_mode == 4) { - editor_set_scale(2.0); + 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 + const int screen = OS::get_singleton()->get_current_screen(); + editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); + } break; + + case 1: { + editor_set_scale(0.75); + } break; + + case 2: { + editor_set_scale(1.0); + } break; + + case 3: { + editor_set_scale(1.25); + } break; + + case 4: { + editor_set_scale(1.5); + } break; + + case 5: { + editor_set_scale(1.75); + } break; + + case 6: { + editor_set_scale(2.0); + } break; + + default: { + editor_set_scale(custom_display_scale); + } break; } } @@ -1542,7 +1597,7 @@ ProjectManager::ProjectManager() { String hash = String(VERSION_HASH); if (hash.length() != 0) hash = "." + hash.left(7); - l->set_text("v" VERSION_MKSTRING "" + hash); + l->set_text("v" VERSION_FULL_BUILD "" + hash); l->set_align(Label::ALIGN_CENTER); top_hb->add_child(l); diff --git a/editor/project_manager.h b/editor/project_manager.h index 23ffa2f857..a9d23b1f71 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -85,6 +85,7 @@ class ProjectManager : public Control { void _run_project_confirm(); void _open_project(); void _open_project_confirm(); + void _show_project(const String &p_path); void _import_project(); void _new_project(); void _rename_project(); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 704ec40e4c..a4265b4e32 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -31,6 +31,7 @@ #include "project_settings_editor.h" #include "core/global_constants.h" +#include "core/input_map.h" #include "core/os/keyboard.h" #include "core/project_settings.h" #include "core/translation.h" @@ -110,11 +111,28 @@ void ProjectSettingsEditor::_notification(int p_what) { EditorSettings::get_singleton()->set("interface/dialogs/project_settings_bounds", get_rect()); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + + search_button->set_icon(get_icon("Search", "EditorIcons")); + clear_button->set_icon(get_icon("Close", "EditorIcons")); + action_add_error->add_color_override("font_color", get_color("error_color", "Editor")); + popup_add->set_item_icon(popup_add->get_item_index(INPUT_KEY), get_icon("Keyboard", "EditorIcons")); + popup_add->set_item_icon(popup_add->get_item_index(INPUT_JOY_BUTTON), get_icon("JoyButton", "EditorIcons")); + popup_add->set_item_icon(popup_add->get_item_index(INPUT_JOY_MOTION), get_icon("JoyAxis", "EditorIcons")); + popup_add->set_item_icon(popup_add->get_item_index(INPUT_MOUSE_BUTTON), get_icon("Mouse", "EditorIcons")); _update_actions(); } break; } } +static bool _validate_action_name(const String &p_name) { + const CharType *cstr = p_name.c_str(); + for (int i = 0; cstr[i]; i++) + if (cstr[i] == '/' || cstr[i] == ':' || cstr[i] == '"' || + cstr[i] == '=' || cstr[i] == '\\' || cstr[i] < 32) + return false; + return true; +} + void ProjectSettingsEditor::_action_selected() { TreeItem *ti = input_editor->get_selected(); @@ -137,12 +155,12 @@ void ProjectSettingsEditor::_action_edited() { if (new_name == old_name) return; - if (new_name.find("/") != -1 || new_name.find(":") != -1 || new_name == "") { + if (new_name == "" || !_validate_action_name(new_name)) { ti->set_text(0, old_name); add_at = "input/" + old_name; - message->set_text(TTR("Invalid action (anything goes but '/' or ':').")); + message->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\', or '\"'.")); message->popup_centered(Size2(300, 100) * EDSCALE); return; } @@ -160,15 +178,15 @@ void ProjectSettingsEditor::_action_edited() { } int order = ProjectSettings::get_singleton()->get_order(add_at); - Array va = ProjectSettings::get_singleton()->get(add_at); + Dictionary action = ProjectSettings::get_singleton()->get(add_at); setting = true; undo_redo->create_action(TTR("Rename Input Action Event")); undo_redo->add_do_method(ProjectSettings::get_singleton(), "clear", add_at); - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", action_prop, va); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", action_prop, action); undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", action_prop, order); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "clear", action_prop); - undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", add_at, va); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", add_at, action); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", add_at, order); undo_redo->add_do_method(this, "_update_actions"); undo_redo->add_undo_method(this, "_update_actions"); @@ -185,8 +203,9 @@ void ProjectSettingsEditor::_device_input_add() { Ref<InputEvent> ie; String name = add_at; int idx = edit_idx; - Array old_val = ProjectSettings::get_singleton()->get(name); - Array arr = old_val.duplicate(); + Dictionary old_val = ProjectSettings::get_singleton()->get(name); + Dictionary action = old_val.duplicate(); + Array events = action["events"]; switch (add_type) { @@ -195,11 +214,11 @@ void ProjectSettingsEditor::_device_input_add() { Ref<InputEventMouseButton> mb; mb.instance(); mb->set_button_index(device_index->get_selected() + 1); - mb->set_device(device_id->get_value()); + mb->set_device(_get_current_device()); - for (int i = 0; i < arr.size(); i++) { + for (int i = 0; i < events.size(); i++) { - Ref<InputEventMouseButton> aie = arr[i]; + Ref<InputEventMouseButton> aie = events[i]; if (aie.is_null()) continue; if (aie->get_device() == mb->get_device() && aie->get_button_index() == mb->get_button_index()) { @@ -216,19 +235,26 @@ void ProjectSettingsEditor::_device_input_add() { jm.instance(); jm->set_axis(device_index->get_selected() >> 1); jm->set_axis_value(device_index->get_selected() & 1 ? 1 : -1); - jm->set_device(device_id->get_value()); + jm->set_device(_get_current_device()); - for (int i = 0; i < arr.size(); i++) { + bool should_update_event = true; + Variant deadzone = device_special_value->get_value(); + for (int i = 0; i < events.size(); i++) { - Ref<InputEventJoypadMotion> aie = arr[i]; + Ref<InputEventJoypadMotion> aie = events[i]; if (aie.is_null()) continue; if (aie->get_device() == jm->get_device() && aie->get_axis() == jm->get_axis() && aie->get_axis_value() == jm->get_axis_value()) { - return; + should_update_event = false; + break; } } + if (!should_update_event && deadzone == action["deadzone"]) + return; + ie = jm; + action["deadzone"] = deadzone; } break; case INPUT_JOY_BUTTON: { @@ -237,11 +263,11 @@ void ProjectSettingsEditor::_device_input_add() { jb.instance(); jb->set_button_index(device_index->get_selected()); - jb->set_device(device_id->get_value()); + jb->set_device(_get_current_device()); - for (int i = 0; i < arr.size(); i++) { + for (int i = 0; i < events.size(); i++) { - Ref<InputEventJoypadButton> aie = arr[i]; + Ref<InputEventJoypadButton> aie = events[i]; if (aie.is_null()) continue; if (aie->get_device() == jb->get_device() && aie->get_button_index() == jb->get_button_index()) { @@ -254,14 +280,15 @@ void ProjectSettingsEditor::_device_input_add() { default: {} } - if (idx < 0 || idx >= arr.size()) { - arr.push_back(ie); + if (idx < 0 || idx >= events.size()) { + events.push_back(ie); } else { - arr[idx] = ie; + events[idx] = ie; } + action["events"] = events; undo_redo->create_action(TTR("Add Input Action Event")); - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, arr); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, action); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", name, old_val); undo_redo->add_do_method(this, "_update_actions"); undo_redo->add_undo_method(this, "_update_actions"); @@ -272,6 +299,20 @@ void ProjectSettingsEditor::_device_input_add() { _show_last_added(ie, name); } +void ProjectSettingsEditor::_set_current_device(int i_device) { + device_id->select(i_device + 1); +} + +int ProjectSettingsEditor::_get_current_device() { + return device_id->get_selected() - 1; +} + +String ProjectSettingsEditor::_get_device_string(int i_device) { + if (i_device == InputMap::ALL_DEVICES) + return TTR("All Devices"); + return TTR("Device") + " " + itos(i_device); +} + void ProjectSettingsEditor::_press_a_key_confirm() { if (last_wait_for_key.is_null()) @@ -288,12 +329,13 @@ void ProjectSettingsEditor::_press_a_key_confirm() { String name = add_at; int idx = edit_idx; - Array old_val = ProjectSettings::get_singleton()->get(name); - Array arr = old_val.duplicate(); + Dictionary old_val = ProjectSettings::get_singleton()->get(name); + Dictionary action = old_val.duplicate(); + Array events = action["events"]; - for (int i = 0; i < arr.size(); i++) { + for (int i = 0; i < events.size(); i++) { - Ref<InputEventKey> aie = arr[i]; + Ref<InputEventKey> aie = events[i]; if (aie.is_null()) continue; if (aie->get_scancode_with_modifiers() == ie->get_scancode_with_modifiers()) { @@ -301,14 +343,15 @@ void ProjectSettingsEditor::_press_a_key_confirm() { } } - if (idx < 0 || idx >= arr.size()) { - arr.push_back(ie); + if (idx < 0 || idx >= events.size()) { + events.push_back(ie); } else { - arr[idx] = ie; + events[idx] = ie; } + action["events"] = events; undo_redo->create_action(TTR("Add Input Action Event")); - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, arr); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, action); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", name, old_val); undo_redo->add_do_method(this, "_update_actions"); undo_redo->add_undo_method(this, "_update_actions"); @@ -382,10 +425,13 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even case INPUT_KEY: { - press_a_key_label->set_text(TTR("Press a Key..")); + press_a_key_label->set_text(TTR("Press a Key...")); last_wait_for_key = Ref<InputEvent>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); press_a_key->grab_focus(); + + device_special_value_label->hide(); + device_special_value->hide(); } break; case INPUT_MOUSE_BUTTON: { @@ -405,12 +451,15 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even Ref<InputEventMouseButton> mb = p_exiting_event; if (mb.is_valid()) { device_index->select(mb->get_button_index() - 1); - device_id->set_value(mb->get_device()); + _set_current_device(mb->get_device()); device_input->get_ok()->set_text(TTR("Change")); } else { - device_id->set_value(0); + _set_current_device(0); device_input->get_ok()->set_text(TTR("Add")); } + + device_special_value_label->hide(); + device_special_value->hide(); } break; case INPUT_JOY_MOTION: { @@ -426,12 +475,21 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even Ref<InputEventJoypadMotion> jm = p_exiting_event; if (jm.is_valid()) { device_index->select(jm->get_axis() * 2 + (jm->get_axis_value() > 0 ? 1 : 0)); - device_id->set_value(jm->get_device()); + _set_current_device(jm->get_device()); device_input->get_ok()->set_text(TTR("Change")); } else { - device_id->set_value(0); + _set_current_device(0); device_input->get_ok()->set_text(TTR("Add")); } + + device_special_value_label->set_text(TTR("Deadzone (global to the action):")); + device_special_value_label->show(); + device_special_value->set_min(0.0f); + device_special_value->set_max(1.0f); + device_special_value->set_step(0.01f); + Dictionary action = ProjectSettings::get_singleton()->get(add_at); + device_special_value->set_value(action.has("deadzone") ? action["deadzone"] : Variant(0.5f)); + device_special_value->show(); } break; case INPUT_JOY_BUTTON: { @@ -447,13 +505,15 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even Ref<InputEventJoypadButton> jb = p_exiting_event; if (jb.is_valid()) { device_index->select(jb->get_button_index()); - device_id->set_value(jb->get_device()); + _set_current_device(jb->get_device()); device_input->get_ok()->set_text(TTR("Change")); } else { - device_id->set_value(0); + _set_current_device(0); device_input->get_ok()->set_text(TTR("Add")); } + device_special_value_label->hide(); + device_special_value->hide(); } break; default: {} } @@ -490,18 +550,17 @@ void ProjectSettingsEditor::_action_activated() { String name = "input/" + ti->get_parent()->get_text(0); int idx = ti->get_metadata(0); - Array va = ProjectSettings::get_singleton()->get(name); - - ERR_FAIL_INDEX(idx, va.size()); + Dictionary action = ProjectSettings::get_singleton()->get(name); + Array events = action["events"]; - Ref<InputEvent> ie = va[idx]; - - if (ie.is_null()) + ERR_FAIL_INDEX(idx, events.size()); + Ref<InputEvent> event = events[idx]; + if (event.is_null()) return; add_at = name; edit_idx = idx; - _edit_item(ie); + _edit_item(event); } void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column, int p_id) { @@ -511,6 +570,7 @@ void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column, ERR_FAIL_COND(!ti); if (p_id == 1) { + // Add action event Point2 ofs = input_editor->get_global_position(); Rect2 ir = input_editor->get_item_rect(ti); ir.position.y -= input_editor->get_scroll().y; @@ -522,14 +582,12 @@ void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column, edit_idx = -1; } else if (p_id == 2) { - //remove + // Remove if (ti->get_parent() == input_editor->get_root()) { - - //remove main thing - + // Remove action String name = "input/" + ti->get_text(0); - Variant old_val = ProjectSettings::get_singleton()->get(name); + Dictionary old_val = ProjectSettings::get_singleton()->get(name); int order = ProjectSettings::get_singleton()->get_order(name); undo_redo->create_action(TTR("Erase Input Action")); @@ -543,24 +601,19 @@ void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column, undo_redo->commit_action(); } else { - //remove action + // Remove action event String name = "input/" + ti->get_parent()->get_text(0); - Variant old_val = ProjectSettings::get_singleton()->get(name); + Dictionary old_val = ProjectSettings::get_singleton()->get(name); + Dictionary action = old_val.duplicate(); int idx = ti->get_metadata(0); - Array va = old_val; - - ERR_FAIL_INDEX(idx, va.size()); - - for (int i = idx; i < va.size() - 1; i++) { - - va[i] = va[i + 1]; - } - - va.resize(va.size() - 1); + Array events = action["events"]; + ERR_FAIL_INDEX(idx, events.size()); + events.remove(idx); + action["events"] = events; undo_redo->create_action(TTR("Erase Input Action Event")); - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, va); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, action); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", name, old_val); undo_redo->add_do_method(this, "_update_actions"); undo_redo->add_undo_method(this, "_update_actions"); @@ -569,30 +622,31 @@ void ProjectSettingsEditor::_action_button_pressed(Object *p_obj, int p_column, undo_redo->commit_action(); } } else if (p_id == 3) { - //edit + // Edit if (ti->get_parent() == input_editor->get_root()) { - + // Edit action name ti->set_as_cursor(0); input_editor->edit_selected(); } else { - //edit action + // Edit action event String name = "input/" + ti->get_parent()->get_text(0); int idx = ti->get_metadata(0); - Array va = ProjectSettings::get_singleton()->get(name); + Dictionary action = ProjectSettings::get_singleton()->get(name); - ERR_FAIL_INDEX(idx, va.size()); + Array events = action["events"]; + ERR_FAIL_INDEX(idx, events.size()); - Ref<InputEvent> ie = va[idx]; + Ref<InputEvent> event = events[idx]; - if (ie.is_null()) + if (event.is_null()) return; ti->set_as_cursor(0); add_at = name; edit_idx = idx; - _edit_item(ie); + _edit_item(event); } } } @@ -628,17 +682,18 @@ void ProjectSettingsEditor::_update_actions() { } item->set_custom_bg_color(0, get_color("prop_subsection", "Editor")); - Array actions = ProjectSettings::get_singleton()->get(pi.name); + Dictionary action = ProjectSettings::get_singleton()->get(pi.name); + Array events = action["events"]; - for (int i = 0; i < actions.size(); i++) { + for (int i = 0; i < events.size(); i++) { - Ref<InputEvent> ie = actions[i]; - if (ie.is_null()) + Ref<InputEvent> event = events[i]; + if (event.is_null()) continue; TreeItem *action = input_editor->create_item(item); - Ref<InputEventKey> k = ie; + Ref<InputEventKey> k = event; if (k.is_valid()) { String str = keycode_get_string(k->get_scancode()).capitalize(); @@ -655,11 +710,11 @@ void ProjectSettingsEditor::_update_actions() { action->set_icon(0, get_icon("Keyboard", "EditorIcons")); } - Ref<InputEventJoypadButton> jb = ie; + Ref<InputEventJoypadButton> jb = event; if (jb.is_valid()) { - String str = TTR("Device") + " " + itos(jb->get_device()) + ", " + TTR("Button") + " " + itos(jb->get_button_index()); + String str = _get_device_string(jb->get_device()) + ", " + TTR("Button") + " " + itos(jb->get_button_index()); if (jb->get_button_index() >= 0 && jb->get_button_index() < JOY_BUTTON_MAX) str += String() + " (" + _button_names[jb->get_button_index()] + ")."; else @@ -669,10 +724,10 @@ void ProjectSettingsEditor::_update_actions() { action->set_icon(0, get_icon("JoyButton", "EditorIcons")); } - Ref<InputEventMouseButton> mb = ie; + Ref<InputEventMouseButton> mb = event; if (mb.is_valid()) { - String str = TTR("Device") + " " + itos(mb->get_device()) + ", "; + String str = _get_device_string(mb->get_device()) + ", "; switch (mb->get_button_index()) { case BUTTON_LEFT: str += TTR("Left Button."); break; case BUTTON_RIGHT: str += TTR("Right Button."); break; @@ -686,21 +741,21 @@ void ProjectSettingsEditor::_update_actions() { action->set_icon(0, get_icon("Mouse", "EditorIcons")); } - Ref<InputEventJoypadMotion> jm = ie; + 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 desc = _axis_names[n]; - String str = TTR("Device") + " " + itos(jm->get_device()) + ", " + TTR("Axis") + " " + itos(ax) + " " + (jm->get_axis_value() < 0 ? "-" : "+") + desc + "."; + String str = _get_device_string(jm->get_device()) + ", " + TTR("Axis") + " " + itos(ax) + " " + (jm->get_axis_value() < 0 ? "-" : "+") + desc + "."; action->set_text(0, str); action->set_icon(0, get_icon("JoyAxis", "EditorIcons")); } action->add_button(0, get_icon("Edit", "EditorIcons"), 3, false, TTR("Edit")); action->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove")); action->set_metadata(0, i); - action->set_meta("__input", ie); + action->set_meta("__input", event); } } @@ -713,7 +768,14 @@ void ProjectSettingsEditor::popup_project_settings() { if (EditorSettings::get_singleton()->has_setting("interface/dialogs/project_settings_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/project_settings_bounds")); } else { - popup_centered_ratio(); + + Size2 popup_size = Size2(900, 700) * editor_get_scale(); + Size2 window_size = get_viewport_rect().size; + + popup_size.x = MIN(window_size.x * 0.8, popup_size.x); + popup_size.y = MIN(window_size.y * 0.8, popup_size.y); + + popup_centered(popup_size); } globals_editor->update_category_list(); _update_translations(); @@ -750,7 +812,16 @@ void ProjectSettingsEditor::_item_add() { String catname = category->get_text().strip_edges(); String propname = property->get_text().strip_edges(); - String name = catname != "" ? catname + "/" + propname : propname; + + if (propname.empty()) { + return; + } + + if (catname.empty()) { + catname = "global"; + } + + String name = catname + "/" + propname; undo_redo->create_action(TTR("Add Global Property")); @@ -821,9 +892,9 @@ void ProjectSettingsEditor::_action_check(String p_action) { action_add->set_disabled(true); } else { - if (p_action.find("/") != -1 || p_action.find(":") != -1) { + if (!_validate_action_name(p_action)) { - action_add_error->set_text(TTR("Can't contain '/' or ':'")); + action_add_error->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'")); action_add_error->show(); action_add->set_disabled(true); return; @@ -851,10 +922,12 @@ void ProjectSettingsEditor::_action_adds(String) { void ProjectSettingsEditor::_action_add() { - Array va; + Dictionary action; + action["events"] = Array(); + action["deadzone"] = 0.5f; String name = "input/" + action_name->get_text(); undo_redo->create_action(TTR("Add Input Action")); - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, va); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, action); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "clear", name); undo_redo->add_do_method(this, "_update_actions"); undo_redo->add_undo_method(this, "_update_actions"); @@ -1586,7 +1659,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { hbc->set_h_size_flags(Control::SIZE_EXPAND_FILL); props_base->add_child(hbc); - search_button = memnew(ToolButton); + search_button = memnew(Button); search_button->set_toggle_mode(true); search_button->set_pressed(false); search_button->set_text(TTR("Search")); @@ -1666,7 +1739,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { add_prop_bar->add_child(memnew(VSeparator)); popup_copy_to_feature = memnew(MenuButton); - popup_copy_to_feature->set_text(TTR("Override For..")); + popup_copy_to_feature->set_text(TTR("Override For...")); popup_copy_to_feature->set_disabled(true); add_prop_bar->add_child(popup_copy_to_feature); @@ -1730,7 +1803,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { add_child(press_a_key); l = memnew(Label); - l->set_text(TTR("Press a Key..")); + l->set_text(TTR("Press a Key...")); l->set_anchors_and_margins_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); l->set_margin(MARGIN_TOP, 20); @@ -1755,8 +1828,10 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { l->set_text(TTR("Device:")); vbc_left->add_child(l); - device_id = memnew(SpinBox); - device_id->set_value(0); + device_id = memnew(OptionButton); + for (int i = -1; i < 8; i++) + device_id->add_item(_get_device_string(i)); + _set_current_device(0); vbc_left->add_child(device_id); VBoxContainer *vbc_right = memnew(VBoxContainer); @@ -1771,6 +1846,14 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { device_index = memnew(OptionButton); vbc_right->add_child(device_index); + l = memnew(Label); + l->set_text(TTR("Special value:")); + vbc_right->add_child(l); + device_special_value_label = l; + + device_special_value = memnew(SpinBox); + vbc_right->add_child(device_special_value); + setting = false; //translations @@ -1791,7 +1874,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { tvb->add_child(thb); thb->add_child(memnew(Label(TTR("Translations:")))); thb->add_spacer(); - Button *addtr = memnew(Button(TTR("Add.."))); + Button *addtr = memnew(Button(TTR("Add..."))); addtr->connect("pressed", this, "_translation_file_open"); thb->add_child(addtr); VBoxContainer *tmc = memnew(VBoxContainer); @@ -1815,7 +1898,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { tvb->add_child(thb); thb->add_child(memnew(Label(TTR("Resources:")))); thb->add_spacer(); - Button *addtr = memnew(Button(TTR("Add.."))); + Button *addtr = memnew(Button(TTR("Add..."))); addtr->connect("pressed", this, "_translation_res_file_open"); thb->add_child(addtr); VBoxContainer *tmc = memnew(VBoxContainer); @@ -1836,7 +1919,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { tvb->add_child(thb); thb->add_child(memnew(Label(TTR("Remaps by Locale:")))); thb->add_spacer(); - addtr = memnew(Button(TTR("Add.."))); + addtr = memnew(Button(TTR("Add..."))); addtr->connect("pressed", this, "_translation_res_option_file_open"); translation_res_option_add_button = addtr; thb->add_child(addtr); diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index d6c2c0f5a8..b8bfdcd876 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -67,7 +67,7 @@ class ProjectSettingsEditor : public AcceptDialog { SectionedPropertyEditor *globals_editor; HBoxContainer *search_bar; - ToolButton *search_button; + Button *search_button; LineEdit *search_box; ToolButton *clear_button; @@ -80,9 +80,11 @@ class ProjectSettingsEditor : public AcceptDialog { ConfirmationDialog *press_a_key; Label *press_a_key_label; ConfirmationDialog *device_input; - SpinBox *device_id; + OptionButton *device_id; OptionButton *device_index; Label *device_index_label; + SpinBox *device_special_value; + Label *device_special_value_label; MenuButton *popup_copy_to_feature; LineEdit *action_name; @@ -170,12 +172,18 @@ protected: void _notification(int p_what); static void _bind_methods(); + int _get_current_device(); + void _set_current_device(int i_device); + String _get_device_string(int i_device); + public: void add_translation(const String &p_translation); static ProjectSettingsEditor *get_singleton() { return singleton; } void popup_project_settings(); void set_plugins_page(); + EditorAutoloadSettings *get_autoload_settings() { return autoload_settings; } + TabContainer *get_tabs(); void queue_save(); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 87906c5a93..e0063925b1 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -285,6 +285,11 @@ void CustomPropertyEditor::_menu_option(int p_which) { } Object *obj = ClassDB::instance(intype); + + if (!obj) { + obj = EditorNode::get_editor_data().instance_custom_type(intype, "Resource"); + } + ERR_BREAK(!obj); Resource *res = Object::cast_to<Resource>(obj); ERR_BREAK(!res); @@ -481,7 +486,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: type_button->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -3 * EDSCALE); type_button->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -25 * EDSCALE); type_button->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -7 * EDSCALE); - type_button->set_text(TTR("Preset..")); + type_button->set_text(TTR("Preset...")); type_button->get_popup()->clear(); type_button->get_popup()->add_item(TTR("Linear"), EASING_LINEAR); type_button->get_popup()->add_item(TTR("Ease In"), EASING_EASE_IN); @@ -525,14 +530,14 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: if (hint == PROPERTY_HINT_FILE || hint == PROPERTY_HINT_GLOBAL_FILE) { List<String> names; - names.push_back(TTR("File..")); + names.push_back(TTR("File...")); names.push_back(TTR("Clear")); config_action_buttons(names); } else if (hint == PROPERTY_HINT_DIR || hint == PROPERTY_HINT_GLOBAL_DIR) { List<String> names; - names.push_back(TTR("Dir..")); + names.push_back(TTR("Dir...")); names.push_back(TTR("Clear")); config_action_buttons(names); } else if (hint == PROPERTY_HINT_ENUM) { @@ -877,6 +882,12 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } else if (hint_text != "") { int idx = 0; + Vector<EditorData::CustomType> custom_resources; + + if (EditorNode::get_editor_data().get_custom_types().has("Resource")) { + custom_resources = EditorNode::get_editor_data().get_custom_types()["Resource"]; + } + for (int i = 0; i < hint_text.get_slice_count(","); i++) { String base = hint_text.get_slice(",", i); @@ -885,6 +896,11 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: valid_inheritors.insert(base); List<StringName> inheritors; ClassDB::get_inheriters_from_class(base.strip_edges(), &inheritors); + + for (int i = 0; i < custom_resources.size(); i++) { + inheritors.push_back(custom_resources[i].name); + } + List<StringName>::Element *E = inheritors.front(); while (E) { valid_inheritors.insert(E->get()); @@ -893,14 +909,34 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: for (Set<String>::Element *E = valid_inheritors.front(); E; E = E->next()) { String t = E->get(); - if (!ClassDB::can_instance(t)) + + bool is_custom_resource = false; + Ref<Texture> icon; + if (!custom_resources.empty()) { + for (int i = 0; i < custom_resources.size(); i++) { + if (custom_resources[i].name == t) { + is_custom_resource = true; + if (custom_resources[i].icon.is_valid()) + icon = custom_resources[i].icon; + break; + } + } + } + + if (!is_custom_resource && !ClassDB::can_instance(t)) continue; + inheritors_array.push_back(t); int id = TYPE_BASE_ID + idx; - if (has_icon(t, "EditorIcons")) { - menu->add_icon_item(get_icon(t, "EditorIcons"), vformat(TTR("New %s"), t), id); + if (!icon.is_valid() && has_icon(t, "EditorIcons")) { + icon = get_icon(t, "EditorIcons"); + } + + if (icon.is_valid()) { + + menu->add_icon_item(icon, vformat(TTR("New %s"), t), id); } else { menu->add_item(vformat(TTR("New %s"), t), id); @@ -1094,6 +1130,10 @@ void CustomPropertyEditor::_type_create_selected(int p_idx) { Object *obj = ClassDB::instance(intype); + if (!obj) { + obj = EditorNode::get_editor_data().instance_custom_type(intype, "Resource"); + } + ERR_FAIL_COND(!obj); Resource *res = Object::cast_to<Resource>(obj); @@ -1291,6 +1331,11 @@ void CustomPropertyEditor::_action_pressed(int p_which) { if (hint == PROPERTY_HINT_RESOURCE_TYPE) { Object *obj = ClassDB::instance(intype); + + if (!obj) { + obj = EditorNode::get_editor_data().instance_custom_type(intype, "Resource"); + } + ERR_BREAK(!obj); Resource *res = Object::cast_to<Resource>(obj); ERR_BREAK(!res); @@ -2695,7 +2740,7 @@ TreeItem *PropertyEditor::get_parent_node(String p_path, HashMap<String, TreeIte item->set_editable(1, false); item->set_selectable(1, subsection_selectable); - if (use_folding) { // + if (use_folding) { if (!obj->editor_is_section_unfolded(p_path)) { updating_folding = true; item->set_collapsed(true); @@ -3015,7 +3060,7 @@ void PropertyEditor::update_tree() { item->set_tooltip(1, obj->get(p.name) ? "True" : "False"); item->set_checked(1, obj->get(p.name)); if (show_type_icons) - item->set_icon(0, get_icon("Bool", "EditorIcons")); + item->set_icon(0, get_icon("bool", "EditorIcons")); item->set_editable(1, !read_only); } break; @@ -3135,12 +3180,12 @@ void PropertyEditor::update_tree() { if (p.type == Variant::REAL) { if (show_type_icons) - item->set_icon(0, get_icon("Real", "EditorIcons")); + item->set_icon(0, get_icon("float", "EditorIcons")); item->set_range(1, obj->get(p.name)); } else { if (show_type_icons) - item->set_icon(0, get_icon("Integer", "EditorIcons")); + item->set_icon(0, get_icon("int", "EditorIcons")); item->set_range(1, obj->get(p.name)); } @@ -3228,25 +3273,37 @@ void PropertyEditor::update_tree() { while (hint.begins_with(itos(Variant::ARRAY) + ":")) { type_name += "<Array"; type_name_suffix += ">"; - hint = hint.substr(2, hint.size() - 2); + hint = hint.right(2); } if (hint.find(":") >= 0) { - hint = hint.substr(0, hint.find(":")); + int colon_pos = hint.find(":"); + String hint_string = hint.right(colon_pos + 1); + hint = hint.left(colon_pos); + + PropertyHint property_hint = PROPERTY_HINT_NONE; + if (hint.find("/") >= 0) { - hint = hint.substr(0, hint.find("/")); + int slash_pos = hint.find("/"); + property_hint = PropertyHint(hint.right(slash_pos + 1).to_int()); + hint = hint.left(slash_pos); + } + + if (property_hint == PROPERTY_HINT_RESOURCE_TYPE) { + type_name += "<" + hint_string; + } else { + type_name += "<" + Variant::get_type_name(Variant::Type(hint.to_int())); } - type_name += "<" + Variant::get_type_name(Variant::Type(hint.to_int())); type_name_suffix += ">"; } type_name += type_name_suffix; if (v.is_array()) - item->set_text(1, type_name + "[" + itos(v.call("size")) + "]"); + item->set_text(1, type_name + "(" + itos(v.call("size")) + ")"); else - item->set_text(1, type_name + "[]"); + item->set_text(1, type_name + "()"); if (show_type_icons) - item->set_icon(0, get_icon("ArrayData", "EditorIcons")); + item->set_icon(0, get_icon("PoolByteArray", "EditorIcons")); } break; case Variant::DICTIONARY: { @@ -3258,7 +3315,7 @@ void PropertyEditor::update_tree() { item->add_button(1, get_icon("EditResource", "EditorIcons")); if (show_type_icons) - item->set_icon(0, get_icon("DictionaryData", "EditorIcons")); + item->set_icon(0, get_icon("Dictionary", "EditorIcons")); } break; @@ -3273,7 +3330,7 @@ void PropertyEditor::update_tree() { else item->set_text(1, "IntArray[]"); if (show_type_icons) - item->set_icon(0, get_icon("ArrayInt", "EditorIcons")); + item->set_icon(0, get_icon("PoolIntArray", "EditorIcons")); } break; case Variant::POOL_REAL_ARRAY: { @@ -3287,7 +3344,7 @@ void PropertyEditor::update_tree() { else item->set_text(1, "FloatArray[]"); if (show_type_icons) - item->set_icon(0, get_icon("ArrayReal", "EditorIcons")); + item->set_icon(0, get_icon("PoolRealArray", "EditorIcons")); } break; case Variant::POOL_STRING_ARRAY: { @@ -3301,7 +3358,7 @@ void PropertyEditor::update_tree() { else item->set_text(1, "String[]"); if (show_type_icons) - item->set_icon(0, get_icon("ArrayString", "EditorIcons")); + item->set_icon(0, get_icon("PoolStringArray", "EditorIcons")); } break; case Variant::POOL_BYTE_ARRAY: { @@ -3315,7 +3372,7 @@ void PropertyEditor::update_tree() { else item->set_text(1, "Byte[]"); if (show_type_icons) - item->set_icon(0, get_icon("ArrayData", "EditorIcons")); + item->set_icon(0, get_icon("PoolByteArray", "EditorIcons")); } break; case Variant::POOL_VECTOR2_ARRAY: { @@ -3343,7 +3400,7 @@ void PropertyEditor::update_tree() { else item->set_text(1, "Vector3[]"); if (show_type_icons) - item->set_icon(0, get_icon("Vector", "EditorIcons")); + item->set_icon(0, get_icon("Vector3", "EditorIcons")); } break; case Variant::POOL_COLOR_ARRAY: { @@ -3384,7 +3441,7 @@ void PropertyEditor::update_tree() { item->set_editable(1, true); item->set_text(1, obj->get(p.name)); if (show_type_icons) - item->set_icon(0, get_icon("Vector", "EditorIcons")); + item->set_icon(0, get_icon("Vector3", "EditorIcons")); } break; case Variant::TRANSFORM2D: @@ -3393,6 +3450,7 @@ void PropertyEditor::update_tree() { item->set_cell_mode(1, TreeItem::CELL_MODE_CUSTOM); item->set_editable(1, true); item->set_text(1, obj->get(p.name)); + } break; case Variant::TRANSFORM: { @@ -3400,7 +3458,7 @@ void PropertyEditor::update_tree() { item->set_editable(1, true); item->set_text(1, obj->get(p.name)); if (show_type_icons) - item->set_icon(0, get_icon("Matrix", "EditorIcons")); + item->set_icon(0, get_icon("Transform", "EditorIcons")); } break; case Variant::PLANE: { @@ -3419,6 +3477,7 @@ void PropertyEditor::update_tree() { item->set_text(1, "AABB"); if (show_type_icons) item->set_icon(0, get_icon("AABB", "EditorIcons")); + } break; case Variant::QUAT: { @@ -3446,6 +3505,8 @@ void PropertyEditor::update_tree() { item->set_editable(1, !read_only); item->set_text(1, obj->get(p.name)); item->add_button(1, get_icon("CopyNodePath", "EditorIcons")); + if (show_type_icons) + item->set_icon(0, get_icon("NodePath", "EditorIcons")); } break; case Variant::OBJECT: { @@ -3935,7 +3996,7 @@ void PropertyEditor::_edit_button(Object *p_item, int p_column, int p_button) { if (_might_be_in_instance() && _get_instanced_node_original_property(prop, vorig)) { - _edit_set(prop, vorig); + _edit_set(prop, vorig.duplicate(true)); // Set, making sure to duplicate arrays properly return; } @@ -4332,7 +4393,7 @@ PropertyEditor::PropertyEditor() { use_filter = false; subsection_selectable = false; property_selectable = false; - show_type_icons = false; // maybe one day will return. + show_type_icons = EDITOR_DEF("interface/editor/show_type_icons", false); } PropertyEditor::~PropertyEditor() { diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 41ee5ab286..ba661813d6 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -67,6 +67,9 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) { if (get_viewport()->get_modal_stack_top()) return; //ignore because of modal window + if (get_focus_owner() && get_focus_owner()->is_text_field()) + return; + if (!p_event->is_pressed() || p_event->is_echo()) return; @@ -104,7 +107,12 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) { void SceneTreeDock::instance(const String &p_file) { Node *parent = scene_tree->get_selected(); - if (!parent || !edited_scene) { + + if (!parent) { + Node *parent = edited_scene; + }; + + if (!edited_scene) { current_option = -1; accept->get_ok()->set_text(TTR("OK :(")); @@ -342,17 +350,30 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { } break; case TOOL_CLEAR_SCRIPT: { - Node *selected = scene_tree->get_selected(); - if (!selected) - break; - Ref<Script> existing = selected->get_script(); - if (existing.is_valid()) { - const RefPtr empty; - selected->set_script(empty); - _update_script_button(); + List<Node *> selection = editor_selection->get_selected_node_list(); + + if (selection.empty()) + return; + + editor_data->get_undo_redo().create_action(TTR("Clear Script")); + editor_data->get_undo_redo().add_do_method(editor, "push_item", (Script *)NULL); + + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + + Ref<Script> existing = E->get()->get_script(); + if (existing.is_valid()) { + const RefPtr empty; + editor_data->get_undo_redo().add_do_method(E->get(), "set_script", empty); + editor_data->get_undo_redo().add_undo_method(E->get(), "set_script", existing); + } } + editor_data->get_undo_redo().add_do_method(this, "_update_script_button"); + editor_data->get_undo_redo().add_undo_method(this, "_update_script_button"); + + editor_data->get_undo_redo().commit_action(); + } break; case TOOL_MOVE_UP: case TOOL_MOVE_DOWN: { @@ -363,7 +384,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (scene_tree->get_selected() == edited_scene) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done on the tree root.")); accept->popup_centered_minsize(); break; @@ -424,7 +445,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (editor_selection->is_selected(edited_scene)) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done on the tree root.")); accept->popup_centered_minsize(); break; @@ -494,7 +515,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (editor_selection->is_selected(edited_scene)) { current_option = -1; - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done on the tree root.")); accept->popup_centered_minsize(); break; @@ -555,7 +576,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { Node *scene = editor_data->get_edited_scene_root(); if (!scene) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done without a scene.")); accept->popup_centered_minsize(); break; @@ -564,7 +585,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { List<Node *> selection = editor_selection->get_selected_node_list(); if (selection.size() != 1) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation requires a single selected node.")); accept->popup_centered_minsize(); break; @@ -573,14 +594,14 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { Node *tocopy = selection.front()->get(); if (tocopy == scene) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Can not perform with the root node.")); accept->popup_centered_minsize(); break; } if (tocopy != editor_data->get_edited_scene_root() && tocopy->get_filename() != "") { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation can't be done on instanced scenes.")); accept->popup_centered_minsize(); break; @@ -604,7 +625,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { new_scene_from_dialog->set_current_path(existing); new_scene_from_dialog->popup_centered_ratio(); - new_scene_from_dialog->set_title(TTR("Save New Scene As..")); + new_scene_from_dialog->set_title(TTR("Save New Scene As...")); } break; case TOOL_COPY_NODE_PATH: { List<Node *> selection = editor_selection->get_selected_node_list(); @@ -900,9 +921,6 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP if (!r_rem_anims) r_rem_anims = &rem_anims; - if (!bool(EDITOR_DEF("editors/animation/autorename_animation_tracks", true))) - return; - if (!p_base) { p_base = edited_scene; @@ -911,7 +929,54 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP if (!p_base) return; - if (Object::cast_to<AnimationPlayer>(p_base)) { + // Renaming node paths used in script instances + if (p_base->get_script_instance()) { + + ScriptInstance *si = p_base->get_script_instance(); + + if (si) { + + List<PropertyInfo> properties; + si->get_property_list(&properties); + + for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { + + String propertyname = E->get().name; + Variant p = p_base->get(propertyname); + if (p.get_type() == Variant::NODE_PATH) { + + // Goes through all paths to check if its matching + for (List<Pair<NodePath, NodePath> >::Element *E = p_renames->front(); E; E = E->next()) { + + NodePath root_path = p_base->get_path(); + + NodePath rel_path_old = root_path.rel_path_to(E->get().first); + + NodePath rel_path_new = E->get().second; + + // if not empty, get new relative path + if (E->get().second != NodePath()) { + rel_path_new = root_path.rel_path_to(E->get().second); + } + + // if old path detected, then it needs to be replaced with the new one + if (p == rel_path_old) { + + editor_data->get_undo_redo().add_do_property(p_base, propertyname, rel_path_new); + editor_data->get_undo_redo().add_undo_property(p_base, propertyname, rel_path_old); + + p_base->set(propertyname, rel_path_new); + break; + } + } + } + } + } + } + + bool autorename_animation_tracks = bool(EDITOR_DEF("editors/animation/autorename_animation_tracks", true)); + + if (autorename_animation_tracks && Object::cast_to<AnimationPlayer>(p_base)) { AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_base); List<StringName> anims; @@ -1142,7 +1207,30 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V editor_data->get_undo_redo().add_do_method(new_parent, "move_child", node, p_position_in_parent + inc); ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); + String old_name = former_names[ni]; String new_name = new_parent->validate_child_name(node); + + // name was modified, fix the path renames + if (old_name.casecmp_to(new_name) != 0) { + + // Fix the to name to have the new name + NodePath old_new_name = path_renames[ni].second; + NodePath new_path; + + Vector<StringName> unfixed_new_names = old_new_name.get_names(); + Vector<StringName> fixed_new_names; + + // Get last name and replace with fixed new name + for (int a = 0; a < (unfixed_new_names.size() - 1); a++) { + fixed_new_names.push_back(unfixed_new_names[a]); + } + fixed_new_names.push_back(new_name); + + NodePath fixed_node_path = NodePath(fixed_new_names, true); + + path_renames[ni].second = fixed_node_path; + } + editor_data->get_undo_redo().add_do_method(sed, "live_debug_reparent_node", edited_scene->get_path_to(node), edited_scene->get_path_to(new_parent), new_name, -1); editor_data->get_undo_redo().add_undo_method(sed, "live_debug_reparent_node", NodePath(String(edited_scene->get_path_to(new_parent)) + "/" + new_name), edited_scene->get_path_to(node->get_parent()), node->get_name(), node->get_index()); @@ -1205,12 +1293,26 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V void SceneTreeDock::_script_created(Ref<Script> p_script) { - Node *selected = scene_tree->get_selected(); - if (!selected) + List<Node *> selected = editor_selection->get_selected_node_list(); + + if (selected.empty()) return; - selected->set_script(p_script.get_ref_ptr()); - editor->push_item(p_script.operator->()); - _update_script_button(); + + editor_data->get_undo_redo().create_action(TTR("Attach Script")); + for (List<Node *>::Element *E = selected.front(); E; E = E->next()) { + + Ref<Script> existing = E->get()->get_script(); + editor_data->get_undo_redo().add_do_method(E->get(), "set_script", p_script.get_ref_ptr()); + editor_data->get_undo_redo().add_undo_method(E->get(), "set_script", existing); + } + + editor_data->get_undo_redo().add_do_method(editor, "push_item", p_script.operator->()); + editor_data->get_undo_redo().add_undo_method(editor, "push_item", (Script *)NULL); + + editor_data->get_undo_redo().add_do_method(this, "_update_script_button"); + editor_data->get_undo_redo().add_undo_method(this, "_update_script_button"); + + editor_data->get_undo_redo().commit_action(); } void SceneTreeDock::_delete_confirm() { @@ -1399,70 +1501,81 @@ void SceneTreeDock::_create() { Node *newnode = Object::cast_to<Node>(c); ERR_FAIL_COND(!newnode); - List<PropertyInfo> pinfo; - n->get_property_list(&pinfo); + replace_node(n, newnode); + } + } +} + +void SceneTreeDock::replace_node(Node *p_node, Node *p_by_node) { - for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { - if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) - continue; - if (E->get().name == "__meta__") - continue; - newnode->set(E->get().name, n->get(E->get().name)); - } + Node *n = p_node; + Node *newnode = p_by_node; + Node *default_oldnode = Object::cast_to<Node>(ClassDB::instance(n->get_class())); + List<PropertyInfo> pinfo; + n->get_property_list(&pinfo); + + for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { + if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) + continue; + if (E->get().name == "__meta__") + continue; + if (default_oldnode->get(E->get().name) != n->get(E->get().name)) { + newnode->set(E->get().name, n->get(E->get().name)); + } + } + memdelete(default_oldnode); - editor->push_item(NULL); + editor->push_item(NULL); - //reconnect signals - List<MethodInfo> sl; + //reconnect signals + List<MethodInfo> sl; - n->get_signal_list(&sl); - for (List<MethodInfo>::Element *E = sl.front(); E; E = E->next()) { + n->get_signal_list(&sl); + for (List<MethodInfo>::Element *E = sl.front(); E; E = E->next()) { - List<Object::Connection> cl; - n->get_signal_connection_list(E->get().name, &cl); + List<Object::Connection> cl; + n->get_signal_connection_list(E->get().name, &cl); - for (List<Object::Connection>::Element *F = cl.front(); F; F = F->next()) { + for (List<Object::Connection>::Element *F = cl.front(); F; F = F->next()) { - Object::Connection &c = F->get(); - if (!(c.flags & Object::CONNECT_PERSIST)) - continue; - newnode->connect(c.signal, c.target, c.method, varray(), Object::CONNECT_PERSIST); - } - } + Object::Connection &c = F->get(); + if (!(c.flags & Object::CONNECT_PERSIST)) + continue; + newnode->connect(c.signal, c.target, c.method, varray(), Object::CONNECT_PERSIST); + } + } - String newname = n->get_name(); + String newname = n->get_name(); - List<Node *> to_erase; - for (int i = 0; i < n->get_child_count(); i++) { - if (n->get_child(i)->get_owner() == NULL && n->is_owned_by_parent()) { - to_erase.push_back(n->get_child(i)); - } - } - n->replace_by(newnode, true); + List<Node *> to_erase; + for (int i = 0; i < n->get_child_count(); i++) { + if (n->get_child(i)->get_owner() == NULL && n->is_owned_by_parent()) { + to_erase.push_back(n->get_child(i)); + } + } + n->replace_by(newnode, true); - if (n == edited_scene) { - edited_scene = newnode; - editor->set_edited_scene(newnode); - newnode->set_editable_instances(n->get_editable_instances()); - } + if (n == edited_scene) { + edited_scene = newnode; + editor->set_edited_scene(newnode); + newnode->set_editable_instances(n->get_editable_instances()); + } - //small hack to make collisionshapes and other kind of nodes to work - for (int i = 0; i < newnode->get_child_count(); i++) { - Node *c = newnode->get_child(i); - c->call("set_transform", c->call("get_transform")); - } - editor_data->get_undo_redo().clear_history(); - newnode->set_name(newname); + //small hack to make collisionshapes and other kind of nodes to work + for (int i = 0; i < newnode->get_child_count(); i++) { + Node *c = newnode->get_child(i); + c->call("set_transform", c->call("get_transform")); + } + editor_data->get_undo_redo().clear_history(); + newnode->set_name(newname); - editor->push_item(newnode); + editor->push_item(newnode); - memdelete(n); + memdelete(n); - while (to_erase.front()) { - memdelete(to_erase.front()->get()); - to_erase.pop_front(); - } - } + while (to_erase.front()) { + memdelete(to_erase.front()->get()); + to_erase.pop_front(); } } @@ -1498,7 +1611,7 @@ void SceneTreeDock::_new_scene_from(String p_file) { List<Node *> selection = editor_selection->get_selected_node_list(); if (selection.size() != 1) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("This operation requires a single selected node.")); accept->popup_centered_minsize(); return; @@ -1516,7 +1629,7 @@ void SceneTreeDock::_new_scene_from(String p_file) { memdelete(copy); if (err != OK) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Couldn't save new scene. Likely dependencies (instances) couldn't be satisfied.")); accept->popup_centered_minsize(); return; @@ -1528,14 +1641,14 @@ void SceneTreeDock::_new_scene_from(String p_file) { err = ResourceSaver::save(p_file, sdata, flg); if (err != OK) { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Error saving scene.")); accept->popup_centered_minsize(); return; } _replace_with_branch_scene(p_file, base); } else { - accept->get_ok()->set_text(TTR("I see..")); + accept->get_ok()->set_text(TTR("I see...")); accept->set_text(TTR("Error duplicating scene to save it.")); accept->popup_centered_minsize(); return; @@ -1655,8 +1768,12 @@ void SceneTreeDock::_script_dropped(String p_file, NodePath p_to) { ERR_FAIL_COND(!scr.is_valid()); Node *n = get_node(p_to); if (n) { - n->set_script(scr.get_ref_ptr()); - _update_script_button(); + editor_data->get_undo_redo().create_action(TTR("Attach Script")); + editor_data->get_undo_redo().add_do_method(n, "set_script", scr); + editor_data->get_undo_redo().add_undo_method(n, "set_script", n->get_script()); + editor_data->get_undo_redo().add_do_method(this, "_update_script_button"); + editor_data->get_undo_redo().add_undo_method(this, "_update_script_button"); + editor_data->get_undo_redo().commit_action(); } } @@ -1749,6 +1866,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { subresources.clear(); menu_subresources->clear(); + menu_subresources->set_size(Size2(1, 1)); _add_children_to_popup(selection.front()->get(), 0); if (menu->get_item_count() > 0) menu->add_separator(); @@ -1793,6 +1911,10 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->set_item_checked(menu->get_item_idx_from_text(TTR("Load As Placeholder")), placeholder); } } + } else { + menu->add_separator(); + menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT); + menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); } menu->add_separator(); menu->add_icon_shortcut(get_icon("Remove", "EditorIcons"), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), KEY_DELETE), TOOL_ERASE); @@ -1882,8 +2004,6 @@ void SceneTreeDock::_local_tree_selected() { remote_tree->hide(); edit_remote->set_pressed(false); edit_local->set_pressed(true); - - _node_selected(); } void SceneTreeDock::_bind_methods() { @@ -1913,6 +2033,7 @@ void SceneTreeDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_focus_node"), &SceneTreeDock::_focus_node); ClassDB::bind_method(D_METHOD("_remote_tree_selected"), &SceneTreeDock::_remote_tree_selected); ClassDB::bind_method(D_METHOD("_local_tree_selected"), &SceneTreeDock::_local_tree_selected); + ClassDB::bind_method(D_METHOD("_update_script_button"), &SceneTreeDock::_update_script_button); ClassDB::bind_method(D_METHOD("instance"), &SceneTreeDock::instance); diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h index 0a68aa7dc2..a4f36e31ee 100644 --- a/editor/scene_tree_dock.h +++ b/editor/scene_tree_dock.h @@ -208,6 +208,8 @@ public: void show_tab_buttons(); void hide_tab_buttons(); + void replace_node(Node *p_node, Node *p_by_node); + void open_script_dialog(Node *p_for_node); SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSelection *p_editor_selection, EditorData &p_editor_data); }; diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index fd21b83605..64d278c0c5 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -69,24 +69,10 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i emit_signal("open_script", script); } else if (p_id == BUTTON_VISIBILITY) { - - if (n->is_class("Spatial")) { - - bool v = bool(n->call("is_visible")); - undo_redo->create_action(TTR("Toggle Spatial Visible")); - undo_redo->add_do_method(n, "set_visible", !v); - undo_redo->add_undo_method(n, "set_visible", v); - undo_redo->commit_action(); - - } else if (n->is_class("CanvasItem")) { - - bool v = bool(n->call("is_visible")); - undo_redo->create_action(TTR("Toggle CanvasItem Visible")); - undo_redo->add_do_method(n, v ? "hide" : "show"); - undo_redo->add_undo_method(n, v ? "show" : "hide"); - undo_redo->commit_action(); - } - + undo_redo->create_action(TTR("Toggle Visible")); + undo_redo->add_do_method(this, "toggle_visible", n); + undo_redo->add_undo_method(this, "toggle_visible", n); + undo_redo->commit_action(); } else if (p_id == BUTTON_LOCK) { if (n->is_class("CanvasItem") || n->is_class("Spatial")) { @@ -131,7 +117,34 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i NodeDock::singleton->show_groups(); } } +void SceneTreeEditor::_toggle_visible(Node *p_node) { + if (p_node->is_class("Spatial")) { + bool v = bool(p_node->call("is_visible")); + p_node->call("set_visible", !v); + } else if (p_node->is_class("CanvasItem")) { + bool v = bool(p_node->call("is_visible")); + if (v) { + p_node->call("hide"); + } else { + p_node->call("show"); + } + } +} +void SceneTreeEditor::toggle_visible(Node *p_node) { + _toggle_visible(p_node); + List<Node *> selection = editor_selection->get_selected_node_list(); + if (selection.size() > 1) { + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + Node *nv = E->get(); + ERR_FAIL_COND(!nv); + if (nv == p_node) { + continue; + } + _toggle_visible(nv); + } + } +} bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (!p_node) @@ -523,6 +536,7 @@ void SceneTreeEditor::_notification(int p_what) { tree->connect("item_collapsed", this, "_cell_collapsed"); EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); + _editor_settings_changed(); //get_scene()->connect("tree_changed",this,"_tree_changed",Vector<Variant>(),CONNECT_DEFERRED); //get_scene()->connect("node_removed",this,"_node_removed",Vector<Variant>(),CONNECT_DEFERRED); @@ -536,6 +550,10 @@ void SceneTreeEditor::_notification(int p_what) { get_tree()->disconnect("node_configuration_warning_changed", this, "_warning_changed"); EditorSettings::get_singleton()->disconnect("settings_changed", this, "_editor_settings_changed"); } + if (p_what == NOTIFICATION_THEME_CHANGED) { + + _update_tree(); + } } TreeItem *SceneTreeEditor::_find(TreeItem *p_node, const NodePath &p_path) { @@ -626,11 +644,12 @@ void SceneTreeEditor::_renamed() { ERR_FAIL_COND(!n); String new_name = which->get_text(0); - if (new_name.find(".") != -1 || new_name.find("/") != -1) { + if (!Node::_validate_node_name(new_name)) { - error->set_text(TTR("Invalid node name, the following characters are not allowed:") + "\n \".\", \"/\""); + error->set_text(TTR("Invalid node name, the following characters are not allowed:") + "\n" + Node::invalid_character); error->popup_centered_minsize(); - new_name = n->get_name(); + + which->set_text(0, new_name); } if (new_name == n->get_name()) @@ -949,6 +968,8 @@ void SceneTreeEditor::_bind_methods() { ClassDB::bind_method("_cell_collapsed", &SceneTreeEditor::_cell_collapsed); ClassDB::bind_method("_rmb_select", &SceneTreeEditor::_rmb_select); ClassDB::bind_method("_warning_changed", &SceneTreeEditor::_warning_changed); + ClassDB::bind_method("_toggle_visible", &SceneTreeEditor::_toggle_visible); + ClassDB::bind_method("toggle_visible", &SceneTreeEditor::toggle_visible); ClassDB::bind_method("_node_script_changed", &SceneTreeEditor::_node_script_changed); ClassDB::bind_method("_node_visibility_changed", &SceneTreeEditor::_node_visibility_changed); diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h index 45194bb81d..b63eb2a1f0 100644 --- a/editor/scene_tree_editor.h +++ b/editor/scene_tree_editor.h @@ -70,6 +70,8 @@ class SceneTreeEditor : public Control { void _compute_hash(Node *p_node, uint64_t &hash); + void toggle_visible(Node *p_node); + bool _add_nodes(Node *p_node, TreeItem *p_parent); void _test_update_tree(); void _update_tree(); @@ -103,6 +105,7 @@ class SceneTreeEditor : public Control { static void _bind_methods(); void _cell_button_pressed(Object *p_item, int p_column, int p_id); + void _toggle_visible(Node *p_node); void _cell_multi_selected(Object *p_object, int p_cell, bool p_selected); void _update_selection(TreeItem *item); void _node_script_changed(Node *p_node); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index cee356b930..57a003060e 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -41,17 +41,21 @@ void ScriptCreateDialog::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_THEME_CHANGED: case NOTIFICATION_ENTER_TREE: { path_button->set_icon(get_icon("Folder", "EditorIcons")); parent_browse_button->set_icon(get_icon("Folder", "EditorIcons")); - } + status_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + } break; } } void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_path) { class_name->set_text(""); + class_name->deselect(); parent_name->set_text(p_base_name); + parent_name->deselect(); if (p_base_path != "") { initial_bp = p_base_path.get_basename(); file_path->set_text(initial_bp + "." + ScriptServer::get_language(language_menu->get_selected())->get_extension()); @@ -59,8 +63,9 @@ void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_ initial_bp = ""; file_path->set_text(""); } + file_path->deselect(); + _lang_changed(current_language); - _parent_name_changed(parent_name->get_text()); _class_name_changed(""); _path_changed(file_path->get_text()); } @@ -290,6 +295,7 @@ void ScriptCreateDialog::_lang_changed(int l) { _template_changed(template_menu->get_selected()); EditorSettings::get_singleton()->set_project_metadata("script_setup", "last_selected_language", language_menu->get_item_text(language_menu->get_selected())); + _parent_name_changed(parent_name->get_text()); _update_dialog(); } @@ -303,11 +309,19 @@ void ScriptCreateDialog::_built_in_pressed() { _update_dialog(); } -void ScriptCreateDialog::_browse_path(bool browse_parent) { +void ScriptCreateDialog::_browse_path(bool browse_parent, bool p_save) { is_browsing_parent = browse_parent; - file_browse->set_mode(EditorFileDialog::MODE_SAVE_FILE); + if (p_save) { + file_browse->set_mode(EditorFileDialog::MODE_SAVE_FILE); + file_browse->set_title(TTR("Open Script/Choose Location")); + file_browse->get_ok()->set_text(TTR("Open")); + } else { + file_browse->set_mode(EditorFileDialog::MODE_OPEN_FILE); + file_browse->set_title(TTR("Open Script")); + } + file_browse->set_disable_overwrite_warning(true); file_browse->clear_filters(); List<String> extensions; @@ -380,8 +394,6 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { is_new_script_created = false; is_path_valid = true; _msg_path_valid(true, TTR("File exists, will be reused")); - } else { - path_error_label->set_text(""); } memdelete(f); _update_dialog(); @@ -424,6 +436,13 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { return; } + String path_error = ScriptServer::get_language(language_menu->get_selected())->validate_path(p); + if (path_error != "") { + _msg_path_valid(false, path_error); + _update_dialog(); + return; + } + /* All checks passed */ is_path_valid = true; @@ -525,26 +544,28 @@ void ScriptCreateDialog::_update_dialog() { /* Is Script created or loaded from existing file */ - if (is_new_script_created) { + if (is_built_in) { + get_ok()->set_text(TTR("Create")); + parent_name->set_editable(true); + parent_browse_button->set_disabled(false); + internal->set_disabled(!supports_built_in); + _msg_path_valid(true, TTR("Built-in script (into scene file)")); + } else if (is_new_script_created) { // New Script Created get_ok()->set_text(TTR("Create")); parent_name->set_editable(true); parent_browse_button->set_disabled(false); internal->set_disabled(!supports_built_in); - if (is_built_in) { - _msg_path_valid(true, TTR("Built-in script (into scene file)")); - } else { - if (script_ok) { - _msg_path_valid(true, TTR("Create new script file")); - } + if (is_path_valid) { + _msg_path_valid(true, TTR("Create new script file")); } } else { // Script Loaded get_ok()->set_text(TTR("Load")); parent_name->set_editable(false); parent_browse_button->set_disabled(true); - internal->set_disabled(true); - if (script_ok) { + internal->set_disabled(!supports_built_in); + if (is_path_valid) { _msg_path_valid(true, TTR("Load existing script file")); } } @@ -597,10 +618,10 @@ ScriptCreateDialog::ScriptCreateDialog() { hb->add_child(path_error_label); vb->add_child(hb); - PanelContainer *pc = memnew(PanelContainer); - pc->set_h_size_flags(Control::SIZE_FILL); - pc->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("bg", "Tree")); - pc->add_child(vb); + status_panel = memnew(PanelContainer); + status_panel->set_h_size_flags(Control::SIZE_FILL); + status_panel->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("bg", "Tree")); + status_panel->add_child(vb); /* Margins */ @@ -619,7 +640,7 @@ ScriptCreateDialog::ScriptCreateDialog() { vb->add_child(empty_h->duplicate()); vb->add_child(gc); vb->add_child(empty_h->duplicate()); - vb->add_child(pc); + vb->add_child(status_panel); vb->add_child(empty_h->duplicate()); hb = memnew(HBoxContainer); hb->add_child(empty_v->duplicate()); @@ -678,7 +699,7 @@ ScriptCreateDialog::ScriptCreateDialog() { hb->add_child(parent_name); parent_browse_button = memnew(Button); parent_browse_button->set_flat(true); - parent_browse_button->connect("pressed", this, "_browse_path", varray(true)); + parent_browse_button->connect("pressed", this, "_browse_path", varray(true, false)); hb->add_child(parent_browse_button); l = memnew(Label); l->set_text(TTR("Inherits")); @@ -730,7 +751,7 @@ ScriptCreateDialog::ScriptCreateDialog() { hb->add_child(file_path); path_button = memnew(Button); path_button->set_flat(true); - path_button->connect("pressed", this, "_browse_path", varray(false)); + path_button->connect("pressed", this, "_browse_path", varray(false, true)); hb->add_child(path_button); l = memnew(Label); l->set_text(TTR("Path")); @@ -742,6 +763,7 @@ ScriptCreateDialog::ScriptCreateDialog() { file_browse = memnew(EditorFileDialog); file_browse->connect("file_selected", this, "_file_selected"); + file_browse->set_mode(EditorFileDialog::MODE_OPEN_FILE); add_child(file_browse); get_ok()->set_text(TTR("Create")); alert = memnew(AcceptDialog); diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h index b5afe2e38e..1ad4a1b7a1 100644 --- a/editor/script_create_dialog.h +++ b/editor/script_create_dialog.h @@ -46,6 +46,7 @@ class ScriptCreateDialog : public ConfirmationDialog { LineEdit *class_name; Label *error_label; Label *path_error_label; + PanelContainer *status_panel; LineEdit *parent_name; Button *parent_browse_button; OptionButton *language_menu; @@ -81,7 +82,7 @@ class ScriptCreateDialog : public ConfirmationDialog { void _class_name_changed(const String &p_name); void _parent_name_changed(const String &p_parent); void _template_changed(int p_template = 0); - void _browse_path(bool browse_parent); + void _browse_path(bool browse_parent, bool p_save); void _file_selected(const String &p_file); virtual void ok_pressed(); void _create_new(); diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index d0527a13ea..a83de1627d 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -46,6 +46,7 @@ #include "scene/gui/tab_container.h" #include "scene/gui/texture_button.h" #include "scene/gui/tree.h" +#include "scene/resources/packed_scene.h" #include "ustring.h" class ScriptEditorDebuggerVariables : public Object { @@ -193,6 +194,12 @@ public: } }; +void ScriptEditorDebugger::debug_copy() { + String msg = reason->get_text(); + if (msg == "") return; + OS::get_singleton()->set_clipboard(msg); +} + void ScriptEditorDebugger::debug_next() { ERR_FAIL_COND(!breaked); @@ -280,6 +287,30 @@ void ScriptEditorDebugger::_scene_tree_selected() { ppeer->put_var(msg); } +void ScriptEditorDebugger::_scene_tree_rmb_selected(const Vector2 &p_position) { + + TreeItem *item = inspect_scene_tree->get_item_at_position(p_position); + if (!item) + return; + + item->select(0); + + item_menu->clear(); + item_menu->add_icon_item(get_icon("CreateNewSceneFrom", "EditorIcons"), TTR("Save Branch as Scene"), ITEM_MENU_SAVE_REMOTE_NODE); + item_menu->set_global_position(get_global_mouse_position()); + item_menu->popup(); +} + +void ScriptEditorDebugger::_file_selected(const String &p_file) { + if (file_dialog->get_mode() == EditorFileDialog::MODE_SAVE_FILE) { + Array msg; + msg.push_back("save_node"); + msg.push_back(inspected_object_id); + msg.push_back(p_file); + ppeer->put_var(msg); + } +} + void ScriptEditorDebugger::_scene_tree_property_value_edited(const String &p_prop, const Variant &p_value) { Array msg; @@ -338,6 +369,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da step->set_disabled(!can_continue); next->set_disabled(!can_continue); _set_reason_text(error, MESSAGE_ERROR); + copy->set_disabled(false); breaked = true; dobreak->set_disabled(true); docontinue->set_disabled(false); @@ -354,6 +386,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da } else if (p_msg == "debug_exit") { breaked = false; + copy->set_disabled(true); step->set_disabled(true); next->set_disabled(true); reason->set_text(""); @@ -702,25 +735,6 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da error_list->set_item_metadata(error_list->get_item_count() - 1, stack); error_count++; - /* - int count = p_data[1]; - - Array cstack; - - OutputError oe = errors.front()->get(); - - packet_peer_stream->put_var(oe.hr); - packet_peer_stream->put_var(oe.min); - packet_peer_stream->put_var(oe.sec); - packet_peer_stream->put_var(oe.msec); - packet_peer_stream->put_var(oe.source_func); - packet_peer_stream->put_var(oe.source_file); - packet_peer_stream->put_var(oe.source_line); - packet_peer_stream->put_var(oe.error); - packet_peer_stream->put_var(oe.error_descr); - packet_peer_stream->put_var(oe.warning); - packet_peer_stream->put_var(oe.callstack); - */ } else if (p_msg == "profile_sig") { //cache a signature @@ -747,6 +761,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da EditorProfiler::Metric::Category::Item item; item.calls = 1; item.line = 0; + item.name = "Physics Time"; item.total = metric.physics_time; item.self = item.total; @@ -784,8 +799,9 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da for (int i = 0; i < values.size(); i += 2) { EditorProfiler::Metric::Category::Item item; - item.name = values[i]; item.calls = 1; + item.line = 0; + item.name = values[i]; item.self = values[i + 1]; item.total = item.self; item.signature = "categ::" + name + "::" + item.name; @@ -940,6 +956,8 @@ void ScriptEditorDebugger::_notification(int p_what) { inspector->edit(variables); + copy->set_icon(get_icon("ActionCopy", "EditorIcons")); + step->set_icon(get_icon("DebugStep", "EditorIcons")); next->set_icon(get_icon("DebugNext", "EditorIcons")); back->set_icon(get_icon("Back", "EditorIcons")); @@ -955,6 +973,14 @@ void ScriptEditorDebugger::_notification(int p_what) { reason->add_color_override("font_color", get_color("error_color", "Editor")); + bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines"); + Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color"); + + if (enable_rl) { + inspect_scene_tree->add_constant_override("draw_relationship_lines", 1); + inspect_scene_tree->add_color_override("relationship_line_color", rl_color); + } else + inspect_scene_tree->add_constant_override("draw_relationship_lines", 0); } break; case NOTIFICATION_PROCESS: { @@ -1142,6 +1168,16 @@ void ScriptEditorDebugger::_notification(int p_what) { inspect_scene_tree->add_color_override("relationship_line_color", rl_color); } else inspect_scene_tree->add_constant_override("draw_relationship_lines", 0); + + copy->set_icon(get_icon("ActionCopy", "EditorIcons")); + step->set_icon(get_icon("DebugStep", "EditorIcons")); + next->set_icon(get_icon("DebugNext", "EditorIcons")); + back->set_icon(get_icon("Back", "EditorIcons")); + forward->set_icon(get_icon("Forward", "EditorIcons")); + dobreak->set_icon(get_icon("Pause", "EditorIcons")); + docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); + vmem_refresh->set_icon(get_icon("Reload", "EditorIcons")); + } break; } } @@ -1267,14 +1303,14 @@ void ScriptEditorDebugger::_stack_dump_frame_selected() { emit_signal("goto_script_line", stack_script, int(d["line"]) - 1); stack_script.unref(); - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - /// - - Array msg; - msg.push_back("get_stack_frame_vars"); - msg.push_back(d["frame"]); - ppeer->put_var(msg); + if (connection.is_valid() && connection->is_connected_to_host()) { + Array msg; + msg.push_back("get_stack_frame_vars"); + msg.push_back(d["frame"]); + ppeer->put_var(msg); + } else { + inspector->edit(NULL); + } } void ScriptEditorDebugger::_output_clear() { @@ -1628,12 +1664,20 @@ void ScriptEditorDebugger::_error_selected(int p_idx) { md.push_back(st[i + 1]); md.push_back(st[i + 2]); - String str = func + " in " + script.get_file() + ":line " + itos(line); + String str = func; + String tooltip_str = TTR("Function:") + " " + func; + if (script.length() > 0) { + str += " in " + script.get_file(); + tooltip_str = TTR("File:") + " " + script + "\n" + tooltip_str; + if (line > 0) { + str += ":line " + itos(line); + tooltip_str += "\n" + TTR("Line:") + " " + itos(line); + } + } error_stack->add_item(str); error_stack->set_item_metadata(error_stack->get_item_count() - 1, md); - error_stack->set_item_tooltip(error_stack->get_item_count() - 1, - TTR("File:") + " " + script + "\n" + TTR("Function:") + " " + func + "\n" + TTR("Line:") + " " + itos(line)); + error_stack->set_item_tooltip(error_stack->get_item_count() - 1, tooltip_str); } } @@ -1716,7 +1760,7 @@ void ScriptEditorDebugger::_error_list_item_rmb_selected(int p_item, const Vecto bool single_item_selected = error_list->get_selected_items().size() == 1; if (single_item_selected) { - item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Error"), ITEM_MENU_COPY_ERROR); + item_menu->add_icon_item(get_icon("ActionCopy", "EditorIcons"), TTR("Copy Error"), ITEM_MENU_COPY_ERROR); } if (item_menu->get_item_count() > 0) { @@ -1735,12 +1779,30 @@ void ScriptEditorDebugger::_item_menu_id_pressed(int p_option) { OS::get_singleton()->set_clipboard(title + "\n----------\n" + desc); } break; + case ITEM_MENU_SAVE_REMOTE_NODE: { + + file_dialog->set_access(EditorFileDialog::ACCESS_RESOURCES); + file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); + + List<String> extensions; + Ref<PackedScene> sd = memnew(PackedScene); + ResourceSaver::get_recognized_extensions(sd, &extensions); + file_dialog->clear_filters(); + for (int i = 0; i < extensions.size(); i++) { + file_dialog->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); + } + + file_dialog->popup_centered_ratio(); + } break; } } void ScriptEditorDebugger::_bind_methods() { ClassDB::bind_method(D_METHOD("_stack_dump_frame_selected"), &ScriptEditorDebugger::_stack_dump_frame_selected); + + ClassDB::bind_method(D_METHOD("debug_copy"), &ScriptEditorDebugger::debug_copy); + ClassDB::bind_method(D_METHOD("debug_next"), &ScriptEditorDebugger::debug_next); ClassDB::bind_method(D_METHOD("debug_step"), &ScriptEditorDebugger::debug_step); ClassDB::bind_method(D_METHOD("debug_break"), &ScriptEditorDebugger::debug_break); @@ -1766,6 +1828,8 @@ void ScriptEditorDebugger::_bind_methods() { ClassDB::bind_method(D_METHOD("_scene_tree_selected"), &ScriptEditorDebugger::_scene_tree_selected); ClassDB::bind_method(D_METHOD("_scene_tree_folded"), &ScriptEditorDebugger::_scene_tree_folded); + ClassDB::bind_method(D_METHOD("_scene_tree_rmb_selected"), &ScriptEditorDebugger::_scene_tree_rmb_selected); + ClassDB::bind_method(D_METHOD("_file_selected"), &ScriptEditorDebugger::_file_selected); ClassDB::bind_method(D_METHOD("live_debug_create_node"), &ScriptEditorDebugger::live_debug_create_node); ClassDB::bind_method(D_METHOD("live_debug_instance_node"), &ScriptEditorDebugger::live_debug_instance_node); @@ -1816,6 +1880,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { hbc->add_child(memnew(VSeparator)); + copy = memnew(ToolButton); + hbc->add_child(copy); + copy->set_tooltip(TTR("Copy Error")); + copy->connect("pressed", this, "debug_copy"); + + hbc->add_child(memnew(VSeparator)); + step = memnew(ToolButton); hbc->add_child(step); step->set_tooltip(TTR("Step Into")); @@ -1853,6 +1924,7 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { sc->set_v_size_flags(SIZE_EXPAND_FILL); stack_dump = memnew(Tree); + stack_dump->set_allow_reselect(true); stack_dump->set_columns(1); stack_dump->set_column_titles_visible(true); stack_dump->set_column_title(0, TTR("Stack Frames")); @@ -1930,7 +2002,8 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { inspect_scene_tree->set_v_size_flags(SIZE_EXPAND_FILL); inspect_scene_tree->connect("cell_selected", this, "_scene_tree_selected"); inspect_scene_tree->connect("item_collapsed", this, "_scene_tree_folded"); - + inspect_scene_tree->set_allow_rmb_select(true); + inspect_scene_tree->connect("item_rmb_selected", this, "_scene_tree_rmb_selected"); auto_switch_remote_scene_tree = EDITOR_DEF("debugger/auto_switch_to_remote_scene_tree", false); inspect_scene_tree_timeout = EDITOR_DEF("debugger/remote_scene_tree_refresh_interval", 1.0); inspect_edited_object_timeout = EDITOR_DEF("debugger/remote_inspect_refresh_interval", 0.2); @@ -1938,6 +2011,12 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { updating_scene_tree = false; } + { // File dialog + file_dialog = memnew(EditorFileDialog); + file_dialog->connect("file_selected", this, "_file_selected"); + add_child(file_dialog); + } + { //profiler profiler = memnew(EditorProfiler); profiler->set_name(TTR("Profiler")); diff --git a/editor/script_editor_debugger.h b/editor/script_editor_debugger.h index e86add940a..f7fe348b65 100644 --- a/editor/script_editor_debugger.h +++ b/editor/script_editor_debugger.h @@ -65,6 +65,7 @@ class ScriptEditorDebugger : public Control { enum ItemMenu { ITEM_MENU_COPY_ERROR, + ITEM_MENU_SAVE_REMOTE_NODE, }; AcceptDialog *msgdialog; @@ -92,6 +93,7 @@ class ScriptEditorDebugger : public Control { Tree *inspect_scene_tree; Button *clearbutton; PopupMenu *item_menu; + EditorFileDialog *file_dialog; int error_count; int last_error_count; @@ -104,6 +106,7 @@ class ScriptEditorDebugger : public Control { Label *reason; + Button *copy; Button *step; Button *next; Button *back; @@ -154,6 +157,8 @@ class ScriptEditorDebugger : public Control { void _scene_tree_folded(Object *obj); void _scene_tree_selected(); + void _scene_tree_rmb_selected(const Vector2 &p_position); + void _file_selected(const String &p_file); void _scene_tree_request(); void _parse_message(const String &p_msg, const Array &p_data); void _set_reason_text(const String &p_reason, MessageType p_type); @@ -197,6 +202,8 @@ public: void unpause(); void stop(); + void debug_copy(); + void debug_next(); void debug_step(); void debug_break(); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index d75ef5df8a..c3e9e4ab62 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -101,7 +101,14 @@ void EditorSettingsDialog::popup_edit_settings() { if (EditorSettings::get_singleton()->has_setting("interface/dialogs/editor_settings_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/editor_settings_bounds")); } else { - popup_centered_ratio(0.7); + + Size2 popup_size = Size2(900, 700) * editor_get_scale(); + Size2 window_size = get_viewport_rect().size; + + popup_size.x = MIN(window_size.x * 0.8, popup_size.x); + popup_size.y = MIN(window_size.y * 0.8, popup_size.y); + + popup_centered(popup_size); } _focus_current_search_box(); @@ -199,6 +206,14 @@ void EditorSettingsDialog::_update_icons() { void EditorSettingsDialog::_update_shortcuts() { + Map<String, bool> collapsed; + + if (shortcuts->get_root() && shortcuts->get_root()->get_children()) { + for (TreeItem *item = shortcuts->get_root()->get_children(); item; item = item->get_next()) { + collapsed[item->get_text(0)] = item->is_collapsed(); + } + } + shortcuts->clear(); List<String> slist; @@ -223,7 +238,13 @@ void EditorSettingsDialog::_update_shortcuts() { section = sections[section_name]; } else { section = shortcuts->create_item(root); - section->set_text(0, section_name.capitalize()); + + String item_name = section_name.capitalize(); + section->set_text(0, item_name); + + if (collapsed.has(item_name)) { + section->set_collapsed(collapsed[item_name]); + } sections[section_name] = section; section->set_custom_bg_color(0, get_color("prop_subsection", "Editor")); @@ -263,7 +284,7 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(item); if (p_idx == 0) { - press_a_key_label->set_text(TTR("Press a Key..")); + press_a_key_label->set_text(TTR("Press a Key...")); last_wait_for_key = Ref<InputEventKey>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); press_a_key->grab_focus(); @@ -457,7 +478,7 @@ EditorSettingsDialog::EditorSettingsDialog() { add_child(press_a_key); Label *l = memnew(Label); - l->set_text(TTR("Press a Key..")); + l->set_text(TTR("Press a Key...")); l->set_anchors_and_margins_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); l->set_margin(MARGIN_TOP, 20); diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 72c0f050d2..2652b09763 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -299,24 +299,26 @@ void EditorSpatialGizmo::add_handles(const Vector<Vector3> &p_handles, bool p_bi } } -void EditorSpatialGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size) { +void EditorSpatialGizmo::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); - Ref<ArrayMesh> m = memnew(ArrayMesh); - m->add_surface_from_arrays(cubem.surface_get_primitive_type(0), cubem.surface_get_arrays(0)); - m->surface_set_material(0, p_material); - add_mesh(m); - Instance ins; - ins.mesh = m; - if (valid) { - ins.create_instance(spatial_node); - VS::get_singleton()->instance_set_transform(ins.instance, spatial_node->get_global_transform()); + Array arrays = cubem.surface_get_arrays(0); + PoolVector3Array vertex = arrays[VS::ARRAY_VERTEX]; + PoolVector3Array::Write w = vertex.write(); + + for (int i = 0; i < vertex.size(); ++i) { + w[i] += p_position; } - instances.push_back(ins); + arrays[VS::ARRAY_VERTEX] = vertex; + + Ref<ArrayMesh> m = memnew(ArrayMesh); + m->add_surface_from_arrays(cubem.surface_get_primitive_type(0), arrays); + m->surface_set_material(0, p_material); + add_mesh(m); } void EditorSpatialGizmo::set_spatial_node(Spatial *p_node) { @@ -1130,7 +1132,7 @@ void CameraSpatialGizmo::set_handle(int p_idx, Camera *p_camera, const Point2 &p if (camera->get_projection() == Camera::PROJECTION_PERSPECTIVE) { Transform gt = camera->get_global_transform(); float a = _find_closest_angle_to_half_pi_arc(s[0], s[1], 1.0, gt); - camera->set("fov", a); + camera->set("fov", a * 2.0); } else { Vector3 ra, rb; @@ -1187,7 +1189,8 @@ void CameraSpatialGizmo::redraw() { case Camera::PROJECTION_PERSPECTIVE: { - float fov = camera->get_fov(); + // The real FOV is halved for accurate representation + float fov = camera->get_fov() / 2.0; Vector3 side = Vector3(Math::sin(Math::deg2rad(fov)), 0, -Math::cos(Math::deg2rad(fov))); Vector3 nside = side; @@ -1531,6 +1534,120 @@ SkeletonSpatialGizmo::SkeletonSpatialGizmo(Skeleton *p_skel) { set_spatial_node(p_skel); } +PhysicalBoneSpatialGizmo::PhysicalBoneSpatialGizmo(PhysicalBone *p_pb) : + EditorSpatialGizmo(), + physical_bone(p_pb) { + set_spatial_node(p_pb); +} + +void PhysicalBoneSpatialGizmo::redraw() { + + clear(); + + if (!physical_bone) + return; + + Skeleton *sk(physical_bone->find_skeleton_parent()); + PhysicalBone *pb(sk->get_physical_bone(physical_bone->get_bone_id())); + PhysicalBone *pbp(sk->get_physical_bone_parent(physical_bone->get_bone_id())); + + Vector<Vector3> points; + + switch (physical_bone->get_joint_type()) { + case PhysicalBone::JOINT_TYPE_PIN: { + + PinJointSpatialGizmo::CreateGizmo(physical_bone->get_joint_offset(), points); + } break; + case PhysicalBone::JOINT_TYPE_CONE: { + + const PhysicalBone::ConeJointData *cjd(static_cast<const PhysicalBone::ConeJointData *>(physical_bone->get_joint_data())); + ConeTwistJointSpatialGizmo::CreateGizmo( + physical_bone->get_joint_offset(), + physical_bone->get_global_transform() * physical_bone->get_joint_offset(), + pb ? pb->get_global_transform() : Transform(), + pbp ? pbp->get_global_transform() : Transform(), + cjd->swing_span, + cjd->twist_span, + points, + pb ? &points : NULL, + pbp ? &points : NULL); + } break; + case PhysicalBone::JOINT_TYPE_HINGE: { + + const PhysicalBone::HingeJointData *hjd(static_cast<const PhysicalBone::HingeJointData *>(physical_bone->get_joint_data())); + HingeJointSpatialGizmo::CreateGizmo( + physical_bone->get_joint_offset(), + physical_bone->get_global_transform() * physical_bone->get_joint_offset(), + pb ? pb->get_global_transform() : Transform(), + pbp ? pbp->get_global_transform() : Transform(), + hjd->angular_limit_lower, + hjd->angular_limit_upper, + hjd->angular_limit_enabled, + points, + pb ? &points : NULL, + pbp ? &points : NULL); + } break; + case PhysicalBone::JOINT_TYPE_SLIDER: { + + const PhysicalBone::SliderJointData *sjd(static_cast<const PhysicalBone::SliderJointData *>(physical_bone->get_joint_data())); + SliderJointSpatialGizmo::CreateGizmo( + physical_bone->get_joint_offset(), + physical_bone->get_global_transform() * physical_bone->get_joint_offset(), + pb ? pb->get_global_transform() : Transform(), + pbp ? pbp->get_global_transform() : Transform(), + sjd->angular_limit_lower, + sjd->angular_limit_upper, + sjd->linear_limit_lower, + sjd->linear_limit_upper, + points, + pb ? &points : NULL, + pbp ? &points : NULL); + } break; + case PhysicalBone::JOINT_TYPE_6DOF: { + + const PhysicalBone::SixDOFJointData *sdofjd(static_cast<const PhysicalBone::SixDOFJointData *>(physical_bone->get_joint_data())); + Generic6DOFJointSpatialGizmo::CreateGizmo( + physical_bone->get_joint_offset(), + + physical_bone->get_global_transform() * physical_bone->get_joint_offset(), + pb ? pb->get_global_transform() : Transform(), + pbp ? pbp->get_global_transform() : Transform(), + + sdofjd->axis_data[0].angular_limit_lower, + sdofjd->axis_data[0].angular_limit_upper, + sdofjd->axis_data[0].linear_limit_lower, + sdofjd->axis_data[0].linear_limit_upper, + sdofjd->axis_data[0].angular_limit_enabled, + sdofjd->axis_data[0].linear_limit_enabled, + + sdofjd->axis_data[1].angular_limit_lower, + sdofjd->axis_data[1].angular_limit_upper, + sdofjd->axis_data[1].linear_limit_lower, + sdofjd->axis_data[1].linear_limit_upper, + sdofjd->axis_data[1].angular_limit_enabled, + sdofjd->axis_data[1].linear_limit_enabled, + + sdofjd->axis_data[2].angular_limit_lower, + sdofjd->axis_data[2].angular_limit_upper, + sdofjd->axis_data[2].linear_limit_lower, + sdofjd->axis_data[2].linear_limit_upper, + sdofjd->axis_data[2].angular_limit_enabled, + sdofjd->axis_data[2].linear_limit_enabled, + + points, + pb ? &points : NULL, + pbp ? &points : NULL); + } break; + default: + return; + } + + Ref<Material> material = create_material("joint_material", EDITOR_GET("editors/3d_gizmos/gizmo_colors/joint")); + + add_collision_segments(points); + add_lines(points, material); +} + // FIXME: Kept as reference for reimplementation in 3.1+ #if 0 void RoomSpatialGizmo::redraw() { @@ -2419,7 +2536,7 @@ void ParticlesGizmo::redraw() { gizmo_color.a = 0.1; Ref<Material> solid_material = create_material("particles_solid_material", gizmo_color); - add_solid_box(solid_material, aabb.get_size()); + add_solid_box(solid_material, aabb.get_size(), aabb.get_position() + aabb.get_size() / 2.0); } //add_unscaled_billboard(SpatialEditorGizmos::singleton->visi,0.05); @@ -3732,6 +3849,12 @@ Ref<SpatialEditorGizmo> SpatialEditorGizmos::get_gizmo(Spatial *p_spatial) { return lsg; } + if (Object::cast_to<PhysicalBone>(p_spatial)) { + + Ref<PhysicalBoneSpatialGizmo> pbsg = memnew(PhysicalBoneSpatialGizmo(Object::cast_to<PhysicalBone>(p_spatial))); + return pbsg; + } + if (Object::cast_to<Position3D>(p_spatial)) { Ref<Position3DSpatialGizmo> lsg = memnew(Position3DSpatialGizmo(Object::cast_to<Position3D>(p_spatial))); @@ -4060,9 +4183,9 @@ SpatialEditorGizmos::SpatialEditorGizmos() { for (int k = 0; k < 3; k++) { if (i < 3) - face_points[j][(i + k) % 3] = v[k] * (i >= 3 ? -1 : 1); + face_points[j][(i + k) % 3] = v[k]; else - face_points[3 - j][(i + k) % 3] = v[k] * (i >= 3 ? -1 : 1); + face_points[3 - j][(i + k) % 3] = -v[k]; } } //tri 1 diff --git a/editor/spatial_editor_gizmos.h b/editor/spatial_editor_gizmos.h index cb483ed653..c5dc36cb22 100644 --- a/editor/spatial_editor_gizmos.h +++ b/editor/spatial_editor_gizmos.h @@ -105,7 +105,7 @@ protected: void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh, const AABB &p_bounds = AABB()); void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1); void add_handles(const Vector<Vector3> &p_handles, bool p_billboard = false, bool p_secondary = false); - void add_solid_box(Ref<Material> &p_material, Vector3 size); + void add_solid_box(Ref<Material> &p_material, Vector3 p_size, Vector3 p_position = Vector3()); void set_spatial_node(Spatial *p_node); const Spatial *get_spatial_node() const { return spatial_node; } @@ -214,6 +214,17 @@ public: SkeletonSpatialGizmo(Skeleton *p_skel = NULL); }; +class PhysicalBoneSpatialGizmo : public EditorSpatialGizmo { + GDCLASS(PhysicalBoneSpatialGizmo, EditorSpatialGizmo); + + PhysicalBone *physical_bone; + +public: + //virtual Transform get_global_gizmo_transform(); + virtual void redraw(); + PhysicalBoneSpatialGizmo(PhysicalBone *p_pb = NULL); +}; + #if 0 class PortalSpatialGizmo : public EditorSpatialGizmo { @@ -376,13 +387,13 @@ public: class JointGizmosDrawer { public: - static Basis look_body(const Transform &joint_transform, const Transform &body_transform); + static Basis look_body(const Transform &p_joint_transform, const Transform &p_body_transform); static Basis look_body_toward(Vector3::Axis p_axis, const Transform &joint_transform, const Transform &body_transform); - static Basis look_body_toward_x(const Transform &joint_transform, const Transform &body_transform); - static Basis look_body_toward_y(const Transform &joint_transform, const Transform &body_transform); + static Basis look_body_toward_x(const Transform &p_joint_transform, const Transform &p_body_transform); + static Basis look_body_toward_y(const Transform &p_joint_transform, const Transform &p_body_transform); /// Special function just used for physics joints, it that returns a basis constrained toward Joint Z axis /// with axis X and Y that are looking toward the body and oriented toward up - static Basis look_body_toward_z(const Transform &joint_transform, const Transform &body_transform); + static Basis look_body_toward_z(const Transform &p_joint_transform, const Transform &p_body_transform); // Draw circle around p_axis static void draw_circle(Vector3::Axis p_axis, real_t p_radius, const Transform &p_offset, const Basis &p_base, real_t p_limit_lower, real_t p_limit_upper, Vector<Vector3> &r_points, bool p_inverse = false); diff --git a/editor/translations/af.po b/editor/translations/af.po index 9d4ce1e29d..8644e20317 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -1407,6 +1407,10 @@ msgstr "Vee uit" msgid "Clear Output" msgstr "Afvoer:" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fout tydens storing van hulpbron!" @@ -2400,12 +2404,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2458,10 +2456,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3634,15 +3628,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3931,6 +3933,10 @@ 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 "" @@ -4465,6 +4471,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4748,10 +4770,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4764,6 +4782,10 @@ 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 "" @@ -5577,6 +5599,14 @@ 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 "Has" msgstr "" @@ -5604,11 +5634,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5869,10 +5894,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5894,7 +5915,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5914,10 +5937,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6067,7 +6086,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6211,10 +6232,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6608,10 +6625,6 @@ msgstr "Hulpbron" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6721,10 +6734,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7148,11 +7157,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7160,19 +7181,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7251,6 +7272,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7281,6 +7306,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Skep Intekening" @@ -7297,6 +7326,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7799,6 +7832,14 @@ 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 "" @@ -7876,10 +7917,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/ar.po b/editor/translations/ar.po index deb49f0619..a57dc0f0cc 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 11:45+0000\n" -"Last-Translator: anonymous <>\n" +"PO-Revision-Date: 2018-01-30 16:34+0000\n" +"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -1401,6 +1401,10 @@ msgstr "خالي" msgid "Clear Output" msgstr "أخلاء الخرج" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "خطأ في حفظ المورد!" @@ -2445,12 +2449,6 @@ msgid "Invalid version.txt format inside templates." msgstr "صيغة غير صالحة لـ version.txt داخل القالب." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "صيغة غير صالحة لـ version.txt داخل القالب. المراجعة ليست معرفاً صالحاً." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "لا ملف version.txt تم إيجاده داخل القالب." @@ -2505,10 +2503,6 @@ msgid "Failed:" msgstr "فشل:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "لا يمكن كتابة الملف." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "التحميل إكتمل." @@ -3685,18 +3679,28 @@ msgid "Show Grid" msgstr "إظهار الشبكة" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "أظهر المساعدات" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "أظهر المساطر" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "أظهر الموجهات" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "إظهار الشبكة" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "أظهر المساعدات" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "نصف المُحدد" @@ -3986,6 +3990,10 @@ 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 "لا يمكن إنشاء الحد!" @@ -4520,6 +4528,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4802,10 +4826,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "إلغاء/تفعيل طي الخط" @@ -4818,6 +4838,10 @@ 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 "" @@ -5631,6 +5655,15 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "إضافة عنصر" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -5658,11 +5691,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5922,10 +5950,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5946,7 +5970,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5966,10 +5992,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6117,7 +6139,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6261,10 +6285,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "لا يمكن أن يحتوي علي '/' أو ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6657,10 +6677,6 @@ msgstr "مورد فرعي" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6770,10 +6786,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "فتح الكود" @@ -7201,11 +7213,25 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +#, fuzzy +msgid "Next Plane" +msgstr "التبويب التالي" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Plane" +msgstr "التبويب السابق" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7213,19 +7239,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7304,6 +7330,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "إنشاء الحل..." @@ -7326,15 +7356,19 @@ msgstr "تم" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create C# project." -msgstr "فشل إنشاء مشروع C#." +msgstr "فشل إنشاء مشروع C#." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" -msgstr "إنشاء حل C#" +msgstr "إنشاء حل C#" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" @@ -7348,6 +7382,10 @@ msgstr "بناء المشروع" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7851,6 +7889,14 @@ 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 "" @@ -7928,10 +7974,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8012,6 +8068,18 @@ msgstr "" msgid "Invalid font size." msgstr "" +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "لا يمكن أن يحتوي علي '/' أو ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "صيغة غير صالحة لـ version.txt داخل القالب. المراجعة ليست معرفاً صالحاً." + +#~ msgid "Can't write file." +#~ msgstr "لا يمكن كتابة الملف." + #~ msgid "Next" #~ msgstr "التالي" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index ecef737d82..741f6ab209 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -1375,6 +1375,10 @@ msgstr "Изчистване" msgid "Clear Output" msgstr "Нова сцена" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2375,12 +2379,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2435,11 +2433,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy -msgid "Can't write file." -msgstr "Неуспешно създаване на папка." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3629,15 +3622,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Guides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3927,6 +3928,10 @@ 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 "" @@ -4463,6 +4468,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4748,10 +4769,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Изтриване на анимацията?" @@ -4765,6 +4782,10 @@ 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 "" @@ -5585,6 +5606,14 @@ 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 "Has" msgstr "" @@ -5612,11 +5641,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5882,10 +5906,6 @@ msgid "Please choose an empty folder." msgstr "Моля, изнесете извън папката на проекта!" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Внесен проект" @@ -5907,7 +5927,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5928,10 +5950,6 @@ msgid "Rename Project" msgstr "Нов проект" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6085,7 +6103,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6229,10 +6249,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6629,10 +6645,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6747,10 +6759,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Нова сцена" @@ -7196,32 +7204,46 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +#, fuzzy +msgid "Next Plane" +msgstr "Следващ подпрозорец" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Plane" +msgstr "Предишен подпрозорец" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Floor" +msgstr "Предишен подпрозорец" + +#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Previous Floor" -msgstr "Предишен подпрозорец" +msgid "Grid Map" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7305,6 +7327,10 @@ msgstr "Настройки" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7335,6 +7361,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7351,6 +7381,10 @@ msgstr "Проект" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7883,6 +7917,14 @@ 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 "" @@ -7963,10 +8005,20 @@ msgstr "" "работи." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8049,6 +8101,10 @@ msgid "Invalid font size." msgstr "" #, fuzzy +#~ msgid "Can't write file." +#~ msgstr "Неуспешно създаване на папка." + +#, fuzzy #~ msgid "Setting '" #~ msgstr "Настройки" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index b50fc38439..b8cd30b562 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -1428,6 +1428,10 @@ msgstr "পরিস্কার করুন/ক্লীয়ার" msgid "Clear Output" msgstr "আউটপুট/ফলাফল" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "রিসোর্স সংরক্ষণে সমস্যা হয়েছে!" @@ -2519,13 +2523,6 @@ msgid "Invalid version.txt format inside templates." msgstr "টেমপ্লেট এর version.txt ফরম্যাট গ্রহণযোগ্য নয়।" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"টেমপ্লেট এর version.txt ফরম্যাট অগ্রহণযোগ্য। Revision কোন কাংখিত আইডেন্টিফায়ার নয়।" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "টেমপ্লেটে version.txt খুঁজে পাওয়া যায়নি।" @@ -2585,11 +2582,6 @@ msgstr "ব্যর্থ:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Can't write file." -msgstr "টাইলটি খুঁজে পাওয়া যায়নি:" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." msgstr "নীচে" @@ -3839,20 +3831,30 @@ msgstr "গ্রিড দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show helpers" +msgid "Show Helpers" msgstr "বোন্/হাড় দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show rulers" +msgid "Show Rulers" msgstr "বোন্/হাড় দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show guides" +msgid "Show Guides" msgstr "বোন্/হাড় দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "অরিজিন দেখুন" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "১ টি Viewport" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "নির্বাচনকে কেন্দ্রীভূত করুন" @@ -4155,6 +4157,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "প্রান্তরেখা তৈরি করার জন্য প্রয়োজনীয় Mesh এর কোনো পৃষ্ঠতল নেই!" #: 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 "প্রান্তরেখা তৈরি করা সম্ভব হয়নি!" @@ -4719,6 +4725,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "ধরণ:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "রিসোর্স লোড করুন" @@ -5017,10 +5039,6 @@ msgid "Toggle Comment" msgstr "কমেন্ট টগল করুন" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "ক্লোন করে নীচে নিন" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "লাইন আনফোল্ড করুন" @@ -5034,6 +5052,10 @@ 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 "সিম্বল সম্পূর্ণ করুন" @@ -5881,6 +5903,16 @@ msgid "Checked Item" msgstr "চিহ্নিত আইটেম" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "বস্তু যোগ করুন" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "চিহ্নিত আইটেম" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "আছে" @@ -5908,11 +5940,6 @@ msgstr "ট্যাব ২" msgid "Tab 3" msgstr "ট্যাব ৩" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "ধরণ:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "ডাটার ধরণ:" @@ -6204,10 +6231,6 @@ msgid "Please choose an empty folder." msgstr "অনুগ্রহ করে প্রকল্পের ফোল্ডারের বাইরে এক্সপোর্ট করুন!" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "এমন একটি ফোল্ডার বাছাই করুন যেখানে 'project.godot' নামে কোন ফাইল নেই।" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "প্রকল্প ইম্পোর্ট করা হয়েছে" @@ -6230,7 +6253,9 @@ msgstr "অকার্যকর প্রকল্পের পথ (কোন #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" #: editor/project_manager.cpp @@ -6253,11 +6278,6 @@ msgid "Rename Project" msgstr "নামহীন প্রকল্প" #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "নতুন গেম প্রকল্প" @@ -6423,8 +6443,10 @@ msgid "Mouse Button" msgstr "মাউসের বোতাম" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "অকার্যকর অ্যাকশন ('/' বা ':' ছাড়া কিছুই যাবে না)।" +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6575,11 +6597,6 @@ msgstr "ইনপুট অপসারণ করুন" #: editor/project_settings_editor.cpp #, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "নোডের সাথে সংযুক্ত করুন:" - -#: editor/project_settings_editor.cpp -#, fuzzy msgid "Already existing" msgstr "স্থায়ীয়তা টগল করুন" @@ -6992,10 +7009,6 @@ msgstr "রিসোর্সসমূহ:" msgid "Clear Inheritance" msgstr "উত্তরাধিকারত্ব পরিস্কার করুন" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "এডিটরে খুলুন" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "নোড(সমূহ) অপসারণ করুন" @@ -7117,10 +7130,6 @@ msgstr "" "গ্রুপ ডক প্রদর্শন করতে ক্লিক করুন।" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "ইন্সট্যান্স:" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "পরবর্তী স্ক্রিপ্ট" @@ -7570,13 +7579,26 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "নির্বাচিত সমূহ অপসারণ করুন" +msgid "Next Plane" +msgstr "পরের ট্যাব" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "নির্বাচিত সমূহ অনুলিপি করুন" +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 +#, fuzzy +msgid "Previous Floor" +msgstr "পূর্বের ট্যাব" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" @@ -7584,22 +7606,23 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Grid Map" -msgstr "গ্রিড স্ন্যাপ" +msgid "GridMap Delete Selection" +msgstr "নির্বাচিত সমূহ অপসারণ করুন" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Snap View" -msgstr "শীর্ষ দর্শন" +msgid "GridMap Duplicate Selection" +msgstr "নির্বাচিত সমূহ অনুলিপি করুন" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "পূর্বের ট্যাব" +msgid "Grid Map" +msgstr "গ্রিড স্ন্যাপ" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "" +#, fuzzy +msgid "Snap View" +msgstr "শীর্ষ দর্শন" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7687,6 +7710,10 @@ msgstr "স্ন্যাপ সেটিংস" msgid "Pick Distance:" msgstr "ইন্সট্যান্স:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -7721,6 +7748,10 @@ msgid "Mono" msgstr "মনো" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "প্রান্তরেখা তৈরি করুন" @@ -7739,6 +7770,10 @@ msgstr "নতুন প্রকল্প" msgid "Warnings" msgstr "সতর্কতা" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8301,6 +8336,14 @@ 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 #, fuzzy msgid "Plotting Meshes: " msgstr "ছবিসমূহ ব্লিটিং (Blitting) করা হচ্ছে" @@ -8394,12 +8437,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Path এর দিক অবশ্যই একটি কার্যকর Spatial নোডের এর দিকে নির্দেশ করাতে হবে।" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "প্রতি দৃশ্যে (অথবা ইন্সট্যান্সড দৃশ্যের সম্মেলনে) সর্বোচ্চ একটি দৃশ্যমান WorldEnvironment " "সম্ভব।" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8491,6 +8544,35 @@ msgstr "ফন্ট তুলতে/লোডে সমস্যা হয়ে msgid "Invalid font size." msgstr "ফন্টের আকার অগ্রহনযোগ্য।" +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "অকার্যকর অ্যাকশন ('/' বা ':' ছাড়া কিছুই যাবে না)।" + +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "নোডের সাথে সংযুক্ত করুন:" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "টেমপ্লেট এর version.txt ফরম্যাট অগ্রহণযোগ্য। Revision কোন কাংখিত আইডেন্টিফায়ার " +#~ "নয়।" + +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "টাইলটি খুঁজে পাওয়া যায়নি:" + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "এমন একটি ফোল্ডার বাছাই করুন যেখানে 'project.godot' নামে কোন ফাইল নেই।" + +#, fuzzy +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" + +#, fuzzy +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" + #~ msgid "Next" #~ msgstr "পরবর্তী" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 91d1d55e64..a1f92b5316 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 02:50+0000\n" +"PO-Revision-Date: 2018-03-10 03:34+0000\n" "Last-Translator: Roger Blanco Ribera <roger.blancoribera@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" @@ -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 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1398,6 +1398,10 @@ msgstr "Neteja" msgid "Clear Output" msgstr "Buida la Sortida" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error en desar recurs!" @@ -2455,14 +2459,6 @@ msgid "Invalid version.txt format inside templates." msgstr "El format de version.txt dins de les plantilles no és vàlid." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"El format de version.txt dins les plantilles no és vàlid. \"Revision\" no és " -"un indentificador vàlid." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "No s'ha trobat cap version.txt dins les plantilles." @@ -2517,10 +2513,6 @@ msgid "Failed:" msgstr "Ha fallat:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "No es pot escriure el fitxer." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Baixada Completa." @@ -3702,18 +3694,28 @@ msgid "Show Grid" msgstr "Mostra la graella" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Mostrar els Ajudants" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Mostra els regles" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Mostra les guies" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Mostra l'Origen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Vista" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centra la Selecció" @@ -3984,7 +3986,7 @@ msgstr "La Malla continguda no és del tipus ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "No s'han pogut desembolcar les UV. Comproveu la topologia de la malla" +msgstr "No s'han pogut desembolcar les UV. Comproveu la topologia de la malla." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." @@ -4003,6 +4005,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "La Malla manca d'una superfície on delinear-hi els contorns!" #: 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 "No es pot crear el contorn!" @@ -4537,6 +4543,22 @@ msgid "Resource clipboard is empty!" msgstr "El porta-retalls de Recursos és buit!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Obre en l'Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instància:" + +#: 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 +msgid "Type:" +msgstr "Tipus:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carrega un Recurs" @@ -4823,10 +4845,6 @@ msgid "Toggle Comment" msgstr "Comentaris" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clona avall" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "(Des)Plega la línia" @@ -4839,6 +4857,10 @@ msgid "Unfold All Lines" msgstr "Desplega totes les Línies" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clona avall" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Completa el Símbol" @@ -5655,6 +5677,16 @@ msgid "Checked Item" msgstr "Element validat" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Afegeix un Element" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Element validat" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Té" @@ -5682,11 +5714,6 @@ msgstr "Pestanya 2" msgid "Tab 3" msgstr "Pestanya 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipus:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipus de Dades:" @@ -5955,11 +5982,6 @@ msgid "Please choose an empty folder." msgstr "Selecciona un directori buit." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Seleccioneu un directori que no contingui ja un fitxer 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Project importat" @@ -5980,8 +6002,12 @@ msgid "Invalid project path (changed anything?)." msgstr "El Camí del Projecte no és vàlid (S'ha produit algun canvi?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "No s'ha trobat el fitxer 'project.godot' en el camí del Projecte." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"No es pot carregar el fitxer 'project.godot' en el camí del projecte (error " +"%d). Pot ser que falti o que estigui malmès." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6000,10 +6026,6 @@ msgid "Rename Project" msgstr "Reanomena el Projecte" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "No es pot trobat el el fitxer 'project.godot' en el camí del projecte." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Nou Projecte de Joc" @@ -6143,7 +6165,7 @@ msgid "" "Would you like to explore the official example projects in the Asset Library?" msgstr "" "Encara no teniu cap projecte.\n" -"Voleu explorar els projectes oficials d'exemple a la llibreria activa?" +"Voleu explorar els projectes d'exemple oficials a la Biblioteca d'Actius?" #: editor/project_settings_editor.cpp msgid "Key " @@ -6162,8 +6184,10 @@ msgid "Mouse Button" msgstr "Botó del ratolí" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "L'Acció no és vàlida (no es pot utilitzar ' / ' o ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6306,10 +6330,6 @@ msgid "Delete Item" msgstr "Esborra l'Element" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "No pot contenir '/' o ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Ja existeix" @@ -6706,10 +6726,6 @@ msgstr "Sub-Recursos" msgid "Clear Inheritance" msgstr "Elimina l'Herència" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Obre en l'Editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Elimina els Nodes" @@ -6827,10 +6843,6 @@ msgstr "" "Clic per mostrar el Tauler de Grups." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instància:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Obre un Script" @@ -7261,32 +7273,44 @@ msgid "Object can't provide a length." msgstr "L'objecte no pot proporcionar una longitud." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Elimina la Selecció del GridMap" +msgid "Next Plane" +msgstr "Pla següent" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Duplica la Selecció del GridMap" +msgid "Previous Plane" +msgstr "Pla anterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Pla:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Planta Següent" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Planta Anterior" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Planta:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Mapa de Graella" +msgid "GridMap Delete Selection" +msgstr "Elimina la Selecció del GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Alinea la Vista" +msgid "GridMap Duplicate Selection" +msgstr "Duplica la Selecció del GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Planta Anterior" +msgid "Grid Map" +msgstr "Mapa de Graella" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Planta Següent" +msgid "Snap View" +msgstr "Alinea la Vista" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7364,6 +7388,10 @@ msgstr "Configuració del GridMap" msgid "Pick Distance:" msgstr "Trieu la distància:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "S'està generant la solució..." @@ -7393,6 +7421,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Sobre el suport de C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Crea una solució en C#" @@ -7408,6 +7440,10 @@ msgstr "Munta el Projecte" msgid "Warnings" msgstr "Avisos" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Final de la traça de la pila d'excepció interna" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7960,6 +7996,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "El node ARVROrigin requreix un node Fill del tipus ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Temps restant: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "S'estàn traçant les Malles: " @@ -8056,12 +8100,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Cal que la propietat Camí assenyali cap a un node Spatial vàlid." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Només es permet un sol WorldEnvironment per escena ( o conjunt d'escenes " "instanciades)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8159,6 +8213,33 @@ msgstr "Error carregant lletra." msgid "Invalid font size." msgstr "La mida de la lletra no és vàlida." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "L'Acció no és vàlida (no es pot utilitzar ' / ' o ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "No pot contenir '/' o ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "El format de version.txt dins les plantilles no és vàlid. \"Revision\" no " +#~ "és un indentificador vàlid." + +#~ msgid "Can't write file." +#~ msgstr "No es pot escriure el fitxer." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Seleccioneu un directori que no contingui ja un fitxer 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "No s'ha trobat el fitxer 'project.godot' en el camí del Projecte." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "" +#~ "No es pot trobat el el fitxer 'project.godot' en el camí del projecte." + #~ msgid "Next" #~ msgstr "Següent" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index ce645b139b..ce26418cbf 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -1401,6 +1401,10 @@ msgstr "Vyčistit" msgid "Clear Output" msgstr "Vymazat výstup" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2428,13 +2432,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Neplatný formát version.txt uvnitř šablon." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Neplatný formát version.txt uvnitř šablon. Revize není platný identifikátor." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Nenalezena version.txt uvnitř šablon." @@ -2487,10 +2484,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Nelze zapsat soubor." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3670,19 +3663,29 @@ msgstr "Zobrazit mřížku" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show helpers" +msgid "Show Helpers" msgstr "Zobrazit pomocné" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Zobrazit pravítka" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Zobrazit vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Show Origin" +msgstr "Zobrazit mřížku" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "Zobrazit pomocné" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Center Selection" msgstr "Vycentrovat výběr" @@ -3973,6 +3976,10 @@ msgid "Mesh has not surface to create outlines from!" 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 "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" msgstr "Nelze vytvořit obrys!" @@ -4514,6 +4521,22 @@ msgid "Resource clipboard is empty!" msgstr "Schránka zdroje je prázdná!" #: 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Načíst zdroj" @@ -4801,10 +4824,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Běž na řádek" @@ -4818,6 +4837,10 @@ msgid "Unfold All Lines" msgstr "Rozložit všechny řádky" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "" @@ -5638,6 +5661,14 @@ 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 "Has" msgstr "" @@ -5665,11 +5696,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5936,10 +5962,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5960,7 +5982,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5980,10 +6004,6 @@ msgid "Rename Project" msgstr "Přejmenovat projekt" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6131,7 +6151,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6276,10 +6298,6 @@ msgid "Delete Item" msgstr "Odstranit položku" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Nesmí obsaovat '/' nebo ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6676,10 +6694,6 @@ msgstr "Dílčí zdroje" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6792,10 +6806,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Otevřít skript" @@ -7225,32 +7235,46 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Smazat vybraný" +msgid "Next Plane" +msgstr "Další záložka" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Duplikovat výběr" +msgid "Previous Plane" +msgstr "Předchozí záložka" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "Smazat vybraný" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "GridMap Duplicate Selection" +msgstr "Duplikovat výběr" + +#: 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 @@ -7333,6 +7357,10 @@ msgstr "Nastavení GridMap" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7364,6 +7392,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Vytvořit C# řešení" @@ -7380,6 +7412,10 @@ msgstr "Sestavit projekt" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp #, fuzzy msgid "" @@ -7924,6 +7960,14 @@ 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 "" @@ -8016,12 +8060,22 @@ msgstr "" "uzel Particles2D." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Na každou scénu (nebo skupinu instancovaných scén) je povolen pouze jeden " "WorldEnvironment." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8114,6 +8168,19 @@ msgstr "Chyba nahrávání fontu." msgid "Invalid font size." msgstr "Neplatná velikost fontu." +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Nesmí obsaovat '/' nebo ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Neplatný formát version.txt uvnitř šablon. Revize není platný " +#~ "identifikátor." + +#~ msgid "Can't write file." +#~ msgstr "Nelze zapsat soubor." + #~ msgid "Next" #~ msgstr "Další" diff --git a/editor/translations/da.po b/editor/translations/da.po index 786cabcbdc..349706f6e0 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -3,22 +3,24 @@ # Copyright (c) 2014-2018 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. +# Esben Damkjær Sørensen <esben@damkjaergaard.com>, 2018. # Kim Nielsen <kimmowich@stofanet.dk>, 2017. # Michael Madsen <mim@michael-madsen.dk>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-20 15:42+0000\n" -"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n" +"PO-Revision-Date: 2018-04-22 07:35+0000\n" +"Last-Translator: Dankse Memes <purplelops@gmail.com>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\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 2.18\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -29,9 +31,8 @@ msgid "All Selection" msgstr "All selection" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Skift Værdi" +msgstr "Anim Skift Keyframetid" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -42,9 +43,8 @@ msgid "Anim Change Transform" msgstr "Anim Skift Transformering" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Skift Værdi" +msgstr "Anim Skift Keyframeværdi" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -497,9 +497,8 @@ msgid "Connecting Signal:" msgstr "Forbindelses Signal:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Forbind '%s' til '%s'" +msgstr "Afbryd '%s' fra '%s'" #: editor/connections_dialog.cpp msgid "Connect.." @@ -515,9 +514,8 @@ msgid "Signals" msgstr "Signaler" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Skift Base Type" +msgstr "Skift %s Type" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -525,9 +523,8 @@ msgid "Change" msgstr "Skift" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Opret Nyt" +msgstr "Opret Ny %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -639,7 +636,7 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy msgid "Cannot remove:" -msgstr "Kan ikke fjerne:\n" +msgstr "Kan ikke fjerne:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -722,9 +719,8 @@ msgid "Lead Developer" msgstr "Ledende Udvikler" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Projektleder" +msgstr "Projektleder " #: editor/editor_about.cpp msgid "Developers" @@ -817,9 +813,8 @@ msgid "Install" msgstr "Installér" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Installer" -msgstr "Pakke Installatør" +msgstr "Pakkeinstallatør" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -901,7 +896,7 @@ msgstr "Slet Effect" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Lyd" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -1083,11 +1078,11 @@ msgstr "Opdatere scene.." #: editor/editor_data.cpp msgid "[empty]" -msgstr "" +msgstr "[tom]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[ikke gemt]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1127,18 +1122,16 @@ msgid "Packing" msgstr "Pakker" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Skabelon fil ikke fundet:\n" +msgstr "Skabelonfil ikke fundet:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Filen Eksisterer, Overskrives?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "Opret mappe" +msgstr "Vælg nurværende mappe" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1244,9 +1237,8 @@ msgid "File:" msgstr "Fil:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Must use a valid extension." -msgstr "Skal bruge en gyldig extension." +msgstr "Du skal bruge en gyldig udvidelse." #: editor/editor_file_system.cpp msgid "ScanSources" @@ -1345,7 +1337,7 @@ msgstr "Beskrivelse" #: editor/editor_help.cpp #, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentation" +msgstr "Online Dokumentation:" #: editor/editor_help.cpp #, fuzzy @@ -1416,6 +1408,10 @@ msgstr "Clear" msgid "Clear Output" msgstr "Output" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fejl, kan ikke gemme ressource!" @@ -2485,14 +2481,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Ugyldigt version.txt format inde i skabeloner." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Ugyldigt version.txt format inde i skabeloner. Revision er ikke en gyldig " -"identifikator." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Ingen version.txt fundet inde i skabeloner." @@ -2550,10 +2538,6 @@ msgid "Failed:" msgstr "Fejlet:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Kan ikke skrive til fil." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download fuldført." @@ -3742,15 +3726,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -4041,6 +4033,10 @@ 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 "" @@ -4581,6 +4577,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4866,10 +4878,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Fold Line" @@ -4883,6 +4891,10 @@ 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 "" @@ -5698,6 +5710,14 @@ 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 "Has" msgstr "" @@ -5725,11 +5745,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5991,10 +6006,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6016,7 +6027,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -6036,10 +6049,6 @@ msgid "Rename Project" msgstr "Omdøb Projekt" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6191,7 +6200,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6336,10 +6347,6 @@ msgid "Delete Item" msgstr "Slet Valgte" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Kan ikke indeholde '/' eller ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6733,10 +6740,6 @@ msgstr "Sub-Ressourcer:" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6847,10 +6850,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Åben script" @@ -7277,31 +7276,45 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "GridMap Slet Markerede" +msgid "Next Plane" +msgstr "Næste fane" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "GridMap Duplikér Markerede" +#, fuzzy +msgid "Previous Plane" +msgstr "Forrige fane" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "GridMap Slet Markerede" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +msgstr "GridMap Duplikér Markerede" + +#: 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 @@ -7380,6 +7393,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7412,6 +7429,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Opret Abonnement" @@ -7429,6 +7450,10 @@ msgstr "Projekt" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7969,6 +7994,14 @@ 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 "" @@ -8058,12 +8091,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Stien skal pege på en gyldig fysisk node for at virke." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Kun én WorldEnvironment er tilladt pr. scene (eller et sæt af instanserede " "scener)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8154,6 +8197,19 @@ msgstr "Error loading skrifttype." msgid "Invalid font size." msgstr "Ugyldig skriftstørrelse." +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Kan ikke indeholde '/' eller ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Ugyldigt version.txt format inde i skabeloner. Revision er ikke en gyldig " +#~ "identifikator." + +#~ msgid "Can't write file." +#~ msgstr "Kan ikke skrive til fil." + #~ msgid "Next" #~ msgstr "Næste" diff --git a/editor/translations/de.po b/editor/translations/de.po index d0fa1597a5..2087c7f4b6 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -15,10 +15,12 @@ # hyperglow <greensoma@web.de>, 2016. # Jan Groß <jan@grossit.de>, 2016. # Kim <github@aggsol.de>, 2017. +# Neicul <neicul@gmx.de>, 2018. # Oliver Ruehl <oliver@ruehldesign.co>, 2016-2017. # Paul-Vincent Roll <paviro@me.com>, 2016. # Peter Friedland <peter_friedland@gmx.de>, 2016. # No need for a name <endoplasmatik@gmx.net>, 2016. +# Sönke <me@eknoes.de>, 2018. # So Wieso <sowieso@dukun.de>, 2016-2018. # Tim Schellenberg <smwleod@gmail.com>, 2017. # Timo Schwarzer <account@timoschwarzer.com>, 2016-2018. @@ -28,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-01-22 08:08+0000\n" -"Last-Translator: So Wieso <sowieso@dukun.de>\n" +"PO-Revision-Date: 2018-04-18 15:38+0000\n" +"Last-Translator: Neicul <neicul@gmx.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -37,7 +39,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -53,11 +55,11 @@ msgstr "Schlüsselbildzeit ändern" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Übergang beim Animationswechsel" +msgstr "Übergang bearbeiten" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Transformation ändern" +msgstr "Transformation bearbeiten" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" @@ -207,11 +209,11 @@ msgstr "Animation bereinigen" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "NEUE Spur für %s erstellenund Schlüsselbild hinzufügen?" +msgstr "NEUE Spur für %s erstellen und Schlüsselbild hinzufügen?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "%d NEUE Spuren erstelleb und Schlüsselbilder hinzufügen?" +msgstr "%d NEUE Spuren erstellen und Schlüsselbilder hinzufügen?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -267,11 +269,11 @@ msgstr "Länge (s):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "Animationslänge (in Sekunden)." +msgstr "Animationsdauer (in Sekunden)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "Schritte (s):" +msgstr "Schrittweite (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." @@ -279,7 +281,7 @@ msgstr "Cursor Schrittraster (in Sekunden)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "Animationswiederholung aktivieren/deaktivieren." +msgstr "Animationsschleife aktivieren/deaktivieren." #: editor/animation_editor.cpp msgid "Add new tracks." @@ -344,7 +346,7 @@ msgstr "Skalierungsverhältnis:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "In welcher Node sollen die Funktionen aufgerufen werden?" +msgstr "Funktionen in welcher Node aufrufen?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -360,7 +362,7 @@ msgstr "Alle Animationen bereinigen" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Alle Animationen bereinigen (Kann nicht rückgängig gemacht werden!)" +msgstr "Animationen bereinigen (Kann nicht rückgängig gemacht werden!)" #: editor/animation_editor.cpp msgid "Clean-Up" @@ -507,7 +509,7 @@ msgstr "Verbinden" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "Verbinde '%s' zu '%s'" +msgstr "Verbinde ‚%s‘ mit ‚%s‘" #: editor/connections_dialog.cpp msgid "Connecting Signal:" @@ -577,23 +579,23 @@ msgstr "Suche Ersatz für:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "Abhängigkeiten Für:" +msgstr "Abhängigkeiten für:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" -"Die Szene '%s' wird momentan bearbeitet.\n" -"Änderungen werden nicht angezeigt bis die Szene neu geladen wird." +"Die Szene ‚%s‘ wird momentan bearbeitet.\n" +"Änderungen werden erst wirksam, wenn die Szene neu geladen wird." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" -"Die Ressource '%s' wird momentan benutzt.\n" -"Änderungen werden erst nach Neuladen der Ressource aktiv." +"Die Ressource ‚%s‘ wird momentan benutzt.\n" +"Änderungen werden erst durch Neuladen wirksam." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -624,7 +626,7 @@ msgstr "Abhängigkeiteneditor" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Ersatz-Ressource suchen:" +msgstr "Ersatzressource suchen:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp @@ -649,8 +651,8 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"Die zu entfernenden Dateien werden von anderen Ressourcen gebraucht, damit " -"sie richtig funktionieren können.\n" +"Andere Ressourcen benötigen die zu entfernenden Dateien, um richtig zu " +"funktionieren.\n" "Trotzdem entfernen? (Kann nicht rückgängig gemacht werden)" #: editor/dependency_editor.cpp @@ -721,7 +723,7 @@ msgstr "Wörterbuchwert ändern" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Danke von der Godot-Community!" +msgstr "Die Godot-Gemeinschaft bedankt sich!" #: editor/editor_about.cpp msgid "Thanks!" @@ -741,7 +743,7 @@ msgstr "Hauptentwickler" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "Projektverwalter " +msgstr "Projektverwaltung " #: editor/editor_about.cpp msgid "Developers" @@ -753,27 +755,27 @@ msgstr "Autoren" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "Platinum Sponsoren" +msgstr "Platin-Sponsoren" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "Gold Sponsoren" +msgstr "Gold-Sponsoren" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "Mini Sponsoren" +msgstr "Mini-Sponsoren" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Gold Unterstützer" +msgstr "Gold-Unterstützer" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Silver Unterstützer" +msgstr "Silber-Unterstützer" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "Bronze Unterstützer" +msgstr "Bronze-Unterstützer" #: editor/editor_about.cpp msgid "Donors" @@ -794,10 +796,10 @@ msgid "" "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" -"Die Godot-Engine baut auf einer Vielzahl freier und quelloffener projekt-" -"externer Bibliotheken auf, die alle kompatibel mit den Auflagen der MIT-" -"Lizenz sind. Es folgt eine vollständige Liste aller verwendeten externen " -"Bibliotheken mit den jeweiligen zugehörigen Urheberrechtserklärungen und " +"Die Godot-Engine baut auf vielen freien und quelloffenen Bibliotheken von " +"Drittanbietern auf, welche alle mit der MIT-Lizenz konform sind. Es folgt " +"eine vollständige Liste aller verwendeten Bibliotheken von Drittanbietern " +"mit den jeweiligen zugehörigen Urheberrechtserklärungen und " "Lizenzbedingungen." #: editor/editor_about.cpp @@ -836,7 +838,7 @@ msgstr "Installieren" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Paketinstaller" +msgstr "Erweiterungenverwaltung" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -844,7 +846,7 @@ msgstr "Lautsprecher" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "Audiobuseffekt hinzufügen" +msgstr "Effekt hinzufügen" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -868,7 +870,7 @@ msgstr "Audiobus Bypasseffekte umschalten" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Audiobus Senden auswählen" +msgstr "Audiobus senden auswählen" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -983,7 +985,7 @@ msgstr "Lade ein existierendes Bus-Layout." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "Speichern als" +msgstr "Speichern unter" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." @@ -995,7 +997,7 @@ msgstr "Standard laden" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "Standart Bus Layout laden." +msgstr "Standard Bus-Layout laden." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1364,8 +1366,9 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Es gibt zurzeit keine Tutorials zu dieser Klasse. [color=$color][url=" -"$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!" +"Es gibt zurzeit keine Tutorials zu dieser Klasse. Mitwirkungen durch [color=" +"$color][url=$url]eigene Beiträge[/url][/color] oder [color=$color][url=" +"$url2]Meldung von Problemen[/url][/color] sind sehr erwünscht." #: editor/editor_help.cpp msgid "Properties" @@ -1422,6 +1425,10 @@ msgstr "Löschen" msgid "Clear Output" msgstr "Ausgabe löschen" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fehler beim speichern der Ressource!" @@ -1621,7 +1628,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Es ist keine Hauptszene wurde jemals bestimmt, soll eine ausgewählt werden?\n" +"Es wurde noch keine Hauptszene bestimmt, soll eine ausgewählt werden?\n" "Dies kann später in den Projekteinstellungen unter der Kategorie ‚Anwendung‘ " "geändert werden." @@ -2485,14 +2492,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Ungültiges version.txt-Format in Templates." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Ungültiges version.txt-Format in Templates. Revision ist kein gültiger " -"Bezeichner." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Keine version.txt in Templates gefunden." @@ -2547,10 +2546,6 @@ msgid "Failed:" msgstr "Fehlgeschlagen:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Konnte Datei nicht schreiben." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download abgeschlossen." @@ -2909,7 +2904,7 @@ msgstr "Gruppen" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Wähle ein Node um Signale und Gruppen zu bearbeiten." +msgstr "Node auswählen um Signale und Gruppen zu bearbeiten." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3490,8 +3485,8 @@ msgstr "" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" -"Erstellung der Lightmap-Bilder fehlgeschlagen. Ist der Speicherpfad " -"beschreibbar?" +"Erstellung der Lightmap-Bilder fehlgeschlagen. Stellen Sie sicher, dass der " +"Speicherpfad beschreibbar ist." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" @@ -3738,18 +3733,28 @@ msgid "Show Grid" msgstr "Raster anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Helfer anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Lineale anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Hilfslinien anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Zeige Ursprung" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "Eine Ansicht" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Auswahl zentrieren" @@ -4040,6 +4045,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Mesh hat keine Oberfläche von der Umrisse erzeugt werden könnten!" #: 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 "Konnte keinen Umriss erzeugen!" @@ -4577,6 +4586,22 @@ msgid "Resource clipboard is empty!" msgstr "Zwischenablage für Ressourcen ist leer!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Im Editor öffnen" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instanz:" + +#: 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 +msgid "Type:" +msgstr "Typ:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Ressource laden" @@ -4863,10 +4888,6 @@ msgid "Toggle Comment" msgstr "Kommentar umschalten" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Klone herunter" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Zeile ein/aufklappen" @@ -4879,6 +4900,10 @@ msgid "Unfold All Lines" msgstr "Alle Zeilen aufklappen" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Klone herunter" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Symbol vervollständigen" @@ -5695,6 +5720,16 @@ msgid "Checked Item" msgstr "Überprüftes Element" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Element hinzufügen" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Überprüftes Element" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Enthält" @@ -5722,11 +5757,6 @@ msgstr "Tab 2" msgid "Tab 3" msgstr "Tab 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Typ:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Datentyp:" @@ -5994,10 +6024,6 @@ msgid "Please choose an empty folder." msgstr "Bitte einen leeren Ordner auswählen." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Ein Ordner ohne ‚project.godot‘-Datei muss ausgewählt werden." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Importiertes Projekt" @@ -6019,8 +6045,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Ungültiger Projektpfad (etwas geändert?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "project.godot konnte nicht im Projektpfad gefunden werden." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Konnte project.godot im Projektpfad nicht laden (Fehler %d). Sie könnte " +"fehlen oder beschädigt worden sein." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6039,10 +6069,6 @@ msgid "Rename Project" msgstr "Projekt umbenennen" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "project.godot konnte nicht im Projektpfad gefunden werden." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Neues Spiel" @@ -6203,8 +6229,10 @@ msgid "Mouse Button" msgstr "Maustaste" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Ungültiger Name für Aktion (alle Zeichen außer ‚/‘ und ‚:‘ möglich)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6347,10 +6375,6 @@ msgid "Delete Item" msgstr "Eintrag löschen" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Darf nicht ‚/‘ oder ‚:‘ beinhalten" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Existiert bereits" @@ -6750,10 +6774,6 @@ msgstr "Unter-Ressourcen" msgid "Clear Inheritance" msgstr "Leere Vererbung" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Im Editor öffnen" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Node(s) löschen" @@ -6871,10 +6891,6 @@ msgstr "" "Hier klicken zur Gruppenverwaltung." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instanz:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Skript öffnen" @@ -6917,7 +6933,7 @@ msgstr "Node-Konfigurationswarnung!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "Wähle ein Node" +msgstr "Node auswählen" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -7306,32 +7322,44 @@ msgid "Object can't provide a length." msgstr "Objekt kann keine Länge vorweisen." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "GridMap-Auswahl löschen" +msgid "Next Plane" +msgstr "Nächste Ebene" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "GridMap-Auswahl duplizieren" +msgid "Previous Plane" +msgstr "Vorherige Ebene" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Ebene:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Nächste Ebene" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Vorherige Ebene" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Ebene:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Gitterkarte" +msgid "GridMap Delete Selection" +msgstr "GridMap-Auswahl löschen" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Sicht einrasten" +msgid "GridMap Duplicate Selection" +msgstr "GridMap-Auswahl duplizieren" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Vorherige Ebene" +msgid "Grid Map" +msgstr "Gitterkarte" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Nächste Ebene" +msgid "Snap View" +msgstr "Sicht einrasten" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7409,6 +7437,10 @@ msgstr "GridMap-Einstellungen" msgid "Pick Distance:" msgstr "Auswahlradius:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Lösungen erzeugen..." @@ -7438,6 +7470,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Über die C#-Unterstützung" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Erzeuge C#-Lösung" @@ -7453,6 +7489,10 @@ msgstr "Projekt bauen" msgid "Warnings" msgstr "Warnungen" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Ende des inneren Exception-Stack-Traces" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7637,7 +7677,7 @@ msgstr "Sequenz" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" -msgstr "Schalter" +msgstr "Switch" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" @@ -7645,7 +7685,7 @@ msgstr "Iterator" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "Während" +msgstr "While" #: modules/visual_script/visual_script_editor.cpp msgid "Return" @@ -8017,6 +8057,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin benötigt ein ARVRCamera-Unterobjekt" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Verbleibende Zeit: %d:%20d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Plotte Meshe: " @@ -8115,12 +8163,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Spatial-Node verweisen." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Pro Szene (oder einem Satz von instanzierten Szenen) ist nur ein einziges " "WorldEnvironment erlaubt." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8222,6 +8280,32 @@ msgstr "Fehler beim Laden der Schriftart." msgid "Invalid font size." msgstr "Ungültige Schriftgröße." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "" +#~ "Ungültiger Name für Aktion (alle Zeichen außer ‚/‘ und ‚:‘ möglich)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Darf nicht ‚/‘ oder ‚:‘ beinhalten" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Ungültiges version.txt-Format in Templates. Revision ist kein gültiger " +#~ "Bezeichner." + +#~ msgid "Can't write file." +#~ msgstr "Konnte Datei nicht schreiben." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "Ein Ordner ohne ‚project.godot‘-Datei muss ausgewählt werden." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "project.godot konnte nicht im Projektpfad gefunden werden." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "project.godot konnte nicht im Projektpfad gefunden werden." + #~ msgid "Next" #~ msgstr "Nächste" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index e0d10c9264..ea942bb7c2 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -1385,6 +1385,10 @@ msgstr "" msgid "Clear Output" msgstr "Script hinzufügen" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2398,12 +2402,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2457,11 +2455,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy -msgid "Can't write file." -msgstr "Neues Projekt erstellen" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3662,15 +3655,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3965,6 +3966,10 @@ 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 "" @@ -4510,6 +4515,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4793,10 +4814,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Bild einfügen" @@ -4810,6 +4827,10 @@ 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 "" @@ -5634,6 +5655,14 @@ 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 "Has" msgstr "" @@ -5661,11 +5690,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5932,10 +5956,6 @@ msgid "Please choose an empty folder." msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Importierte Projekte" @@ -5958,7 +5978,9 @@ msgstr "Ungültiger Projektpfad, (wurde was geändert?)!" #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." #: editor/project_manager.cpp @@ -5981,11 +6003,6 @@ msgid "Rename Project" msgstr "Neues Projekt erstellen" #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6139,7 +6156,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6284,11 +6303,6 @@ msgid "Delete Item" msgstr "Node(s) löschen" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "Verbindung zu Node:" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6690,10 +6704,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Node(s) löschen" @@ -6808,10 +6818,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Script hinzufügen" @@ -7244,11 +7250,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7256,19 +7274,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7351,6 +7369,10 @@ msgstr "Projekteinstellungen" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7380,6 +7402,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7396,6 +7422,10 @@ msgstr "Projektname:" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7940,6 +7970,14 @@ 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 "" @@ -8018,10 +8056,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Die Pfad-Variable muss auf einen gültigen Particles2D Node verweisen." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8105,6 +8153,22 @@ msgstr "" msgid "Invalid font size." msgstr "" +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Verbindung zu Node:" + +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "Neues Projekt erstellen" + +#, fuzzy +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." + +#, fuzzy +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." + #~ msgid "Move Add Key" #~ msgstr "Bild bewegen/einfügen" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index a1e1b1d4ae..61d67d7089 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -488,7 +488,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -898,11 +898,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1038,11 +1038,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1111,7 +1111,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1364,17 +1364,21 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1579,11 +1583,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1595,7 +1599,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1647,7 +1651,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1792,7 +1796,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1804,11 +1808,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1828,15 +1832,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2081,7 +2085,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2190,7 +2194,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2341,7 +2345,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2357,12 +2361,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2415,10 +2413,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -2427,7 +2421,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2444,7 +2438,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2457,7 +2451,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2589,11 +2583,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2605,15 +2599,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2639,7 +2633,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2705,7 +2699,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2717,7 +2711,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2733,7 +2727,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2753,7 +2747,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3167,7 +3161,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3175,7 +3169,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3243,7 +3237,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3310,7 +3304,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3581,15 +3575,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3878,6 +3880,10 @@ 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 "" @@ -3906,7 +3912,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4111,7 +4117,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4412,6 +4418,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4456,7 +4478,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4553,7 +4575,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4694,10 +4716,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4710,6 +4728,10 @@ 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 "" @@ -4759,15 +4781,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5218,11 +5240,11 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Configure Snap..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5475,7 +5497,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5523,6 +5545,14 @@ 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 "Has" msgstr "" @@ -5550,11 +5580,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5728,7 +5753,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5814,10 +5839,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5838,7 +5859,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5858,10 +5881,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6009,7 +6028,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6037,7 +6058,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6153,10 +6174,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6225,7 +6242,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6321,11 +6338,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6496,7 +6513,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -6549,10 +6566,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6662,10 +6675,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7088,11 +7097,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7100,19 +7121,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7191,6 +7212,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7220,6 +7245,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7235,6 +7264,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7734,6 +7767,14 @@ 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 "" @@ -7811,10 +7852,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/el.po b/editor/translations/el.po index e8841a9338..2bf8d790ab 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 19:46+0000\n" +"PO-Revision-Date: 2018-03-05 16:04+0000\n" "Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" @@ -16,7 +16,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 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1394,6 +1394,10 @@ msgstr "Εκκαθάριση" msgid "Clear Output" msgstr "Εκκαθάριση εξόδου" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Σφάλμα κατά την αποθήκευση πόρου!" @@ -2460,14 +2464,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Άκυρη μορφή version.txt μέσα στα πρότυπα." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Άκυρη μορφή version.txt μέσα στα πρότυπα. Το Revision δεν είναι έγκυρο " -"αναγνωριστικό." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Δεν βρέθηκε version.txt μέσα στα πρότυπα." @@ -2522,10 +2518,6 @@ msgid "Failed:" msgstr "Απέτυχε:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Η λήψη ολοκληρώθηκε." @@ -3716,18 +3708,28 @@ msgid "Show Grid" msgstr "Εμφάνιση πλέγματος" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Εμφάνιση βοηθών" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Εμφάνιση χαράκων" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Εμφάνιση οδηγών" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Προβολή Αρχής" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Οπτική γωνία" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Κεντράρισμα επιλογής" @@ -4017,6 +4019,10 @@ 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 "Δεν ήταν δυνατή η δημιουργία περιγράμματος!" @@ -4555,6 +4561,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "Τύπος:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Φόρτωση πόρου" @@ -4841,10 +4863,6 @@ msgid "Toggle Comment" msgstr "Εναλλαγή σχολιασμού" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Κλωνοποίηση κάτω" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Δίπλωμα/Ξεδίπλωμα γραμμής" @@ -4857,6 +4875,10 @@ 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 "Συμπλήρωση συμβόλου" @@ -5675,6 +5697,16 @@ msgid "Checked Item" msgstr "Επιλεγμένο στοιχείο" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Προσθήκη στοιχείου" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Επιλεγμένο στοιχείο" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Έχει" @@ -5702,11 +5734,6 @@ msgstr "Καρτέλα 2" msgid "Tab 3" msgstr "Καρτέλα 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Τύπος:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Τύπος δεδομένων:" @@ -5976,11 +6003,6 @@ msgid "Please choose an empty folder." msgstr "Παρακαλούμε επιλέξτε έναν άδειο φάκελο." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Παρακαλούμε επιλέξτε έναν φάκελο που δεν περιέχει ένα αρχείο 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Εισαγμένο έργο" @@ -6001,8 +6023,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Μη έγκυρη διαδρομή έργου (Αλλάξατε τίποτα;)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Αδύνατη η φόρτωση του project.godot (σφάλμα %d). Μπορεί να λείπει ή να είναι " +"κατεστραμένο." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6022,10 +6048,6 @@ msgid "Rename Project" msgstr "Μετονομασία έργου" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Νέο έργο παιχνιδιού" @@ -6186,8 +6208,10 @@ msgid "Mouse Button" msgstr "Κουμπί ποντικιού" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Μη έγκυρη ενέργεια (Όλα επιτρέποντα εκτός από το '/' και το ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6330,10 +6354,6 @@ msgid "Delete Item" msgstr "Διαγραφή αντικειμένου" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Δεν μπορεί να περιέχει '/' ή ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Υπάρχει ήδη" @@ -6736,10 +6756,6 @@ msgstr "Yπο-Πόροι" msgid "Clear Inheritance" msgstr "Εκκαθάριση κληρονομικότητας" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Άνοιγμα στον επεξεργαστή" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Διαγραφή Κόμβων" @@ -6857,10 +6873,6 @@ msgstr "" "Πατήστε για να δείξετε την πλατφόρμα σημάτων." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Στιγμιότυπο:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Άνοιγμα δεσμής ενεργειών" @@ -7293,32 +7305,44 @@ msgid "Object can't provide a length." msgstr "Το αντικείμενο δεν έχει μήκος." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "GridMap Διαγραφή επιλογής" +msgid "Next Plane" +msgstr "Επόμενο επίπεδο" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "GridMap Διπλασιασμός επιλογής" +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 "Grid Map" -msgstr "Χάρτης δικτύου" +msgid "GridMap Delete Selection" +msgstr "GridMap Διαγραφή επιλογής" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Κούμπωμα όψης" +msgid "GridMap Duplicate Selection" +msgstr "GridMap Διπλασιασμός επιλογής" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Προηγούμενο πάτωμα" +msgid "Grid Map" +msgstr "Χάρτης δικτύου" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Επόμενο πάτωμα" +msgid "Snap View" +msgstr "Κούμπωμα όψης" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7396,6 +7420,10 @@ msgstr "Ρυθμίσεις GridMap" msgid "Pick Distance:" msgstr "Επιλογή απόστασης:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Δημιουργία λύσης..." @@ -7425,6 +7453,10 @@ msgid "Mono" msgstr "Μονοφωνικό" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Σχετικά με την υποστήριξη C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Δημιουργία λύσης C#" @@ -7440,6 +7472,10 @@ msgstr "Δόμηση έργου" msgid "Warnings" msgstr "Προειδοποιήσεις" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Τέλος ιχνηλάτησης στοίβας εσωτερικής εξαίρεσης" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7998,6 +8034,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "Το ARVROrigin απαιτεί έναν κόμβο ARVRCamera ως παιδί" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Ολοκλήρωση σε: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Τοποθέτηση πλεγμάτων: " @@ -8099,12 +8143,22 @@ msgstr "" "δουλέψει αυτός ο κόμβος." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Μόνο ένα WorldEnvironment επιτρέπεται σε κάθε σκηνή (ή σύνολο στιγμιοτύπων " "σκηνών)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8202,6 +8256,33 @@ msgstr "Σφάλμα κατά την φόρτωση της γραμματοσε msgid "Invalid font size." msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Μη έγκυρη ενέργεια (Όλα επιτρέποντα εκτός από το '/' και το ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Δεν μπορεί να περιέχει '/' ή ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Άκυρη μορφή version.txt μέσα στα πρότυπα. Το Revision δεν είναι έγκυρο " +#~ "αναγνωριστικό." + +#~ msgid "Can't write file." +#~ msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Παρακαλούμε επιλέξτε έναν φάκελο που δεν περιέχει ένα αρχείο 'project." +#~ "godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." + #~ msgid "Next" #~ msgstr "Επόμενο" diff --git a/editor/translations/es.po b/editor/translations/es.po index df1a38d45b..86188201c1 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -6,28 +6,34 @@ # Addiel Lucena Perez <addiell2017@gmail.com>, 2017. # Aleix Sanchis <aleixsanchis@hotmail.com>, 2017. # Alejandro Alvarez <eliluminado00@gmail.com>, 2017. +# Avocado <avocadosan42@gmail.com>, 2018. # BLaDoM GUY <simplybladom@gmail.com>, 2017. # Carlos López <genetita@gmail.com>, 2016. +# David Arranz <davarrcal@hotmail.com>, 2018. # David Couto <davidcouto@gmail.com>, 2017. # Dharkael <izhe@hotmail.es>, 2017. # Diego López <diegodario21@gmail.com>, 2017. -# Gustavo Leon <gleondiaz@gmail.com>, 2017. +# Gustavo Leon <gleondiaz@gmail.com>, 2017-2018. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # Juan Quiroga <juanquiroga9@gmail.com>, 2017. # Kiji Pixel <raccoon.fella@gmail.com>, 2017. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017. -# Lonsfor <lotharw@protonmail.com>, 2017. -# Oscar Carballal <oscar.carballal@protonmail.com>, 2017. +# Lonsfor <lotharw@protonmail.com>, 2017-2018. +# Mario Nachbaur <manachbaur@gmail.com>, 2018. +# Oscar Carballal <oscar.carballal@protonmail.com>, 2017-2018. # Rabid Orange <theorangerabid@gmail.com>, 2017. -# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2017. +# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. # Sebastian Silva <sebastian@fuentelibre.org>, 2016. # Swyter <swyterzone@gmail.com>, 2016-2017. +# Vazquinhos <vazquinhos@gmail.com>, 2018. +# Yovani Damián <blackblex@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-12-09 22:50+0000\n" -"Last-Translator: Aleix Sanchis <aleixsanchis@hotmail.com>\n" +"PO-Revision-Date: 2018-05-03 02:11+0000\n" +"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -35,7 +41,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 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -43,12 +49,11 @@ msgstr "Desactivado" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Toda la selección" +msgstr "Toda la Selección" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Cambiar valor de animación" +msgstr "Cambiar el tiempo de la clave de animación" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -59,9 +64,8 @@ msgid "Anim Change Transform" msgstr "Cambiar transformación de animación" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Cambiar valor de animación" +msgstr "Cambiar valor de la clave de animación" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -178,9 +182,8 @@ msgid "Constant" msgstr "Constante" #: editor/animation_editor.cpp -#, fuzzy msgid "In" -msgstr "In" +msgstr "Entrada" #: editor/animation_editor.cpp msgid "Out" @@ -224,31 +227,31 @@ msgstr "Crear" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "Crear e insertar animación" +msgstr "Crear e Insertar Animación" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Insertar pista y clave de animación" +msgstr "Insertar Pista y Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "Insertar clave de animación" +msgstr "Insertar clave de Animación" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "Cambiar duración de animación" +msgstr "Cambiar duración de Animación" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "Cambiar repeticiones de animación" +msgstr "Cambiar bucle de Animación" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "Crear clave de valor de tipo para animación" +msgstr "Crear clave de valor tipado para Animación" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "Insertar animación" +msgstr "Insertar Animación" #: editor/animation_editor.cpp msgid "Anim Scale Keys" @@ -256,7 +259,7 @@ msgstr "Escalar Claves de Animación" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "Añadir «call track» de Animación" +msgstr "Añadir Call Track de Animación" #: editor/animation_editor.cpp msgid "Animation zoom." @@ -264,11 +267,11 @@ msgstr "Zoom de Animación." #: editor/animation_editor.cpp msgid "Length (s):" -msgstr "Duración (s):" +msgstr "Duración (seg):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "Duración de Animación (en segundos)." +msgstr "Duración de la Animación (en segundos)." #: editor/animation_editor.cpp msgid "Step (s):" @@ -276,7 +279,7 @@ msgstr "Paso (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "Fijado de cursor por pasos (en segundos)." +msgstr "Fijado del cursor por pasos (en segundos)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." @@ -288,7 +291,7 @@ msgstr "Añadir Nuevas Pistas." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "Subir la pasta actual." +msgstr "Subir la pista actual." #: editor/animation_editor.cpp msgid "Move current track down." @@ -346,7 +349,7 @@ msgstr "Relación de Escalado:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "¿En qué nodo quieres llamar funciones?" +msgstr "¿Desde que nodo quieres realizar llamadas a funciones?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -390,7 +393,7 @@ msgstr "Número de línea:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "Sin soincidencias" +msgstr "Sin coincidencias" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." @@ -467,11 +470,11 @@ msgstr "Quitar" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "Añadir argumento de llamada Extra:" +msgstr "Añadir argumento extra de llamada:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "Argumentos de llamada extras:" +msgstr "Argumentos extras de llamada:" #: editor/connections_dialog.cpp msgid "Path to Node:" @@ -479,7 +482,7 @@ msgstr "Ruta al nodo:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "Crear runción" +msgstr "Crear función" #: editor/connections_dialog.cpp msgid "Deferred" @@ -516,9 +519,8 @@ msgid "Connecting Signal:" msgstr "Conectando señal:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Conectar «%s» a «%s»" +msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp msgid "Connect.." @@ -534,9 +536,8 @@ msgid "Signals" msgstr "Señales" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Cambiar tipo" +msgstr "Cambiar el tipo de %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -544,9 +545,8 @@ msgid "Change" msgstr "Cambiar" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Crear nuevo" +msgstr "Crear nuevo %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -629,7 +629,7 @@ msgstr "Editor de dependencias" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Buscar reemplazo de recurso:" +msgstr "Buscar recurso de reemplazo:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp @@ -659,9 +659,8 @@ msgstr "" "¿Seguro que quieres quitarlos? (No puedes deshacerlo)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "No se puede eliminar:\n" +msgstr "No se puede eliminar:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -737,16 +736,15 @@ msgstr "Contribuidores de Godot" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "Los Fundadores del Proyecto" +msgstr "Fundadores del proyecto" #: editor/editor_about.cpp msgid "Lead Developer" msgstr "Desarrollador Principal" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Administrador de proyectos" +msgstr "Administrador de proyectos " #: editor/editor_about.cpp msgid "Developers" @@ -770,15 +768,15 @@ msgstr "Mini Patrocinadores" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Donadores Oro" +msgstr "Donantes Oro" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Donadores Plata" +msgstr "Donantes Plata" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "Donadores Bronce" +msgstr "Donantes de Bronce" #: editor/editor_about.cpp msgid "Donors" @@ -818,7 +816,7 @@ msgstr "Licencias" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "Error al abrir el paquete, no se encuentra en formato zip." +msgstr "Error al abrir el archivo empaquetado, no tiene formato zip." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -831,7 +829,7 @@ msgstr "¡El paquete se ha instalado correctamente!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "Finalizado!" +msgstr "¡Finalizado!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -852,16 +850,15 @@ msgstr "Añadir Efecto" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Renombrar Audio Bus" +msgstr "Renombrar Bus de Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Alternar Audio Bus Solo" +msgstr "Cambiar Volumen de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Alternar Audio Bus Solo" +msgstr "Act./Desact. Solo de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" @@ -869,11 +866,11 @@ msgstr "Alternar Mute del Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "Alternar efectos de bypass del Bus de Audio" +msgstr "Alternar puenteado de efectos en Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Seleccionar Bus de Audio de envío" +msgstr "Seleccionar Envío de Audio Bus" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -885,7 +882,7 @@ msgstr "Mover Efecto de Bus" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "Borrar Efecto de Bus" +msgstr "Eliminar Efecto de Bus" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." @@ -901,7 +898,7 @@ msgstr "Silenciar" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "Sobrepasar" +msgstr "Bypass" #: editor/editor_audio_buses.cpp msgid "Bus options" @@ -922,7 +919,7 @@ msgstr "Borrar Efecto" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -930,7 +927,7 @@ msgstr "Añadir Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "¡El Bus Maestro no puede ser borrado!" +msgstr "¡No se puede borrar el Bus Maestro!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" @@ -942,7 +939,7 @@ msgstr "Duplicar Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "Restablecer Volumen de Bus" +msgstr "Restablecer Volumen del Bus" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" @@ -950,15 +947,15 @@ msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." -msgstr "Guardar formato de los Audio Bus como..." +msgstr "Guardar configuración de los Buses de Audio como..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." -msgstr "Ruta al nuevo diseño.." +msgstr "Ruta para nueva configuración.." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Abrir diseño del Audio Bus" +msgstr "Abrir configuración de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -966,7 +963,7 @@ msgstr "No existe el archivo 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "Archivo inválido, no es un formato de bus de audio" +msgstr "Archivo inválido, no es una configuración de bus de audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -974,7 +971,7 @@ msgstr "Añadir Bus" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "Crear nuevo Formato de Bus de Audio." +msgstr "Crear nueva configuración de Bus de Audio." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp @@ -983,7 +980,7 @@ msgstr "Cargar" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "Cargar un Fomato de Bus de Audio existente." +msgstr "Cargar una configuración de Bus de Audio existente." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -992,15 +989,15 @@ msgstr "Guardar como" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "Guardar este Formato Bus como..." +msgstr "Guardar la configuración de este Bus a un archivo." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "Cargar Predeterminado" +msgstr "Cargar Ajuste Predeterminado" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "Cargar Formato de Bus predeterminado." +msgstr "Cargar configuración de Bus por defecto." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1013,20 +1010,20 @@ msgstr "Letras válidas:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." msgstr "" -"El nombre no es correcto. No puede coincidir con un nombre de clase que ya " -"existe en el motor gráfico." +"El nombre no es correcto. No puede coincidir con el nombre de una clase que " +"ya exista en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" -"El nombre no es correcto. No puede coincidir con un nombre de tipo " -"predeterminado que ya existe en el motor gráfico." +"El nombre no es correcto. No puede coincidir con un nombre de tipo que ya " +"esté integrado en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" "El nombre no es correcto. No puede coincidir con un nombre de constante " -"global que ya existe en el motor gráfico." +"global ya existente en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." @@ -1034,7 +1031,7 @@ msgstr "Ruta incorrecta." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "El archivo existe." +msgstr "El archivo no existe." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." @@ -1042,7 +1039,7 @@ msgstr "No está en la ruta de recursos." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "Añadir «AutoLoad»" +msgstr "Añadir AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1103,17 +1100,16 @@ msgid "Updating scene.." msgstr "Actualizando escena.." #: editor/editor_data.cpp -#, fuzzy msgid "[empty]" -msgstr "(vacío)" +msgstr "[vacío]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[no guardado]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "Por favor seleccione primero un directorio base" +msgstr "Por favor, primero seleccione un directorio base" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1142,16 +1138,15 @@ msgstr "Elegir" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "Almacén de archivo:" +msgstr "Archivo de almacenamiento:" #: editor/editor_export.cpp msgid "Packing" msgstr "Empaquetando" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "No se encontró archivo plantilla:\n" +msgstr "No se encontró archivo de plantilla:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" @@ -1170,9 +1165,8 @@ msgid "Show In File Manager" msgstr "Mostrar en el navegador de archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "New Folder.." -msgstr "Crear carpeta" +msgstr "Nueva carpeta..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1267,11 +1261,11 @@ msgstr "Archivo:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "Debe ser una extensión válida." +msgstr "Debe tener una extensión válida." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "AnalizandoFuentes" +msgstr "Analizando fuentes" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1363,19 +1357,18 @@ msgid "Description" msgstr "Descripción" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Tutoriales" +msgstr "Tutoriales en línea:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Actualmente no hay una descripción para este método. Por favor, ¡ayúdanos " -"[color=$color][url=$url]aportando una[/url][/color]!" +"De momento no hay tutoriales para esta clase, puedes [color=$color][url=" +"$url]añadir uno[/url][/color] o [color=$color][url=$url2]pedir uno[color=" +"$color][url=$url2]." #: editor/editor_help.cpp msgid "Properties" @@ -1383,7 +1376,7 @@ msgstr "Propiedades" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "Descripción de Propiedad:" +msgstr "Descripción de la Propiedad:" #: editor/editor_help.cpp msgid "" @@ -1429,9 +1422,12 @@ msgid "Clear" msgstr "Borrar todo" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Salida" +msgstr "Borrar salida" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -1468,7 +1464,7 @@ msgstr "Error al analizar '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "Fin de archivo inesperado '%s'." +msgstr "Fin de archivo '%s' inesperado." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -1495,13 +1491,12 @@ msgid "This operation can't be done without a tree root." msgstr "Esta operación no puede realizarse sin una escena raíz." #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"No se pudo guardar la escena. Es posible que no se hayan podido satisfacer " -"las dependencias (instancias)." +"No se pudo guardar la escena. Las dependencias (instancias o herencia) no se " +"pudieron resolver." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1574,7 +1569,7 @@ msgid "" "understand this workflow." msgstr "" "Esta escena ha sido importada, por lo tanto, los cambios no se mantendrán.\n" -"Instanciarlo o heredarlo permitirá hacerle cambios.\n" +"Instanciarla o heredarla permitirá hacerle cambios.\n" "Por favor, lee la documentación referente a la importación de escenas para " "entender mejor el flujo de trabajo." @@ -1589,12 +1584,10 @@ msgstr "" "mejor el flujo de trabajo." #: editor/editor_node.cpp -#, fuzzy msgid "Expand all properties" msgstr "Expandir todas las propiedades" #: editor/editor_node.cpp -#, fuzzy msgid "Collapse all properties" msgstr "Colapsar todo" @@ -1616,11 +1609,11 @@ msgstr "Copiar recurso" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "Hacerlo integrado" +msgstr "Convertirlo en integrado" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "Crear subrecurso único" +msgstr "Hacer sub-recursos únicos" #: editor/editor_node.cpp msgid "Open in Help" @@ -1647,8 +1640,8 @@ msgid "" "category." msgstr "" "La escena '%s' seleccionada no existe, ¿seleccionar una válida?\n" -"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoria " -"'aplicacion'." +"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoría " +"'aplicación'." #: editor/editor_node.cpp msgid "" @@ -1658,13 +1651,13 @@ msgid "" msgstr "" "La escena '%s' seleccionada no es un archivo de escena, ¿seleccionar uno " "válido?\n" -"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoria " -"'aplicacion'." +"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoría " +"'aplicación'." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" -"La escena actual nunca se guardó. Favor de guardarla antes de ejecutar." +"La escena actual nunca se guardó. Por favor, guárdela antes de ejecutar." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1717,7 +1710,7 @@ msgstr "Esta operación no puede realizarse sin una escena." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Exportar biblioteca de modelos" +msgstr "Exportar biblioteca de mallas" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." @@ -1745,7 +1738,9 @@ msgstr "Revertir" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "Esta acción es irreversible. ¿Quieres revertirla de todos modos?" +msgstr "" +"Esta acción no se podrá volver a realizar. ¿Quieres revertirla de todos " +"modos?" #: editor/editor_node.cpp msgid "Quick Run Scene.." @@ -1822,7 +1817,7 @@ 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 "" -"La escena '%s' fue importado automáticamente, por lo tanto no puede ser " +"La escena '%s' fue importada automáticamente, por lo tanto no puede ser " "modificada.\n" "Para poder modificarla, se tiene que crear una nueva escena heredada." @@ -1886,9 +1881,8 @@ msgid "Distraction Free Mode" msgstr "Modo sin distracciones" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Alternar Modo sin distracciones." +msgstr "Alternar modo sin distracciones." #: editor/editor_node.cpp msgid "Add a new scene." @@ -1952,11 +1946,11 @@ msgstr "Convertir a.." #: editor/editor_node.cpp msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgstr "Librería de mallas.." #: editor/editor_node.cpp msgid "TileSet.." -msgstr "TileSet.." +msgstr "\"TileSet\".." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1974,7 +1968,7 @@ msgstr "Revertir escena" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "Herramientas varias o de escenas." +msgstr "Herramientas variadas de proyecto o escena." #: editor/editor_node.cpp msgid "Project" @@ -1990,7 +1984,7 @@ msgstr "Ejecutar script" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "Exportar" +msgstr "Export" #: editor/editor_node.cpp msgid "Tools" @@ -1998,7 +1992,7 @@ msgstr "Herramientas" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Salir al listado del proyecto" +msgstr "Salir al listado de proyectos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" @@ -2013,8 +2007,8 @@ msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"Al exportar o publicarlo, el ejecutable tratará de conectarse a la IP de " -"este equipo para iniciar la depuración." +"Al exportar o publicar, el ejecutable tratará de conectarse a la IP de este " +"equipo para iniciar la depuración." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" @@ -2029,7 +2023,7 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"Cuando esta opción está activa, al exportar o publicar se producirá un " +"Cuando esta opción está activa, al exportar o publicar se creará un " "ejecutable mínimo.\n" "El sistema de archivos del proyecto se pasará desde el editor por la red.\n" "En Android, publicar utilizará el cable USB para un mejor rendimiento. Esta " @@ -2044,8 +2038,8 @@ msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"Los Collision shapes y nodos raycast (para 2D y 3D) seran visibiles durante " -"la ejecución del juego cuando esta opción queda activada." +"Los \"Collision Shapes\" y los nodos \"raycast\" (para 2D y 3D) serán " +"visibles durante la ejecución del juego cuando esta opción esté activada." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2056,7 +2050,7 @@ msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"Si activas esta opción podrás ver los modelos y polígonos de navegación " +"Si activas esta opción podrás ver las mallas y polígonos de navegación " "durante la ejecución del juego." #: editor/editor_node.cpp @@ -2070,7 +2064,7 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Cuando esta opción este encendida, cualquier cambio hecho a la escena en el " +"Cuando esta opción este activada, cualquier cambio hecho a la escena en el " "editor sera replicado en el juego en ejecución.\n" "Cuando se usa remotamente en un dispositivo, esto es mas eficiente con un " "sistema de archivos remoto." @@ -2086,7 +2080,7 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Cuando esta opción esta activa, cualquier script que se guarde sera vuelto a " +"Cuando esta opción esté activa, cualquier script que se guarde se volverá a " "cargar en el juego en ejecución.\n" "Cuando se use remotamente en un dispositivo, esto es mas eficiente con un " "sistema de archivos de red." @@ -2109,7 +2103,7 @@ msgstr "Modo Pantalla Completa" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "Cargando Plantillas de Exportación" +msgstr "Cargar Plantillas de Exportación" #: editor/editor_node.cpp msgid "Help" @@ -2136,7 +2130,7 @@ msgstr "P&R" #: editor/editor_node.cpp msgid "Issue Tracker" -msgstr "Registros de problemas" +msgstr "Registro de problemas" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -2188,7 +2182,7 @@ msgstr "Reproducir escena personalizada" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" -msgstr "Gira cuando la ventana del editor repinta!" +msgstr "¡Gira cuando la ventana del editor redibuja!" #: editor/editor_node.cpp msgid "Update Always" @@ -2240,7 +2234,7 @@ msgstr "Propiedades del objeto." #: editor/editor_node.cpp msgid "Changes may be lost!" -msgstr "¡Se pueden perder los cambios!" +msgstr "¡Se perderán los cambios realizados!" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp @@ -2325,7 +2319,7 @@ msgstr "Abrir Editor anterior" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "Creando vistas previas de los modelos 3D" +msgstr "Creando vistas previas de las mallas" #: editor/editor_plugin.cpp msgid "Thumbnail.." @@ -2366,7 +2360,7 @@ msgstr "Medida:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "Duracion de cuadro (seg)" +msgstr "Duración de cuadro (seg)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" @@ -2377,9 +2371,8 @@ msgid "Frame %" msgstr "% de cuadro" #: editor/editor_profiler.cpp -#, fuzzy msgid "Physics Frame %" -msgstr "% de cuadro fijo" +msgstr "% de cuadro físico" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2398,14 +2391,12 @@ msgid "Frame #:" msgstr "Nº de cuadro:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "Tiempo:" +msgstr "Tiempo" #: editor/editor_profiler.cpp -#, fuzzy msgid "Calls" -msgstr "Llamada" +msgstr "Llamadas" #: editor/editor_run_native.cpp msgid "Select device from the list" @@ -2416,7 +2407,7 @@ msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" -"No se ha encontrado ningún preset ejecutable de exportación para esta " +"No se ha encontrado ningún preset de exportación ejecutable para esta " "plataforma.\n" "Por favor, añade un preset ejecutable en el menú de exportación." @@ -2490,7 +2481,7 @@ msgstr "Obteniendo mirrors, por favor espere..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "Eliminar diseño de versión '%s'?" +msgstr "¿Eliminar plantilla versión '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2498,24 +2489,15 @@ msgstr "No se puede abir el zip de plantillas de exportación." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "version.txt invalido en el diseño." - -#: editor/export_template_manager.cpp -#, fuzzy -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Formato de version.txt inválido. Revision no es un identificador válido." +msgstr "Formato de \"version.txt\" inválido dentro de las plantillas." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "No se ha encontrado el archivo version.txt dentro de las plantillas." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "Error al crear ruta para las plantillas:\n" +msgstr "Error al crear ruta para las plantillas:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -2550,9 +2532,8 @@ msgstr "No responde." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." -msgstr "Solicitud fallida." +msgstr "Petición fallida." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2565,10 +2546,6 @@ msgid "Failed:" msgstr "Fallido:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "No se puede escribir el archivo." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Descarga completada." @@ -2577,9 +2554,8 @@ msgid "Error requesting url: " msgstr "Error al solicitar url: " #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to Mirror.." -msgstr "Conectando.." +msgstr "Intentando conexión alternativa.." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2599,7 +2575,6 @@ msgid "Connecting.." msgstr "Conectando.." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" msgstr "No se puede conectar" @@ -2642,10 +2617,9 @@ msgstr "Eliminar plantilla" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "Seleccionar archivo de plantilla" +msgstr "Seleccionar archivo plantilla" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" msgstr "Gestor de plantillas de exportación" @@ -2678,45 +2652,38 @@ msgid "View items as a list" msgstr "Ver elementos como una lista" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"\n" -"Estado: No se pudo importar el archivo. Por favor, arregla el archivo e " -"impórtalo manualmente." +"Estado: No se pudo importar el archivo. Por favor, arregla el archivo y " +"reimpórtalo manualmente." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move/rename resources root." -msgstr "No se puede mover/renombrar la raíz de recursos." +msgstr "No se puede mover/renombrar la raíz de los recursos." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move a folder into itself." -msgstr "No se puede importar una carpeta sobre si misma.\n" +msgstr "No se puede mover una carpeta a dentro de sí misma." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Error al mover:\n" +msgstr "Error al mover:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Error al cargar:" +msgstr "Error al duplicar:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "No se ha podido actualizar las dependencias:\n" +msgstr "No se han podido actualizar las dependencias:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "No se proveyó un nombre" +msgstr "No se proporcionó un nombre" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "El nombre obtenido contiene caracteres inválidos" +msgstr "El nombre proporcionado contiene caracteres inválidos" #: editor/filesystem_dock.cpp msgid "No name provided." @@ -2739,14 +2706,12 @@ msgid "Renaming folder:" msgstr "Renombrar carpeta:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Duplicar" +msgstr "Duplicando archivo:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "Renombrar carpeta:" +msgstr "Duplicando carpeta:" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2765,9 +2730,8 @@ msgid "Move To.." msgstr "Mover a.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" -msgstr "Abrir escena" +msgstr "Abrir escena/s" #: editor/filesystem_dock.cpp msgid "Instance" @@ -2778,14 +2742,12 @@ msgid "Edit Dependencies.." msgstr "Editar dependencias.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View Owners.." msgstr "Ver propietarios.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate.." -msgstr "Duplicar" +msgstr "Duplicar.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2834,14 +2796,12 @@ msgid "Remove from Group" msgstr "Quitar del grupo" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Importando escena…" +msgstr "Importar como escena individual" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" -msgstr "Importar con materiales separados" +msgstr "Importar con animaciones separadas" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2852,29 +2812,24 @@ msgid "Import with Separate Objects" msgstr "Importar con objetos separados" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials" msgstr "Importar con objetos y materiales separados" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Animations" -msgstr "Importar con objetos y materiales separados" +msgstr "Importar con objetos y animaciones separados" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials+Animations" -msgstr "Importar con materiales separados" +msgstr "Importar con materiales y animaciones separados" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials+Animations" -msgstr "Importar con objetos y materiales separados" +msgstr "Importar con objetos, materiales y animaciones separados" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes" -msgstr "Importar escena 3D" +msgstr "Importar como múltiples escenas" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" @@ -2890,14 +2845,12 @@ msgid "Importing Scene.." msgstr "Importando escena.." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating Lightmaps" -msgstr "Transfiriendo a «lightmaps»:" +msgstr "Generando \"Lightmaps\"" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh: " -msgstr "Generar AABB" +msgstr "Generando para modelo: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." @@ -2929,21 +2882,18 @@ msgid "Clear Default for '%s'" msgstr "Borrar por defecto para '%s'" #: editor/import_dock.cpp -#, fuzzy msgid " Files" -msgstr "Archivo" +msgstr " Archivos" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" -msgstr "Importar" +msgstr "Importar como:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." msgstr "Ajuste.." #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" msgstr "Reimportar" @@ -2971,9 +2921,8 @@ msgid "Edit Poly" msgstr "Editar polígono" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Insert Point" -msgstr "Insertando" +msgstr "Insertar punto" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp @@ -2986,9 +2935,8 @@ msgid "Remove Poly And Point" msgstr "Quitar polígono y punto" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Create a new polygon from scratch" -msgstr "Crea un nuevo polígono desde cero." +msgstr "Crear un nuevo polígono desde cero" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -3003,9 +2951,8 @@ msgstr "" "Click derecho: Borrar punto." #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" -msgstr "Eliminar punto" +msgstr "Eliminar puntos" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3024,9 +2971,8 @@ msgid "Change Animation Name:" msgstr "Cambiar nombre de animación:" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Delete Animation?" -msgstr "Duplicar animación" +msgstr "¿Eliminar animación?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3107,7 +3053,7 @@ msgstr "Reproducir animación seleccionada desde el principio. (Mayús + D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "Reproducir animación seleccionada desde la posicion actual. (D)" +msgstr "Reproducir animación seleccionada desde la posición actual. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." @@ -3115,7 +3061,7 @@ msgstr "Posición de animación (en segundos)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "Escalar la reproducción de la animación globalmente para el nodo." +msgstr "Escalar globalmente la reproducción de la animación para el nodo." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." @@ -3135,7 +3081,7 @@ msgstr "Guardar la animación actual" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "Lista de animaciones en el reproductor." +msgstr "Mostrar la lista de animaciones en el reproductor." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" @@ -3143,7 +3089,7 @@ msgstr "Autoreproducir al cargar" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "Editar Blend Times Objetivo" +msgstr "Editar tiempos de mezcla con otras animaciones" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -3162,36 +3108,30 @@ msgid "Enable Onion Skinning" msgstr "Activar Papel Cebolla" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Selecciones:" +msgstr "Direcciones" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" -msgstr "Pegar" +msgstr "Anterior" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Future" -msgstr "Textura" +msgstr "Posterior" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" msgstr "Profundidad" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "1 step" msgstr "1 paso" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "2 steps" msgstr "2 pasos" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "3 steps" msgstr "3 pasos" @@ -3201,7 +3141,7 @@ msgstr "Solo las Diferencias" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Forzar modulación hacia el blanco" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" @@ -3244,9 +3184,8 @@ msgid "New name:" msgstr "Nuevo nombre:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Editar filtros de nodo" +msgstr "Editar filtros" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3255,15 +3194,15 @@ msgstr "Escala:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" -msgstr "Aparición (s):" +msgstr "Fundido de entrada (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "Desaparición (s):" +msgstr "Fundido de salida (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "Mezclar" +msgstr "Mezcla" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" @@ -3292,15 +3231,15 @@ msgstr "Cantidad:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "Blend:" +msgstr "Mezcla:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "Blend 0:" +msgstr "Mezcla 0:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "Blend 1:" +msgstr "Mezcla 1:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" @@ -3360,7 +3299,7 @@ msgstr "Nodo Blend4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "Nodo TimeScale" +msgstr "Nodo TimeScale (Escala de tiempo)" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" @@ -3383,9 +3322,8 @@ msgid "Filters.." msgstr "Filtros.." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Animación" +msgstr "Árbol de animación" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" @@ -3405,10 +3343,9 @@ msgstr "No se ha podido resolver el nombre de Dominio:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "Error de conexion, por favor intente otra vez." +msgstr "Error de conexión, por favor inténtelo otra vez." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect to host:" msgstr "No se puede conectar al host:" @@ -3417,18 +3354,16 @@ msgid "No response from host:" msgstr "No hay respuesta desde el host:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, return code:" -msgstr "Petición falida, código de retorno:" +msgstr "Petición fallida, código:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, too many redirects" msgstr "Petición fallida, demasiadas redirecciones" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "Error de descarga, al pareser el archivo ha sido manipulado." +msgstr "Error de descarga, al parecer el archivo ha sido manipulado." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -3464,7 +3399,7 @@ msgstr "Inactivo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "Reintente" +msgstr "Reintentar" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" @@ -3472,7 +3407,7 @@ msgstr "Error de Descarga" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "Este asset ya esta descargandose!" +msgstr "¡Éste asset ya está descargándose!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" @@ -3488,7 +3423,7 @@ msgstr "siguiente" #: editor/plugins/asset_library_editor_plugin.cpp msgid "last" -msgstr "ultimo" +msgstr "último" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -3539,21 +3474,27 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"No se puede encontrar una ruta válida para las imágenes \"lightmap\".\n" +"Guarda la escena (para que las imágenes se guarden en el mismo directorio), " +"o selecciona otra ruta desde las propiedades del \"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 "" +"No hay mallas que pre-calcular. Asegúrese de que contienen el canal UV2 y el " +"flag 'Bake Light' esté activo." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Error al crear las imágenes del \"lighmap\", asegúrate de que se puede " +"escribir en la ruta." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Transfiriendo a «lightmaps»:" +msgstr "Calculando «lightmaps»" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3562,7 +3503,7 @@ msgstr "Vista previa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "Ajustes de fijado" +msgstr "Configurar ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3595,29 +3536,24 @@ msgid "Move vertical guide" msgstr "Mover Guía Vertical" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new vertical guide" -msgstr "Crear script" +msgstr "Crear nueva guía vertical" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove vertical guide" -msgstr "Quitar variable" +msgstr "Quitar guía vertical" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move horizontal guide" -msgstr "Mover Punto en Curva" +msgstr "Mover guía horizontal" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new horizontal guide" -msgstr "Crear script" +msgstr "Crear nueva guía horizontal" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove horizontal guide" -msgstr "Quitar claves incorrectas" +msgstr "Quitar guía horizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" @@ -3632,14 +3568,12 @@ msgid "Edit CanvasItem" msgstr "Editar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Anchors only" -msgstr "Ancla" +msgstr "Sólo anclado" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Anchors and Margins" -msgstr "Cambiar anclas" +msgstr "Cambiar anclas y márgenes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3659,17 +3593,17 @@ msgstr "Arrastrar: Rotar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "Alt+Arrastrae: Mover" +msgstr "Alt+Arrastrar: Mover" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" -"Presioná 'v' para Cambiar el Pivote, 'Shift+v' para Arrastrar el Pivote (al " +"Presiona 'v' para Cambiar el Pivote, 'Shift+v' para Arrastrar el Pivote (al " "mover)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt+Click Der.: Selección en depth list" +msgstr "Alt+Click Der.: Selección en listado de solapamientos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3685,7 +3619,7 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Mostrar una lista de todos los objetos en la posicion cliqueada\n" +"Mostrar una lista de todos los objetos en la posición cliqueada\n" "(igual que Alt+Click Der. en modo selección)." #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3697,32 +3631,28 @@ msgid "Pan Mode" msgstr "Modo desplazamiento lateral" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggles snapping" -msgstr "Des/activar «breakpoint»" +msgstr "Activar/desactivar fijado" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" -msgstr "Fijar a cuadrícula" +msgstr "Usar fijado" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping options" -msgstr "Opciones de Animación" +msgstr "Opciones de fijado" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to grid" -msgstr "Modo de fijado:" +msgstr "Ajustar a cuadrícula" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "Fijar rotación" +msgstr "Ajustar rotación" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Configure Snap..." -msgstr "Configurar fijado.." +msgstr "Configurar Cuadrícula..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3730,37 +3660,31 @@ msgstr "Fijado relativo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Adherir a píxeles" +msgstr "Ajustar a píxeles" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Smart snapping" -msgstr "Ajuste Inteligente" +msgstr "Fijado inteligente" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to parent" -msgstr "Expandir al padre" +msgstr "Ajustar al padre" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node anchor" -msgstr "Ajustar al Nodo Ancla" +msgstr "Ajustar al anclado del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node sides" -msgstr "Ajustar a Lados del Nodo" +msgstr "Ajustar a los lados de los nodos" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to other nodes" -msgstr "Ajustar a Otros Nodos" +msgstr "Ajustar a otros nodos" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to guides" -msgstr "Modo de fijado:" +msgstr "Ajustar a guías" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3770,7 +3694,7 @@ msgstr "Inmovilizar el objeto." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "Liberar el objeto." +msgstr "Liberar objeto inmovilizado." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." @@ -3789,9 +3713,8 @@ msgid "Clear Bones" msgstr "Reestablecer huesos" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Bones" -msgstr "Crear huesos" +msgstr "Mostrar huesos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -3812,19 +3735,26 @@ msgid "Show Grid" msgstr "Mostrar rejilla" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy -msgid "Show helpers" -msgstr "Crear huesos" +msgid "Show Helpers" +msgstr "Mostrar ayudas" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "Mostrar reglas" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "Mostrar guías" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show rulers" -msgstr "Crear huesos" +msgid "Show Origin" +msgstr "Ver origen" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show guides" -msgstr "Crear huesos" +msgid "Show Viewport" +msgstr "1 visor" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3835,9 +3765,8 @@ msgid "Frame Selection" msgstr "Encuadrar selección" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Layout" -msgstr "Guardar ajustes" +msgstr "Disposición" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3864,27 +3793,22 @@ msgid "Drag pivot from mouse position" msgstr "Arrastrar pivote desde la posición del ratón" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Establecer pos. de salida de curva" +msgstr "Establecer punto de pivotado en la posición del ratón" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Multiply grid step by 2" -msgstr "Multiplicar paso de cuadŕicula por 2" +msgstr "Multiplicar paso de cuadrícula por 2" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Divide grid step by 2" msgstr "Dividir paso de cuadrícula por 2" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add %s" -msgstr "Añadir todos" +msgstr "Añadir %s" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Adding %s..." msgstr "Añadiendo %s..." @@ -3894,7 +3818,7 @@ msgstr "Aceptar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "No se pueden instanciar varios nodos sin un nodo raíz." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3907,18 +3831,16 @@ msgid "Error instancing scene from %s" msgstr "Error al instanciar escena desde %s" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change default type" -msgstr "Cambiar Valor por Defecto" +msgstr "Cambiar tipo por defecto" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"Arrastrar y soltar + Mayús: Añadir nodo como hermano\n" -"Arrastrar y soltar + Alt: Cambiar tipo de nodo" +"Arrastrar y soltar + Shift : Añadir nodo como hermano\n" +"Arrastrar y soltar + Alt : Cambiar tipo de nodo" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -3952,88 +3874,75 @@ msgstr "Actualizar desde escena" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "Flat0" +msgstr "Plana0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "Flat1" +msgstr "Plana1" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease in" -msgstr "Transición entrada" +msgstr "Transición de entrada" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease out" -msgstr "Transición salida" +msgstr "Transición de salida" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Paso suavizado" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Modify Curve Point" -msgstr "Modificar Mapa de Curvas" +msgstr "Modificar punto de la curva" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Modify Curve Tangent" -msgstr "Modificar Mapa de Curvas" +msgstr "Modificar tangente de la curva" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "Cargar recurso" +msgstr "Cargar ajuste predeterminado de curva" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "Añadir entrada" +msgstr "Añadir punto" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "Quitar Punto de ruta" +msgstr "Quitar punto" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Lineal" +msgstr "Izquierda lineal" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Vista derecha" +msgstr "Derecha lineal" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load preset" -msgstr "Cargar recurso" +msgstr "Cargar ajuste predeterminado" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Quitar Punto de ruta" +msgstr "Quitar punto de la curva" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Toggle Curve Linear Tangent" -msgstr "Cambiar tangente de curva lineal" +msgstr "Alternar curva de tangente lineal" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "Mantén Mayus para editar las tangentes individualmente" +msgstr "Mantén Mayús para editar las tangentes individualmente" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Precalcular GI Probe" #: editor/plugins/gradient_editor_plugin.cpp -#, fuzzy msgid "Add/Remove Color Ramp Point" -msgstr "Añadir/quitar punto de rampa de color" +msgstr "Añadir/quitar punto en la rampa del degradado" #: editor/plugins/gradient_editor_plugin.cpp #: editor/plugins/shader_graph_editor_plugin.cpp @@ -4086,15 +3995,15 @@ msgstr "Clic derecho: Borrar punto." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "¡El modelo está vacío!" +msgstr "¡La malla está vacía!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "Crear colisión estática triangular" +msgstr "Crear cuerpo estático \"Trimesh\"" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "Crear colisión estática convexa" +msgstr "Crear cuerpo estático convexo" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -4110,31 +4019,37 @@ msgstr "Crear forma convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "Crear modelo de navegación 3D" +msgstr "Crear malla de navegación" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "" +msgstr "La malla que contiene no es del tipo ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" msgstr "" +"Falló el procedimiento de Unwrapping, ¿Tal vez la malla contenga geometría " +"múltiple o desajustada?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "" +msgstr "No hay malla que depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "El modelo no tiene UV en esta capa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "¡A MeshInstance le falta un modelo 3D!" +msgstr "¡MeshInstance no tiene malla!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "¡El modelo 3D no tiene una superficie en la que crear contornos!" +msgstr "¡La malla no tiene superficie de la que crear contornos!" + +#: 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!" @@ -4146,15 +4061,15 @@ msgstr "Crear contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Modelos 3D" +msgstr "Malla" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "Crear colisión estática triangular" +msgstr "Crear cuerpo estático triangular" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "Crear colisión estática convexa" +msgstr "Crear cuerpo estático convexo" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" @@ -4166,25 +4081,23 @@ msgstr "Crear colisión hermanada convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh.." -msgstr "Crear modelo 3D de contorno.." +msgstr "Crear contorno de malla.." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV1" -msgstr "Ver" +msgstr "Ver UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV2" -msgstr "Ver" +msgstr "Ver UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "Desenvuelva UV2 para Lightmap/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "Crear modelo 3D de contorno" +msgstr "Crear contorno de malla" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" @@ -4193,42 +4106,40 @@ msgstr "Tamaño del contorno:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" -"No se especificó ningún modelo 3D de origen (y no se ha establecido ningún " -"MultiMesh en el nodo)." +"No se especificó malla de origen (y no hay MultiMesh establecido en el nodo)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." msgstr "" -"No se especificó ningún modelo de origen (y MultiMesh no contiene ningún " -"Mesh)." +"No se especificó malla de origen (y MultiMesh no contiene ningún Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "El origen del modelo es incorrecto (ruta incorrecta)." +msgstr "El origen de la malla es inválido (ruta inválida)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "El modelo elegido no es correcto (al no ser un MeshInstance)." +msgstr "La malla elegida no es correcta (no es un MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "El modelo elegido no es correcto (no contiene ningún recurso Mesh)." +msgstr "La malla elegida no es correcta (no contiene ningún recurso Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "Ninguna superficie de origen especificada." +msgstr "Ningún origen para la superficie especificado." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "La superficie de origen es incorrecta (ruta inválida)." +msgstr "El origen de la superficie es incorrecto (ruta inválida)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "La superficie de origen es inválida (sin geometría)." +msgstr "El origen de la superficie no es correcto (sin geometría)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "La superficie de origen es inválida (sin caras)." +msgstr "El origen de la superficie no es correcto (sin caras)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." @@ -4236,15 +4147,15 @@ msgstr "La superficie padre no tiene caras solidas para poblar." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "No se pudo mapear el area." +msgstr "No se pudo mapear el área." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "Elige un modelo 3D:" +msgstr "Elige un origen de malla:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "Seleccioná una Superficie Objetivo:" +msgstr "Selecciona una Superficie Objetivo:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" @@ -4276,7 +4187,7 @@ msgstr "Eje Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "Eje vertical del modelo:" +msgstr "Eje vertical de la malla:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -4296,76 +4207,63 @@ msgstr "Rellenar" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" -msgstr "¡Quemar!" +msgstr "¡Calcular!" #: editor/plugins/navigation_mesh_editor_plugin.cpp -#, fuzzy msgid "Bake the navigation mesh." -msgstr "Crear modelo de navegación 3D" +msgstr "Pre-calcular la malla de navegación 3D." #: editor/plugins/navigation_mesh_editor_plugin.cpp -#, fuzzy msgid "Clear the navigation mesh." -msgstr "Crear modelo de navegación 3D" +msgstr "Vaciar malla de navegación 3D." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Setting up Configuration..." msgstr "Estableciendo la Configuración..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Calculating grid size..." msgstr "Calculando tamaño de cuadrícula..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Creating heightfield..." -msgstr "Creando octree de luces" +msgstr "Creando octree de luces (\"heigfield\")..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Marking walkable triangles..." -msgstr "Cadenas traducibles…" +msgstr "Marcando triángulos transitables..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Construyendo heightfield compacto..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Eroding walkable area..." -msgstr "Erosión del área transitable..." +msgstr "Erosionando área transitable..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Partitioning..." -msgstr "Advertencia" +msgstr "Particionando..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Creating contours..." -msgstr "Creando octree de texturas" +msgstr "Creando contornos..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Creating polymesh..." -msgstr "Crear modelo 3D de contorno.." +msgstr "Crear malla 3D de contorno (\"polymesh\")..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Converting to native navigation mesh..." -msgstr "Crear modelo de navegación 3D" +msgstr "Convirtiendo a malla de navegación nativa..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Navigation Mesh Generator Setup:" -msgstr "Configuración del Generador de Malla de Navegación:" +msgstr "Configuración del Generador de Mallas de Navegación:" #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Parsing Geometry..." -msgstr "Leyendo geometría" +msgstr "Analizando geometría..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4377,25 +4275,21 @@ msgstr "Crear polígono de navegación" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generating AABB" -msgstr "Generar AABB" +msgstr "Generando AABB" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Can only set point into a ParticlesMaterial process material" msgstr "" -"Solo se puede asignar el punto a un material procesado del tipo " -"ParticlesMaterial." +"Solo se puede asignar un punto a un material de procesado ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "No pixels with transparency > 128 in image.." -msgstr "No hay píxeles con una transparencia mayor que 128 en la imagen.." +msgstr "No hay píxeles con transparencia > 128 en la imagen.." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4411,9 +4305,8 @@ msgstr "Borrar máscara de emisión" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Vértice" +msgstr "Partículas" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4421,24 +4314,20 @@ msgstr "Conteo de puntos generados:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generation Time (sec):" -msgstr "Tiempo promedio (seg)" +msgstr "Tiempo de generación (seg):" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Emission Mask" -msgstr "Establecer máscara de emisión" +msgstr "Máscara de emisión" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Capture from Pixel" -msgstr "Crear desde escena" +msgstr "Capturar desde píxel" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Emission Colors" -msgstr "Posiciones de emisión:" +msgstr "Colores de emisión" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -4465,65 +4354,55 @@ msgid "Generate AABB" msgstr "Generar AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emission Points From Mesh" -msgstr "Crear emisor a partir de modelo" +msgstr "Crear puntos de emisión desde malla" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emission Points From Node" -msgstr "Crear emisor a partir de nodo" +msgstr "Crear puntos de emisión desde el nodo" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" msgstr "Crear emisor" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Points:" -msgstr "Posiciones de emisión:" +msgstr "Puntos de emisión:" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points" -msgstr "Superficie %d" +msgstr "Puntos de la superficie" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points+Normal (Directed)" -msgstr "Puntos de superficio + Normal (Dirigida)" +msgstr "Puntos de la superficie + Normal (Dirigida)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" msgstr "Volumen" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source: " -msgstr "Relleno de emisión:" +msgstr "Fuente de emisión: " #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility AABB" -msgstr "Generar AABB" +msgstr "Generar AABB de visibilidad" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "Borrar punto de curva" +msgstr "Borrar punto de la curva" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control from Curve" -msgstr "Mover Out-Control en Curva" +msgstr "Eliminar \"Out-Control\" de la Curva" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control from Curve" -msgstr "Borrar punto de curva" +msgstr "Eliminar \"In-Control\" de la curva" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Add Point to Curve" msgstr "Añadir punto a curva" @@ -4551,9 +4430,8 @@ msgstr "Mayús + arrastrar: Seleccionar puntos de control" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Click: Add Point" -msgstr "Clic: Añadir punto" +msgstr "Click: Añadir punto" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4586,22 +4464,19 @@ msgstr "Cerrar curva" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "Nº de punto en curva" +msgstr "Punto de curva #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Establecer pos. de punto de curva" +msgstr "Establecer posición de punto de curva" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Establecer pos. de entrada de curva" +msgstr "Establecer posición de entrada de curva" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Establecer pos. de salida de curva" +msgstr "Establecer posición de salida de curva" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4609,17 +4484,15 @@ msgstr "Dividir ruta" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "Quitar Punto de ruta" +msgstr "Quitar punto de ruta" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Mover Out-Control en Curva" +msgstr "Eliminar punto \"Out-Control\"" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control Point" -msgstr "Mover In-Control en Curva" +msgstr "Eliminar punto \"In-Control\"" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4684,11 +4557,11 @@ msgstr "Limpiar UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap" -msgstr "Adherir a cuadrícula" +msgstr "Ajustar a cuadrícula" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "Adherir a cuadrícula" +msgstr "Habilitar fijado" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" @@ -4716,6 +4589,22 @@ msgid "Resource clipboard is empty!" msgstr "¡El portapapeles de recursos está vacío!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir en el editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instancia:" + +#: 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 +msgid "Type:" +msgstr "Tipo:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Cargar recurso" @@ -4728,21 +4617,16 @@ msgid "Paste" msgstr "Pegar" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Ruta de recursos" +msgstr "Pre-cargador de Recursos (ResourcePreloader)" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Files" -msgstr "Reestablecer huesos" +msgstr "Limpiar lista archivos recientes" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close and save changes?" -msgstr "" -"¿Cerrar y guardar cambios?\n" -"\"" +msgstr "¿Cerrar y guardar cambios?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4773,9 +4657,8 @@ msgid " Class Reference" msgstr " Referencia de clase" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Ordenar:" +msgstr "Ordenar" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp @@ -4814,14 +4697,12 @@ msgid "Soft Reload Script" msgstr "Recargar parcialmente el script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Copiar ruta" +msgstr "Copiar ruta del script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" -msgstr "SistDeArchivos" +msgstr "Mostrar en sistema de archivos" #: editor/plugins/script_editor_plugin.cpp msgid "History Prev" @@ -4848,9 +4729,8 @@ msgid "Close Docs" msgstr "Cerrar documentación" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close All" -msgstr "Cerrar" +msgstr "Cerrar todo" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -4861,9 +4741,8 @@ msgid "Run" msgstr "Ejecutar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Añadir/quitar favorito" +msgstr "Alternar panel de scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4897,14 +4776,12 @@ msgid "Keep Debugger Open" msgstr "Mantener el depurador abierto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Abrir en el editor" +msgstr "Depurar en editor externo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Godot online documentation" -msgstr "Buscar en la documentación de referencia." +msgstr "Abrir documentación online de Godot" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." @@ -4923,9 +4800,8 @@ msgid "Go to next edited document." msgstr "Ir a siguiente documento editado." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Discard" -msgstr "Discreto" +msgstr "Descartar" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -4959,19 +4835,16 @@ msgstr "" "pertenecen está cargada" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Only resources from filesystem can be dropped." -msgstr "Solo se pueden soltar recursos del sistema." +msgstr "Sólo se pueden arrastrar/soltar recursos del sistema de archivos." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Pick Color" -msgstr "Color" +msgstr "Seleccionar color" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Case" -msgstr "Convirtiendo imágenes" +msgstr "Convertir Máy/Min" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4983,7 +4856,7 @@ msgstr "Minúscula" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "Convertir en Mayúsculas" +msgstr "Letra Capital" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5002,9 +4875,8 @@ msgid "Select All" msgstr "Seleccionar todo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Eliminar punto" +msgstr "Eliminar línea" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5019,23 +4891,20 @@ msgid "Toggle Comment" msgstr "Des/activar comentario" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clonar hacia abajo" - -#: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Desplegar Línea" +msgstr "Plegar/Desplegar línea" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold All Lines" -msgstr "Plegar Todas las Líneas" +msgstr "Plegar todas las líneas" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Unfold All Lines" -msgstr "Desplegar Todas las Líneas" +msgstr "Desplegar todas las líneas" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar hacia abajo" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" @@ -5050,9 +4919,8 @@ msgid "Convert Indent To Spaces" msgstr "Convertir Indentación a Espacios" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent To Tabs" -msgstr "Convertir Indentación a Tabuladores" +msgstr "Convertir indentación a tabuladores" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5065,7 +4933,7 @@ msgstr "Des/activar «breakpoint»" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Desactivar todos los «breakpoints»" +msgstr "Borrar todos los «breakpoints»" #: editor/plugins/script_text_editor.cpp msgid "Goto Next Breakpoint" @@ -5076,14 +4944,12 @@ msgid "Goto Previous Breakpoint" msgstr "Ir al «breakpoint» anterior" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Uppercase" -msgstr "Convertir a…" +msgstr "Convertir a mayúsculas" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Lowercase" -msgstr "Convertir a…" +msgstr "Convertir a minúsculas" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5107,7 +4973,7 @@ msgstr "Ayuda contextual" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "Shader" +msgstr "\"Shader\"" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" @@ -5182,9 +5048,8 @@ msgid "Change Comment" msgstr "Cambiar Comentarío" #: editor/plugins/shader_graph_editor_plugin.cpp -#, fuzzy msgid "Add/Remove to Color Ramp" -msgstr "Añadir/quitar a/de rampa de color" +msgstr "Añadir/quitar de rampa de color" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" @@ -5200,40 +5065,39 @@ msgstr "Cambiar Nombre de Entrada" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "Conectar Nodos de Gráfico" +msgstr "Conectar Nodos Gráficos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "Desconectar Nodo de Gráfico" +msgstr "Desconectar Nodos Gráficos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "Quitar Nodo de Gráfico de Shaders" +msgstr "Borrar Nodo Gráfico de Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "Mover Nodo de Gráfico de Shaders" +msgstr "Mover Nodo Gráfico de Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" -msgstr "Duplicar Nodo(s) de Gráfico" +msgstr "Duplicar Nodo(s) Gráfico" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "Quitar Nodo(s) de Gráfico de Shaders" +msgstr "Borrar Nodo(s) Gráfico(s) de Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "Error: Link de Conección Cíclico" +msgstr "Error: Link de Conexión Cíclico" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "Error: Conecciones de Entrada Faltantes" +msgstr "Error: Conexiones de Entrada Faltantes" #: editor/plugins/shader_graph_editor_plugin.cpp -#, fuzzy msgid "Add Shader Graph Node" -msgstr "Añadir nodo de gráficos de sombreador" +msgstr "Añadir nodo gráfico de Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5264,14 +5128,12 @@ msgid "View Plane Transform." msgstr "Ver transformación en plano." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " -msgstr "Escala:" +msgstr "Escalado: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Traducciones:" +msgstr "Traduciendo: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -5279,41 +5141,35 @@ msgstr "Girando %s grados." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "Poner claves está desactivado (no se insertaron claves)." +msgstr "Insertar claves está desactivado (no se insertaron claves)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." msgstr "Clave de animación insertada." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn" msgstr "Objetos dibujados" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" -msgstr "Actualizar cambios" +msgstr "Cambios del material" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Actualizar cambios" +msgstr "Cambios del shader" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "Actualizar cambios" +msgstr "Cambios de superficie" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls" msgstr "Llamadas de dibujado" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" -msgstr "Vértice" +msgstr "Vértices" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" @@ -5392,94 +5248,82 @@ msgid "Display Overdraw" msgstr "Mostrar superposiciones" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Display Unshaded" -msgstr "Mostrar sin sombras" +msgstr "Mostrar sin sombra" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Entorno" +msgstr "Ver entorno" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" -msgstr "Gizmos" +msgstr "Ver gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" msgstr "Ver información" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr "Ver Archivos" +msgstr "Ver FPS" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Half Resolution" -msgstr "Escalar selección" +msgstr "Media resolución" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" msgstr "Oyente de Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Activar" +msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Left" msgstr "Vista libre izquierda" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Right" msgstr "Vista libre derecha" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Avanzar" +msgstr "Vista libre frente" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Hacia atrás" +msgstr "Vista libre atrás" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Up" -msgstr "Vista libre superior" +msgstr "Vista libre arriba" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Rueda hacia abajo." +msgstr "Vista libre abajo" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Speed Modifier" -msgstr "Modificador de velocidad de la vista libre" +msgstr "Modificador de velocidad de \"vista libre\"" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Ventana de transformación" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Modo de selección" +msgstr "Modo de selección (Q)" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+Click Der.: Selección en depth list" +msgstr "" +"Arrastrar: Rotar\n" +"Alt + Arrastrar: Mover\n" +"Alt + Click derecho: Selección en la lista de superposición" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5498,14 +5342,12 @@ msgid "Local Coords" msgstr "Coordenadas locales" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Local Space Mode (%s)" -msgstr "Modo escalado (R)" +msgstr "Modo de espacio local (%s)" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Mode (%s)" -msgstr "Modo de fijado:" +msgstr "Modo de ajuste (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -5540,42 +5382,36 @@ msgid "Insert Animation Key" msgstr "Insertar clave de animación" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Focus Origin" -msgstr "Ver origen" +msgstr "Enfocar origen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "Seleccionar" +msgstr "Enfocar selección" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" msgstr "Alinear selección con visor" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" msgstr "Seleccionar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" msgstr "Mover" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "Ctrl: Rotar" +msgstr "Rotar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "Escala:" +msgstr "Escalar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" -msgstr "Modo pantalla completa" +msgstr "Alternar vista libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5583,7 +5419,7 @@ msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap.." -msgstr "Configurar fijado.." +msgstr "Configurar ajuste.." #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." @@ -5628,23 +5464,23 @@ msgstr "Ajustes" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" -msgstr "" +msgstr "Visibilidad de Gizmo esqueleto" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "Ajustes de fijado" +msgstr "Configuración de fijado" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "Fijar desplazamiento:" +msgstr "Ajuste de desplazamiento:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "Fijar rotación (grados):" +msgstr "Ajuste de rotación (grados):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "Fijar escala (%):" +msgstr "Ajuste de escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" @@ -5692,11 +5528,11 @@ msgstr "Posterior" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "ERROR: ¡No se pudo cargar el recurso de cuadros!" +msgstr "ERROR: ¡No se pudo cargar el recurso de fotogramas!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "Añadir cuadro" +msgstr "Añadir fotograma" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" @@ -5704,7 +5540,7 @@ msgstr "¡El portapapeles de recursos esta vacío o no es una textura!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "Pegar cuadro" +msgstr "Pegar fotograma" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" @@ -5736,7 +5572,7 @@ msgstr "Repetir" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "Cuadros de animación" +msgstr "Fotogramas de animación" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -5747,33 +5583,28 @@ msgid "Insert Empty (After)" msgstr "Insertar vacío (después)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Borrar nodos" +msgstr "Mover (Antes)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (After)" -msgstr "Mover a la izquierda" +msgstr "Mover (Después)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "SpriteFrames" -msgstr "Frames del Stack" +msgstr "Fotogramas del sprite" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "Vista previa de StyleBox:" #: editor/plugins/style_box_editor_plugin.cpp -#, fuzzy msgid "StyleBox" -msgstr "Estilo" +msgstr "Caja de estilos" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "Setear region_rect" +msgstr "Establecer rectángulo de región" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5785,11 +5616,11 @@ msgstr "<Ninguno>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "Adherir a píxeles" +msgstr "Ajustar a píxeles" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "Adherir a cuadrícula" +msgstr "Ajustar a cuadrícula" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -5836,14 +5667,12 @@ msgid "Remove Item" msgstr "Remover Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Quitar elementos de clases" +msgstr "Quitar todos los elementos" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Quitar" +msgstr "Quitar todos" #: editor/plugins/theme_editor_plugin.cpp msgid "Edit theme.." @@ -5870,9 +5699,8 @@ msgid "Create Empty Editor Template" msgstr "Crear plantilla de editor vacía" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Create From Current Editor Theme" -msgstr "Crear plantilla de editor vacía" +msgstr "Crear desde el tema actual del editor" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5895,6 +5723,16 @@ msgid "Checked Item" msgstr "Casilla de verificación activa" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Añadir elemento" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Casilla de verificación activa" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Tiene" @@ -5922,11 +5760,6 @@ msgstr "Tab 2" msgid "Tab 3" msgstr "Tab 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipo:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipo de datos:" @@ -5948,33 +5781,28 @@ msgid "Color" msgstr "Color" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme" -msgstr "Guardar tema" +msgstr "Tema" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Eliminar selección" +msgstr "Borrar selección" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "Pintar TileMap" +msgstr "Dibujar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Lineal" +msgstr "Dibujar línea" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rectangle Paint" -msgstr "Rectángulo de pintura" +msgstr "Dibujar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "Cubo" +msgstr "Cubo de relleno" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -6001,9 +5829,8 @@ msgid "Mirror Y" msgstr "Voltear verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Paint Tile" -msgstr "Pintar TileMap" +msgstr "Dibujar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6039,12 +5866,11 @@ msgstr "¿Crear desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "¿Mergear desde escena?" +msgstr "¿Mezclar desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "\"Tile Set\"" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6059,59 +5885,57 @@ msgid "Error" msgstr "Error" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Autotiles" -msgstr "Autotrocear" +msgstr "\"Autotiles\"" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings." msgstr "" +"Seleccione sub-tile para utilizar como icono, éste se utilizará también en " +"enlazados automáticos no válidos." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" +"Click izquierdo: habilitar bit.\n" +"Click derecho: deshabilitar bit." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "Guardar el recurso editado actualmente." +msgstr "Guardar el sub-tile editado actualmente." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "" +msgstr "Selecciona sub-tile para cambiar su prioridad." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" msgstr "Cancelar" #: editor/project_export.cpp -#, fuzzy msgid "Runnable" -msgstr "Activar" +msgstr "Ejecutable" #: editor/project_export.cpp -#, fuzzy msgid "Delete patch '%s' from list?" -msgstr "Eliminar entrada" +msgstr "¿Eliminar patch '%s' de la lista?" #: editor/project_export.cpp -#, fuzzy msgid "Delete preset '%s'?" -msgstr "¿Quieres eliminar los archivos seleccionados?" +msgstr "¿Eliminar preajuste '%s'?" #: editor/project_export.cpp -#, fuzzy msgid "Export templates for this platform are missing/corrupted: " -msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" +msgstr "" +"Las plantillas de exportación para esta plataforma faltan/están corruptas: " #: editor/project_export.cpp -#, fuzzy msgid "Presets" -msgstr "Ajuste…" +msgstr "Preajustes" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add.." @@ -6122,121 +5946,99 @@ msgid "Resources" msgstr "Recursos" #: editor/project_export.cpp -#, fuzzy msgid "Export all resources in the project" -msgstr "Exportar todos los recursos en el proyecto." +msgstr "Exportar todos los recursos del proyecto" #: editor/project_export.cpp -#, fuzzy msgid "Export selected scenes (and dependencies)" -msgstr "Exportar los recursos seleccionado (incluyendo dependencias)." +msgstr "Exportar las escenas seleccionadas (incluyendo dependencias)" #: editor/project_export.cpp -#, fuzzy msgid "Export selected resources (and dependencies)" -msgstr "Exportar los recursos seleccionado (incluyendo dependencias)." +msgstr "Exportar los recursos seleccionado (incluyendo dependencias)" #: editor/project_export.cpp msgid "Export Mode:" msgstr "Modo de exportación:" #: editor/project_export.cpp -#, fuzzy msgid "Resources to export:" msgstr "Recursos a exportar:" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" msgstr "" "Filtros para exportar archivos que no son recursos (separados por comas, ej: " -"*.json, *.txt):" +"*.json, *.txt)" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" msgstr "" "Filtros para excluir de la exportación (separados por comas, ej: *.json, *." -"txt):" +"txt)" #: editor/project_export.cpp -#, fuzzy msgid "Patches" -msgstr "Coincidencias:" +msgstr "Exportaciones previas" #: editor/project_export.cpp -#, fuzzy msgid "Make Patch" -msgstr "Ruta de destino:" +msgstr "Hacer \"Patch\"" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Textura" +msgstr "Características" #: editor/project_export.cpp -#, fuzzy msgid "Custom (comma-separated):" msgstr "Personalizado (separado por comas):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Lista de métodos:" +msgstr "Lista de características:" #: editor/project_export.cpp msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export templates for this platform are missing:" -msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" +msgstr "Faltan plantillas de exportación para esta plataforma:" #: editor/project_export.cpp -#, fuzzy msgid "Export templates for this platform are missing/corrupted:" -msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" +msgstr "" +"Las plantillas de exportación para esta plataforma faltan/están corruptas:" #: editor/project_export.cpp -#, fuzzy msgid "Export With Debug" -msgstr "Exportar Tile Set" +msgstr "Exportar con depuración" #: editor/project_manager.cpp -#, fuzzy msgid "The path does not exist." -msgstr "El archivo existe." +msgstr "La ruta no existe." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' file." -msgstr "¡Prueba exportando fuera de la carpeta del proyecto!" +msgstr "Por favor elija un archivo 'project.godot'." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "¡Prueba exportando fuera de la carpeta del proyecto!" - -#: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Por favor, elige un directorio que no contenga un archivo 'project.godot'." +msgstr "Por favor elija una carpeta vacía." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Proyecto importado" #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't create folder." msgstr "No se pudo crear la carpeta." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Ya hay una carpeta en esta ruta con ese nombre." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6247,33 +6049,28 @@ msgid "Invalid project path (changed anything?)." msgstr "La ruta del proyecto no es correcta (¿has cambiado algo?)." #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in project path." -msgstr "No se pudo crear engine.cfg en la ruta de proyecto." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"No se pudo cargar project.godot desde la ruta de proyecto (error %d). La " +"ruta no existe o está corrupta." #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't edit project.godot in project path." -msgstr "No se pudo crear engine.cfg en la ruta de proyecto." +msgstr "No se pudo editar project.godot en la ruta del proyecto." #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't create project.godot in project path." -msgstr "No se pudo crear engine.cfg en la ruta de proyecto." +msgstr "No se pudo crear project.godot en la ruta del proyecto." #: editor/project_manager.cpp msgid "The following files failed extraction from package:" msgstr "Los siguientes archivos no se pudieron extraer del paquete:" #: editor/project_manager.cpp -#, fuzzy msgid "Rename Project" -msgstr "Proyecto sin nombre" - -#: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "No se pudo crear engine.cfg en la ruta de proyecto." +msgstr "Renombrar proyecto" #: editor/project_manager.cpp msgid "New Game Project" @@ -6284,34 +6081,30 @@ msgid "Import Existing Project" msgstr "Importar proyecto existente" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Importar y abrir" +msgstr "Importar y editar" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Crear proyecto nuevo" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Crear emisor" +msgstr "Crear y editar" #: editor/project_manager.cpp msgid "Install Project:" msgstr "Instalar proyecto:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Instalar" +msgstr "Instalar y editar" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nombre del proyecto:" #: editor/project_manager.cpp -#, fuzzy msgid "Create folder" msgstr "Crear carpeta" @@ -6328,32 +6121,29 @@ msgid "Unnamed Project" msgstr "Proyecto sin nombre" #: editor/project_manager.cpp -#, fuzzy msgid "Can't open project" -msgstr "Conectar.." +msgstr "No se puede abrir proyecto" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "¿Seguro que quieres abrir más de un proyecto?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"No se ha definido ninguna escena principal, ¿quieres elegir alguna?\n" -"Es posible cambiarla más tarde en «Ajustes del proyecto» bajo la categoría " -"«aplicación»." +"No hay una escena principal definida para ejecutar el proyecto.\n" +"Por favor elija la escena principal en \"Ajustes del proyecto\" en la " +"categoría \"Aplicación\"." #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"No se puede ejecutar el proyecto: Los assets necesitan ser importados.\n" +"No se puede ejecutar el proyecto: los assets necesitan ser importados.\n" "Por favor, edita el proyecto para activar el importado inicial." #: editor/project_manager.cpp @@ -6404,31 +6194,27 @@ msgid "New Project" msgstr "Proyecto nuevo" #: editor/project_manager.cpp -#, fuzzy msgid "Templates" -msgstr "Remover Item" +msgstr "Plantillas" #: editor/project_manager.cpp msgid "Exit" msgstr "Salir" #: editor/project_manager.cpp -#, fuzzy msgid "Restart Now" -msgstr "Reiniciar (s):" +msgstr "Reiniciar ahora" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Conectar.." +msgstr "No se puede ejecutar el proyecto" #: editor/project_manager.cpp -#, fuzzy msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" -"Actualmente no tiene ningún proyecto.\n" +"Ahora mismo no tiene ningún proyecto.\n" "¿Le gustaría explorar los proyectos ejemplo oficiales del Asset Library?" #: editor/project_settings_editor.cpp @@ -6448,8 +6234,10 @@ msgid "Mouse Button" msgstr "Botón del ratón" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "La acción no es correcta (no puedes utilizar «/» o «:»)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6520,32 +6308,28 @@ msgid "Button 9" msgstr "Botón 9" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Axis Index:" -msgstr "Índice de ejes del mando:" +msgstr "Índice de eje del mando:" #: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eje" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Button Index:" -msgstr "Índice de botones del mando:" +msgstr "Índice de boton del mando:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Borrar evento de acción de entrada" +msgstr "Borrar \"Input Action\"" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" msgstr "Borrar evento de acción de entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Event" -msgstr "Añadir elemento vacío" +msgstr "Añadir evento" #: editor/project_settings_editor.cpp msgid "Device" @@ -6576,38 +6360,28 @@ msgid "Wheel Down." msgstr "Rueda hacia abajo." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Añadir propiedad «Getter»" +msgstr "Añadir propiedad global" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Select a setting item first!" -msgstr "¡Selecciona un item primero!" +msgstr "¡Selecciona un ítem primero!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '%s' exists." -msgstr "Propiedad:" +msgstr "No existe la propiedad '%s'." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." msgstr "El ajuste '%s' es interno y no puede ser eliminado." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Eliminar entrada" +msgstr "Eliminar elemento" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "No se puede conectar al host:" - -#: editor/project_settings_editor.cpp -#, fuzzy msgid "Already existing" -msgstr "Des/activar persistencia" +msgstr "Ya existe" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -6622,7 +6396,6 @@ msgid "Settings saved OK." msgstr "Los ajustes se han guardado correctamente." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Override for Feature" msgstr "Sobreescribir para esta característica" @@ -6655,19 +6428,16 @@ msgid "Remove Resource Remap Option" msgstr "Quitar opción de remapeo de recursos" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Cambiar tiempo de mezcla" +msgstr "Cambiar filtro de localización" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter Mode" -msgstr "Modo de Filtro del Locale Cambiado" +msgstr "Modo de filtro de localización cambiado" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Project Settings (project.godot)" -msgstr "Ajustes de proyecto (engine.cfg)" +msgstr "Ajustes del proyecto (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -6678,9 +6448,8 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Override For.." -msgstr "Sobreescribir para.." +msgstr "Sobre escribir por.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6727,38 +6496,32 @@ msgid "Locale" msgstr "Idioma" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Locales Filter" -msgstr "Filtrado de imágenes:" +msgstr "Filtro de localizaciones" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show all locales" -msgstr "Crear huesos" +msgstr "Mostrar todas las localizaciones" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show only selected locales" -msgstr "Mostrar solo Las Configuraciones Regionales Seleccionadas" +msgstr "Mostrar solo las configuraciones regionales seleccionadas" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Filter mode:" -msgstr "Filtros" +msgstr "Modo de filtrado:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Locales:" -msgstr "Idioma" +msgstr "Idiomas:" #: editor/project_settings_editor.cpp msgid "AutoLoad" msgstr "AutoLoad" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Viewport" -msgstr "1 visor" +msgstr "Selecciona un visor" #: editor/property_editor.cpp msgid "Ease In" @@ -6793,45 +6556,38 @@ msgid "Assign" msgstr "Asignar" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Selecciona un nodo" +msgstr "Seleccionar nodo" #: editor/property_editor.cpp -#, fuzzy msgid "New Script" -msgstr "Script siguiente" +msgstr "Nuevo script" #: editor/property_editor.cpp msgid "New %s" -msgstr "" +msgstr "Nuevo %s" #: editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "Crear huesos" +msgstr "Hacer único" #: editor/property_editor.cpp -#, fuzzy msgid "Show in File System" -msgstr "SistDeArchivos" +msgstr "Mostrar en el sistema de archivos" #: editor/property_editor.cpp -#, fuzzy msgid "Convert To %s" -msgstr "Convertir a.." +msgstr "Convertir a %s" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Error al cargar el archivo: ¡No es un recurso!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Selecciona nodos a importar" +msgstr "¡El nodo seleccionado no es un visor!" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" msgstr "Selecciona un nodo" @@ -6844,9 +6600,8 @@ msgid "On" msgstr "Activado" #: editor/property_editor.cpp -#, fuzzy msgid "[Empty]" -msgstr "Añadir elemento vacío" +msgstr "[Vacío]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" @@ -6861,14 +6616,12 @@ msgid "Select Property" msgstr "Seleccionar Propiedad" #: editor/property_selector.cpp -#, fuzzy msgid "Select Virtual Method" -msgstr "Modo de selección" +msgstr "Seleccionar método virtual" #: editor/property_selector.cpp -#, fuzzy msgid "Select Method" -msgstr "Modo de selección" +msgstr "Seleccionar método" #: editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" @@ -6961,7 +6714,6 @@ msgid "Delete Node(s)?" msgstr "¿Quieres borrar los nodos?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Can not perform with the root node." msgstr "No se puede efectuar con el nodo raíz." @@ -7007,7 +6759,7 @@ msgid "" "satisfied." msgstr "" "No se pudo guardar la escena nueva. Es posible que no se hayan podido " -"satisfacer las dependencias (instancias)." +"resolver las dependencias (instancias)." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -7018,18 +6770,13 @@ msgid "Error duplicating scene to save it." msgstr "Error al duplicar escena para guardarla." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" -msgstr "Recursos:" +msgstr "Sub-recursos" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Limpiar heredado" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir en el editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Borrar nodos" @@ -7047,14 +6794,12 @@ msgid "Change Type" msgstr "Cambiar tipo" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach Script" -msgstr "Añadir script" +msgstr "Añadir Script" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Clear Script" -msgstr "Crear script" +msgstr "Quitar script" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7065,9 +6810,8 @@ msgid "Save Branch as Scene" msgstr "Guardar Rama como Escena" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Copy Node Path" -msgstr "Copiar ruta" +msgstr "Copiar ruta del nodo" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -7086,29 +6830,24 @@ msgstr "" "existe ningún nodo raíz." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Filtros" +msgstr "Filtrar nodos" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script for the selected node." -msgstr "Crear un nuevo script para el nodo seleccionado." +msgstr "Añadir un script nuevo o existente al nodo seleccionado." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Clear a script for the selected node." -msgstr "Crear un nuevo script para el nodo seleccionado." +msgstr "Borra el script del nodo seleccionado." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "Quitar" +msgstr "Remoto" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Local" -msgstr "Idioma" +msgstr "Local" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" @@ -7131,16 +6870,14 @@ msgid "Node configuration warning:" msgstr "Alerta de configuración de nodos:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexion(es) y grupo(s)\n" +"El nodo tiene conexión/es y grupo/s\n" "Haz click para mostrar el panel de señales." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connections.\n" "Click to show signals dock." @@ -7157,13 +6894,8 @@ msgstr "" "Click para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instancia:" - -#: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" -msgstr "Script siguiente" +msgstr "Abrir script" #: editor/scene_tree_editor.cpp msgid "" @@ -7182,9 +6914,8 @@ msgstr "" "Haz click para hacerlos seleccionables" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visibility" -msgstr "Act/Desact. Espacial Visible" +msgstr "Alternar visibilidad" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7208,19 +6939,16 @@ msgid "Select a Node" msgstr "Selecciona un nodo" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Error al cargar la imagen:" +msgstr "Error al cargar la plantilla '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "No se puede crear el script en el sistema de archivos." +msgstr "Error - No se pudo crear script en el sistema." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" -msgstr "Error al cargar escena desde %s" +msgstr "Error al cargar script desde %s" #: editor/script_create_dialog.cpp msgid "N/A" @@ -7243,90 +6971,76 @@ msgid "Directory of the same name exists" msgstr "Ya existe un directorio con el mismo nombre" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "El archivo ya existe, ¿quieres sobreescribirlo?" +msgstr "El archivo ya existe, será reutilizado" #: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "La extensión no es correcta" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Wrong extension chosen" msgstr "Extensión seleccionada errónea" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Ruta incorrecta." +msgstr "Ruta inválida" #: editor/script_create_dialog.cpp msgid "Invalid class name" msgstr "El nombre de clase no es correcto" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path" -msgstr "El nombre de la propiedad índice no es correcto." +msgstr "Nombre heredado o ruta inválida" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script valid" -msgstr "Script" +msgstr "Script válido" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" msgstr "Permitido: a-z, A-Z, 0-9 y _" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)" msgstr "Script integrado (en el archivo de escena)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Crear script" +msgstr "Crear nuevo archivo de script" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load existing script file" -msgstr "Script siguiente" +msgstr "Cargar archivo de script existente" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "Idioma" +msgstr "Lenguaje" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Hereda:" +msgstr "Hereda" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Nombre de clase:" +msgstr "Nombre de clase" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Remover Item" +msgstr "Plantilla" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script" msgstr "Script integrado" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Attach Node Script" -msgstr "Crear script de nodo" +msgstr "Añadir script de nodo" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Quitar" +msgstr "Remoto " #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7361,17 +7075,16 @@ msgid "Child Process Connected" msgstr "Proceso Hijo Conectado" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Errores de carga" +msgstr "Error de copia" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "Inspeccionar instancia anterior" +msgstr "Inspeccionar Instancia Anterior" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "Inspeccionar instancia siguiente" +msgstr "Inspeccionar Instancia Siguiente" #: editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -7427,7 +7140,7 @@ msgstr "Tipo" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "Formato" +msgstr "Format" #: editor/script_editor_debugger.cpp msgid "Usage" @@ -7459,7 +7172,7 @@ msgstr "Atajos" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Asignación" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -7506,59 +7219,52 @@ msgid "Change Particles AABB" msgstr "Cambiar partículas AABB" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Probe Extents" -msgstr "Cambiar Alcances de Notificadores" +msgstr "Cambiar Alcance de la Sonda" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Selecciona la librería dinámica para esta entrada" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Selecciona las dependencias de la librería para esta entrada" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Quitar Punto de ruta" +msgstr "Borrar entrada actual" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Doble click para crear una nueva entrada" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "" +msgstr "Plataforma:" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Platform" -msgstr "Copiar a plataforma…" +msgstr "Plataforma" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary.." +msgstr "Librería dinámica" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Añadir entrada de arquitectura" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "GDNativeLibrary" -msgstr "GDNative" +msgstr "\"GDNativeLibrary\"" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Library" -msgstr "MeshLibrary.." +msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Status" -msgstr "Estado:" +msgstr "Estado" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " @@ -7623,54 +7329,56 @@ msgid "Object can't provide a length." msgstr "El objeto no puede proporcionar una longitud." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Delete Selection" -msgstr "Quitar seleccionados" +msgid "Next Plane" +msgstr "Plano siguiente" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Duplicar selección" +msgid "Previous Plane" +msgstr "Plano anterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Plano:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Suelo Posterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Suelo Anterior" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Floor:" -msgstr "Piso:" +msgstr "Suelo:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Grid Map" -msgstr "Adherir a cuadrícula" +msgid "GridMap Delete Selection" +msgstr "GridMap Quitar seleccionados" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Snap View" -msgstr "Vista superior" +msgid "GridMap Duplicate Selection" +msgstr "GridMap Duplicar selección" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Previous Floor" -msgstr "Pestaña anterior" +msgid "Grid Map" +msgstr "Rejilla" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Next Floor" -msgstr "Próximo Piso" +msgid "Snap View" +msgstr "Fijar Vista" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Desactivado" +msgstr "Clip Deshabilitado" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Above" -msgstr "Clip superior" +msgstr "Clip Arriba" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Below" -msgstr "Clip inferior" +msgstr "Clip Debajo" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" @@ -7685,122 +7393,112 @@ msgid "Edit Z Axis" msgstr "Editar eje Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: Rotar" +msgstr "Rotar cursor X" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: Rotar" +msgstr "Rotar cursor Y" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: Rotar" +msgstr "Rotar cursor Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Back Rotate X" msgstr "Rotar cursor trasero X" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Back Rotate Y" msgstr "Rotar cursor trasero Y" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Back Rotate Z" msgstr "Rotar cursor trasero Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Clear Rotation" msgstr "Quitar rotación del cursor" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Crear nuevo" +msgstr "Crear area" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Crear proyecto nuevo" +msgstr "Crear conector exterior" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "Borrar TileMap" +msgstr "Borrar area" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Centrar selección" +msgstr "Deseleccionar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Ajustes de fijado" +msgstr "Ajustes del GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Instancia:" +msgstr "Seleccionar distancia:" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Generating solution..." -msgstr "Creando octree de texturas" +msgstr "Generando solución..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Generando proyecto C#..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." -msgstr "¡No se pudo crear el contorno!" +msgstr "Fallo al crear solución." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." -msgstr "Hubo un problema al cargar el recurso." +msgstr "Fallo al guardar solución." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Done" -msgstr "¡Hecho!" +msgstr "Hecho" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create C# project." -msgstr "Hubo un problema al cargar el recurso." +msgstr "Fallo al crear proyecto C#." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy +msgid "About C# support" +msgstr "Sobre el soporte de C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" -msgstr "Crear contorno" +msgstr "Crear solución C#" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Builds" msgstr "Compilaciones" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Build Project" -msgstr "Proyecto" +msgstr "Compilar proyecto" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Warnings" -msgstr "Advertencia" +msgstr "Advertencias" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Fin del reporte de la pila de excepciones" #: modules/visual_script/visual_script.cpp msgid "" @@ -7841,29 +7539,24 @@ msgid "Stack overflow with stack depth: " msgstr "Desbordamiento de pila en el nivel: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Editar argumentos de señal:" +msgstr "Cambiar argumentos de la señal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Cambiar tipo de valor del «array»" +msgstr "Cambiar tipo del argumento" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Cambiar Nombre de Entrada" +msgstr "Cambiar nombre del argumento" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Cambiar Valor por Defecto" +msgstr "Establecer valor por defecto de la variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Editar variable:" +msgstr "Establecer tipo de la variable" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7906,54 +7599,48 @@ msgid "Add Signal" msgstr "Añadir señal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Expression" -msgstr "Cambiar tipo" +msgstr "Cambiar expresión" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" msgstr "Añadir nodo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Quitar claves incorrectas" +msgstr "Quitar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Duplicar Nodo(s) de Gráfico" +msgstr "Duplicar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Mantén pulsado Meta para quitar un «Setter». Mantén pulsado Mayús para " -"quitar una firma genérica." +"Mantén pulsado %s para soltar un «Getter». Mantén pulsado Shift para soltar " +"una signatura genérica." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Mantén pulsado Ctrl para quitar un «Getter». Mantén pulsado Mayús para " -"quitar una firma genérica." +"Mantén pulsado Ctrl para soltar un «Getter». Mantén pulsado Mayús para " +"soltar una signatura genérica." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a simple reference to the node." -msgstr "Mantén pulsado Meta para quitar una referencia simple del nodo." +msgstr "Mantén pulsado %s para quitar una referencia simple del nodo." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "Mantén pulsado Ctrl para quitar una referencia simple del nodo." +msgstr "Mantén pulsado Ctrl para soltar una referencia al nodo." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Variable Setter." -msgstr "Mantén pulsado Meta para quitar un «Setter» de variable." +msgstr "Mantén pulsado %s para quitar un «Setter» de variable." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "Mantén pulsado Ctrl para quitar un «Setter» de variable." +msgstr "Mantén pulsado Ctrl para soltar un «Setter» de variable." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" @@ -7972,39 +7659,32 @@ msgid "Add Setter Property" msgstr "Añadir propiedad «Setter»" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Cambiar tipo" +msgstr "Cambiar tipo base" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Borrar nodos" +msgstr "Mover nodo/s" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Quitar Nodo de Gráfico de Shaders" +msgstr "Quitar nodo de VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Conectar a nodo:" +msgstr "Conectar nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Condition" -msgstr "Copiar animación" +msgstr "Condición" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Sequence" msgstr "Secuencia" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Switch" -msgstr "Altura" +msgstr "Switch" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" @@ -8012,61 +7692,55 @@ msgstr "Iterador" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "Mientras" +msgstr "Mientras (\"While\")" #: modules/visual_script/visual_script_editor.cpp msgid "Return" -msgstr "Devuelve" +msgstr "Devuelve (\"Return\")" #: modules/visual_script/visual_script_editor.cpp msgid "Call" -msgstr "Llamada" +msgstr "Call" #: modules/visual_script/visual_script_editor.cpp msgid "Get" -msgstr "Obtener" +msgstr "Obtener (\"Get\")" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" msgstr "El script ya contiene la función '%s'" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Input Value" -msgstr "Cambiar Nombre de Entrada" +msgstr "Cambiar valor de entrada" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "No se puede operar en «…»" +msgstr "No se puede copiar el nodo de función." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "¡El portapapeles de recursos está vacío!" +msgstr "¡El portapapeles está vacío!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Pegar pose" +msgstr "Pegar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Quitar función" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Editar variable:" +msgstr "Editar variable" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Quitar variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Editando señal:" +msgstr "Editar señal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -8090,11 +7764,11 @@ msgstr "Nodos disponibles:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" -msgstr "Selecciona o crea una función para editar el grafo" +msgstr "Selecciona o crea una función para editar el gráfico" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal Arguments:" -msgstr "Editar argumentos de señal:" +msgstr "Editar argumentos de la señal:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" @@ -8105,24 +7779,20 @@ msgid "Delete Selected" msgstr "Quitar seleccionados" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Find Node Type" -msgstr "Buscar por tipo de nodo" +msgstr "Buscar tipo de nodo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Copy Nodes" -msgstr "Copiar pose" +msgstr "Copiar nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Cut Nodes" -msgstr "Crear nodo" +msgstr "Cortar nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste Nodes" -msgstr "Pegar pose" +msgstr "Pegar nodos" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8138,7 +7808,7 @@ msgstr "El iterador ya no es correcto: " #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name." -msgstr "El nombre de la propiedad índice no es correcto." +msgstr "Índice del nombre de la propiedad inválido." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" @@ -8150,7 +7820,7 @@ msgstr "¡La ruta no apunta a un nodo!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "El nombre de la propiedad índice en el nodo %s no es correcto." +msgstr "Índice inválido de nombre de propiedad '%s' en el nodo %s." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -8172,7 +7842,7 @@ msgstr "VariableSet no encontrado en el script: " msgid "Custom node has no _step() method, can't process graph." msgstr "" "El nodo personalizado no tiene ningún método _step(), no se puede procesar " -"el grafo." +"el gráfico." #: modules/visual_script/visual_script_nodes.cpp msgid "" @@ -8183,51 +7853,44 @@ msgstr "" "o string/cadena (error)." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Run in Browser" -msgstr "Examinar" +msgstr "Ejecutar en navegador" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." msgstr "Ejecutar HTML exportado en el navegador por defecto del sistema." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "No se pudo cargar el tile:" +msgstr "No se puede escribir en el archivo:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "No se pudo crear la carpeta." +msgstr "No se pudo abrir la plantilla para exportar:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Instalar plantillas de exportación" +msgstr "Plantilla de exportación inválida:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "No se pudo cargar el tile:" +msgstr "No se puede leer shell HTML personalizada:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "No se pudo cargar el tile:" +msgstr "No se pudo leer la imagen de carga:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "No se pudo cargar el tile:" +msgstr "Usando la imagen de carga por defecto." #: 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 "" -"Un recurso SpriteFrames debe ser creado o seteado en la propiedad 'Frames' " -"para que AnimatedSprite pueda mostrar frames." +"Se debe crear un recurso \"SpriteFrames\" o asignar uno en la propiedad " +"'Frames' para que AnimatedSprite pueda mostrar fotogramas." #: scene/2d/canvas_modulate.cpp msgid "" @@ -8235,8 +7898,8 @@ msgid "" "scenes). The first created one will work, while the rest will be ignored." msgstr "" "Solo se permite un CanvasModulate visible por escena (o set de escenas " -"instanciadas). El primero creado va a funcionar, mientras que el resto van a " -"ser ignorados." +"instanciadas). El primero en crearse es el que va a funcionar, mientras que " +"el resto van a ser ignorados." #: scene/2d/collision_object_2d.cpp msgid "" @@ -8244,6 +7907,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Este nodo no tiene formas hijas, por lo que no puede interactuar con el " +"espacio.\n" +"Considere añadir CollisionShape2D o CollisionPolygon2D como hijo para " +"definir su forma." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8251,13 +7918,14 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolylgon2D solo sirve para proveer de un collision shape a un nodo " -"derivado de CollisionObject2D. Favor de usarlo solo como un hijo de Area2D, " -"StaticBody2D, RigidBody2D, KinematicBody2D, etc. para darles un shape." +"CollisionPolygon2D solo sirve para proveer de una forma de colisión a un " +"nodo derivado de CollisionObject2D. Por favor, úsalo solo como hijo de " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. para dotarlos de " +"una forma." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "Un CollisionPolygon2D vacío no tiene efecto en la colisión." +msgstr "Un CollisionPolygon2D vacío no tiene ningún efecto en las colisiones." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -8265,24 +7933,25 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D solo sirve para proveer de un collision shape a un nodo " -"derivado de CollisionObject2D. Favor de usarlo solo como un hijo de Area2D, " -"StaticBody2D, RigidBody2D, KinematicBody2D, etc. para darles un shape." +"CollisionShape2D solo sirve para proveer de una forma de colisión a un nodo " +"derivado de \"CollisionObject2D\". Por favor, úsalo solo como hijo de " +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc... para dotarlos de " +"forma." #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"Se debe proveer un shape para que CollisionShape2D funcione. Creale un " -"recurso shape!" +"Se debe de proveer de forma a CollisionShape2D para que funcione. ¡Creale un " +"recurso \"shape\"!" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." msgstr "" -"Se debe proveer una textura con la forma de la luz a la propiedad 'texture'." +"Se debe asignar una textura con la forma de la luz a la propiedad 'texture'." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -8293,55 +7962,57 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" -msgstr "El polígono de este oclusor esta vacío. Dibujá un polígono!" +msgstr "" +"El polígono oclusor para este oclusor esta vacío. Por favor, ¡dibuja un " +"polígono!" #: 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 "" -"Se debe crear o establecer un recurso NavigationPolygon para que este nodo " -"funcione. Prueba estableciendo una propiedad o dibuja un polígono." +"Se debe crear o asignar un recurso NavigationPolygon a este nodo para que " +"funcione. Por favor, establece la propiedad o dibuja un polígono." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance debe ser un hijo o nieto de un nodo Navigation2D. " +"NavigationPolygonInstance debe ser hijo o nieto de un nodo \"Navigation2D\". " "Solo provee datos de navegación." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer node solo funciona cuando esta seteado como hijo de un nodo " -"ParallaxBackground." +"En nodo \"ParallaxLayer\" solo funciona cuando esta posicionado como hijo de " +"un nodo \"ParallaxBackground\"." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp -#, fuzzy msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" "No se ha asignado un material para procesar las partículas, por lo que no se " -"ha grabado ningún comportamiento." +"muestra ningún comportamiento." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D solo funciona cuando está seteado como hijo de un nodo Path2D." +"\"PathFollow2D\" solo funciona cuando está posicionado como hijo de un nodo " +"\"Path2D\"." #: scene/2d/physics_body_2d.cpp -#, fuzzy 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 "" -"Los cambios en el tamaño del RigidBody2D (en el personaje o modos rígidos) " -"serán sobreescritas por el engine de físicas cuando se ejecute.\n" -"En vez de eso, cambia el tamaño en las formas de colisión hijas." +"Los cambios en el tamaño del RigidBody2D (en los modos \"character\" o " +"\"rigid\") serán sobre-escritos por el motor de físicas cuando éste se " +"ejecute.\n" +"En lugar de esto, cambie el tamaño en las formas de colisión hijas." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -8352,8 +8023,8 @@ msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnable2D funciona mejor cuando se usa con la raíz de escena " -"editada directamente como padre." +"VisibilityEnable2D funciona mejor cuando se usa directamente con la raíz de " +"la escena editada como padre." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" @@ -8364,49 +8035,52 @@ msgid "ARVRController must have an ARVROrigin node as its parent" msgstr "ARVRController tiene que tener un nodo ARVROrigin como padre" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" -"El id del controlador no puede ser 0 o este controlador no se asignará a un " -"controlador de verdad." +"El id del controlador no puede ser 0 o este controlador no será asignado a " +"un controlador de verdad" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" msgstr "ARVRAnchor tiene que tener un nodo ARVROrigin como padre" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" -"El id del ancla no puede ser 0 o este ancla no se asignará a un ancla de " +"El id del ancla no puede ser 0 o este ancla no será asignada a un ancla de " "verdad" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "ARVROrigin necesita un nodo ARVCamera hijo" +msgstr "ARVROrigin necesita un nodo ARVRCamera hijo" + +#: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Tiempo restante: %d:%02d s)" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Plotting Meshes: " -msgstr "Copiando datos de imágenes" +msgstr "Trazando mallas: " #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Plotting Lights:" -msgstr "Copiando datos de imágenes" +msgstr "Trazando Iluminación:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "" +msgstr "Desentramado final" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Lighting Meshes: " -msgstr "Copiando datos de imágenes" +msgstr "Iluminando Mallas: " #: scene/3d/collision_object.cpp msgid "" @@ -8414,6 +8088,10 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon children nodes to define " "its shape." msgstr "" +"Este nodo no tiene formas hijas, por lo que no puede interactuar con el " +"espacio.\n" +"Considera añadir un \"CollisionShape\" o \"CollisionPolygon\" como hijos de " +"este nodo para dotarlo de una forma." #: scene/3d/collision_polygon.cpp msgid "" @@ -8421,9 +8099,9 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon solo sirve para proveer un collision shape a un nodo " -"derivado de un CollisionObject. Favor de usarlo solo como hijo de Area, " -"StaticBody, RigidBody, KinematicBody, etc. para darles un shape." +"CollisionPolygon solo sirve para proveer de una forma de colisión a un nodo " +"derivado de un CollisionObject. Por favor, úselo solo como hijo de Area, " +"StaticBody, RigidBody, KinematicBody, etc. para darles dicha forma." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." @@ -8435,22 +8113,21 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape solo sirve para proveer un collision shape a un nodo derivado " -"de un CollisionObject. Favor de usarlo solo como hijo de Area, StaticBody, " -"RigidBody, KinematicBody, etc. para darles un shape." +"CollisionShape solo sirve para proveer de una forma a un nodo derivado de un " +"CollisionObject. Por favor, úsalo solo como hijo de \"Area\", \"StaticBody" +"\", \"RigidBody\", \"KinematicBody\", etc. para darles dicha forma." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" -"Se debe proveer un shape para que CollisionShape funcione. Creale un recurso " -"shape!" +"Se debe proveer de una forma a CollisionShape para que funcione. Por favor, " +"¡crea un recurso \"shape\"!" #: scene/3d/gi_probe.cpp -#, fuzzy msgid "Plotting Meshes" -msgstr "Copiando datos de imágenes" +msgstr "Trazando Mallas" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -8463,33 +8140,33 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Ya " -"que sólo proporciona los datos de navegación." +"NavigationMeshInstance debe ser hijo o nieto de un nodo Navigation. Ya que " +"sólo proporciona los datos de navegación." #: scene/3d/particles.cpp -#, fuzzy msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" -"Nada es visible porque los modelos 3D no se han asignado a las pasadas de " -"dibujo." +"Nada es visible porque las mallas no se han asignado a los pases de dibujo." #: scene/3d/physics_body.cpp -#, fuzzy 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 "" -"Los cambios en el tamaño del RigidBody (en el personaje o modos rígidos) " -"serán sobreescritas por el engine de físicas cuando se ejecute.\n" -"En vez de eso, cambia el tamaño en las formas de colisión hijas." +"Los cambios en el tamaño del RigidBody (en los modos \"character\" o \"rigid" +"\") serán sobre-escritos por el motor de físicas cuando se ejecute.\n" +"En lugar de esto, cambie el tamaño en las formas de colisión hijas." #: scene/3d/remote_transform.cpp -#, fuzzy msgid "Path property must point to a valid Spatial node to work." msgstr "" -"La propiedad Path debe apuntar a un nodo Particles2D valido para funcionar." +"La propiedad Path debe apuntar a un nodo Spatial válido para funcionar." + +#: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" #: scene/3d/scenario_fx.cpp msgid "" @@ -8498,27 +8175,31 @@ msgstr "" "Solo se permite un WorldEnvironment por escena (o conjunto de escenas " "instanciadas)." +#: scene/3d/scenario_fx.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/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 "" -"Un recurso SpriteFrames debe ser creado o asignado en la propiedad 'Frames' " -"para que AnimatedSprite3D pueda mostrar frames." +"Se debe crear un recurso \"SpriteFrames\" y asignarlo en la propiedad " +"'Frames' para que AnimatedSprite3D pueda mostrar fotogramas." #: scene/3d/vehicle_body.cpp -#, fuzzy msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" "VehicleWheel sirve para proporcionar un sistema de ruedas a un VehicleBody. " -"Úselo como un hijo de un VehicleBody." +"Por favor, úselo como hijo de un VehicleBody." #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Modo desplazamiento lateral" +msgstr "Modo Raw" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" @@ -8526,16 +8207,15 @@ msgstr "Añadir el color actual como predefinido" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "Alerta!" +msgstr "¡Alerta!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." msgstr "Confirmar decisión…" #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "Modo de selección" +msgstr "Seleccionar esta carpeta" #: scene/gui/popup.cpp msgid "" @@ -8548,27 +8228,25 @@ msgstr "" "hacerlos visibles para editar, aunque se esconderán al ejecutar." #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox,HBox,etc), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer debe funcionar con un único control de hijos.\n" -"Usa un container como hijo (VBox,HBox,etc), o un Control y ajusta el tamaño " -"mínimo personalizado manualmente." +"ScrollContainer está pensado para funcionar con un control hijo únicamente.\n" +"Usa un contenedor como hijo (VBox,HBox,etc), o un Control y ajusta el tamaño " +"mínimo manualmente." #: scene/gui/tree.cpp msgid "(Other)" msgstr "(Otros)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"El entorno por defecto especificado en los Ajustes del Proyecto (Renderizado " +"El entorno especificado por defecto en los Ajustes del Proyecto (Renderizado " "-> Ventana -> Entorno por Defecto) no se ha podido cargar." #: scene/main/viewport.cpp @@ -8578,10 +8256,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Este viewport no está seteado como render target. Si tienes intención de que " -"muestre contenidos directo a la pantalla, hacelo un hijo de un Control para " -"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y " -"asigná su textura interna a algún otro nodo para mostrar." +"Este viewport no está configurado como \"render target\". Si tienes " +"intención de que muestre su contenido directamente en la pantalla, hazlo " +"hijo de un Control para que pueda obtener un tamaño. Alternativamente, hazlo " +"un RenderTarget y asigna su textura interna a algún otro nodo para mostrar." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8599,6 +8277,32 @@ msgstr "Error al cargar la tipografía." msgid "Invalid font size." msgstr "Tamaño de tipografía incorrecto." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "La acción no es correcta (no puedes utilizar «/» o «:»)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "No puede contener '/' o ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "El archivo \"version.txt\" que hay dentro de las plantillas tiene un " +#~ "formato inválido. \"Revisión\" no es un identificador válido." + +#~ msgid "Can't write file." +#~ msgstr "No se puede escribir el archivo." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Por favor, elige un directorio que no contenga un archivo 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "No se encontró project.godot en la ruta del proyecto." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "No se encontró project.godot en la ruta del proyecto." + #~ msgid "Next" #~ msgstr "Siguiente" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 55a1953d34..304fc7dbc5 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-01-24 20:49+0000\n" +"PO-Revision-Date: 2018-03-04 06:03+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -21,7 +21,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 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1401,6 +1401,10 @@ msgstr "Limpiar" msgid "Clear Output" msgstr "Limpiar Salida" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error al guardar el recurso!" @@ -2464,14 +2468,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Formato de version.txt invalido dentro de plantillas." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Formato de version.txt invalido dentro de plantillas. Revision no es un " -"identificador valido." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "No se encontro ningún version.txt dentro de las plantillas." @@ -2526,10 +2522,6 @@ msgid "Failed:" msgstr "Fallido:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "No se puede escribir el archivo." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Descarga Completa." @@ -3717,18 +3709,28 @@ msgid "Show Grid" msgstr "Mostrar la Grilla" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Mostrar ayudantes" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Mostrar reglas" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Mostrar guías" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Ver Origen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Viewport" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrar Selección" @@ -4018,6 +4020,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "El mesh no tiene una superficie de donde crear contornos(outlines)!" #: 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 "No se pudo crear el outline!" @@ -4554,6 +4560,22 @@ msgid "Resource clipboard is empty!" msgstr "Clipboard de Recursos vacío!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir en Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instancia:" + +#: 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 +msgid "Type:" +msgstr "Tipo:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Cargar Recurso" @@ -4840,10 +4862,6 @@ msgid "Toggle Comment" msgstr "Act/Desact. Comentario" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clonar hacia Abajo" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Expandir/Colapsar Línea" @@ -4856,6 +4874,10 @@ msgid "Unfold All Lines" msgstr "Expandir Totas las Líneas" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar hacia Abajo" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Completar Símbolo" @@ -5672,6 +5694,16 @@ msgid "Checked Item" msgstr "Item Tildado" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Agregar Item" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Item Tildado" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Tiene" @@ -5699,11 +5731,6 @@ msgstr "Tab 2" msgid "Tab 3" msgstr "Tab 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipo:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipo de Datos:" @@ -5975,11 +6002,6 @@ msgid "Please choose an empty folder." msgstr "Por favor elegí una carpeta vacía." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Por favor elegí una carpeta que no contenga un archivo 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Proyecto Importado" @@ -6000,8 +6022,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Ruta de proyecto inválida (cambiaste algo?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "No se pudo obtener project.godot en la ruta de proyecto." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"No se pudo cargar project.godot desde la ruta de proyecto (error %d). La " +"ruta no existe o está corrupta." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6020,10 +6046,6 @@ msgid "Rename Project" msgstr "Renombrar Proyecto" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "No se pudo obtener project.godot en la ruta de proyecto." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Nuevo Proyecto de Juego" @@ -6186,8 +6208,10 @@ msgid "Mouse Button" msgstr "Botón de Mouse" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Acción Invalida (cualquier cosa va menos '/' o ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6330,10 +6354,6 @@ msgid "Delete Item" msgstr "Eliminar Ítem" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "No puede contener '/' o ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Ya existe" @@ -6732,10 +6752,6 @@ msgstr "Sub-Recursos" msgid "Clear Inheritance" msgstr "Limpiar Herencia" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir en Editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Eliminar Nodo(s)" @@ -6853,10 +6869,6 @@ msgstr "" "Click para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instancia:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Abrir script" @@ -7288,32 +7300,44 @@ msgid "Object can't provide a length." msgstr "El objeto no puede proveer un largo." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Eliminar Seleccionados en GridMap" +msgid "Next Plane" +msgstr "Plano siguiente" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Duplicar Selección en GridMap" +msgid "Previous Plane" +msgstr "Plano anterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Plano:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Piso Siguiente" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Piso Anterior" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Piso:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Mapa de Grilla" +msgid "GridMap Delete Selection" +msgstr "Eliminar Seleccionados en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Anclar Vista" +msgid "GridMap Duplicate Selection" +msgstr "Duplicar Selección en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Piso Anterior" +msgid "Grid Map" +msgstr "Mapa de Grilla" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Piso Siguiente" +msgid "Snap View" +msgstr "Anclar Vista" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7391,6 +7415,10 @@ msgstr "Ajustes de GridMap" msgid "Pick Distance:" msgstr "Elegir Instancia:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Generando solución..." @@ -7420,6 +7448,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Sobre el soporte de C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Crear solución en C#" @@ -7435,6 +7467,10 @@ msgstr "Construir Proyecto" msgid "Warnings" msgstr "Advertencias" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Fin del stack trace de excepción interna" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7987,6 +8023,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin requiere un nodo hijo ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Tiempo Restante: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Ploteando Meshes: " @@ -8083,12 +8127,22 @@ msgstr "" "La propiedad Path debe apuntar a un nodo Spatial valido para funcionar." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Solo se permite un WorldEnvironment por escena (o conjunto de escenas " "instanciadas)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8185,6 +8239,32 @@ msgstr "Error cargando tipografía." msgid "Invalid font size." msgstr "Tamaño de tipografía inválido." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Acción Invalida (cualquier cosa va menos '/' o ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "No puede contener '/' o ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Formato de version.txt invalido dentro de plantillas. Revision no es un " +#~ "identificador valido." + +#~ msgid "Can't write file." +#~ msgstr "No se puede escribir el archivo." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Por favor elegí una carpeta que no contenga un archivo 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "No se pudo obtener project.godot en la ruta de proyecto." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "No se pudo obtener project.godot en la ruta de proyecto." + #~ msgid "Next" #~ msgstr "Siguiente" diff --git a/editor/translations/extract.py b/editor/translations/extract.py index bbc157788d..4b3f416343 100755 --- a/editor/translations/extract.py +++ b/editor/translations/extract.py @@ -52,11 +52,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\\n" """ -print("Updating the editor.pot template...") - -for fname in matches: - - f = open(fname, "rb") +def process_file(f, fname): l = f.readline() lc = 1 @@ -100,12 +96,14 @@ for fname in matches: l = f.readline() lc += 1 - f.close() +print("Updating the editor.pot template...") +for fname in matches: + with open(fname, "rb") as f: + process_file(f, fname) -f = open("editor.pot", "wb") -f.write(main_po) -f.close() +with open("editor.pot", "wb") as f: + f.write(main_po) if (os.name == "posix"): print("Wrapping template at 79 characters for compatibility with Weblate.") diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 3d6b98f49d..8b7fdcbb79 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -4,6 +4,7 @@ # 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. # hamed nasib <cghamed752@chmail.ir>, 2016. # Hasan Hejdari Nasab <hsn6@openmailbox.org>, 2017. # rezapouya <r.pouya@chmail.ir>, 2016. @@ -12,15 +13,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-11-26 16:49+0000\n" -"Last-Translator: sayyed hamed nasib <cghamed752@chmail.ir>\n" +"PO-Revision-Date: 2018-04-29 05:39+0000\n" +"Last-Translator: Dante Marshal <Marshal.Devilhunter@gmail.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\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 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -31,9 +32,8 @@ msgid "All Selection" msgstr "همهی انتخاب ها" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "مقدار را در انیمیشن تغییر بده" +msgstr "تغییر زمان فریم کلید در انیمیشن" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -44,9 +44,8 @@ msgid "Anim Change Transform" msgstr "انتقال را در انیمیشن تغییر بده" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "مقدار را در انیمیشن تغییر بده" +msgstr "تغییر مقدار فریم کلید در انیمیشن" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -54,52 +53,51 @@ msgstr "فراخوانی را در انیمیشن تغییر بده" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "" +msgstr "افزودن ترَک به انیمیشن" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "تکرار کلیدهای انیمیشن" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "انتقال ترک انیمشین به بالا" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "انتقال ترک انیمشین به پایین" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "حذف ترک انیمشین" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "تنظیم گذارها به :" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "تغییر نام ترک انیمشین" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "تغییر سبک الحاق ترک انیمیشن" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "تغییر حالت مقدار ترک انیمیشن" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "مقدار را در انیمیشن تغییر بده" +msgstr "تغییر حالت بسته شدن ترک انیمشین" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "ویرایش منحنی گره" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "ویرایش منحنی انتخاب شده" #: editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -377,7 +375,6 @@ msgid "No Matches" msgstr "تطبیقی ندارد" #: editor/code_editor.cpp -#, fuzzy msgid "Replaced %d occurrence(s)." msgstr "تعداد d% رخداد جایگزین شد." @@ -430,6 +427,8 @@ msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"متد هدف پیدا نشد! لطفا یک متد صحیح مشخص کنید یا یک اسکریپت به گره هدف الحاق " +"کنید." #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -499,9 +498,8 @@ msgid "Connecting Signal:" msgstr "اتصال سیگنال:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "'s%' را به 's%' متصل کن" +msgstr "'s%' را از 's%' جدا کن" #: editor/connections_dialog.cpp msgid "Connect.." @@ -517,9 +515,8 @@ msgid "Signals" msgstr "سیگنالها" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "تغییر نوع" +msgstr "تغییر نوع %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -527,18 +524,17 @@ msgid "Change" msgstr "تغییر بده" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "ساختن جدید" +msgstr "ساختن %s جدید" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "برگزیدهها:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "اخیر:" #: editor/create_dialog.cpp editor/editor_node.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -640,8 +636,9 @@ msgstr "" "آیا در هر صورت حذف شوند؟(بدون برگشت)" #: editor/dependency_editor.cpp +#, fuzzy msgid "Cannot remove:" -msgstr "" +msgstr "ناتوانی در حذف :" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -697,80 +694,82 @@ 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 "" +msgstr "با تشکر از سوی جامعهی Godot!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "تشکرات!" +msgstr "با تشکر !" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "شرکتکنندگان در ساخت موتور Godot" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "برپا کننده های پروژه" +msgstr "بنیانگذاران پروژه" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "توسعهدهندهی اصلی" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "مدیر پروژه" +msgstr "مدیر پروژه " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "توسعه دهندگان" #: editor/editor_about.cpp msgid "Authors" msgstr "مؤلفان" #: editor/editor_about.cpp +#, fuzzy msgid "Platinum Sponsors" -msgstr "" +msgstr "اسپانسرهای درجه ۱" #: editor/editor_about.cpp +#, fuzzy msgid "Gold Sponsors" -msgstr "" +msgstr "اسپانسرهای درجه ۲" #: editor/editor_about.cpp +#, fuzzy msgid "Mini Sponsors" -msgstr "" +msgstr "اسپانسرهای دیگر" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "اهداکنندگان طلایی" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "اهداکنندگان نقرهای" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "اهداکنندگان برنزی" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "اهدا کنندگان" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "مجوز" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "مجوزهای شخص ثالث" #: editor/editor_about.cpp msgid "" @@ -1333,7 +1332,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Description" -msgstr "توضیح" +msgstr "توضیحات" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1398,6 +1397,10 @@ msgstr "پاک کردن" msgid "Clear Output" msgstr "خروجی" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2046,7 +2049,7 @@ msgstr "انجمن" #: editor/editor_node.cpp msgid "About" -msgstr "معرفی" +msgstr "درباره" #: editor/editor_node.cpp msgid "Play the project." @@ -2399,12 +2402,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2459,10 +2456,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "ناتوان در نوشتن پرونده." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "دانلود کامل." @@ -3644,15 +3637,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3944,6 +3945,10 @@ 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 "" @@ -4484,6 +4489,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4774,10 +4795,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "برو به خط" @@ -4791,6 +4808,10 @@ 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 "" @@ -5617,6 +5638,15 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "افزودن مورد" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -5644,11 +5674,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5917,10 +5942,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "پروژه واردشده" @@ -5942,7 +5963,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5962,10 +5985,6 @@ msgid "Rename Project" msgstr "تغییر نام پروژه" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "پروژه بازی جدید" @@ -6118,7 +6137,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6263,10 +6284,6 @@ msgid "Delete Item" msgstr "حذف مورد" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "نمیتواند شامل '/' یا ':' باشد" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "پیش از این وجود داشته است" @@ -6665,10 +6682,6 @@ msgstr "زیرمنبعها:" msgid "Clear Inheritance" msgstr "پاک کردن ارثبری" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "گشودن در ویرایشگر" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "حذف گره(ها)" @@ -6779,10 +6792,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "باز کردن و اجرای یک اسکریپت" @@ -7231,33 +7240,47 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "انتخاب شده را حذف کن" +msgid "Next Plane" +msgstr "زبانه بعدی" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "انتخاب شده را به دو تا تکثیر کن" +msgid "Previous Plane" +msgstr "زبانه قبلی" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +#, fuzzy +msgid "Previous Floor" +msgstr "زبانه قبلی" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "زبانه قبلی" +msgid "GridMap Delete Selection" +msgstr "انتخاب شده را حذف کن" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Duplicate Selection" +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 @@ -7339,6 +7362,10 @@ msgstr "ترجیحات" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7370,6 +7397,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "انتخاب شده را تغییر مقیاس بده" @@ -7387,6 +7418,10 @@ msgstr "پروژه" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7573,14 +7608,16 @@ msgid "Sequence" msgstr "دنباله" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Switch" -msgstr "گزینه" +msgstr "سوییچ" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" msgstr "تکرارکننده" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "While" msgstr "تا زمانی که" @@ -7942,6 +7979,14 @@ 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 "" @@ -8032,12 +8077,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "دارایی Path باید به یک گره Particles2D معتبر اشاره کند تا کار کند." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "فقط یک WorldEnvironment در هر صحنه (یا مجموعه ای از صحنه های نمونهگذاری شده) " "مجاز است." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8128,6 +8183,12 @@ msgstr "خطای بارگذاری قلم." msgid "Invalid font size." msgstr "اندازهٔ قلم نامعتبر." +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "نمیتواند شامل '/' یا ':' باشد" + +#~ msgid "Can't write file." +#~ msgstr "ناتوان در نوشتن پرونده." + #~ msgid "Next" #~ msgstr "بعدی" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 8e8636973e..139983464e 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -7,12 +7,13 @@ # Bastian Salmela <bastian.salmela@gmail.com>, 2017. # ekeimaja <ekeimaja@gmail.com>, 2017-2018. # Jarmo Riikonen <amatrelan@gmail.com>, 2017. +# Sami Lehtilä <sami.lehtila@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 12:10+0000\n" -"Last-Translator: ekeimaja <ekeimaja@gmail.com>\n" +"PO-Revision-Date: 2018-01-31 04:36+0000\n" +"Last-Translator: Sami Lehtilä <sami.lehtila@gmail.com>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" "Language: fi\n" @@ -159,9 +160,8 @@ msgid "Linear" msgstr "Lineaarinen" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Constant" -msgstr "Jatkuva" +msgstr "Muuttumaton" #: editor/animation_editor.cpp msgid "In" @@ -192,9 +192,8 @@ msgid "Clean-Up Animation" msgstr "Siivoa animaatio" #: editor/animation_editor.cpp -#, fuzzy msgid "Create NEW track for %s and insert key?" -msgstr "Luo uusi raita %s ja lisää avain?" +msgstr "Luo UUSI raita %lle ja lisää avain?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -225,14 +224,12 @@ msgid "Change Anim Len" msgstr "Vaihda animaation pituutta" #: editor/animation_editor.cpp -#, fuzzy msgid "Change Anim Loop" -msgstr "Vaihda animaation toistoa" +msgstr "Vaihda animaation kierto" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Create Typed Value Key" -msgstr "Animaatio: Luo tyyppipohjainen arvo avain" +msgstr "Animaatio: Luo tyypitetty arvoavain" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -243,9 +240,8 @@ msgid "Anim Scale Keys" msgstr "Animaatio: Skaalaa avaimia" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Add Call Track" -msgstr "Animaatio: Lisää kutsu raita" +msgstr "Animaatio: Lisää kutsuraita" #: editor/animation_editor.cpp msgid "Animation zoom." @@ -264,9 +260,8 @@ msgid "Step (s):" msgstr "Askellus:" #: editor/animation_editor.cpp -#, fuzzy msgid "Cursor step snap (in seconds)." -msgstr "Kohdistimen tarttuminen (sekunneissa)." +msgstr "Kohdistimen askelrajoitin (sekunneissa)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." @@ -302,15 +297,15 @@ msgstr "Animaation optimoija" #: editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "Max. lineaarinen virhe:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "Max. Kulmavirhe:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "Max. Optimoitava kulma:" #: editor/animation_editor.cpp msgid "Optimize" @@ -504,9 +499,8 @@ msgid "Connecting Signal:" msgstr "Yhdistävä signaali:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Yhdistä '%s' '%s':n" +msgstr "Katkaise yhteys '%s' '%s':n" #: editor/connections_dialog.cpp msgid "Connect.." @@ -522,9 +516,8 @@ msgid "Signals" msgstr "Signaalit" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Muuta tyyppiä" +msgstr "Muuta %s:n tyyppi" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -532,9 +525,8 @@ msgid "Change" msgstr "Muuta" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Luo uusi" +msgstr "Luo uusi %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -648,7 +640,7 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy msgid "Cannot remove:" -msgstr "Ei voida poistaa:\n" +msgstr "Ei voida poistaa:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -1445,6 +1437,10 @@ msgstr "Tyhjennä" msgid "Clear Output" msgstr "Tuloste" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Virhe tallennettaessa resurssia!" @@ -2513,14 +2509,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Paketti sisältää viallisen version.txt tiedoston." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Paketti sisältää viallisen version.txt tiedoston. 'Revision' ei ole " -"hyväksytty tunniste." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "version.txt -tiedostoa ei löytynyt." @@ -2578,11 +2566,6 @@ msgstr "Epäonnistui:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Can't write file." -msgstr "Ei voitu kirjoittaa tiedostoa:\n" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." msgstr "Lataa" @@ -3820,18 +3803,28 @@ msgstr "Näytä ruudukko" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show helpers" +msgid "Show Helpers" msgstr "Näytä luut" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Näytä viivaimet" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Näytä apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Näytä origo" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 näyttöruutu" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Valinta keskikohtaan" @@ -4126,6 +4119,10 @@ 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 "Ääriviivoja ei voitu luoda!" @@ -4678,6 +4675,22 @@ msgid "Resource clipboard is empty!" msgstr "Resurssien leikepöytä on tyhjä!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Avaa editorissa" + +#: 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 +msgid "Type:" +msgstr "Tyyppi:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Lataa resurssi" @@ -4975,10 +4988,6 @@ msgid "Toggle Comment" msgstr "Näytä/Piilota kommentit" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Kloonaa alas" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Avaa rivi" @@ -4992,6 +5001,10 @@ msgid "Unfold All Lines" msgstr "Avaa kaikki rivit" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Kloonaa alas" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Täydennä symbooli" @@ -5839,6 +5852,16 @@ msgid "Checked Item" msgstr "Valittu" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Lisää" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Valittu" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "On" @@ -5868,11 +5891,6 @@ msgstr "Välilehti 2" msgid "Tab 3" msgstr "Välilehti 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tyyppi:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tietotyyppi:" @@ -6144,10 +6162,6 @@ msgid "Please choose an empty folder." msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Ole hyvä ja valitse hakemisto jossa ei ole 'project.godot' tiedostoa." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Tuotu projekti" @@ -6170,7 +6184,9 @@ msgstr "Virheellinen projektin polku (muuttuiko mikään?)." #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." #: editor/project_manager.cpp @@ -6192,11 +6208,6 @@ msgid "Rename Project" msgstr "Nimetä projekti" #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Uusi peliprojekti" @@ -6360,8 +6371,10 @@ msgid "Mouse Button" msgstr "Hiiren painike" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Virheellinen tapahtuma (muut käy, paitsi '/' tai ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6507,11 +6520,6 @@ msgid "Delete Item" msgstr "Poista syöte" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "Yhdistä Nodeen:" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "On jo olemassa" @@ -6911,10 +6919,6 @@ msgstr "Resurssit" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Avaa editorissa" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Poista Node(t)" @@ -7027,10 +7031,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Seuraava skripti" @@ -7472,13 +7472,26 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Poista valitut" +msgid "Next Plane" +msgstr "Seuraava välilehti" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Monista valinta" +msgid "Previous Plane" +msgstr "Edellinen välilehti" + +#: 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 +#, fuzzy +msgid "Previous Floor" +msgstr "Edellinen välilehti" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" @@ -7486,22 +7499,23 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Grid Map" -msgstr "Ruudukko" +msgid "GridMap Delete Selection" +msgstr "Poista valitut" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Snap View" -msgstr "Huippunäkymä" +msgid "GridMap Duplicate Selection" +msgstr "Monista valinta" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "Edellinen välilehti" +msgid "Grid Map" +msgstr "Ruudukko" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "" +#, fuzzy +msgid "Snap View" +msgstr "Huippunäkymä" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7588,6 +7602,10 @@ msgstr "Näyttöruudun asetukset" msgid "Pick Distance:" msgstr "Poimi tile" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7621,6 +7639,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Luo ääriviivat" @@ -7639,6 +7661,10 @@ msgstr "Uusi projekti" msgid "Warnings" msgstr "Varoitus" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8158,6 +8184,14 @@ 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 "" @@ -8235,10 +8269,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8334,6 +8378,36 @@ msgstr "Virhe fontin latauksessa." msgid "Invalid font size." msgstr "Virheellinen fonttikoko." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Virheellinen tapahtuma (muut käy, paitsi '/' tai ':')." + +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Yhdistä Nodeen:" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Paketti sisältää viallisen version.txt tiedoston. 'Revision' ei ole " +#~ "hyväksytty tunniste." + +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "Ei voitu kirjoittaa tiedostoa:\n" + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Ole hyvä ja valitse hakemisto jossa ei ole 'project.godot' tiedostoa." + +#, fuzzy +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." + +#, fuzzy +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." + #~ msgid "Next" #~ msgstr "Seuraava" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 7bb65f8056..56969fe974 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -3,40 +3,46 @@ # Copyright (c) 2014-2018 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. +# Antoine Carrier <ac.g392@gmail.com>, 2017-2018. # ARocherVj <a.rocher.vj@gmail.com>, 2017. # Arthur Templé <tuturtemple@gmail.com>, 2018. # Brice <bbric@free.fr>, 2016. # Chenebel Dorian <LoubiTek54@gmail.com>, 2016-2017. +# Cindy Dallaire <c.dallaire93@gmail.com>, 2018. # derderder77 <derderder77380@gmail.com>, 2016. # finkiki <specialpopol@gmx.fr>, 2016. # Gilles Roudiere <gilles.roudiere@gmail.com>, 2017-2018. -# Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2017. +# Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2018. +# John Bernier <john.bp@unknit.net>, 2018. # Kanabenki <lucien.menassol@gmail.com>, 2017. -# keltwookie <keltwookie@protonmail.com>, 2017. +# keltwookie <keltwookie@protonmail.com>, 2017-2018. +# LL <lu.lecocq@free.fr>, 2018. # Luc Stepniewski <lior@gradstein.info>, 2017. # Marc <marc.gilleron@gmail.com>, 2016-2017. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2017. # Nicolas <flaithotw@gmail.com>, 2017. # Nicolas Lehuen <nicolas@lehuen.com>, 2016. # Nobelix <noe.le.cam@laposte.net>, 2017. -# Omicron <tritonic.dev@gmail.com>, 2016. +# Omicron <tritonic.dev@gmail.com>, 2016, 2018. # Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016. # Przemyslaw Gasinski <gasinski.przemek@protonmail.ch>, 2017. # rafeu <duchainer@gmail.com>, 2016-2017. +# rawida <rawida@tempinbox.com>, 2018. # Rémi Verschelde <rverschelde@gmail.com>, 2016-2017. # Robin Arys <robinarys@hotmail.com>, 2017. # Roger BR <drai_kin@hotmail.com>, 2016. +# salty64 <cedric.arrabie@univ-pau.fr>, 2018. # Thomas Baijot <thomasbaijot@gmail.com>, 2016. -# Tommy Melançon-Roy <tommel1234@hotmail.com>, 2017. -# Xananax <xananax@yelostudio.com>, 2017. +# Tommy Melançon-Roy <tommel1234@hotmail.com>, 2017-2018. +# Willow <theotimefd@aol.com>, 2018. +# Xananax <xananax@yelostudio.com>, 2017-2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-01-22 08:08+0000\n" -"Last-Translator: Gilles Roudiere <gilles.roudiere@gmail.com>\n" +"PO-Revision-Date: 2018-05-02 21:48+0000\n" +"Last-Translator: Omicron <omicron666.dev@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -44,7 +50,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -60,7 +66,7 @@ msgstr "Changer l'heure de l'animation des images clés" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Animation Changer la transition" +msgstr "Transition du changement d'animation" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -831,7 +837,7 @@ msgstr "Paquetage installé avec succès !" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "Succès!" +msgstr "Succès !" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -860,15 +866,15 @@ msgstr "Modifier le volume audio du bus" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Basculer vers transport audio solo" +msgstr "Activer/désactiver le mode solo pour le bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Basculer vers désactivation de transport audio" +msgstr "Activer/désactiver le mode muet pour le bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "Basculer vers effets de contournement de transport audio" +msgstr "Activer/désactiver le contournement du bus audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -896,11 +902,11 @@ msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "Assourdir" +msgstr "Rendre muet" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "Contournement" +msgstr "Contourner" #: editor/editor_audio_buses.cpp msgid "Bus options" @@ -1103,7 +1109,7 @@ msgstr "Mise à jour de la scène…" #: editor/editor_data.cpp msgid "[empty]" -msgstr "(vide)" +msgstr "[vide]" #: editor/editor_data.cpp msgid "[unsaved]" @@ -1156,7 +1162,7 @@ msgstr "Le fichier existe, l'écraser ?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "Selectionner le dossier actuel" +msgstr "Sélectionner le dossier courant" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1226,7 +1232,7 @@ msgstr "Basculer les fichiers cachés" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Basculer le favori" +msgstr "Basculer l'état favori" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" @@ -1363,14 +1369,14 @@ msgid "Online Tutorials:" msgstr "Tutoriels en ligne :" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Pas de description disponible pour cette méthode. [color=$color][url=" -"$url]Contribuez[/url][/color] pour nous aider!" +"Il n'y a pas de tutoriels disponibles pour cette classe, vous pouvez [color=" +"$color][url=$url]en créer un[/url][/color] ou [color=$color][url=$url2]en " +"demander un[/url][/color]." #: editor/editor_help.cpp msgid "Properties" @@ -1385,8 +1391,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Pas de description disponible pour cette propriété. [color=$color][url=" -"$url]Contribuez[/url][/color] pour nous aider!" +"Il n'y a pas de description disponible pour cette propriété. Aidez-nous en " +"[color=$color][url=$url]en créant[/url][/color] une !" #: editor/editor_help.cpp msgid "Methods" @@ -1401,8 +1407,8 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Pas de description disponible pour cette méthode. [color=$color][url=" -"$url]Contribuez[/url][/color] pour nous aider!" +"Il n'y a pas de description disponible pour cette méthode. Aidez-nous en " +"[color=$color][url=$url]en créant[/url][/color] une !" #: editor/editor_help.cpp msgid "Search Text" @@ -1424,10 +1430,13 @@ msgid "Clear" msgstr "Effacer" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" msgstr "Effacer la sortie" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erreur d'enregistrement de la ressource !" @@ -1459,7 +1468,7 @@ msgstr "Impossible d'ouvrir '%s'." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "Erreur lors de l'analyse de '%s'." +msgstr "Erreur lors de l'analyse syntaxique de '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." @@ -1467,7 +1476,7 @@ msgstr "Fin de fichier inattendue '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "Fichier '%s' ou dépendances manquantes." +msgstr "La scène '%s' ou ses dépendances sont introuvables." #: editor/editor_node.cpp msgid "Error while loading '%s'." @@ -1539,10 +1548,10 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"Cette ressource appartient à une scène qui a été importée, elle n'est donc " -"pas éditable.\n" -"Veuillez lire la documentation concernant l'import de scènes afin de mieux " -"comprendre son déroulement." +"Cette ressource n'est pas éditable car elle appartient à une scène " +"importée.\n" +"Merci de lire la documentation concernant l'import des scènes pour en " +"comprendre le processus." #: editor/editor_node.cpp msgid "" @@ -1550,16 +1559,15 @@ msgid "" "Changes to it will not be kept when saving the current scene." msgstr "" "Cette ressource appartient a une scène qui a été instanciée ou héritée.\n" -"Ses changements ne seront pas retenus lors de la sauvegarde de la scène " -"actuelle." +"Ses modifications seront perdues lors de la sauvegarde de la scène actuelle." #: 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 "" -"Cette ressource a été importée, aucune modification n’est possible. Modifiez " -"ses paramètres dans le menu d'importation et, ensuite, réimportez-la." +"Cette ressource a été importée, elle n'est donc pas éditable. Modifiez ses " +"paramètres dans le panneau d'importation et, ensuite, réimportez-la." #: editor/editor_node.cpp msgid "" @@ -1569,9 +1577,9 @@ msgid "" "understand this workflow." msgstr "" "Cette scène a été importée, les changements ne seront donc pas conservés.\n" -"L'instancier ou en hériter permettra de faire ces changements\n" +"L'instancier ou l'hériter permettra de faire ces changements.\n" "Veuillez lire la documentation concernant l'importation des scènes afin de " -"mieux comprendre ce déroulement." +"mieux comprendre ce processus." #: editor/editor_node.cpp msgid "" @@ -1579,17 +1587,18 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"Ceci est un objet distant, les changements ne seront donc pas conservés.\n" -"Veuillez lire la documentation concernant le débogage afin de mieux " -"comprendre ce fonctionnement." +"Ceci est un objet distant, les changements qui y sont faits ne seront pas " +"sauvegardés.\n" +"Merci de lire la section de la documentation portant sur le débogage pour " +"mieux comprendre ce mécanisme." #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "Développer tout" +msgstr "Développer toutes les propriétés" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "Réduire tout" +msgstr "Réduire toutes les propriétés" #: editor/editor_node.cpp msgid "Copy Params" @@ -1715,7 +1724,7 @@ msgstr "Exporter une bibliothèque de maillages" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "Cette opération ne peut être réalisée sans nœud racine." +msgstr "Cette opération ne peut être réalisée sans noeud parent." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -1779,8 +1788,8 @@ msgid "" "considered a bug. Please report." msgstr "" "Cette option est dépréciée. Les situations dans lesquelles un " -"rafraîchissement doit être forcé sont désormais considérés comme bug. " -"Veuillez le signaler." +"rafraîchissement doit être forcé sont désormais considérées comme un bogue. " +"Merci de le signaler." #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1789,8 +1798,8 @@ msgstr "Choisir une scène principale" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" -"Impossible d'activer le plugin depuis : '%s' la lecture de la configuration " -"a échoué." +"Impossible d'activer le greffon depuis : '%s' l’analyse syntaxique de la " +"configuration a échoué." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." @@ -1845,7 +1854,7 @@ msgstr "La scène « %s » a des dépendences cassées :" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "Retirer les scènes récentes" +msgstr "Vider la liste des scènes récentes" #: editor/editor_node.cpp msgid "Save Layout" @@ -1862,7 +1871,7 @@ msgstr "Par défaut" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Basculer entre les onglets de scène" +msgstr "Basculer entre onglets de scène" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1886,7 +1895,7 @@ msgstr "Mode Sans Distraction" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "Basculer vers mode sans-distraction." +msgstr "Basculer en mode sans distraction." #: editor/editor_node.cpp msgid "Add a new scene." @@ -2093,7 +2102,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Editor" -msgstr "Editeur" +msgstr "Éditeur" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2105,7 +2114,7 @@ msgstr "Disposition de l'éditeur" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "Basculer le mode plein écran" +msgstr "Activer/Désactiver le plein écran" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2240,7 +2249,7 @@ msgstr "Propriétés de l'objet." #: editor/editor_node.cpp msgid "Changes may be lost!" -msgstr "Les changements risquent d’être perdus !" +msgstr "Les modifications risquent d'être perdues !" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp @@ -2309,7 +2318,7 @@ msgstr "Ouvrir éditeur 3D" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Ouvrir éditeur de script" +msgstr "Ouvrir l'éditeur de script" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -2317,11 +2326,11 @@ msgstr "Ouvrir bibliothèque de ressource" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "Ouvrir éditeur suivant" +msgstr "Ouvrir l'éditeur suivant" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "Ouvrir éditeur précédant" +msgstr "Ouvrir l'éditeur précédant" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -2390,7 +2399,7 @@ msgstr "Inclusif" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Soi" +msgstr "Self" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2398,7 +2407,7 @@ msgstr "Frame # :" #: editor/editor_profiler.cpp msgid "Time" -msgstr "Temps :" +msgstr "Temps" #: editor/editor_profiler.cpp msgid "Calls" @@ -2442,7 +2451,7 @@ msgstr "Avez-vous oublié la méthode « _run » ?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "Par défaut (même que l'éditeur)" +msgstr "Par défaut (le même que l'éditeur)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -2497,14 +2506,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Format de version.txt invalide dans les modèles." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Format de version.txt invalide dans les modèles. Revision n'est pas un " -"identifiant valide." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Aucun version.txt n'a été trouvé dans les modèles." @@ -2525,9 +2526,8 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" -"Aucun lien de téléchargement n'a été trouvé pour cette version. Le " -"téléchargement direct est uniquement disponible pour les versions " -"officielles." +"Aucun lien de téléchargement trouvé pour cette version. Le téléchargement " +"direct est uniquement disponible pour les versions officielles." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2547,7 +2547,7 @@ msgstr "Pas de réponse." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "Requête échouée." +msgstr "Échec de la requête." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2560,10 +2560,6 @@ msgid "Failed:" msgstr "Échec:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Impossible d'écrire le fichier." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Téléchargement terminé." @@ -2585,7 +2581,7 @@ msgstr "Résolution" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "Impossible à résoudre." +msgstr "Impossible à résoudre" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2657,7 +2653,9 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" -msgstr "Impossible d'accédez à '%s' car celui-ci n'a pas été trouvé !" +msgstr "" +"Impossible d'accédez à '%s' car celui-ci n'existe pas dans le système de " +"fichiers !" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" @@ -2695,11 +2693,11 @@ msgstr "Impossible de mettre à jour les dépendences :" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "Aucun nom fourni" +msgstr "Aucun nom renseigné" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "Le nom fourni contient des caractères invalides" +msgstr "Le nom renseigné contient des caractères invalides" #: editor/filesystem_dock.cpp msgid "No name provided." @@ -2762,9 +2760,8 @@ msgid "View Owners.." msgstr "Voir les propriétaires…" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate.." -msgstr "Dupliquer" +msgstr "Dupliquer…" #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -3106,7 +3103,7 @@ msgstr "Lecture automatique au chargement" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "Modifier les temps de mélange des cibles" +msgstr "Modifier les temps de mélange de la cible" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -3129,7 +3126,6 @@ msgid "Directions" msgstr "Directions" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" msgstr "Passé" @@ -3155,7 +3151,7 @@ msgstr "3 étapes" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "seul les différence" +msgstr "Différences seules" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" @@ -3480,7 +3476,7 @@ msgstr "Officiel" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "En test" +msgstr "Tester" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -3572,11 +3568,11 @@ msgstr "créer un nouveau guide horizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove horizontal guide" -msgstr "Créer un nouveau guide horizontal" +msgstr "Supprimer le guide horizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" -msgstr "Créer des nouveaux guides horizontaux et verticaux" +msgstr "Créer de nouveaux guides horizontaux et verticaux" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" @@ -3651,7 +3647,7 @@ msgstr "Mode navigation" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" -msgstr "Active le magnétisme" +msgstr "Activer/Désactiver le magnétisme de grille" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" @@ -3659,7 +3655,7 @@ msgstr "Aligner sur la grille" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping options" -msgstr "Options de magnétisme" +msgstr "Options du magnétisme" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -3671,7 +3667,7 @@ msgstr "Rotation alignée" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurer la grille…" +msgstr "Configurer le magnétisme…" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3683,7 +3679,7 @@ msgstr "Aligner au pixel près" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "Alignement intelligent" +msgstr "Magnétisme intelligent" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" @@ -3691,15 +3687,15 @@ msgstr "Aimanter au parent" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "Accrocher à l'ancre du noeud" +msgstr "Accrocher à l'ancre du nœud" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "Accrocher aux flancs du noeud" +msgstr "Accrocher aux flancs du nœud" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "Accrocher aux autres noeuds" +msgstr "Accrocher aux autres nœuds" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" @@ -3754,18 +3750,28 @@ msgid "Show Grid" msgstr "Afficher la grille" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Afficher les aides" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Afficher les règles" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Montrer les guides" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Afficher l'origine" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 vue" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrer sur la sélection" @@ -3826,7 +3832,6 @@ msgid "Ok" msgstr "OK" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Cannot instantiate multiple nodes without root." msgstr "Impossible d'instancier plusieurs nœuds sans nœud racine." @@ -4056,6 +4061,10 @@ msgstr "" "Le maillage n'a pas de surfaces où des contours pourraient être créées !" #: 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 "Impossible de créer le contour !" @@ -4088,12 +4097,10 @@ msgid "Create Outline Mesh.." msgstr "Créer un maillage de contour…" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV1" msgstr "Afficher l'UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV2" msgstr "Afficher l'UV2" @@ -4235,9 +4242,8 @@ msgid "Calculating grid size..." msgstr "Calcul de la taille de la grille..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Creating heightfield..." -msgstr "Création de la heightmap..." +msgstr "Création du champ de hauteur…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." @@ -4245,7 +4251,7 @@ msgstr "Marquage des triangles parcourables..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "Construction d'une heightmap compacte..." +msgstr "Construction d'un champ de hauteur compact..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." @@ -4264,9 +4270,8 @@ msgid "Creating polymesh..." msgstr "Création d'un maillage de contour…" #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Converting to native navigation mesh..." -msgstr "Conversion en maillage de navigation natif..." +msgstr "Conversion en maillage de navigation natif…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" @@ -4600,6 +4605,22 @@ msgid "Resource clipboard is empty!" msgstr "Le presse-papiers des ressources est vide !" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Ouvrir dans l'éditeur" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instance :" + +#: 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 +msgid "Type:" +msgstr "Type :" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Charger une ressource" @@ -4612,9 +4633,8 @@ msgid "Paste" msgstr "Coller" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Chemin de la ressource" +msgstr "ResourcePreloader" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -4738,7 +4758,7 @@ msgstr "Lancer" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Basculer vers le panneau de scripts" +msgstr "Afficher/Cacher la panneau des scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4773,7 +4793,7 @@ msgstr "Garder le débogueur ouvert" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" -msgstr "Deboguer avec un éditeur externe" +msgstr "Déboguer avec un éditeur externe" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4887,10 +4907,6 @@ msgid "Toggle Comment" msgstr "Commenter/décommenter" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Cloner en dessous" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Réduire/Développer la ligne" @@ -4903,6 +4919,10 @@ msgid "Unfold All Lines" msgstr "Dérouler toutes les lignes" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Cloner en dessous" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Compléter le symbole" @@ -4916,7 +4936,7 @@ msgstr "Convertir indentations en espaces" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "Convertir indentations en espaces" +msgstr "Convertir les indentations en tabulations" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5001,7 +5021,7 @@ msgstr "Modifier un opérateur RVB" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "Basculer seulement la rotation" +msgstr "Basculer en mode rotation seule" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" @@ -5169,7 +5189,7 @@ msgstr "Vertex" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" -msgstr "Images par secondes" +msgstr "IPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -5409,7 +5429,7 @@ msgstr "Outil échelle" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" -msgstr "Activer mode vue libre" +msgstr "Basculer en vue libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -5581,27 +5601,24 @@ msgid "Insert Empty (After)" msgstr "Insérer vide (après)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Déplacer le(s) nœud(s)" +msgstr "Déplacer (Avant)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" msgstr "Déplacer (Après)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "SpriteFrames" -msgstr "Images du sprite" +msgstr "SpriteFrames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "Aperçu de la StyleBox :" #: editor/plugins/style_box_editor_plugin.cpp -#, fuzzy msgid "StyleBox" -msgstr "Style Box" +msgstr "StyleBox" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" @@ -5681,7 +5698,7 @@ msgstr "Éditer le thème..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." -msgstr "Menu d'édition des thèmes..." +msgstr "Menu d'édition des thèmes." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -5701,7 +5718,7 @@ msgstr "Créer un nouveau modèle d'éditeur" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "Créer à partir du thème éditeur actuel" +msgstr "Créer à partir du thème actuel de l'éditeur" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5724,6 +5741,16 @@ msgid "Checked Item" msgstr "Item coché" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Ajouter un item" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Item coché" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Possède" @@ -5751,11 +5778,6 @@ msgstr "Onglet 2" msgid "Tab 3" msgstr "Onglet 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Type :" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Type de données :" @@ -5825,9 +5847,8 @@ msgid "Mirror Y" msgstr "Miroir Y" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Paint Tile" -msgstr "Peindre sur la TileMap" +msgstr "Peindre la case" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5866,9 +5887,8 @@ msgid "Merge from scene?" msgstr "Fusionner depuis la scène ?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Set" -msgstr "TileSet…" +msgstr "Ensemble de cases" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5883,7 +5903,6 @@ msgid "Error" msgstr "Erreur" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Autotiles" msgstr "Coupe automatique" @@ -5892,21 +5911,24 @@ msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings." msgstr "" +"Sélectionne une ressource à utiliser comme icône, celle-ci sera aussi " +"utilisée sur les liaisons autotile invalides." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" +"Clic gauche : Activer\n" +"Clic droit : Désactiver" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "Enregistrer la ressource actuellement modifiée." +msgstr "Enregistrer la ressource en cours de modification." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "" +msgstr "Sélectionner une sous-case pour changer sa priorité." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" @@ -5914,7 +5936,7 @@ msgstr "Annuler" #: editor/project_export.cpp msgid "Runnable" -msgstr "Activable" +msgstr "Exécutable" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" @@ -5976,7 +5998,7 @@ msgstr "" #: editor/project_export.cpp msgid "Patches" -msgstr "Patches" +msgstr "Patchs" #: editor/project_export.cpp msgid "Make Patch" @@ -6019,27 +6041,20 @@ msgid "Please choose a 'project.godot' file." msgstr "Veuillez choisir un fichier 'project.godot'." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "Veuillez choisir un fichier 'project.godot'." - -#: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Veuillez choisir un dossier qui ne contient pas de fichier 'project.godot'." +msgstr "Veuillez choisir un dossier vide." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Projet importé" #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't create folder." msgstr "Impossible de créer le dossier." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Un dossier avec le nom spécifié existe déjà dans ce chemin." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6050,9 +6065,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Chemin de projet non valide (avez-vous changé quelque chose ?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" -"Impossible de trouver le fichier project.godot dans le chemin du projet." +"Impossible de charger le fichier project.godot dans le chemin du projet " +"(erreur %d). Le fichier est manquant ou corrompu." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6072,11 +6090,6 @@ msgid "Rename Project" msgstr "Renommer le projet" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" -"Impossible de trouver le fichier project.godot dans le chemin du projet." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Nouveau projet de jeu" @@ -6085,27 +6098,24 @@ msgid "Import Existing Project" msgstr "Importer un projet existant" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Importer et ouvrir" +msgstr "Importer et Modifier" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Créer un nouveau projet" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Créer Émetteur" +msgstr "Créer et ouvrir" #: editor/project_manager.cpp msgid "Install Project:" msgstr "Installer projet :" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Installer" +msgstr "Installer et ouvrir" #: editor/project_manager.cpp msgid "Project Name:" @@ -6241,8 +6251,10 @@ msgid "Mouse Button" msgstr "Bouton de souris" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Action invalide (tout passe, sauf « / » ou « : »)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6325,9 +6337,8 @@ msgid "Joypad Button Index:" msgstr "Index de bouton de la manette de jeu :" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Effacer l'événement d'action d'entrée" +msgstr "Effacer l'action d'entrée" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" @@ -6370,9 +6381,8 @@ msgid "Add Global Property" msgstr "Ajouter une propriété globale" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Select a setting item first!" -msgstr "Choisissez d'abord un élément de réglage !" +msgstr "Sélectionnez d'abord un élément à configurer !" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -6387,10 +6397,6 @@ msgid "Delete Item" msgstr "Supprimer élément" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Ne peut pas contenir de '/' ou ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Existe déjà" @@ -6611,9 +6617,8 @@ msgid "On" msgstr "Activé" #: editor/property_editor.cpp -#, fuzzy msgid "[Empty]" -msgstr "Ajouter vide" +msgstr "[Vide]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" @@ -6707,7 +6712,7 @@ msgstr "Instancier scène(s)" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "Cette opération ne peut être réalisée sur la racine de l'arbre." +msgstr "Cette opération ne peut être réalisée sur la racine de l'arborescence." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" @@ -6782,7 +6787,6 @@ msgid "Error duplicating scene to save it." msgstr "Erreur de duplication de la scène afin de l'enregistrer." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" msgstr "Ressources secondaires :" @@ -6790,10 +6794,6 @@ msgstr "Ressources secondaires :" msgid "Clear Inheritance" msgstr "Effacer l'héritage" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Ouvrir dans l'éditeur" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Supprimer nœud(s)" @@ -6912,10 +6912,6 @@ msgstr "" "Cliquez pour montrer l'arrimage de goupes." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instance :" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Ouvrir script" @@ -6937,7 +6933,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "Basculer visibilité" +msgstr "Basculer la visibilité" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7086,7 +7082,7 @@ msgstr "Fonction :" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." msgstr "" -"Chosissez un ou plusieurs éléments dans la liste pour afficher le graphique." +"Sélectionnez un ou plusieurs éléments de la liste pour afficher le graphique." #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" @@ -7097,9 +7093,8 @@ msgid "Child Process Connected" msgstr "Processus enfant connecté" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Erreurs de chargement" +msgstr "Erreurs de copie" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -7254,47 +7249,40 @@ msgid "Select dependencies of the library for this entry" msgstr "Sélectionnez les dépendances de la librairie pour cette entrée" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Supprimer point de courbe" +msgstr "Supprimer l’entrée" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" msgstr "Double-cliquez pour créer une nouvelle entrée" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Platform:" -msgstr "Platform:" +msgstr "Plateforme :" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Platform" -msgstr "Copier vers la plate-forme…" +msgstr "Plateforme" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dynamic Library" -msgstr "Bibliothèque" +msgstr "Bibliothèque dynamique" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Add an architecture entry" -msgstr "Ajouter une entrée architecturale" +msgstr "Ajouter une entrée architecture" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "GDNativeLibrary" -msgstr "GDNative" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" msgstr "Bibliothèque" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Status" -msgstr "État :" +msgstr "État" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " @@ -7356,33 +7344,44 @@ msgid "Object can't provide a length." msgstr "L'objet ne peut fournir une longueur." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Sélection de la supression de GridMap" +msgid "Next Plane" +msgstr "Plan suivant" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Sélection de la duplication de GridMap" +msgid "Previous Plane" +msgstr "Plan précédent" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Plan :" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Étage suivant" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Onglet précédent" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Étage :" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Grille" +msgid "GridMap Delete Selection" +msgstr "Sélection de la supression de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Vue instantanée" +msgid "GridMap Duplicate Selection" +msgstr "Sélection de la duplication de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Previous Floor" -msgstr "Onglet précédent" +msgid "Grid Map" +msgstr "Grille" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Étage suivant" +msgid "Snap View" +msgstr "Vue instantanée" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7460,57 +7459,61 @@ msgstr "Paramètres GridMap" msgid "Pick Distance:" msgstr "Choisissez distance :" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Generating solution..." -msgstr "Création des coutours..." +msgstr "Génération de la solution en cours..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Création du projet C# ..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." -msgstr "Impossible de créer le contour !" +msgstr "Impossible de créer la solution." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." -msgstr "Impossible de charger la ressource." +msgstr "Impossible de sauvegarder la solution." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Done" msgstr "C'est fait !" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create C# project." -msgstr "Impossible de charger la ressource." +msgstr "Impossible de créer le projet C#." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy +msgid "About C# support" +msgstr "À propos du support C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" -msgstr "Créer le contour" +msgstr "Créer la solution C#" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" msgstr "Constructions" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Build Project" -msgstr "Projet" +msgstr "Compiler le projet" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Warnings" -msgstr "Avertissement" +msgstr "Avertissements" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Fin de la trace d'appel (stack trace) intrinsèque" #: modules/visual_script/visual_script.cpp msgid "" @@ -7873,34 +7876,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "Exécutez le HTML exporté dans le navigateur par défaut du système." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Impossible d'écrire le fichier:\n" +msgstr "Impossible d'écrire le fichier :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Impossible d'ouvrir le modèle pour exportation:\n" +msgstr "Impossible d'ouvrir le modèle pour exportation :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Modèle d'exportation non valide :\n" +msgstr "Modèle d'exportation non valide :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Impossible de lire le shell HTML :\n" +msgstr "Impossible de lire le shell HTML personnalisé :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Impossible de lire l'image de démarrage :\n" +msgstr "Impossible de lire l'image de démarrage :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Impossible de lire l'image de démarrage :\n" +msgstr "Impossible de lire l'image de démarrage." #: scene/2d/animated_sprite.cpp msgid "" @@ -7924,6 +7921,9 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Ce nœud n'a aucune forme enfant, et ne peut donc interagir avec l'espace.\n" +"Considérez ajouter un nœud enfant CollisionShape2D ou un CollisionPolygon2D " +"pour définir sa forme." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8073,23 +8073,28 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin requiert un nœud enfant ARVRCamera" #: scene/3d/baked_lightmap.cpp -#, fuzzy +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Temps restant: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "Tracer les maillages" +msgstr "Tracer les maillages : " #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Plotting Lights:" -msgstr "Tracer les maillages" +msgstr "Tracer les lumières :" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" msgstr "Finalisation du tracer" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Lighting Meshes: " -msgstr "Tracer les maillages" +msgstr "Tracer les maillages : " #: scene/3d/collision_object.cpp msgid "" @@ -8097,6 +8102,9 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon children nodes to define " "its shape." msgstr "" +"Ce nœud n'a aucune forme enfant, il ne peut donc interagir avec l'espace.\n" +"Considérez ajouter un nœud enfant CollisionShape ou CollisionPolygon pour " +"définir sa forme." #: scene/3d/collision_polygon.cpp msgid "" @@ -8169,12 +8177,22 @@ msgstr "" "La propriété Path doit pointer vers un nœud Spatial valide pour fonctionner." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Seul un WorldEnvironnement ne peut être utilisé par scène (ou ensemble de " "scènes instanciées)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8188,8 +8206,8 @@ msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" -"VehicleWheel ajoute un système de roues à un VehicleBody. Veuillez " -"l'utiliser en tant qu'enfant d'un VehicleBody." +"VehicleWheel permet de fournir un système de roue à un VehicleBody. Merci de " +"l'utiliser comme enfant d'un VehicleBody." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -8209,7 +8227,7 @@ msgstr "Veuillez confirmer…" #: scene/gui/file_dialog.cpp msgid "Select this Folder" -msgstr "Sélectionnez ce dossier" +msgstr "Sélectionner ce dossier" #: scene/gui/popup.cpp msgid "" @@ -8237,13 +8255,12 @@ msgid "(Other)" msgstr "(Autre)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" "L'environnement par défaut spécifié dans les réglages du projet (Rendu -> " -"Viewport -> Environnement par défaut) ne peut pas être chargé." +"Environnement -> Environnement par défaut) ne peut pas être chargé." #: scene/main/viewport.cpp msgid "" @@ -8273,6 +8290,35 @@ msgstr "Erreur lors du chargement de la police." msgid "Invalid font size." msgstr "Taille de police invalide." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Action invalide (tout passe, sauf « / » ou « : »)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Ne peut pas contenir de '/' ou ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Format de version.txt invalide dans les modèles. Revision n'est pas un " +#~ "identifiant valide." + +#~ msgid "Can't write file." +#~ msgstr "Impossible d'écrire le fichier." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Veuillez choisir un dossier qui ne contient pas de fichier 'project." +#~ "godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "" +#~ "Impossible de trouver le fichier project.godot dans le chemin du projet." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "" +#~ "Impossible de trouver le fichier project.godot dans le chemin du projet." + #~ msgid "Next" #~ msgstr "Suivant" diff --git a/editor/translations/he.po b/editor/translations/he.po index 57ec12e002..ee0a66cec1 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -3,6 +3,7 @@ # Copyright (c) 2014-2018 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. # Luc Stepniewski <lior@gradstein.info>, 2017. # Yaron Shahrabani <sh.yaron@gmail.com>, 2018. @@ -10,15 +11,16 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-25 22:27+0000\n" -"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" +"PO-Revision-Date: 2018-04-18 16:38+0000\n" +"Last-Translator: Daniel <lorddaniel09@gmail.com>\n" "Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/" "godot/he/>\n" "Language: he\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 2.19-dev\n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -30,19 +32,19 @@ msgstr "כל הבחירה" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "" +msgstr "שינוי זמן פריים-מפתח אנימציה" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "שינוי מיקום אנימציה" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "שינוי מיקום אנימציה" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "" +msgstr "שינוי ערך פריים-מפתח אנימציה" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -70,7 +72,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "הגדרת מעברונים אל:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -143,11 +145,11 @@ msgstr "" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "מעבר לצעד הבא" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "מעבר לצעד הקודם" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -192,7 +194,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "ליצור %d רצועות חדשות ולהכניס מפתחות?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -240,7 +242,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "תקריב הנפשה." #: editor/animation_editor.cpp msgid "Length (s):" @@ -1372,6 +1374,10 @@ msgstr "מחיקה" msgid "Clear Output" msgstr "מחיקת הפלט" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "שגיאה בשמירת המשאב!" @@ -2373,74 +2379,64 @@ msgid "Invalid version.txt format inside templates." msgstr "תבנית ה־version.txt שגויה בתוך התבניות." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +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" -msgstr "" +msgstr "תבניות הייצוא מחולצות" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "ייבוא:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." -msgstr "" +msgstr "לא נמצאו קישורי הורדה לגרסה זו. הורדה ישירה זמינה רק במהדורות הרשמיות." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "לא ניתן לפתור." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "לא ניתן להתחבר." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "אין תגובה." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "הבקשה נכשלה." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "לולאת הפניות." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" - -#: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" +msgstr "נכשל:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "ההורדה הושלמה." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "" +msgstr "שגיאה בבקשת כתובת: " #: editor/export_template_manager.cpp msgid "Connecting to Mirror.." @@ -2448,205 +2444,206 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "מנותק" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "פותר" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "לא ניתן לפתור" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connecting.." -msgstr "" +msgstr "מתבצעת התחברות…" #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "" +msgstr "לא ניתן להתחבר" #: editor/export_template_manager.cpp msgid "Connected" -msgstr "" +msgstr "מחובר" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting.." -msgstr "" +msgstr "מוגשת בקשה…" #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "מתבצעת הורדה" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "שגיאת חיבור" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "שגיאת לחיצת יד SSL" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "גרסה נוכחית:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "גרסאות מותקנות:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "התקנה מקובץ" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "" +msgstr "הסרת תבנית" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "בחירת קובץ תבנית" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "מנהל ייצוא תבניות" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "" +msgstr "הורדת תבניות" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "בחירת אתר מראה מהרשימה: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"לא ניתן לפתוח את file_type_cache.cch לכתיבה, מטמון סוג הקבצים לא יישמר!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" -msgstr "" +msgstr "לא ניתן לנווט אל ‚%s’ כיוון שלא נמצא במערכת הקבצים!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "צפייה בפריטים כרשת של תמונות ממוזערות" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "הצגת פריטים כרשימה" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." -msgstr "" +msgstr "מצב: ייבוא הקובץ נכשל. נא לתקן את הקובץ ולייבא מחדש ידנית." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "לא ניתן להעביר/לשנות שם למקור של משאבים." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "לא ניתן להעביר תיקייה לתוך עצמה." #: editor/filesystem_dock.cpp msgid "Error moving:" -msgstr "" +msgstr "שגיאה בהעברה:" #: editor/filesystem_dock.cpp msgid "Error duplicating:" -msgstr "" +msgstr "שגיאה בשכפול:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "" +msgstr "לא ניתן לעדכן את התלויות:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "לא צוין שם" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "השם שסופק מכיל תווים שגויים" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "לא צוין שם." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "" +msgstr "השם מכיל תווים שגויים." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "כבר קיימים קובץ או תיקייה בשם הזה." #: editor/filesystem_dock.cpp msgid "Renaming file:" -msgstr "" +msgstr "שינוי שם הקובץ:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "שינוי שם התיקייה:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "" +msgstr "קובץ משוכפל:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" +msgstr "תיקייה משוכפלת:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "להרחיב הכול" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "לצמצם הכול" #: editor/filesystem_dock.cpp msgid "Rename.." -msgstr "" +msgstr "שינוי שם…" #: editor/filesystem_dock.cpp msgid "Move To.." -msgstr "" +msgstr "העברה אל…" #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "" +msgstr "פתיחת סצנות" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "עותק" #: editor/filesystem_dock.cpp msgid "Edit Dependencies.." -msgstr "" +msgstr "עריכת תלויות…" #: editor/filesystem_dock.cpp msgid "View Owners.." -msgstr "" +msgstr "צפייה בבעלים…" #: editor/filesystem_dock.cpp msgid "Duplicate.." -msgstr "" +msgstr "שכפול…" #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "התיקייה הקודמת" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "התיקייה הבאה" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "סריקת מערכת הקבצים מחדש" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "החלפת מצב התיקייה כמועדפת" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -2657,76 +2654,78 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"הקבצים נסרקים,\n" +"נא להמתין…" #: editor/filesystem_dock.cpp msgid "Move" -msgstr "" +msgstr "העברה" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "" +msgstr "שינוי שם" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "הוספה לקבוצה" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +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/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "ייבוא סצנה" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene.." -msgstr "" +msgstr "סצנה מיובאת…" #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "נוצרות מפות תאורה" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " @@ -2734,11 +2733,11 @@ msgstr "" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." -msgstr "" +msgstr "מופעל סקריפט מותאם אישית…" #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "לא ניתן לטעון סקריפט שלאחר ייבוא:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" @@ -2750,31 +2749,31 @@ msgstr "" #: editor/import/resource_importer_scene.cpp msgid "Saving.." -msgstr "" +msgstr "שמירה…" #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "הגדרה כבררת מחדל עבור ‚%s’" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "מחיקת בררת מחדל עבור ‚%s’" #: editor/import_dock.cpp msgid " Files" -msgstr "" +msgstr " קבצים" #: editor/import_dock.cpp msgid "Import As:" -msgstr "" +msgstr "ייבוא בתור:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." -msgstr "" +msgstr "ערכה מוגדרת…" #: editor/import_dock.cpp msgid "Reimport" -msgstr "" +msgstr "ייבוא מחדש" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -2782,40 +2781,40 @@ msgstr "" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "קבוצות" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "יש לבחור מפרק כדי לערוך אותות וקבוצות." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "" +msgstr "יצירת מצולע" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "" +msgstr "עריכת מצולע" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "הוספת נקודה" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "" +msgstr "עריכת מצולע (הסרת נקודה)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "הסרת מצולע ונקודה" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "" +msgstr "יצירת מצולע חדש מאפס" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -2827,7 +2826,7 @@ msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" -msgstr "" +msgstr "מחיקת נקודות" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -2835,7 +2834,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "שם הנפשה חדשה:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -3597,15 +3596,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3894,6 +3901,10 @@ 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 "" @@ -4294,7 +4305,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "מחיקת נקודה" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4319,11 +4330,11 @@ msgstr "" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "פיצול נתיב" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "הסרת נקודה בנתיב" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" @@ -4347,31 +4358,31 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" -msgstr "" +msgstr "הזזת נקודה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: הטייה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "" +msgstr "Shift: הזזת הכול" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "" +msgstr "Shift+Ctrl: קנה מידה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "" +msgstr "הזזת מצולע" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "" +msgstr "הטיית מצולע" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "שינוי קנה מידה של מצולע" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4379,7 +4390,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "עריכה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -4396,48 +4407,64 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap" -msgstr "" +msgstr "הצמדה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "" +msgstr "הפעלת הצמדה" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "" +msgstr "רשת" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "" +msgstr "שגיאה: לא ניתן לטעון משאב!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "" +msgstr "הוספת משאב" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "" +msgstr "שינוי שם משאב" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "" +msgstr "מחיקת משאב" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" +msgstr "לוח גזירי המשאבים ריק!" + +#: 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 +#: 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 +msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "" +msgstr "טעינת משאב" #: editor/plugins/resource_preloader_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 "Paste" -msgstr "" +msgstr "הדבקה" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" @@ -4445,35 +4472,35 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "" +msgstr "מחיקת קבצים אחרונים" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "" +msgstr "לסגור ולשמור את השינויים?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" -msgstr "" +msgstr "שגיאה בשמירת ערכת העיצוב" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "" +msgstr "שגיאה בשמירה" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme" -msgstr "" +msgstr "שגיאה בייבוא ערכת הנושא" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing" -msgstr "" +msgstr "שגיאה בייבוא" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "" +msgstr "ייבוא ערכת עיצוב" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "" +msgstr "שמירת ערכת עיצוב בשם…" #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4481,134 +4508,134 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" -msgstr "" +msgstr "מיון" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "" +msgstr "העברה למעלה" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "" +msgstr "העברה למטה" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "" +msgstr "הסקריפט הבא" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "הסקריפט הקודם" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "קובץ" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "חדש" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "לשמור הכול" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "סקריפט רענון רך" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "" +msgstr "העתקת נתיב הסקריפט" #: editor/plugins/script_editor_plugin.cpp msgid "Show In File System" -msgstr "" +msgstr "הצגה במערכת הקבצים" #: editor/plugins/script_editor_plugin.cpp msgid "History Prev" -msgstr "" +msgstr "הקודם בהיסטוריה" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "" +msgstr "הבא בהיסטוריה" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "רענון ערכת העיצוב" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "שמירת ערכת העיצוב" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "שמירת ערכת העיצוב בשם" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "סגירת מסמכים" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "" +msgstr "לסגור הכול" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "" +msgstr "לסגור לשוניות אחרות" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "הרצה" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "" +msgstr "החלפת תצוגת חלונית סקריפטים" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find.." -msgstr "" +msgstr "איתור…" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "" +msgstr "איתור הבא" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "" +msgstr "לצעוד מעל" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "" +msgstr "לצעוד לתוך" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "עצירה" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "" +msgstr "המשך" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "להשאיר את מנפה השגיאות פתוח" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" -msgstr "" +msgstr "ניפוי שגיאות עם עורך חיצוני" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" +msgstr "פתיחת התיעוד המקוון של Godot" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "" +msgstr "חיפוש בהיררכיית המחלקות." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -4616,114 +4643,116 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "מעבר למסמך הקודם שנערך." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "מעבר למסמך הבא שנערך." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "" +msgstr "התעלמות" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "יצירת סקריפט" #: editor/plugins/script_editor_plugin.cpp msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"הקבצים הבאים הם חדשים בכונן.\n" +"באילו פעולות לנקוט?:" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "רענון" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "שמירה מחדש" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "" +msgstr "ניפוי שגיאות" #: editor/plugins/script_editor_plugin.cpp msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgstr "ניתן לערוך סקריפטים מובנים רק כאשר הסצנה אליהם הם שייכים נטענה" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "ניתן להשמיט משאבים ממערכת הקבצים בלבד." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "" +msgstr "בחירת צבע" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" -msgstr "" +msgstr "החלפת מצב רשיות" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "אותיות גדולות" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "אותיות קטנות" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "הגדלת אות ראשונה" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Cut" -msgstr "" +msgstr "גזירה" #: 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 "" +msgstr "העתקה" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "" +msgstr "לבחור הכול" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "" +msgstr "מחיקת שורה" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "" +msgstr "הזחה משמאל" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "" +msgstr "הזחה מימין" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" +msgstr "החלפת מצב הערה" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "" +msgstr "צמצום/הרחבה של שורה" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "" +msgstr "צמצום כל השורות" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "" +msgstr "הרחבת כל השורות" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "לשכפל למטה" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" @@ -4735,60 +4764,60 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "המרת הזחות לרווחים" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "" +msgstr "המרת הזחות לטאבים" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "" +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" -msgstr "" +msgstr "הסרת כל נקודות העצירה" #: editor/plugins/script_text_editor.cpp msgid "Goto Next Breakpoint" -msgstr "" +msgstr "מעבר לנקודת העצירה הבאה" #: editor/plugins/script_text_editor.cpp msgid "Goto Previous Breakpoint" -msgstr "" +msgstr "מעבר לנקודת העצירה הקודמת" #: editor/plugins/script_text_editor.cpp msgid "Convert To Uppercase" -msgstr "" +msgstr "המרה לאותיות גדולות" #: editor/plugins/script_text_editor.cpp msgid "Convert To Lowercase" -msgstr "" +msgstr "המרה לאותיות קטנות" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "" +msgstr "איתור הקודם" #: editor/plugins/script_text_editor.cpp msgid "Replace.." -msgstr "" +msgstr "החלפה…" #: editor/plugins/script_text_editor.cpp msgid "Goto Function.." -msgstr "" +msgstr "מעבר לפונקציה…" #: editor/plugins/script_text_editor.cpp msgid "Goto Line.." -msgstr "" +msgstr "מעבר לשורה…" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "עזרה תלוית הקשר" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" @@ -4848,7 +4877,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "שינוי ערך בררת המחדל" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" @@ -4864,7 +4893,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" -msgstr "" +msgstr "שינוי הערה" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" @@ -4880,7 +4909,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Input Name" -msgstr "" +msgstr "שינוי שם קלט" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" @@ -4912,7 +4941,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "שגיאה: חסרים חיבורי קלט" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" @@ -4956,7 +4985,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "" +msgstr "הטיה של %s מעלות." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." @@ -4972,7 +5001,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "" +msgstr "שינויי חומרים" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" @@ -4988,7 +5017,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" -msgstr "" +msgstr "קודקודים" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" @@ -4996,55 +5025,55 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "" +msgstr "מבט על." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "" +msgstr "מבט מתחת." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" -msgstr "" +msgstr "מתחת" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "" +msgstr "מבט משמאל." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" -msgstr "" +msgstr "שמאל" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "מבט מימין." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" -msgstr "" +msgstr "ימין" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "מבט קדמי." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" -msgstr "" +msgstr "קדמי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "מבט אחורי." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" -msgstr "" +msgstr "אחורי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" -msgstr "" +msgstr "יישור עם התצוגה" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" -msgstr "" +msgstr "בסדר :(" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -5056,15 +5085,15 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "הצגה נורמלית" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "הצגת מסגרת קווים" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "הצגת שכבת פירוט" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" @@ -5072,7 +5101,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" -msgstr "" +msgstr "צפייה בסביבה" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" @@ -5080,7 +5109,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "הצגת מידע" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" @@ -5088,11 +5117,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" -msgstr "" +msgstr "חצי רזולוציה" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "מאזין לשמע" #: editor/plugins/spatial_editor_plugin.cpp msgid "Doppler Enable" @@ -5132,7 +5161,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode (Q)" -msgstr "" +msgstr "בחירת מצב (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -5140,58 +5169,61 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"גרירה: הטיה\n" +"Alt+גרירה: הזזה\n" +"Alt+כפתור ימני: בחירת רשימת עומק" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" -msgstr "" +msgstr "מצב הזזה (W)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode (E)" -msgstr "" +msgstr "מצב הטיה (E)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "מצב שינוי קנה מידה (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "" +msgstr "נקודות ציון מקומיות" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" -msgstr "" +msgstr "מצב מרחב מקומי (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Mode (%s)" -msgstr "" +msgstr "מצב הצמדה (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "" +msgstr "מבט תחתי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "" +msgstr "מבט על" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "" +msgstr "מבט אחורי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "" +msgstr "מבט קדמי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "" +msgstr "מבט שמאלי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "" +msgstr "מבט ימני" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "החלפה בין תצוגה פרספקטיבה/אנכית" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" @@ -5203,7 +5235,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "" +msgstr "בחירת מיקוד" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" @@ -5227,15 +5259,15 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" -msgstr "" +msgstr "החלפת מצב מבט חופשי" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "" +msgstr "התמרה" #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap.." -msgstr "" +msgstr "הגדרת הצמדה…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." @@ -5276,7 +5308,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings" -msgstr "" +msgstr "הגדרות" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" @@ -5284,7 +5316,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "הגדרות הצמדה" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" @@ -5324,11 +5356,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "הטיה (מעלות):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "שינוי קנה מידה (יחס):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -5376,19 +5408,19 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "אנימציות" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "מהירות (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "לולאה" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "שקופיות ההנפשה" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -5539,6 +5571,14 @@ 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 "Has" msgstr "" @@ -5566,11 +5606,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5830,10 +5865,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5854,7 +5885,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5874,10 +5907,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -5959,6 +5988,8 @@ msgid "" "Language changed.\n" "The UI will update next time the editor or project manager starts." msgstr "" +"השפה הוחלפה.\n" +"מנשק המשתמש יתעדכן בפעם הבאה שהעורך או מנהל המיזמים מתחיל." #: editor/project_manager.cpp msgid "" @@ -5968,11 +5999,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Manager" -msgstr "" +msgstr "מנהל המיזמים" #: editor/project_manager.cpp msgid "Project List" -msgstr "" +msgstr "רשימת המיזמים" #: editor/project_manager.cpp msgid "Scan" @@ -5980,27 +6011,27 @@ msgstr "" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "נא לבחור תיקייה לסריקה" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "מיזם חדש" #: editor/project_manager.cpp msgid "Templates" -msgstr "" +msgstr "תבניות" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "יציאה" #: editor/project_manager.cpp msgid "Restart Now" -msgstr "" +msgstr "להפעיל מחדש כעת" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "" +msgstr "לא ניתן להריץ מיזם" #: editor/project_manager.cpp msgid "" @@ -6010,7 +6041,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "" +msgstr "מקש " #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -6022,15 +6053,17 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Mouse Button" -msgstr "" +msgstr "כפתור עכבר" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" -msgstr "" +msgstr "הפעולה ‚%s’ כבר קיימת!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -6054,47 +6087,47 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key.." -msgstr "" +msgstr "נא ללחוץ על מקש…" #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" -msgstr "" +msgstr "מפתח כפתורי עכבר:" #: editor/project_settings_editor.cpp msgid "Left Button" -msgstr "" +msgstr "כפתור שמאלי" #: editor/project_settings_editor.cpp msgid "Right Button" -msgstr "" +msgstr "כפתור ימני" #: editor/project_settings_editor.cpp msgid "Middle Button" -msgstr "" +msgstr "כפתור אמצעי" #: editor/project_settings_editor.cpp msgid "Wheel Up Button" -msgstr "" +msgstr "כפתור גלגלת למעלה" #: editor/project_settings_editor.cpp msgid "Wheel Down Button" -msgstr "" +msgstr "כפתור גלגלת למטה" #: editor/project_settings_editor.cpp msgid "Button 6" -msgstr "" +msgstr "כפתור 6" #: editor/project_settings_editor.cpp msgid "Button 7" -msgstr "" +msgstr "כפתור 7" #: editor/project_settings_editor.cpp msgid "Button 8" -msgstr "" +msgstr "כפתור 8" #: editor/project_settings_editor.cpp msgid "Button 9" -msgstr "" +msgstr "כפתור 9" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -6118,47 +6151,47 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "" +msgstr "הוספת אירוע" #: editor/project_settings_editor.cpp msgid "Device" -msgstr "" +msgstr "התקן" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "" +msgstr "כפתור" #: editor/project_settings_editor.cpp msgid "Left Button." -msgstr "" +msgstr "כפתור שמאלי." #: editor/project_settings_editor.cpp msgid "Right Button." -msgstr "" +msgstr "כפתור ימני." #: editor/project_settings_editor.cpp msgid "Middle Button." -msgstr "" +msgstr "כפתור אמצעי." #: editor/project_settings_editor.cpp msgid "Wheel Up." -msgstr "" +msgstr "גלגלת למעלה." #: editor/project_settings_editor.cpp msgid "Wheel Down." -msgstr "" +msgstr "גלגלת למטה." #: editor/project_settings_editor.cpp msgid "Add Global Property" -msgstr "" +msgstr "הוספת מאפיין גלובלי" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "יש לבחור פריט הגדרה קודם כל!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "" +msgstr "לא קיים מאפיין ‚%s’." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." @@ -6166,11 +6199,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "" - -#: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" +msgstr "מחיקת פריט" #: editor/project_settings_editor.cpp msgid "Already existing" @@ -6565,10 +6594,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6678,10 +6703,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7104,11 +7125,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +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 "GridMap Duplicate Selection" +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7116,19 +7149,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7145,59 +7178,59 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "עריכת ציר X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "עריכת ציר Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "עריכת ציר Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "הטיית מצביע ב־X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "הטיית מצביע ב־Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "הטיית מצביע ב־Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "הטיית מצביע הפוכה ב־X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "הטיית מצביע הפוכה ב־Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "הטיית מצביע הפוכה ב־Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "מחיקת הטיית מצביע" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Create Area" -msgstr "" +msgstr "יצירת שטח" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Create Exterior Connector" -msgstr "" +msgstr "יצירת מחבר חיצוני" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Erase Area" -msgstr "" +msgstr "מחיקת שטח" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" -msgstr "" +msgstr "ביטול הבחירה" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -7205,40 +7238,48 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" +msgstr "בחירת מרחק:" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "" +msgstr "הפתרון נוצר…" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "נוצר מיזם C#…" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create solution." -msgstr "" +msgstr "יצירת הפתרון נכשלה." #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to save solution." -msgstr "" +msgstr "שמירת הפתרון נכשלה." #: modules/mono/editor/godotsharp_editor.cpp msgid "Done" -msgstr "" +msgstr "בוצע" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create C# project." -msgstr "" +msgstr "יצירת מיזם C# נכשלה." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp -msgid "Create C# solution" +msgid "About C# support" msgstr "" +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Create C# solution" +msgstr "יצירת פתרון C#" + #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" msgstr "" @@ -7249,6 +7290,10 @@ msgstr "" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Warnings" +msgstr "אזהרות" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7647,7 +7692,7 @@ msgstr "" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "" +msgstr "ל־CollisionPolygon2D ריק אין השפעה על התנגשות." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -7751,6 +7796,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin דורש מפרק צאצא מסוג ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(זמן שנותר: %d:%02d שנ׳)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "" @@ -7828,10 +7881,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -7846,11 +7909,11 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Raw Mode" -msgstr "" +msgstr "מצב גולמי" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "הוספת הצבע הנוכחי כערכה" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -7858,11 +7921,11 @@ msgstr "" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "נא לאמת…" #: scene/gui/file_dialog.cpp msgid "Select this Folder" -msgstr "" +msgstr "בחירת התיקייה" #: scene/gui/popup.cpp msgid "" @@ -7880,7 +7943,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(אחר)" #: scene/main/scene_tree.cpp msgid "" @@ -7912,6 +7975,9 @@ msgstr "שגיאה בטעינת הגופן." msgid "Invalid font size." msgstr "גודל הגופן שגוי." +#~ msgid "Can't write file." +#~ msgstr "לא ניתן לכתוב קובץ." + #~ msgid "Next" #~ msgstr "הבא" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index c124727d74..e017935860 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -1412,6 +1412,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2405,12 +2409,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2463,10 +2461,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3637,15 +3631,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3934,6 +3936,10 @@ 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 "" @@ -4468,6 +4474,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4751,10 +4773,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4767,6 +4785,10 @@ 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 "" @@ -5580,6 +5602,14 @@ 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 "Has" msgstr "" @@ -5607,11 +5637,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5871,10 +5896,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5895,7 +5916,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5915,10 +5938,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6068,7 +6087,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6212,10 +6233,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6609,10 +6626,6 @@ msgstr "संसाधन" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6722,10 +6735,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7148,11 +7157,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7160,19 +7181,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7251,6 +7272,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7280,6 +7305,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "सदस्यता बनाएं" @@ -7296,6 +7325,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7795,6 +7828,14 @@ 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 "" @@ -7872,10 +7913,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 9d89e98f7e..b6151574e9 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -4,21 +4,21 @@ # This file is distributed under the same license as the Godot source code. # # Nagy Lajos <neutron9707@gmail.com>, 2017. -# Sandor Domokos <sandor.domokos@gmail.com>, 2017. +# Sandor Domokos <sandor.domokos@gmail.com>, 2017-2018. # Varga Dániel <danikah.danikah@gmail.com>, 2016-2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-20 08:54+0000\n" -"Last-Translator: Varga Dániel <danikah.danikah@gmail.com>\n" +"PO-Revision-Date: 2018-04-03 06:36+0000\n" +"Last-Translator: Sandor Domokos <sandor.domokos@gmail.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\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 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -26,47 +26,47 @@ msgstr "Tiltva" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Mind kiválasztva" +msgstr "Minden kiválasztás" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Animáció Kulcsképkocka Idő Változtatása" +msgstr "Animáció kulcsképkocka idő változtatás" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Animáció Átmenet Váltás" +msgstr "Animáció átmenet változtatás" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Animáció Transzformáció Váltás" +msgstr "Animáció transzformáció változtatás" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animáció Kulcsképkocka Érték" +msgstr "Animáció kulcsképkocka érték változtatás" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Animáció Hívás Váltás" +msgstr "Animáció hívás változtatás" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Animáció Nyomvonal Hozzáadása" +msgstr "Animáció nyomvonal hozzáadás" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animáció Kulcs Megkettőzése" +msgstr "Animáció kulcsok megkettőzése" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Animáció Nyomvonal Felfelé Mozgatása" +msgstr "Animáció nyomvonal felfelé mozgatás" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Animáció Nyomvonal Lefelé Mozgatása" +msgstr "Animáció nyomvonal lefelé mozgatás" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Animáció Nyomvonal Eltávolítása" +msgstr "Animáció nyomvonal eltávolítás" #: editor/animation_editor.cpp msgid "Set Transitions to:" @@ -74,44 +74,44 @@ msgstr "Átmenet beállítása erre:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Animáció Nyomvonal Átnevezése" +msgstr "Animáció nyomvonal átnevezés" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "Animáció Nyomvonal Interpoláció Változtatása" +msgstr "Animáció nyomvonal interpoláció változtatás" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "Animáció Nyomvonal Érték Mód Változtatása" +msgstr "Animáció nyomvonal érték mód változtatás" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "Animáció Nyomvonal Takarási Mód Változtatása" +msgstr "Animáció nyomvonal takarási mód változtatás" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Node Görbe Szerkesztése" +msgstr "Node görbe szerkesztés" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "Kiválasztás Görbe Szerkesztése" +msgstr "Kiválasztás görbe szerkesztés" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Animáció Kulcs Törlése" +msgstr "Animáció kulcs törlés" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Kiválasztás Megkettőzése" +msgstr "Kiválasztás megkettőzés" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "Áthelyezettek Megkettőzése" +msgstr "Áthelyezettek megkettőzés" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "Kiválasztás Eltávolítása" +msgstr "Kiválasztás eltávolítás" #: editor/animation_editor.cpp msgid "Continuous" @@ -127,32 +127,32 @@ msgstr "Érzékelő" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "Animáció Kulcs Hozzáadása" +msgstr "Animáció kulcs hozzáadás" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "Animáció Kulcs Mozgatása" +msgstr "Animáció kulcs mozgatás" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Kiválasztás Átméretezése" +msgstr "Kiválasztás átméretezés" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "Átméretezés A Kurzortól" +msgstr "Átméretezés a kurzortól" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "Ugrás A következő lépésre" +msgstr "Ugrás a következő lépésre" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "Ugrás Az Előző Lépésre" +msgstr "Ugrás az előző lépésre" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "Egyenes irányú" +msgstr "Lineáris" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" @@ -180,15 +180,15 @@ msgstr "Átmenetek" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "Animáció Optimalizálása" +msgstr "Animáció optimalizálás" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "Animáció Megtisztítása" +msgstr "Animáció megtisztítás" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Létrehoz ÚJ útvonalat %s -hez és beilleszti a kulcsot?" +msgstr "Létrehoz ÚJ nyomvonalat %s -hez és beilleszti a kulcsot?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -204,39 +204,39 @@ msgstr "Létrehozás" #: editor/animation_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_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Animáció Útvonal És Kulcs Beillesztése" +msgstr "Animáció nyomvonal és kulcs beillesztés" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "Animáció Kulcs Beillesztése" +msgstr "Animáció kulcs beillesztés" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "Csak Animáció változtatása" +msgstr "Animáció hossz változtatás" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "Animáció Loop Megváltoztatása" +msgstr "Animáció hurok változtatás" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "Animáció Típusos Érték Kulcs Létrehozása" +msgstr "Animáció típusos érték kulcs létrehozás" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "Animáció Beilleszt" +msgstr "Animáció beillesztés" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "Animáció Kulcsok Nyújtása" +msgstr "Animáció kulcsok nyújtás" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "Animáció Hívási Nyomvonal Hozzáadása" +msgstr "Animáció hívási nyomvonal hozzáadás" #: editor/animation_editor.cpp msgid "Animation zoom." @@ -326,7 +326,7 @@ msgstr "Méretezési arány:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "Melyik Node-ban Hívjon Funkciókat?" +msgstr "Melyik Node-ban hívjon funkciókat?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -426,7 +426,7 @@ msgid "" "Node." msgstr "" "Nem található a cél metódus! Nevezzen meg egy érvényes metódust, vagy " -"csatoljon egy scriptet a cél Node-hoz." +"csatoljon egy szkriptet a cél Node-hoz." #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -519,7 +519,7 @@ msgstr "%s Típusának Megváltoztatása" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Change" -msgstr "Megváltoztatás" +msgstr "Változtatás" #: editor/create_dialog.cpp msgid "Create New %s" @@ -566,8 +566,8 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" -"'%s' Jelenet éppen szerkesztés alatt ál.\n" -"A változások nem lépnek érvénybe, ha csak újra nem tölti a jelenetet." +"'%s' Scene éppen szerkesztés alatt áll.\n" +"A változások újratöltés után lépnek érvénybe." #: editor/dependency_editor.cpp msgid "" @@ -633,7 +633,6 @@ msgstr "" "Eltávolítja őket ennek ellenére? (nem visszavonható)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" msgstr "Nem eltávolítható:" @@ -719,7 +718,7 @@ msgstr "Vezető Fejlesztő" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "Projekt Menedzser " +msgstr "Projekt Kezelő " #: editor/editor_about.cpp msgid "Developers" @@ -828,9 +827,8 @@ msgid "Rename Audio Bus" msgstr "Hangbusz Átnevezése" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Tömb értékének megváltoztatása" +msgstr "Hangbusz Hangerő Módosítás" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -1047,7 +1045,7 @@ msgstr "Útvonal:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Node Neve:" +msgstr "Node neve:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1060,7 +1058,7 @@ msgstr "Egyke" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "Jelenet Frissítése" +msgstr "Scene Frissítése" #: editor/editor_data.cpp msgid "Storing local changes.." @@ -1068,7 +1066,7 @@ msgstr "Helyi módosítások eltárolása.." #: editor/editor_data.cpp msgid "Updating scene.." -msgstr "Jelenet frissítése.." +msgstr "Scene frissítése.." #: editor/editor_data.cpp msgid "[empty]" @@ -1328,19 +1326,18 @@ msgid "Description" msgstr "Leírás" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentáció" +msgstr "Online Oktatóanyagok:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Ennek a metódusnak jelenleg nincs leírása. Segítsen minket azzal, hogy " -"[color=$color][url=$url]hozzájárul eggyel[/url][/color]!" +"Jelenleg nincsenek oktatóanyagok ehhez az osztályhoz. [color=$color][url=" +"$url]Hozzájárulhat eggyel[/url][/color], vagy [color=$color][url=" +"$url2]kérvényezhet egyet[/url][/color]." #: editor/editor_help.cpp msgid "Properties" @@ -1397,6 +1394,10 @@ msgstr "Töröl" msgid "Clear Output" msgstr "Kimenet Törlése" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Hiba történt az erőforrás mentésekor!" @@ -1444,7 +1445,7 @@ msgstr "Hiba történt '%s' betöltése közben." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "Jelenet Mentése" +msgstr "Scene mentése" #: editor/editor_node.cpp msgid "Analyzing" @@ -1463,8 +1464,8 @@ msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Nem sikerült a jelenet mentése. Valószínű, hogy a függőségei (példányok vagy " -"öröklések) nem voltak kielégíthetők." +"Nem sikerült a Scene mentése. Valószínű, hogy a függőségei (példányok vagy " +"öröklések) nem voltak megfelelőek." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1519,10 +1520,9 @@ msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" -"Ez az erőforrás egy olyan jelenethez tartozik, amit példányosítottak, vagy " -"amit örökölt a jelenet.\n" -"A rajta végzett módosítások nem lesznek megtartva a jelenlegi jelenet " -"elmentésekor." +"Ez az erőforrás egy olyan Scene-hez tartozik amit példányosítottak vagy " +"örökölt.\n" +"A módosítások nem lesznek megtartva a jelenlegi Scene mentésekor." #: editor/editor_node.cpp msgid "" @@ -1566,7 +1566,7 @@ msgstr "Összes tulajdonság összecsukása" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "Paraméterek másolása" +msgstr "Paraméterek Másolása" #: editor/editor_node.cpp msgid "Paste Params" @@ -1578,7 +1578,7 @@ msgstr "Erőforrás Beillesztése" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "Forrás másolása" +msgstr "Erőforrás Másolása" #: editor/editor_node.cpp msgid "Make Built-In" @@ -1594,7 +1594,7 @@ msgstr "Megnyitás Súgóban" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "Nincs meghatározva jelenet a futtatáshoz." +msgstr "Nincs meghatározva Scene a futtatáshoz." #: editor/editor_node.cpp msgid "" @@ -1612,8 +1612,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"A kiválasztott '%s' jelenet nem létezik, kiválaszt most egy érvényes " -"jelenetet?\n" +"A kiválasztott '%s' Scene nem létezik, kiválaszt most egy érvényeset?\n" "Ezt megváltoztathatja később a \"Projekt Beállításokban\" az \"Alkalmazás\" " "kategóriában." @@ -1623,15 +1622,15 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"A kiválasztott '%s' jelenet nem egy jelenetfájl, kiválaszt most egy érvényes " -"jelenetet?\n" +"A kiválasztott '%s' Scene nem egy Scene fájl, kiválaszt most egy " +"érvényeset?\n" "Ezt megváltoztathatja később a \"Projekt Beállításokban\" az \"Alkalmazás\" " "kategóriában." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" -"A jelenlegi jelenet soha nem volt még mentve, mentse el a futtatás előtt." +"A jelenlegi Scene soha nem volt még mentve, mentse el a futtatás előtt." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1639,19 +1638,19 @@ msgstr "Az alprocesszt nem lehetett elindítani!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "Jelenet Megnyitása" +msgstr "Scene megnyitás" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Alap Jelenet Megnyitása" +msgstr "Alap Scene megnyitás" #: editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "Jelenet Gyors Megnyitása.." +msgstr "Scene gyors megnyitás" #: editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Script Gyors Megnyitása.." +msgstr "Szkript gyors megnyitás" #: editor/editor_node.cpp msgid "Save & Close" @@ -1663,7 +1662,7 @@ msgstr "Bezárás előtt menti a '%s'-n végzett módosításokat?" #: editor/editor_node.cpp msgid "Save Scene As.." -msgstr "Jelenet Mentése Másként.." +msgstr "Scene mentés másként" #: editor/editor_node.cpp msgid "No" @@ -1675,27 +1674,27 @@ msgstr "Igen" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Ez a jelenet soha nem volt mentve. Menti futtatás előtt?" +msgstr "Ez a Scene még soha nem volt mentve. Menti futtatás előtt?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "Ezt a műveletet nem lehet végrehajtani jelenet nélkül." +msgstr "Ezt a műveletet nem lehet végrehajtani egy Scene nélkül." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Mesh Könyvtár Exportálása" +msgstr "Mesh könyvtár exportálás" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "Ezt a műveletet nem lehet végrehajtani gyökér node nélkül." +msgstr "Ezt a műveletet nem lehet végrehajtani gyökér Node nélkül." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Tile Set Exportálása" +msgstr "Tile Set exportálás" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "Ezt a műveletet nem lehet végrehajtani egy kiválaszott node nélkül." +msgstr "Ezt a műveletet nem lehet végrehajtani egy kiválaszott Node nélkül." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1715,7 +1714,7 @@ msgstr "Ez a művelet nem vonható vissza. Visszaállítja mindenképp?" #: editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "Jelenet Gyors Futtatása.." +msgstr "Scene gyors futtatás" #: editor/editor_node.cpp msgid "Quit" @@ -1735,13 +1734,12 @@ msgstr "Mentés és Kilépés" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" -"Elmenti a következő jelenet(ek)en végzett változtatásokat kilépés előtt?" +msgstr "Elmenti a következő Scene(ek)en végzett változtatásokat kilépés előtt?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" -"Elmenti a következő jelenet(ek)en végzett változtatásokat a Projektkezelő " +"Elmenti a következő Scene(ek)en végzett változtatásokat a Projektkezelő " "megnyitása előtt?" #: editor/editor_node.cpp @@ -1765,34 +1763,33 @@ msgstr "" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" -"Nem található script mező az addon pluginnak a következő helyen: 'res://" +"Nem található szkript mező az addon pluginnak a következő helyen: 'res://" "addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "Nem sikerült az addon script betöltése a következő útvonalról: '%s'." +msgstr "Nem sikerült az addon szkript betöltése a következő útvonalról: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"Nem sikerült az addon script betöltése a következő útvonalról: '%s' Az " +"Nem sikerült az addon szkript betöltése a következő útvonalról: '%s' Az " "alaptípus nem EditorPlugin." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"Nem sikerült az addon script betöltése a következő útvonalról: '%s' A script " -"nem eszközmódban van." +"Nem sikerült az addon szkript betöltése a következő útvonalról: '%s' A " +"szkript nem eszközmódban van." #: 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 "" -"A(z) '%s' jelenet automatikusan be lett importálva, ezért nem módosítható.\n" -"Ahhoz, hogy változtatásokat végezhessen rajta, egy új, azt öröklő jelenetet " -"hozhat létre." +"A(z) '%s' Scene automatikusan be lett importálva, ezért nem módosítható.\n" +"Változtatások végzéséhez egy új öröklött Scene-t hozhat létre." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1804,9 +1801,9 @@ 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 "" -"Hiba történt a jelenet betöltésekor, benne kell, hogy legyen a projekt " -"útvonalában. Használja az 'import' lehetőséget a jelenet megnyitására, majd " -"mentse el a projekt útvonalán belülre." +"Hiba történt a Scene betöltésekor, benne kell lennnie a projekt útvonalában. " +"Használja az 'import' lehetőséget a Scene megnyitására, majd mentse el a " +"projekt útvonalán belülre." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" @@ -1831,7 +1828,7 @@ msgstr "Alapértelmezett" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Jelenet Fül Váltása" +msgstr "Scene fül váltás" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1863,7 +1860,7 @@ msgstr "Hozzáad egy új jelenetet." #: editor/editor_node.cpp msgid "Scene" -msgstr "Jelenet" +msgstr "Scene" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -1883,31 +1880,31 @@ msgstr "Fájlok Szűrése.." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "Műveletek a jelenet fájlokkal." +msgstr "Műveletek Scene fájlokkal." #: editor/editor_node.cpp msgid "New Scene" -msgstr "Új Jelenet" +msgstr "Új Scene" #: editor/editor_node.cpp msgid "New Inherited Scene.." -msgstr "Új Örökölt Jelenet.." +msgstr "Új örökölt Scene" #: editor/editor_node.cpp msgid "Open Scene.." -msgstr "Jelenet Megnyitása.." +msgstr "Scene megnyitása" #: editor/editor_node.cpp msgid "Save Scene" -msgstr "Jelenet Mentése" +msgstr "Scene mentés" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "Minden Jelenet Mentése" +msgstr "Minden Scene mentés" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "Jelenet Bezárása" +msgstr "Scene bezárás" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" @@ -1937,11 +1934,11 @@ msgstr "Mégis" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "Jelenet Visszaállítása" +msgstr "Scene visszaállítás" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "Egyéb projekt- vagy jelenet-szintű eszközök." +msgstr "Egyéb projekt- vagy Scene-szintű eszközök." #: editor/editor_node.cpp msgid "Project" @@ -1953,7 +1950,7 @@ msgstr "Projekt Beállítások" #: editor/editor_node.cpp msgid "Run Script" -msgstr "Script Futtatása" +msgstr "Szkript Futtatása" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" @@ -2012,7 +2009,7 @@ msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"Az ütközési alakzatok és a fénysugárkövető node-ok (mind 2D-hez és 3D-hez) " +"Az ütközési alakzatok és a fénysugárkövető Node-ok (mind 2D-hez és 3D-hez) " "láthatóak lesznek a játék futásakor, ha ez az opció be van kapcsolva." #: editor/editor_node.cpp @@ -2029,7 +2026,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Jelenet Változtatások Szinkronizálása" +msgstr "Scene változtatások szinkronizálás" #: editor/editor_node.cpp msgid "" @@ -2045,7 +2042,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Script Változtatások Szinkronizálása" +msgstr "Szkript Változtatások Szinkronizálása" #: editor/editor_node.cpp msgid "" @@ -2054,7 +2051,7 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Ha ez a beállítás be van kapcsolva, bármilyen script, amit elment, újra " +"Ha ez a beállítás be van kapcsolva, bármilyen szkript, amit elment, újra " "betöltődik a futó játékba.\n" "Ha egy távoli eszközön használja, sokkal hatékonyabb a hálózati " "fájlrendszerrel együtt." @@ -2128,7 +2125,7 @@ msgstr "Szünetelteti a jelenetet" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "Jelenet Szüneteltetése" +msgstr "Scene szüneteltetés" #: editor/editor_node.cpp msgid "Stop the scene." @@ -2140,19 +2137,19 @@ msgstr "Leállítás" #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "Szerkesztett jelenet futtatása." +msgstr "Szerkesztett Scene futtatása." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Jelenet Futtatása" +msgstr "Scene futtatás" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "Tetszőleges jelenet futtatása" +msgstr "Tetszőleges Scene futtatás" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "Tetszőleges Jelenet Futtatása" +msgstr "Tetszőleges Scene futtatás" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2253,7 +2250,7 @@ msgstr "Jelszó:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "Megnyit és Scriptet Futtat" +msgstr "Szkriptet Megnyit és Futtat" #: editor/editor_node.cpp msgid "New Inherited" @@ -2277,7 +2274,7 @@ msgstr "3D Szerkesztő Megnyitása" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Script Szerkesztő Megnyitása" +msgstr "Szkript Szerkesztő Megnyitása" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -2293,625 +2290,620 @@ msgstr "Előző Szerkesztő Megnyitása" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Háló Előnézetek Létrehozása" #: editor/editor_plugin.cpp msgid "Thumbnail.." -msgstr "" +msgstr "Indexkép.." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "" +msgstr "Telepített Bővítmények:" #: editor/editor_plugin_settings.cpp msgid "Update" -msgstr "" +msgstr "Frissítés" #: editor/editor_plugin_settings.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Version:" -msgstr "" +msgstr "Verzió:" #: editor/editor_plugin_settings.cpp msgid "Author:" -msgstr "" +msgstr "Szerző:" #: editor/editor_plugin_settings.cpp msgid "Status:" -msgstr "" +msgstr "Állapot:" #: editor/editor_profiler.cpp msgid "Stop Profiling" -msgstr "" +msgstr "Profilozás Leállítása" #: editor/editor_profiler.cpp msgid "Start Profiling" -msgstr "" +msgstr "Profilozás Indítása" #: editor/editor_profiler.cpp msgid "Measure:" -msgstr "" +msgstr "Mérés:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Keretidő (mp)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "" +msgstr "Átlagos Idő (mp)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Keret %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "" +msgstr "Fizika Keret %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" -msgstr "" +msgstr "Idő:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "Befoglaló" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Saját" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "" +msgstr "Keret #:" #: editor/editor_profiler.cpp msgid "Time" -msgstr "" +msgstr "Idő" #: editor/editor_profiler.cpp msgid "Calls" -msgstr "" +msgstr "Hívások" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Válasszon készüléket a listából" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Nem található futtatható exportállomány ehhez a platformhoz.\n" +"Adjon hozzá egy futtatható exportállományt az export menüben." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Írja a logikát a _run() metódusba." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Már létezik a szerkesztett Scene." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Nem sikerült a szkript példányosítása:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Nem felejtette el a 'tool' kulcsszót?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Nem sikerült a szkript futtatása:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Nem felejtette el a '_run' metódust?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "" +msgstr "Alapértelmezett (Ugyanaz, Mint a Szerkesztőnek)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "" +msgstr "Válassza ki az importálandó Node-okat" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Scene elérési Út:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Importálás Node-ból:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Letöltés Megint" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Eltávolítás" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(Telepítve)" #: editor/export_template_manager.cpp msgid "Download" -msgstr "" +msgstr "Letöltés" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(Hiányzik)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Jelenlegi)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait.." -msgstr "" +msgstr "Tükrök letöltése, kérjük várjon.." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Eltávolítja a(z) '%s' verziójú sablont?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "" +msgstr "Nem nyitható meg az export sablon zip." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "" - -#: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" +msgstr "Érvénytelen version.txt formátum a sablonokban." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Nem található version.txt a sablonokban." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "" +msgstr "Hiba történt a sablonok elérési útjának létrehozásakor:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "" +msgstr "Export Sablonok Kibontása" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "Importálás:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Nem található letöltési link ehhez a verzióhoz. Közvetlen letöltés csak a " +"hivatalos kiadásokhoz elérhető." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Nem megoldható." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "Nem lehet csatlakozni." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Nincs válasz." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "Kérés Sikertelen." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Átirányítási Hurok." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" - -#: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" +msgstr "Sikertelen:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "A Letöltés Befejeződött." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "" +msgstr "Hiba történt az url lekérdezésekor: " #: editor/export_template_manager.cpp msgid "Connecting to Mirror.." -msgstr "" +msgstr "Csatlakozás Tükörhöz.." #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "Kapcsolat bontva" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "Megoldás" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Nem Megoldható" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connecting.." -msgstr "" +msgstr "Csatlakozás.." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" -msgstr "Kapcsolódás..." +msgstr "Nem Lehet Csatlakozni" #: editor/export_template_manager.cpp msgid "Connected" -msgstr "" +msgstr "Csatlakozva" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting.." -msgstr "" +msgstr "Lekérdezés.." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "Letöltés" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "Kapcsolathiba" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "SSL-Kézfogás Hiba" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Jelenlegi Verzió:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Telepített Verziók:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Telepítés Fájlból" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "" +msgstr "Sablon Eltávolítása" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "Válasszon sablonfájlt" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "Export Sablon Kezelő" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "" +msgstr "Sablonok Letöltése" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "Válasszon tükröt a listából: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Nem lehet megnyitni a file_type_cache.cch fájlt írásra, a fájltípus " +"gyorsítótár nem lesz mentve!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" -msgstr "" +msgstr "Nem lehet '%s'-t elérni, mivel nem létezik a fájlrendszerben!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "Elemek kirajzolása indexképek rácsába" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "Elemek listázása" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Állapot: Fájl importálása sikertelen. Javítsa a fájlt majd importálja be " +"újra manuálisan." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Az erőforrások gyökere nem mozgatható vagy átnevezhető." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Egy mappa nem helyezhető önmagába." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Hiba betöltéskor:" +msgstr "Hiba mozgatáskor:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Hiba betöltéskor:" +msgstr "Hiba másoláskor:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "A Scene-t nem sikerült betölteni a hiányzó függőségek miatt:" +msgstr "Nem sikerült a függőségek frissítése:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "Nincs név megadva" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "A megadott név érvénytelen karaktereket tartalmaz" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "Nincs név megadva." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "" +msgstr "A név érvénytelen karaktereket tartalmaz." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Egy fájl vagy mappa már létezik a megadott névvel." #: editor/filesystem_dock.cpp msgid "Renaming file:" -msgstr "" +msgstr "Fájl átnevezése:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "Mappa átnevezése:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Kiválasztás megkettőzése" +msgstr "Fájl másolása:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" +msgstr "Mappa másolása:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "Összes kibontása" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Összes összecsukása" #: editor/filesystem_dock.cpp msgid "Rename.." -msgstr "" +msgstr "Átnevezés.." #: editor/filesystem_dock.cpp msgid "Move To.." -msgstr "" +msgstr "Áthelyezés.." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "" +msgstr "Scene(k) megnyitás" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Példány" #: editor/filesystem_dock.cpp msgid "Edit Dependencies.." -msgstr "" +msgstr "Függőségek Szerkesztése.." #: editor/filesystem_dock.cpp msgid "View Owners.." -msgstr "" +msgstr "Tulajdonosok Megtekintése.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate.." -msgstr "Animáció kulcs megkettőzése" +msgstr "Megkettőzés.." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "Előző Könyvtár" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Következő Könyvtár" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Fájlrendszer Újra-vizsgálata" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "Mappa Kedvencnek jelölése / Kedvenc jelölés visszavonása" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" +msgstr "Kiválasztott Scene(k) példányosítása a kiválasztott Node gyermekeként." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Fájlok Vizsgálata,\n" +"Kérem Várjon.." #: editor/filesystem_dock.cpp msgid "Move" -msgstr "" +msgstr "Áthelyezés" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "" +msgstr "Átnevezés" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Hozzáadás Csoporthoz" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Eltávolítás Csoportból" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Importálás Egyetlen Jelenetként" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Importálás Külön Animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importálás Külön Anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importálás Külön Objektumokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importálás Külön Objektumokkal És Anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Importálás Külön Objektumokkal És Animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +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 "" +msgstr "Importálás Külön Objektumokkal, Anyagokkal És Animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Importálás Több Jelenetként" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importálás Több Jelentként és Anyagokként" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Scene importálás" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene.." -msgstr "" +msgstr "Scene importálás" #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Fénytérképek Létrehozása" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Létrehozás a Következő Hálóhoz: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." -msgstr "" +msgstr "Tetszőleges Szkript Futtatása.." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "Nem sikerült az import utáni szkript betöltése:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" +"Érvénytelen vagy sérült az importálás utáni szkript (ellenőrizze a konzolt):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "" +msgstr "Hiba történt az importálás utána szkript futtatásakor:" #: editor/import/resource_importer_scene.cpp msgid "Saving.." -msgstr "" +msgstr "Mentés.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Beállítás Alapértelmezettként '%s'-hez" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Alapértelmezett Törlése '%s'-nél" #: editor/import_dock.cpp msgid " Files" -msgstr "" +msgstr " Fájlok" #: editor/import_dock.cpp msgid "Import As:" -msgstr "" +msgstr "Importálás Mint:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." -msgstr "" +msgstr "Beépített Beállítások.." #: editor/import_dock.cpp msgid "Reimport" -msgstr "" +msgstr "Újraimportálás" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "MultiNode Beállítás" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Csoportok" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "Válasszon ki egy Node-ot a Jelzések és Csoportok módosításához." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "" +msgstr "Sokszög Létrehozása" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "" +msgstr "Sokszög Szerkesztése" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Pont Beszúrása" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "" +msgstr "Sokszög Szerkesztése (Pont Eltávolítása)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Sokszög és Pont Eltávolítása" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Új sokszög létrehozása a semmiből" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -2920,69 +2912,73 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Meglévő sokszög módosítása:\n" +"Bal Egérgomb: Pont Mozgatása.\n" +"Ctrl + Bal Egérgomb: Szakasz Felosztása.\n" +"Jobb Egérgomb: Pont Eltörlése." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" -msgstr "" +msgstr "Pontok Törlése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "" +msgstr "Automatikus Lejátszás Váltása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Új Animáció Neve:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Új Animáció" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Animáció Nevének Megváltoztatása:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" -msgstr "" +msgstr "Animáció Törlése?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "" +msgstr "Animáció Eltávolítása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "HIBA: Érvénytelen animáció név!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "HIBA: Animáció név már létezik!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Animáció Átnevezése" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Animáció Hozzáadása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "" +msgstr "Következő Megváltozott Keverése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Keverési Idő Módosítása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Animáció Betöltése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Animáció Megkettőzése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" @@ -2990,91 +2986,92 @@ msgstr "HIBA: Nincs másolható animáció!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "HIBA: Nincs animációs erőforrás a vágólapon!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "" +msgstr "Animáció Beillesztve" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" -msgstr "" +msgstr "Animáció Beillesztése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "HIBA: Nincs animáció szerkesztésre!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" msgstr "" +"A kiválasztott animáció lejátszása visszafelé a jelenlegi pozícióból. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "A kiválasztott animáció lejátszása visszafelé a végétől. (Shift + A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Animáció lejátszásának leállítása. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "A kiválasztott animáció lejátszása az elejétől. (Shift + D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "A kiválasztott animáció lejátszása az jelenlegi pozícióból. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Animáció pozíció (másodpercekben)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Animáció lejátszás skálázása globálisan a Node-nak." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." -msgstr "" +msgstr "Új animáció létrehozása a lejátszóban." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load animation from disk." -msgstr "" +msgstr "Animáció betöltése a lemezről." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load an animation from disk." -msgstr "" +msgstr "Animáció betöltése a lemezről." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save the current animation" -msgstr "" +msgstr "Jelenlegi animáció elmentése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "" +msgstr "A lejátszóban lévő animációk listájának megjelenítése." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "" +msgstr "Lejátszás Betöltéskor" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Cél Keverési Idők Módosítása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "Animációs Eszközök" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Copy Animation" -msgstr "Animáció másolása" +msgstr "Animáció Másolása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" -msgstr "" +msgstr "Másolópapír Animáció (Onion Skinning)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "" +msgstr "Másolópapír Mód Bekapcsolása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -3082,361 +3079,362 @@ msgstr "Irányok" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "Múlt" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "Jövő" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +msgstr "Mélység" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 lépés" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 lépés" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 lépés" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "Csak A Különbségek" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Fehérmoduláció Kierőltetése" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Kihatás Gizmókra Is (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "Új Animáció Létrehozása" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "Animáció Neve:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" -msgstr "" +msgstr "Hiba!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Keverési Idők:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "Következő (Auto Sor):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Animációk Közötti Keverési Idők" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "Animáció" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Új név:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Filters" -msgstr "" +msgstr "Szűrők Szerkesztése" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Skála:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" -msgstr "" +msgstr "Előtűnés (mp):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Elhalványulás (mp):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Keverés" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "Mixelés" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Automatikus Újraindítás:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "Újraindítás (mp):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "Véletlenszerű Újraindítás (mp):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "Start!" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "" +msgstr "Mennyiség:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "" +msgstr "Keverés:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "Keverés 0:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "Keverés 1:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "Áttűnési Idő (mp):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "Jelenlegi:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "" +msgstr "Bemenet Hozzáadása" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "" +msgstr "Automatikus Léptetés Tisztítása" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Automatikus Léptetés Beállítása" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "" +msgstr "Bemenet Törlése" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "" +msgstr "Az animációs fa érvényes." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "" +msgstr "Az animációs fa érvénytelen." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Animáció Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "Egyszeri Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "Mixelő Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Keverés2 Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Keverés3 Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Keverés4 Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Időskála Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "IdőKereső Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Átmenet Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." -msgstr "" +msgstr "Animációk Importálása.." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Node szűrők szerkesztés" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Filters.." -msgstr "" +msgstr "Szűrők.." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Animáció másolása" +msgstr "AnimációFa" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "" +msgstr "Ingyenes" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "Tartalom:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +msgstr "Fájlok Megtekintése" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "" +msgstr "A gazdagép neve nem oldható meg:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "" +msgstr "Kapcsolat hiba, kérjük próbálja meg újra." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "" +msgstr "Nem lehet csatlakozni a kiszolgálóhoz:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "Nincs válasz a kiszolgálótól:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "Kérés sikertelen, visszatérési kód:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "Kérés sikertelen, túl sok átirányítás" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." msgstr "" +"Rossz letöltési hash, a program feltételezi, hogy a fájlt rosszindulatilag " +"módosították." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "Várt:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "Kapott:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "sha256 hash ellenőrzés megbukott" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Eszköz Letöltési Hiba:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Fetching:" -msgstr "" +msgstr "Lekérés:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving.." -msgstr "" +msgstr "Megoldás.." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "" +msgstr "Hiba kéréskor" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "" +msgstr "Tétlen" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Újra" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Letöltési Hiba" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Ennek az eszköznek a letöltése már folyamatban van!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" -msgstr "" +msgstr "első" #: editor/plugins/asset_library_editor_plugin.cpp msgid "prev" -msgstr "" +msgstr "előző" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" -msgstr "" +msgstr "következő" #: editor/plugins/asset_library_editor_plugin.cpp msgid "last" -msgstr "" +msgstr "utolsó" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "Mind" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "" +msgstr "Bővítmények" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "" +msgstr "Rendezés:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "Visszafele" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" -msgstr "" +msgstr "Kategória:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "Oldal:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Support.." -msgstr "" +msgstr "Támogatás.." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "Hivatalos" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "Tesztelés Alatt" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "Eszköz ZIP Fájl" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -3444,135 +3442,146 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Nem lehet megállapítani mentési útvonalat a fénytérképeknek.\n" +"Mentse el a jelenetét (hogy aztán a képek ugyanabba a mappába legyenek " +"mentve), vagy válasszon egy mentési útvonalat a BakedLightmap " +"tulajdonságaiból." #: 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 "" +"Nincs mesh, amibe adatokat süthetne. Bizonyosodjon meg arról, hogy " +"tartalmaznak egy UV2 csatornát, és hogy a 'Fény Besütése' opció be van " +"kapcsolva." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Fénytérképek létrehozása sikertelen, győződjön meg arról, hogy az útvonal " +"írható." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "" +msgstr "Fény Besütése" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "Előnézet" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "Illesztés Beállítása" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "Rács Eltolás:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "Rács Léptetés:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "Forgatási Eltolás:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Forgatási Léptetés:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "" +msgstr "Forgatási Pont Mozgatása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "Mozgási Művelet" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" -msgstr "" +msgstr "Függőleges vezetővonal mozgatása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new vertical guide" -msgstr "" +msgstr "Új függőleges vezetővonal létrehozása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove vertical guide" -msgstr "" +msgstr "Függőleges vezetővonal eltávolítása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move horizontal guide" -msgstr "" +msgstr "Vízszintes vezetővonal mozgatása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal guide" -msgstr "" +msgstr "Új vízszintes vezetővonal létrehozása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove horizontal guide" -msgstr "" +msgstr "Vízszintes vezetővonal eltávolítása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" -msgstr "" +msgstr "Új vízszintes és függőleges vezetővonalak létrehozása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" -msgstr "" +msgstr "IK Lánc Szerkesztése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "CanvasItem Szerkesztése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" -msgstr "" +msgstr "Csak Horgonyok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors and Margins" -msgstr "" +msgstr "Horgonyok és Margók Módosítása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "" +msgstr "Horgonyok Módosítása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Póz Beillesztése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" -msgstr "" +msgstr "Kiválasztó Mód" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Húzás: Forgatás" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt + Húzás: Mozgatás" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Nyomja meg a 'v' gombot a Forgatási Pont Megváltoztatásához, Vagy 'Shift + " +"v'-t a Forgatási Pont Húzásához (mozgás közben)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt + Jobb Egérgomb: Mélységi lista választás" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Mozgás Mód" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Forgató mód" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3580,895 +3589,917 @@ 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)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Kattintson ide az objektum forgatási pontjának megváltoztatásához." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Pásztázás Mód" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" -msgstr "" +msgstr "Illesztés be- és kikapcsolása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "Illesztés Használata" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping options" -msgstr "" +msgstr "Illesztési beállítások" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" -msgstr "" +msgstr "Rácshoz illesztés" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "Forgatási Illesztés Használata" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "Illesztés Beállítása..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "Relatív Illesztés" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "Pixelhez Illesztés" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "" +msgstr "Intelligens illesztés" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "" +msgstr "Illesztés szülőhöz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "" +msgstr "Illesztés Node horgonyhoz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "" +msgstr "Illesztés Node oldalakhoz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "" +msgstr "Illesztés más Node-okhoz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "" +msgstr "Illesztés vezetővonalakhoz" #: 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 "A kiválasztott objektum zárolása (mozgathatatlanná tétele)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "A kiválasztott objektum feloldása (mozgathatóvá tétele)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "" +msgstr "Kiválaszthatatlanná teszi az objektum gyermekeit." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Újra kiválaszthatóvá teszi az objektum gyermekeit." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" -msgstr "" +msgstr "Csontok Létrehozása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "" +msgstr "Csontok Törlése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" -msgstr "" +msgstr "Csontok Mutatása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "IK Lánc Létrehozása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "IK Lánc Törlése" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "View" -msgstr "" +msgstr "Nézet" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "" +msgstr "Rács Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" -msgstr "" +msgid "Show Helpers" +msgstr "Segítők Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" -msgstr "" +msgid "Show Rulers" +msgstr "Vonalzók Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" -msgstr "" +msgid "Show Guides" +msgstr "Vezetővonalak Megjelenítése" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Rács Megjelenítése" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "Segítők Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "" +msgstr "Kijelölés Középre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "" +msgstr "Kijelölés Keretezése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" -msgstr "" +msgstr "Elrendezés" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" -msgstr "" +msgstr "Kulcsok Beszúrása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "Kulcs Beszúrása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Kulcs Beszúrása (Meglévő Nyomvonalakra)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "Póz másolása" +msgstr "Póz Másolása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "" +msgstr "Póz Törlése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag pivot from mouse position" -msgstr "" +msgstr "Forgatási pont húzása az egér helyétől" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set pivot at mouse position" -msgstr "" +msgstr "Forgatási pont beállítása az egér helyére" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Rács Léptetés Mértékének Kétszerezése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Rács Léptetés Mértékének Felezése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "" +msgstr "%s Hozzáadása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "" +msgstr "%s Hozzáadása..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "Rendben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Nem lehet több Node-ot példányosítani gyökér nélkül." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "Node létrehozás" #: 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 "" +msgstr "Hiba történt a Scene példányosításkor %s-ből" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change default type" -msgstr "" +msgstr "Alapértelmezett típus megváltoztatása" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" +"Fogd és vidd + Shift: Node hozzáadása testvérként\n" +"Fogd és vidd + Alt: Node típusának megváltoztatása" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" -msgstr "" +msgstr "Poly3D Létrehozása" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Fogantyú Beállítása" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "%d elem eltávolítása?" #: editor/plugins/cube_grid_theme_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Item" -msgstr "" +msgstr "Elem Hozzáadása" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "" +msgstr "Kijelölt Elem Eltávolítása" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "" +msgstr "Importálás Jelenetből" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "" +msgstr "Frissítés Jelenetből" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Lapos 0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Lapos 1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" -msgstr "" +msgstr "Lassan Be" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "" +msgstr "Lassan Ki" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Simított Lépés" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "" +msgstr "Görbe Pontjának Módosítása" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "" +msgstr "Görbe Érintőjének Módosítása" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" -msgstr "" +msgstr "Előre Beállított Görbe Betöltése" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" -msgstr "" +msgstr "Pont hozzáadása" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove point" -msgstr "" +msgstr "Pont eltávolítása" #: editor/plugins/curve_editor_plugin.cpp msgid "Left linear" -msgstr "" +msgstr "Bal lineáris" #: editor/plugins/curve_editor_plugin.cpp msgid "Right linear" -msgstr "" +msgstr "Jobb lineáris" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" -msgstr "" +msgstr "Előre beállított betöltése" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "" +msgstr "Görbe Pontjának Eltávolítása" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Görbe Lineáris Érintőjének Kapcsolása" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Tartsa lenyomva a Shift gombot az érintők egyenkénti szerkesztéséhez" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "GI Szonda Besütése" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" -msgstr "" +msgstr "Szín Gradiens Pont Hozzáadása / Eltávolítása" #: editor/plugins/gradient_editor_plugin.cpp #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Color Ramp" -msgstr "" +msgstr "Szín Gradiens Módosítása" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "%d elem" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" -msgstr "" +msgstr "Elemek" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Elemlista Szerkesztő" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Nincs OccluderPolygon2D erőforrás ezen a Node-on.\n" +"Létrehoz egyet és hozzárendeli a Node-hoz?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "" +msgstr "Árnyékoló Sokszög Létrehozása" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "" +msgstr "Új sokszög létrehozása a semmiből." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit existing polygon:" -msgstr "" +msgstr "Létező sokszög szerkesztése:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "" +msgstr "Bal Egérgomb: Pont Mozgatása." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "" +msgstr "Ctrl + Bal Egérgomb: Szakasz Felosztása." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "" +msgstr "Jobb Egérgomb: Pont Törlése." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "A háló üres!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Statikus Trimesh Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Statikus Konvex Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "" +msgstr "Ez nem hajtható végre a gyökér Scene-en!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Trimesh Alakzat Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "Konvex Alakzat Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Navigációs Háló Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "" +msgstr "A tartalmazott Mesh nem ArrayMesh típusú." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "UV kibontás sikertelen, a mesh talán nem sokrétű?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "" +msgstr "Nincs mesh a hibakereséshez." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "A modellnek nincs UV-je ezen a rétegen" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "" +msgstr "MeshInstance-nak nincs Mesh-e!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" msgstr "" +"A Mesh-nek nincsenek felszínei, ami alapján körvonalakat lehetni készíteni!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Could not create outline!" +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "Körvonalkészítés sikertelen!" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "" +msgstr "Körvonal Készítése" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "" +msgstr "Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Trimesh Statikus Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "" +msgstr "Konvex Statikus Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Trimesh Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Konvex Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh.." -msgstr "" +msgstr "Körvonalháló Létrehozása.." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" -msgstr "" +msgstr "UV1 Megtekintése" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV2" -msgstr "" +msgstr "UV2 Megtekintése" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "UV2 Kicsomagolása Fénytérképhez / AO-hoz" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "" +msgstr "Körvonalháló Készítése" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "" +msgstr "Körvonal Mérete:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" +"Nincs háló forrás meghatározva (és nincs MultiMesh a Node-ban beállítva)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "" +msgstr "Nincs háló forrás meghatározva (és a MultiMesh nem tartalmaz Mesh-t)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "" +msgstr "Mesh forrás érvénytelen (érvénytelen útvonal)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Mesh forrás érvénytelen (nem MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "Mesh forrás érvénytelen (nem tartalmaz Mesh erőforrást)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Nincs felületi forrás meghatározva." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Felületi forrás érvénytelen (érvénytelen útvonal)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Felületi forrás érvénytelen (nincs geometria)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Felületi forrás érvénytelen (nincsenek oldalak)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "A szülőnek nincsenek kitölthető szilárd oldalai." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "" +msgstr "A területet nem lehetett leképezni." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Válasszon Ki Egy Forrás Mesh-t:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Válasszon Ki Egy Cél Felületet:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Felület Kitöltése" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "" +msgstr "MultiMesh Kitöltése" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Cél Felület:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Forrás Mesh:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "" +msgstr "X-Tengely" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "" +msgstr "Y-Tengely" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "" +msgstr "Z-Tengely" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "" +msgstr "Mesh \"Fel\" Tengelye:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "" +msgstr "Véletlenszerű Forgatás:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "" +msgstr "Véletlenszerű Billentés:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "" +msgstr "Véletlenszerű Skálázás:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "" +msgstr "Kitöltés" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" -msgstr "" +msgstr "Besütés!" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake the navigation mesh." -msgstr "" +msgstr "A navigációs mesh besütése." #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Navigációs háló törlése." #: editor/plugins/navigation_mesh_generator.cpp msgid "Setting up Configuration..." -msgstr "" +msgstr "Konfiguráció beállítása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "" +msgstr "Rácsméret kiszámítása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Magasságmező létrehozása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "" +msgstr "Járható háromszögek megjelölése…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Kompakt magasságmező kiépítése…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Járható terület lepusztítása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "" +msgstr "Particionálás…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Kontúrok létrehozása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Polymesh létrehozása…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Átkonvertálás natív navigációs hálóra…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Navigációs Háló Generátor Beállítás:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Geometria Elemzése…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" -msgstr "" +msgstr "Kész!" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "Navigációs Sokszög Létrehozása" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "" +msgstr "AABB Generálása" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "Csak egy ParticlesMaterial feldolgozó anyagba állíthat pontot" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "Hiba a kép betöltésekor:" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgstr "Nem létezik egyetlen pixel sem >128-as átlátszósággal a képben.." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Láthatósági Téglalap Generálása" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "Kibocsátási Maszk Betöltése" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Kibocsátási Maszk Törlése" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "" +msgstr "Részecskék" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "" +msgstr "Generált Pontok Száma:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "" +msgstr "Generálási Idő (mp):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "" +msgstr "Kibocsátási Maszk" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "Kinyerés Pixelből" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "Kibocsátási Színek" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "A Node nem tartalmaz geometriát." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "A Node nem tartalmaz geometriát (oldalakat)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Egy 'ParticlesMaterial' típusú feldolgozó anyag szükséges." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" -msgstr "" +msgstr "Az oldalak nem tartalmaznak területet!" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "" +msgstr "Nincsenek oldalak!" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "AABB Generálása" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Kibocsátási Pontok Létrehozása A Mesh Alapján" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Kibocsátási pontok létrehozása a Node alapján" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Kibocsátó Létrehozása" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "Kibocsátási Pontok:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "Felületi Pontok" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Felületi Pontok + Normálok (Irányított)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Mennyiség" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "Kibocsátási Forrás: " #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "Láthatósági AABB Generálása" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "" +msgstr "Pont Eltávolítása Görbéről" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "" +msgstr "Ki-Vezérlő Eltávolítása Görbéből" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "Be-Vezérlő Eltávolítása Görbéből" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "" +msgstr "Pont Hozzáadása a Görbéhez" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "Pont Mozgatása a Görbén" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Be-Vezérlő Mozgatása a Görbén" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Ki-Vezérlő Mozgatása a Görbén" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "Pontok Kiválasztása" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift + Húzás: Vezérlőpontok Kiválasztása" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "Kattintás: Pont Hozzáadása" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "" +msgstr "Jobb Kattintás: Pont Törlése" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "" +msgstr "Vezérlőpontok Kiválasztása (Shift + Húzás)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "" +msgstr "Pont Hozzáadása (üres helyre)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "" +msgstr "Szakasz Felosztása (görbén)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Pont Törlése" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "" +msgstr "Görbe Lezárása" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "" +msgstr "Görbe Pont #" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Position" -msgstr "" +msgstr "Görbe Pont Pozíció Beállítása" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "" +msgstr "Be-Görbe Pozíció Beállítása" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" -msgstr "" +msgstr "Ki-Görbe Pozíció Beállítása" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "Útvonal Felosztása" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Útvonal Pont Eltávolítása" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" -msgstr "" +msgstr "Ki-Vezérlő Pont Eltávolítása" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "" +msgstr "Be-Vezérlő Pont Eltávolítása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "" +msgstr "UV Térkép Létrehozása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "" +msgstr "UV Térkép Transzformálása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "2D UV Sokszög Szerkesztő" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" -msgstr "" +msgstr "Pont Mozgatása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: Forgatás" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "" +msgstr "Shift: Mind Mozgatása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "" +msgstr "Shift + Ctrl: Skálázás" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "" +msgstr "Sokszög Mozgatása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "" +msgstr "Sokszög Forgatása" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "Sokszög Skálázása" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4476,309 +4507,328 @@ msgstr "" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "Szerkesztés" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "" +msgstr "Sokszög -> UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "" +msgstr "UV -> Sokszög" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "" +msgstr "UV Törlése" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap" -msgstr "" +msgstr "Illesztés" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "" +msgstr "Illesztés Engedélyezése" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "" +msgstr "Rács" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "" +msgstr "HIBA: Nem sikerült betölteni az erőforrást!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "" +msgstr "Erőforrás Hozzáadása" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "" +msgstr "Erőforrás Átnevezése" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "" +msgstr "Erőforrás Törlése" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "" +msgstr "Az erőforrás vágólap üres!" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Megnyitás Szerkesztőben" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Példány:" + +#: 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 +msgid "Type:" +msgstr "Típus:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "" +msgstr "Erőforrás Betöltése" #: editor/plugins/resource_preloader_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 "Paste" -msgstr "" +msgstr "Beillesztés" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" -msgstr "" +msgstr "ForrásElőtöltö" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "" +msgstr "Legutóbbi Fájlok Törlése" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "" +msgstr "Bezárja és menti a változásokat?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" -msgstr "" +msgstr "HIba történt a téma mentésekor" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "" +msgstr "Hiba mentés közben" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme" -msgstr "" +msgstr "Hiba történt a téma importálásakor" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing" -msgstr "" +msgstr "Hiba importáláskor" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "" +msgstr "Téma Importálása" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "" +msgstr "Téma Mentése Másként.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Osztály Referencia" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" -msgstr "" +msgstr "Rendezés" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "" +msgstr "Mozgatás Felfelé" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "" +msgstr "Mozgatás Lefelé" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "" +msgstr "Következő Szkript" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "Előző Szkript" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Fájl" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Új" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Összes Mentése" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Szkript Puha Újratöltése" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Útvonal másolása" +msgstr "Szkript Útvonal Másolása" #: editor/plugins/script_editor_plugin.cpp msgid "Show In File System" -msgstr "" +msgstr "Mutassa a Fájlrendszerben" #: editor/plugins/script_editor_plugin.cpp msgid "History Prev" -msgstr "" +msgstr "Előző Előzmény" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "" +msgstr "Következő Előzmény" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Téma Újratöltése" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Téma Mentése" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Téma Mentése Másként" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Dokumentációs Lapok Bezárása" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "" +msgstr "Mind Bezárása" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "" +msgstr "A Többi Lap Bezárása" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Futtatás" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "" +msgstr "Szkript Panel Megjelenítése" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find.." -msgstr "" +msgstr "Keresés.." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "" +msgstr "Következő Keresése" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "" +msgstr "Átlépés" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "" +msgstr "Belépés" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "Szünet" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "" +msgstr "Folytatás" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Hibakereső Nyitva Tartása" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" -msgstr "" +msgstr "Hibakeresés külső szerkesztővel" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" +msgstr "Godot online dokumentáció megnyitása" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "" +msgstr "Keresés az osztályhierarchiában." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "" +msgstr "Keresés a referencia dokumentációban." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Ugrás az előzőleg szerkesztett dokumentumra." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "Ugrás a következőleg szerkesztett dokumentumra." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "" +msgstr "Elvetés" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "Szkript Létrehozása" #: editor/plugins/script_editor_plugin.cpp msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"A alábbi fájlok újabbak a lemezen.\n" +"Mit szeretne lépni?:" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "Újratöltés" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "Újramentés" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "" +msgstr "Hibakereső" #: editor/plugins/script_editor_plugin.cpp msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"A beépített szkriptek csak akkor szerkeszthetőek, amikor az a Scene amihez " +"tartoznak éppen be van töltve" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Csak a fájlrendszerből eredő erőforrásokat lehet bedobni." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "" +msgstr "Szín Választása" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" -msgstr "" +msgstr "Kis- és Nagybetűk Konvertálása" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Mind Nagybetű" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Mind Kisbetű" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Szó Eleji Nagybetű" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Cut" -msgstr "" +msgstr "Kivágás" #: editor/plugins/script_text_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp @@ -4789,128 +4839,128 @@ msgstr "Másolás" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "" +msgstr "Összes Kijelölése" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "" +msgstr "Sor Törlése" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "" +msgstr "Behúzás Balra" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "" +msgstr "Behúzás Jobbra" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" +msgstr "Átváltás Megjegyzésre" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "" +msgstr "Sor Összezárása / Kibontása" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "" +msgstr "Összes Sor Összezárása" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "" +msgstr "Összes Sor Kibontása" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Klónozás Lefelé" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "" +msgstr "Szimbólum Befejezése" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "" +msgstr "Sorvégi Szóközök Lenyírása" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "Behúzások Átkonvertálása Szóközökre" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "" +msgstr "Behúzások Átkonvertálása Tabokra" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "" +msgstr "Automatikus Behúzás" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "" +msgstr "Töréspont Elhelyezése" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "" +msgstr "Összes Töréspont Eltávolítása" #: editor/plugins/script_text_editor.cpp msgid "Goto Next Breakpoint" -msgstr "" +msgstr "Ugrás Következő Töréspontra" #: editor/plugins/script_text_editor.cpp msgid "Goto Previous Breakpoint" -msgstr "" +msgstr "Ugrás Előző Töréspontra" #: editor/plugins/script_text_editor.cpp msgid "Convert To Uppercase" -msgstr "" +msgstr "Konvertálás Nagybetűsre" #: editor/plugins/script_text_editor.cpp msgid "Convert To Lowercase" -msgstr "" +msgstr "Konvertálás Kisbetűsre" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "" +msgstr "Előző Keresése" #: editor/plugins/script_text_editor.cpp msgid "Replace.." -msgstr "" +msgstr "Csere.." #: editor/plugins/script_text_editor.cpp msgid "Goto Function.." -msgstr "" +msgstr "Ugrás Funkcióra.." #: editor/plugins/script_text_editor.cpp msgid "Goto Line.." -msgstr "" +msgstr "Ugrás Sorra.." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "Kontextusérzékeny Súgó" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Árnyaló" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" -msgstr "" +msgstr "Skaláris állandó változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Constant" -msgstr "" +msgstr "Vec állandó változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Constant" -msgstr "" +msgstr "RGB állandó változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Operator" -msgstr "" +msgstr "Skaláris kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Operator" -msgstr "" +msgstr "Vec kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" @@ -4918,7 +4968,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" -msgstr "" +msgstr "RGB kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" @@ -5637,6 +5687,15 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Elem Hozzáadása" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -5664,11 +5723,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5928,10 +5982,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5952,7 +6002,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5972,10 +6024,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -5992,9 +6040,8 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Létrehozás" +msgstr "Létrehozás és Szerkesztés" #: editor/project_manager.cpp msgid "Install Project:" @@ -6124,7 +6171,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6268,10 +6317,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6657,18 +6702,13 @@ msgid "Error duplicating scene to save it." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" -msgstr "Forrás másolása" +msgstr "Al-Erőforrások" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6703,7 +6743,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Copy Node Path" -msgstr "Node útvonal másaolása" +msgstr "Node Útvonal Másolása" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -6778,10 +6818,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -6958,9 +6994,8 @@ msgid "Child Process Connected" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Póz másolása" +msgstr "Hiba Másolása" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -7115,9 +7150,8 @@ msgid "Select dependencies of the library for this entry" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Jelenlegi nyomvonal felfelé mozgatása." +msgstr "Jelenlegi tétel eltávolítása" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -7163,11 +7197,12 @@ msgstr "" #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" +"Érvénytelen típus argumentum a convert()-hez használjon TYPE_* konstansokat." #: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Nincs elég bájt a bájtok dekódolására, vagy hibás formátum." #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" @@ -7206,11 +7241,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" +msgstr "Következő Sík" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "Előző Sík" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7218,19 +7265,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7309,6 +7356,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7338,6 +7389,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7353,27 +7408,37 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" +"Egy node munkamemória nélkül yield-elt, olvassa el a dokumentációt a yield " +"helyes használatáról!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" +"A node yield-elt, de nem adta vissza funkció állapotot a legelső " +"munkamemóriában." #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" +"A node munkamemóriájának első elemének kell, hogy legyen visszatérési " +"értéke! Javítsa ki a node-ját." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "" +msgstr "Node egy érvénytelen szekvencia kimenettel tért vissza: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -7625,7 +7690,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "Node-ok másolása" +msgstr "Node-ok Másolása" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" @@ -7852,6 +7917,14 @@ 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 "" @@ -7929,10 +8002,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -7959,7 +8042,7 @@ msgstr "Figyelem!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Kérem erősítse meg..." +msgstr "Kérem Erősítse Meg..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" @@ -7996,11 +8079,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Ez a nézet nincs beállítva renderelési célnak. Ha azt szeretné, hogy a " -"tartalma közvetlenül a képernyőn jelenjen meg, akkor készítsen rajta egy " -"gyermek Control-t, így megkaphatja a méretét. Ellenkező esetben készítsen " -"egy RenderTarget-et, és rendelje hozzá a belső textúrát egy Node-hoz a " -"megjelenítéshez." +"Ez a nézetablak nincs beállítva leképezési célnak. Ha azt szeretné, hogy a " +"tartalma közvetlenül a képernyőn jelenjen meg, tegye azt egy Control " +"gyermekévé, hogy így kapjon méretet. Ellenkező esetben tegye RenderTarget-" +"té, és állítsa hozzá a belső textúráját valamilyen node-hoz kirajzolásra." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8018,6 +8100,16 @@ msgstr "Hiba a betűtípus betöltésekor." msgid "Invalid font size." msgstr "Érvénytelen betűtípus méret." +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Érvénytelen version.txt formátum a sablonokban. A revízió nem érvényes " +#~ "azonosító." + +#~ msgid "Can't write file." +#~ msgstr "Nem lehet fájlt írni." + #~ msgid "Next" #~ msgstr "Következő" diff --git a/editor/translations/id.po b/editor/translations/id.po index ae7fd98ae2..21d333009f 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -10,22 +10,23 @@ # Damar S. M <the.last.walla@gmail.com>, 2017. # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. # Romi Kusuma Bakti <romikusumab@gmail.com>, 2017. -# Sofyan Sugianto <sofyanartem@gmail.com>, 2017. +# Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018. +# Tito <ijavadroid@gmail.com>, 2018. # Tom My <tom.asadinawan@gmail.com>, 2017. # yursan9 <rizal.sagi@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-11 10:47+0000\n" -"Last-Translator: Romi Kusuma Bakti <romikusumab@gmail.com>\n" +"PO-Revision-Date: 2018-04-18 16:38+0000\n" +"Last-Translator: Tito <ijavadroid@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -36,9 +37,8 @@ msgid "All Selection" msgstr "Semua pilihan" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Ubah Nilai Animasi" +msgstr "Ubah Waktu Keyframe Animasi" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -49,9 +49,8 @@ msgid "Anim Change Transform" msgstr "Ubah Transformasi Animasi" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Ubah Nilai Animasi" +msgstr "Ubah Nilai Keyframe Animasi" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -99,7 +98,7 @@ msgstr "Ubah Trek Anim ke Wrap Mode" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Edit Kurva Node" +msgstr "Sunting Kurva Node" #: editor/animation_editor.cpp msgid "Edit Selection Curve" @@ -380,9 +379,8 @@ msgid "No Matches" msgstr "Tidak ada yang cocok" #: editor/code_editor.cpp -#, fuzzy msgid "Replaced %d occurrence(s)." -msgstr "Diganti kejadian (kejadian-kejadian) %d." +msgstr "%d kejadian diganti." #: editor/code_editor.cpp msgid "Match Case" @@ -504,9 +502,8 @@ msgid "Connecting Signal:" msgstr "Menyambungkan Sinyal:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Sambungkan '%s' ke '%s'" +msgstr "Memutuskan '%s' dari '%s'" #: editor/connections_dialog.cpp msgid "Connect.." @@ -522,9 +519,8 @@ msgid "Signals" msgstr "Sinyal-sinyal" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Ubah Tipe Nilai Array" +msgstr "Ubah Tipe %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -532,9 +528,8 @@ msgid "Change" msgstr "Ubah" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Buat Baru" +msgstr "Buat Baru %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -612,9 +607,8 @@ msgid "Fix Broken" msgstr "Perbaiki yang Rusak" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependency Editor" -msgstr "Editor Ketergantungan" +msgstr "Penyunting Dependensi" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -647,9 +641,8 @@ msgstr "" "Hapus saja? (tidak bisa dibatalkan/undo)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "Tidak bisa dibuang:\n" +msgstr "Tidak bisa menghapus:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -710,7 +703,7 @@ msgstr "Ubah Kunci Kamus" #: editor/dictionary_property_edit.cpp #, fuzzy msgid "Change Dictionary Value" -msgstr "Ubah Nilai Array" +msgstr "Ubah Nilai Dictionary" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -733,9 +726,8 @@ msgid "Lead Developer" msgstr "Pengembang Utama" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Manajer Proyek" +msgstr "Manajer Proyek " #: editor/editor_about.cpp msgid "Developers" @@ -794,14 +786,12 @@ msgstr "" "lisensi masing-masing." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Konstanta:" +msgstr "Semua Komponen" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Konstanta:" +msgstr "Komponen" #: editor/editor_about.cpp msgid "Licenses" @@ -812,9 +802,8 @@ msgid "Error opening package file, not in zip format." msgstr "Gagal saat membuka paket, tidak dalam bentuk zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Mengimpor ulang" +msgstr "Membuka Aset Terkompresi" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" @@ -843,14 +832,12 @@ msgid "Add Effect" msgstr "Tambahkan Efek" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Namai kembali Autoload" +msgstr "Ubah Nama Bus Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Alih Audio Bus Solo" +msgstr "Ubah Volume Bus Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -877,9 +864,8 @@ msgid "Move Bus Effect" msgstr "Pindah Efek Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Hapus yang Dipilih" +msgstr "Hapus Effect Bus" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." @@ -907,18 +893,16 @@ msgid "Duplicate" msgstr "Gandakan" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Volume" -msgstr "Kebalikan Semula Pandangan" +msgstr "Setel Ulang Volume" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Effect" -msgstr "Hapus yang Dipilih" +msgstr "Hapus Efek" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Suara" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -931,22 +915,20 @@ msgstr "Master Bus tidak dapat dihapus!" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Audio Bus" -msgstr "Hapus Penampilan" +msgstr "Hapus Bus Audio" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Duplicate Audio Bus" -msgstr "Duplikat Pilihan" +msgstr "Duplikat Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Bus Volume" -msgstr "Kebalikan Semula Pandangan" +msgstr "Setel Ulang Bus Volume" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Audio Bus" -msgstr "Pindahkan Kunci Tambah" +msgstr "Pindahkan Audio Bus" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -997,7 +979,7 @@ msgstr "Simpan Layout Bus ke berkas." #: editor/editor_audio_buses.cpp editor/import_dock.cpp #, fuzzy msgid "Load Default" -msgstr "Bawaan" +msgstr "Muat Konfigurasi Bawaan" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." @@ -1012,9 +994,9 @@ msgid "Valid characters:" msgstr "Karakter sah:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "Nama tidak sah. Harus tidak serupa dengan class name engine yang ada." +msgstr "" +"Nama tidak valid. Tidak boleh sama dengan nama kelas bawaan engine yang ada." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." @@ -1062,7 +1044,6 @@ msgid "Remove Autoload" msgstr "Hapus Autoload" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Enable" msgstr "Aktifkan" @@ -1102,16 +1083,15 @@ msgstr "Memperbaharui scene.." #: editor/editor_data.cpp msgid "[empty]" -msgstr "" +msgstr "[kosong]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[belum disimpan]" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Mohon simpan scene terlebih dahulu." +msgstr "Slahkan pilih direktori kerja terlebih dahulu" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1147,31 +1127,28 @@ msgid "Packing" msgstr "Mengemas" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Template berkas tidak ditemukan:\n" +msgstr "Templat berkas tidak ditemukan:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "File telah ada, Overwrite?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "Buat Folder" +msgstr "Pilih Folder Saat Ini" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Salin Lokasi" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" msgstr "Tampilkan di Manajer Berkas" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "New Folder.." -msgstr "Buat Folder" +msgstr "Buat Direktori..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1212,17 +1189,14 @@ msgid "Save a File" msgstr "Simpan sebuah File" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Back" -msgstr "Mundur" +msgstr "Kembali" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Forward" msgstr "Maju" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Up" msgstr "Naik" @@ -1251,9 +1225,8 @@ msgid "Move Favorite Down" msgstr "Pindahkan Favorit Kebawah" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder" -msgstr "Tidak dapat membuat folder." +msgstr "Pergi ke direktori induk" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1277,9 +1250,8 @@ msgid "ScanSources" msgstr "Sumber Pemindaian" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" -msgstr "Mengimpor ulang" +msgstr "Mengimpor ulang Aset" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1315,9 +1287,8 @@ msgid "Brief Description:" msgstr "Deskripsi Singkat:" #: editor/editor_help.cpp -#, fuzzy msgid "Members" -msgstr "Member-member:" +msgstr "Anggota" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -1326,7 +1297,7 @@ msgstr "Member-member:" #: editor/editor_help.cpp #, fuzzy msgid "Public Methods" -msgstr "Metode Publik:" +msgstr "Fungsi Publik" #: editor/editor_help.cpp msgid "Public Methods:" @@ -1346,57 +1317,50 @@ msgid "Signals:" msgstr "Sinyal-sinyal:" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Fungsi-fungsi:" +msgstr "Enumerasi" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations:" -msgstr "Fungsi-fungsi:" +msgstr "Enumerasi:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " #: editor/editor_help.cpp -#, fuzzy msgid "Constants" -msgstr "Konstanta:" +msgstr "Konstanta" #: editor/editor_help.cpp msgid "Constants:" msgstr "Konstanta:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Deskripsi:" +msgstr "Deskripsi" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentasi" +msgstr "Tutorial Daring:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Untuk saat ini tidak ada deskripsi metode ini. Tolong bantu kita dengan " -"[color=$color][url=$url]kontribusi[/url][/color]!" +"Untuk saat ini tidak ada tutorial dalam kelas ini, anda bisa [color=$color]" +"[url=$url]ikut berkontribusi[/url][/color] atau [color=$color][url=" +"$url2]memberikan usulan[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Properties" -msgstr "Properti Objek." +msgstr "Properti Objek" #: editor/editor_help.cpp -#, fuzzy msgid "Property Description:" -msgstr "Deskripsi Singkat:" +msgstr "Deskripsi Properti Objek:" #: editor/editor_help.cpp msgid "" @@ -1407,9 +1371,8 @@ msgstr "" "dengan[color=$color][url=$url]kontribusi[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Methods" -msgstr "Daftar Fungsi:" +msgstr "Fungsi" #: editor/editor_help.cpp msgid "Method Description:" @@ -1432,9 +1395,8 @@ msgid "Find" msgstr "Cari" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Keluaran:" +msgstr "Keluaran:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp @@ -1444,9 +1406,12 @@ msgid "Clear" msgstr "Bersihkan" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Luaran" +msgstr "Bersihkan Luaran" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -1475,28 +1440,24 @@ msgid "Error while saving." msgstr "Error saat menyimpan." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open '%s'." -msgstr "Menyambungkan.." +msgstr "Tidak dapat membuka '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Error while parsing '%s'." -msgstr "Error saat menyimpan." +msgstr "Kesalahan saat melakukan parsing '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." msgstr "akhir dari berkas tak terduga '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Missing '%s' or its dependencies." -msgstr "Scene '%s' memiliki dependensi yang rusak:" +msgstr "'%s' hilang atau memiliki dependensi yang rusak." #: editor/editor_node.cpp -#, fuzzy msgid "Error while loading '%s'." -msgstr "Error saat menyimpan." +msgstr "Terjadi kesalahan saat memuat '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -1513,15 +1474,15 @@ msgstr "Membuat Thumbnail" #: editor/editor_node.cpp #, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?" +msgstr "Tindakan ini tidak bisa dilakukan tanpa \"tree root\"" #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Tidak dapat menyimpan scene. Dependensi (instance) mungkin tidak terpenuhi." +"Tidak dapat menyimpan scene. Dependensi (instance atau turunannya) mungkin " +"tidak terpenuhi." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1532,9 +1493,8 @@ msgid "Can't load MeshLibrary for merging!" msgstr "Tidak dapat memuat MeshLibrary untuk menggabungkan!" #: editor/editor_node.cpp -#, fuzzy msgid "Error saving MeshLibrary!" -msgstr "Error menyimpan MeshLibrary!" +msgstr "Terjadi kesalahan saat menyimpan MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" @@ -1650,15 +1610,14 @@ msgid "There is no defined scene to run." msgstr "Tidak ada definisi scene untuk dijalankan." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" "Tidak ada scene utama yang pernah didefinisikan, pilih satu?\n" -"Anda dapat mengubahnya nanti di akhir dalam \"Project Settings\" dibawah " -"kategori 'application'." +"Anda dapat mengubahnya nanti di \"Project Settings\" di bawah kategori " +"'application'." #: editor/editor_node.cpp msgid "" @@ -1707,9 +1666,8 @@ msgid "Quick Open Script.." msgstr "Buka Cepat Script.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Simpan sebuah File" +msgstr "Simpan & Tutup" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" @@ -1740,9 +1698,8 @@ msgid "Export Mesh Library" msgstr "Ekspor Mesh Library" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." -msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?" +msgstr "Tindakan ini tidak bisa dilakukan tanpa node dasar." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -1785,19 +1742,16 @@ msgid "Open Project Manager?" msgstr "Buka Project Manager?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Simpan sebuah File" +msgstr "Simpan & Keluar" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes to the following scene(s) before quitting?" -msgstr "Simpan perubahan saat ini sebelum keluar?" +msgstr "Simpan perubahan scene saat ini sebelum keluar?" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes the following scene(s) before opening Project Manager?" -msgstr "Simpan perubahan saat ini sebelum membuka Manajer Projek?" +msgstr "Simpan perubahan scene saat ini sebelum membuka Manajer Projek?" #: editor/editor_node.cpp msgid "" @@ -1823,9 +1777,8 @@ msgstr "" "Tidak dapat mencari bidang script untuk addon plugin pada: 'res://addons/%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unable to load addon script from path: '%s'." -msgstr "Error memuat font." +msgstr "Tidak bisa memuat script addon dari lokasi: '%s'." #: editor/editor_node.cpp msgid "" @@ -1887,17 +1840,14 @@ msgid "Switch Scene Tab" msgstr "Pilih Tab Scene" #: editor/editor_node.cpp -#, fuzzy msgid "%d more files or folders" msgstr "%d file atau folder lagi" #: editor/editor_node.cpp -#, fuzzy msgid "%d more folders" -msgstr "%d file lagi" +msgstr "%d folder lagi" #: editor/editor_node.cpp -#, fuzzy msgid "%d more files" msgstr "%d file lagi" @@ -1915,9 +1865,8 @@ msgid "Toggle distraction-free mode." msgstr "Mode Tanpa Gangguan" #: editor/editor_node.cpp -#, fuzzy msgid "Add a new scene." -msgstr "Tambah tracks baru." +msgstr "Tambah scene baru." #: editor/editor_node.cpp msgid "Scene" @@ -2117,9 +2066,8 @@ msgstr "" "jaringan filesystem." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "Edit" +msgstr "Editor" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2130,14 +2078,12 @@ msgid "Editor Layout" msgstr "Tata Letak Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle Fullscreen" msgstr "Mode Layar Penuh" #: editor/editor_node.cpp editor/project_export.cpp -#, fuzzy msgid "Manage Export Templates" -msgstr "Memuat Ekspor Template-template." +msgstr "Mengatur Templat Ekspor" #: editor/editor_node.cpp msgid "Help" @@ -2145,7 +2091,7 @@ msgstr "Bantuan" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Classes" -msgstr "" +msgstr "Kelas" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2160,7 +2106,7 @@ msgstr "Online Dokumentasi" #: editor/editor_node.cpp msgid "Q&A" -msgstr "" +msgstr "Tanya Jawab" #: editor/editor_node.cpp msgid "Issue Tracker" @@ -2184,11 +2130,11 @@ msgstr "Mainkan" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "" +msgstr "Hentikan sementara scene ini" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "" +msgstr "Hentikan Sementara Scene" #: editor/editor_node.cpp msgid "Stop the scene." @@ -2276,9 +2222,8 @@ msgid "Import" msgstr "Impor" #: editor/editor_node.cpp -#, fuzzy msgid "Node" -msgstr "Titik" +msgstr "" #: editor/editor_node.cpp msgid "FileSystem" @@ -2293,7 +2238,6 @@ msgid "Don't Save" msgstr "Jangan Simpan" #: editor/editor_node.cpp -#, fuzzy msgid "Import Templates From ZIP File" msgstr "Impor Templat dari Berkas ZIP" @@ -2306,7 +2250,6 @@ msgid "Export Library" msgstr "Ekspor Pustaka" #: editor/editor_node.cpp -#, fuzzy msgid "Merge With Existing" msgstr "Gabung dengan yang Ada" @@ -2319,12 +2262,10 @@ msgid "Open & Run a Script" msgstr "Buka & Jalankan Skrip" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Scene Turunan Baru.." +msgstr "Turunan Baru" #: editor/editor_node.cpp -#, fuzzy msgid "Load Errors" msgstr "Muat Galat" @@ -2333,12 +2274,10 @@ msgid "Select" msgstr "Pilih" #: editor/editor_node.cpp -#, fuzzy msgid "Open 2D Editor" msgstr "Buka Penyunting 2D" #: editor/editor_node.cpp -#, fuzzy msgid "Open 3D Editor" msgstr "Buka Penyunting 3D" @@ -2385,7 +2324,7 @@ msgstr "Pembuat:" #: editor/editor_plugin_settings.cpp msgid "Status:" -msgstr "" +msgstr "Status:" #: editor/editor_profiler.cpp msgid "Stop Profiling" @@ -2432,12 +2371,10 @@ msgid "Frame #:" msgstr "Bingkai #:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "Waktu:" +msgstr "Waktu" #: editor/editor_profiler.cpp -#, fuzzy msgid "Calls" msgstr "Panggil" @@ -2450,79 +2387,80 @@ msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Tidak ada preset ekspor yang bisa digunakan untuk platform ini.\n" +"Mohon tambahkan preset yang bisa digunakan di menu ekspor." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Tulis logika di dalam fungsi _run()." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Ada scene yang disunting." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Tidak bisa meng-instance script:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Apakah anda lupa dengan kata kunci 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Tidak bisa menjalankan script:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Apakah anda lupa dengan fungsi '_run' ?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "" +msgstr "Baku (Samakan seperti Penyunting saat ini)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "" +msgstr "Pilih node untuk diimpor" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Lokasi Scene:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Impor dari Node:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Unduh Ulang" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Copot Pemasangan" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(terpasang)" #: editor/export_template_manager.cpp msgid "Download" -msgstr "" +msgstr "Unduh" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(hilang)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Kondisi Saat Ini)" #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving mirrors, please wait.." -msgstr "Gangguan koneks, silakan coba lagi." +msgstr "Mendapatkan informasi cermin, silakan tunggu.." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Hapus templat versi '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2530,27 +2468,19 @@ msgstr "Tidak dapat membuka ekspor template-template zip." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "" - -#: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" +msgstr "Format version.txt tidak valid dalam berkas templat." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Berkas version.txt tidak ditemukan dalam templat." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "Gagal menyimpan atlas:" +msgstr "Kesalahan saat membuat lokasi untuk templat:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Extracting Export Templates" -msgstr "Memuat Ekspor Template-template." +msgstr "Mengekstrak Berkas Templat Ekspor" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2561,17 +2491,18 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Tautan unduh tidak ditemukan untuk versi ini. Unduhan langsung hanya " +"tersedia untuk versi rilis resmi." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Tidak bisa menyelesaikan." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect." -msgstr "Menyambungkan.." +msgstr "Tidak dapat terhubung." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2580,9 +2511,8 @@ msgstr "Tidak ada respon." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." -msgstr "Menguji" +msgstr "Permintaan Gagal." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2592,31 +2522,23 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" - -#: editor/export_template_manager.cpp -#, fuzzy -msgid "Can't write file." -msgstr "Tidak dapat membuat folder." +msgstr "Gagal:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Unduhan Selesai." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting url: " -msgstr "Gagal menyimpan atlas:" +msgstr "Kesalahan saat meminta url: " #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to Mirror.." msgstr "Menyambungkan.." #: editor/export_template_manager.cpp -#, fuzzy msgid "Disconnected" -msgstr "Tidak tersambung" +msgstr "Terputus" #: editor/export_template_manager.cpp msgid "Resolving" @@ -2628,160 +2550,146 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Connecting.." msgstr "Menyambungkan.." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" -msgstr "Menyambungkan.." +msgstr "Tidak dapat terhubung" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" -msgstr "Menghubungkan" +msgstr "Terhubung" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Requesting.." -msgstr "Menguji" +msgstr "Melakukan permintaan.." #: editor/export_template_manager.cpp -#, fuzzy msgid "Downloading" -msgstr "Error memuat:" +msgstr "Mengunduh" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connection Error" -msgstr "Menyambungkan.." +msgstr "Gangguan Koneksi" #: editor/export_template_manager.cpp -#, fuzzy msgid "SSL Handshake Error" -msgstr "Muat Galat" +msgstr "Kesalahan jabat tangan SSL" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Versi sekarang:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Versi Terpasang:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Memasang dari berkas" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "Hapus Pilihan" +msgstr "Hapus Templat" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select template file" -msgstr "Hapus file yang dipilih?" +msgstr "Pilih berkas templat" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" -msgstr "Memuat Ekspor Template-template." +msgstr "Manajer Templat Ekspor" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Hapus Pilihan" +msgstr "Unduh Templat" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "Pilih cermin dari daftar: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Tidak dapat membuka file_type_cache.cch untuk menulis, berkas cache tidak " +"disimpan!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" +"'%s' tidak bisa ditelusuri karena tidak bisa ditemukan dalam berkas sistem!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "Tampilkan item sebagai grid thumbnail" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "Tampilkan item sebagai daftar" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Status: Gagal mengimpor berkas. Mohon perbaiki berkas dan impor ulang secara " +"manual." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Tidak bisa memindah/mengubah nama aset root." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Tidak dapat memindahkan folder ke dalam dirinya sendiri." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Error memuat:" +msgstr "Galat saat memindahkan:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Error saat memuat:" +msgstr "Galat saat menggandakan berkas:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "Scene '%s' memiliki dependensi yang rusak:" +msgstr "Tidak bisa memperbarui dependensi:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "Nama masih kosong" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "Nama yang dimasukkan tidak valid" #: editor/filesystem_dock.cpp -#, fuzzy msgid "No name provided." -msgstr "Ubah Nama atau Pindahkan.." +msgstr "Nama masih kosong." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Name contains invalid characters." -msgstr "Karakter sah:" +msgstr "Nama mengandung karakter tidak valid." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Sudah ada nama berkas atau folder seperti itu." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Namai kembali Variabel" +msgstr "Mengubah nama berkas dengan:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "Mengubah nama folder dengan:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Gandakan" +msgstr "Menggandakan berkas:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "Gandakan" +msgstr "Menggandakan folder:" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2792,16 +2700,14 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Rename.." -msgstr "Ubah Nama atau Pindahkan.." +msgstr "Ubah Nama.." #: editor/filesystem_dock.cpp msgid "Move To.." -msgstr "Pindah Ke.." +msgstr "Pindahkan ke.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" msgstr "Buka Scene" @@ -2811,16 +2717,15 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Edit Dependencies.." -msgstr "" +msgstr "Sunting Dependensi.." #: editor/filesystem_dock.cpp msgid "View Owners.." -msgstr "" +msgstr "Tampilkan Pemilik Berkas.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate.." -msgstr "Gandakan" +msgstr "Gandakan.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2836,14 +2741,13 @@ msgstr "Pindai Ulang Berkas Sistem" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "Kondisikan status folder sebagai Favorit" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" +msgstr "Instance scene terpilih sebagai anak node saat ini." #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "Scanning Files,\n" "Please Wait.." @@ -2858,7 +2762,7 @@ msgstr "Pindahkan" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "" +msgstr "Ubah Nama" #: editor/groups_editor.cpp msgid "Add to Group" @@ -2866,112 +2770,110 @@ msgstr "Tambahkan ke Grup" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Hapus dari Grup" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Memperbaharui Scene" +msgstr "Impor sebagai Scene Tunggal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Impor dengan Animasi Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Impor dengan Material Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Impor dengan Objek Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Impor dengan Objek+Material Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Impor dengan Objek+Animasi Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Impor dengan Material+Animasi Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Impor dengan Objek+Material+Animasi Terpisah" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Impor sebagai Beberapa Scene" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Impor Beberapa Scene+Material" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Impor Scene" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene.." -msgstr "" +msgstr "Mengimpor scene.." #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Generating Lightmaps" -msgstr "" +msgstr "Sedang Membuat Pemetaan Cahaya" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Running Custom Script.." -msgstr "" +msgstr "Menjalankan Skrip Buatan.." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "Tidak dapat memuat skrip post-import:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" +msgstr "Skrip post-import rusak/tidak valid (cek konsol):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "" +msgstr "Kesalahan saat menjalankan skrip post-import:" #: editor/import/resource_importer_scene.cpp msgid "Saving.." -msgstr "" +msgstr "Menyimpan.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Jadikan Baku untuk '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Bersihkan Baku untuk '%s'" #: editor/import_dock.cpp -#, fuzzy msgid " Files" -msgstr "File:" +msgstr " Berkas" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" -msgstr "Mengimpor:" +msgstr "Impor sebagai:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." msgstr "" #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" -msgstr "Mengimpor ulang" +msgstr "Impor ulang" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -2979,97 +2881,105 @@ msgstr "" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Grup" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "Pilih sebuah node untuk menyunting Sinyal dan Grup." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp +#, fuzzy msgid "Create Poly" -msgstr "" +msgstr "Buat Bidang" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp +#, fuzzy msgid "Edit Poly" -msgstr "" +msgstr "Sunting Bidang" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Tambah Titik" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "" +msgstr "Sunting Bidang (Hapus Titik)" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "Remove Poly And Point" -msgstr "" +msgstr "Hapus Bidang dan Titik" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Buat bidang baru dari awal" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "" "Edit existing polygon:\n" "LMB: Move Point.\n" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Sunting bidang yang ada:\n" +"LMB: Pindahkan Titik.\n" +"Ctrl+LMB: Pecah Segmen.\n" +"RMB: Hapus Titik." #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" -msgstr "Hapus" +msgstr "Hapus Titik" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Toggle Autoplay" -msgstr "" +msgstr "Kondisikan Putar Otomatis" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nama Animasi Baru:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Animasi Baru" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Ubah Nama Animasi:" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Delete Animation?" -msgstr "Optimalkan Animasi" +msgstr "Hapus Animasi?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "" +msgstr "Hapus Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "KESALAHAN: Nama animasi tidak valid!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "KESALAHAN: Nama animasi sudah ada!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Ubah Nama Animasi" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Tambah Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" @@ -3081,95 +2991,106 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Muat Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Gandakan Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "" +msgstr "KESALAHAN: Tidak ada animasi untuk disalin!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "KESALAHAN: Tidak ada aset animasi di clipboard!" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Pasted Animation" -msgstr "" +msgstr "Animasi Ditempel" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Paste Animation" -msgstr "" +msgstr "Tempelkan Animasi" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "KESALAHAN: Tidak ada animasi untuk disunting!" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "Mainkan mundur animasi terpilih dari lokasi sekarang. (A)" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "Mainkan mundur animasi terpilih dari akhir. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Hentikan playback animasi. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "Mainkan animasi terpilih dari awal. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "Mainkan animasi terpilih dari posisi sekarang. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Posisi Animasi (dalam detik)." #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Skalakan playback animasi secara global untuk node ini." #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Create new animation in player." -msgstr "" +msgstr "Buat animasi baru dalam pemutar animasi." #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Load animation from disk." -msgstr "" +msgstr "Memuat animasi dari diska." #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Load an animation from disk." -msgstr "" +msgstr "Memuat animasi dari diska." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save the current animation" -msgstr "" +msgstr "Simpan animasi saat ini" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "" +msgstr "Tampilkan daftar animasi dalam pemutar animasi." #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Autoplay on Load" -msgstr "" +msgstr "Putar Otomatis saat Dimuat" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Edit Target Blend Times" -msgstr "" +msgstr "Sunting Target Waktu Blend" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "Perkakas Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Copy Animation" -msgstr "" +msgstr "Salin Animasi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" @@ -3199,19 +3120,19 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 langkah" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 langkah" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 langkah" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "Hanya yang berbeda" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" @@ -3223,18 +3144,18 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "Buat Animasi Baru" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "Nama Animasi:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" -msgstr "" +msgstr "Kesalahan!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" @@ -3242,7 +3163,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "Selanjutnya (Antrian Otomatis):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" @@ -3255,17 +3176,17 @@ msgstr "Animasi" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Nama baru:" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy msgid "Edit Filters" -msgstr "File:" +msgstr "Sunting Filter" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Skala:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" @@ -3285,11 +3206,11 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Mulai Ulang Otomatis:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "Mulai Ulang:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" @@ -3297,7 +3218,7 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "Mulai!" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3386,20 +3307,20 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." -msgstr "" +msgstr "Impor Animasi.." #: editor/plugins/animation_tree_editor_plugin.cpp +#, fuzzy msgid "Edit Node Filters" -msgstr "" +msgstr "Sunting Filter Node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Filters.." -msgstr "" +msgstr "Penyaring.." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Animasi" +msgstr "PohonAnimasi" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" @@ -3420,27 +3341,26 @@ msgid "Can't resolve hostname:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Connection error, please try again." -msgstr "Gangguan koneks, silakan coba lagi." +msgstr "Gangguan koneksi, silakan coba lagi." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Can't connect to host:" -msgstr "Sambungkan Ke Node:" +msgstr "Tidak bisa terhubung ke host:" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "No response from host:" -msgstr "" +msgstr "Tidak ada respon dari host:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, return code:" -msgstr "Format file yang diminta tidak diketahui:" +msgstr "Permintaan gagal, return code:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "Permintaan gagal, terlalu banyak pengalihan" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -3455,12 +3375,13 @@ msgid "Got:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Failed sha256 hash check" -msgstr "" +msgstr "Gagal mengecek hash sha256" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Gagal Mengunduh Aset:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Fetching:" @@ -3471,9 +3392,8 @@ msgid "Resolving.." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "Error menyimpan resource!" +msgstr "Kesalahan saat melakukan permintaan" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3485,27 +3405,27 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Unduhan Gagal" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Unduhan untuk aset ini sedang diproses!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" -msgstr "" +msgstr "pertama" #: editor/plugins/asset_library_editor_plugin.cpp msgid "prev" -msgstr "" +msgstr "sebelumnya" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" -msgstr "" +msgstr "selanjutnya" #: editor/plugins/asset_library_editor_plugin.cpp msgid "last" -msgstr "" +msgstr "terakhir" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -3515,7 +3435,7 @@ msgstr "Semua" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "" +msgstr "Pengaya" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" @@ -3548,14 +3468,18 @@ msgstr "Menguji" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "Aset-aset File ZIP" +msgstr "Berkas Aset ZIP" #: editor/plugins/baked_lightmap_editor_plugin.cpp +#, fuzzy 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 "" +"Tidak dapat menentukan lokasi penyimpanan untuk gambar lightmap\n" +"Simpan scene-mu (untuk gambar silakan simpan di direktori yang sama dengan " +"scene), atau tentukan lokasi penyimpanan dari properti BakedLightmap" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -3575,11 +3499,11 @@ msgstr "Ganti Radius Lampu" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "Pratinjau" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "Atur Snap" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3640,12 +3564,14 @@ msgid "Create new horizontal and vertical guides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Edit IK Chain" -msgstr "" +msgstr "Sunting Rantai IK" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Edit CanvasItem" -msgstr "" +msgstr "Sunting CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -3812,15 +3738,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -4006,8 +3940,9 @@ msgid "Toggle Curve Linear Tangent" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +#, fuzzy msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Tahan Shift untuk menyunting tangen kurva satu-persatu" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" @@ -4031,8 +3966,9 @@ msgid "Items" msgstr "" #: editor/plugins/item_list_editor_plugin.cpp +#, fuzzy msgid "Item List Editor" -msgstr "" +msgstr "Penyunting Daftar Item" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" @@ -4049,8 +3985,9 @@ msgid "Create a new polygon from scratch." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp +#, fuzzy msgid "Edit existing polygon:" -msgstr "" +msgstr "Sunting poligon yang ada:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "LMB: Move Point." @@ -4117,6 +4054,10 @@ 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 "" @@ -4572,8 +4513,9 @@ msgid "Transform UV Map" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#, fuzzy msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "Penyunting UV Poligon 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -4609,7 +4551,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Edit" +msgstr "Sunting" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -4658,6 +4600,23 @@ msgid "Resource clipboard is empty!" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +#, fuzzy +msgid "Open in Editor" +msgstr "Buka dalam Penyunting" + +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4837,7 +4796,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Debug with external editor" -msgstr "Editor Ketergantungan" +msgstr "Debug menggunakan penyunting eksternal" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4853,11 +4812,12 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Ke dokumen yang disunting sebelumnya." #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Go to next edited document." -msgstr "" +msgstr "Ke dokumen yang disunting selanjutnya." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4889,7 +4849,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgstr "Skrip built-in hanya bisa disunting ketika scene induknya dimuat" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -4949,10 +4909,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Pergi ke Baris" @@ -4966,6 +4922,10 @@ 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 "" @@ -5717,8 +5677,9 @@ msgid "Texture Region" msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp +#, fuzzy msgid "Texture Region Editor" -msgstr "" +msgstr "Penyunting Daerah Tekstur" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -5749,11 +5710,11 @@ msgstr "Hapus" #: editor/plugins/theme_editor_plugin.cpp msgid "Edit theme.." -msgstr "" +msgstr "Sunting tema.." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." -msgstr "" +msgstr "Menu untuk menyunting tema." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -5768,12 +5729,14 @@ msgid "Create Empty Template" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Create Empty Editor Template" -msgstr "" +msgstr "Buat Templat Penyunting Kosongan" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Create From Current Editor Theme" -msgstr "" +msgstr "Buat dari Tema Editor Saat Ini" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5796,6 +5759,14 @@ 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 "Has" msgstr "" @@ -5823,11 +5794,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -6099,10 +6065,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6124,12 +6086,14 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +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 "" +msgstr "Tidak dapat menyunting project.godot dalam lokasi proyek." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." @@ -6145,10 +6109,6 @@ msgid "Rename Project" msgstr "Projek Baru Permainan" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp #, fuzzy msgid "New Game Project" msgstr "Projek Baru Permainan" @@ -6158,27 +6118,24 @@ msgid "Import Existing Project" msgstr "Impor Projek yang Sudah Ada" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Impor" +msgstr "Impor & Ubah" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Buat Projek Baru" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Buat" +msgstr "Buat & Ubah" #: editor/project_manager.cpp msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Pasang" +msgstr "Pasang & Ubah" #: editor/project_manager.cpp msgid "Project Name:" @@ -6310,7 +6267,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6459,11 +6418,6 @@ msgid "Delete Item" msgstr "Hapus" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "Sambungkan Ke Node:" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6869,10 +6823,6 @@ msgstr "Resource" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6987,10 +6937,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Buka Cepat Script.." @@ -7436,33 +7382,47 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Hapus yang Dipilih" +msgid "Next Plane" +msgstr "Tab selanjutnya" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Duplikat Pilihan" +msgid "Previous Plane" +msgstr "Tab sebelumnya" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +#, fuzzy +msgid "Previous Floor" +msgstr "Tab sebelumnya" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "Tab sebelumnya" +msgid "GridMap Delete Selection" +msgstr "Hapus yang Dipilih" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Duplicate Selection" +msgstr "Duplikat Pilihan" + +#: 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 @@ -7544,6 +7504,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7576,6 +7540,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Buat Subskribsi" @@ -7593,6 +7561,10 @@ msgstr "Proyek" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8162,6 +8134,14 @@ 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 "" @@ -8256,12 +8236,22 @@ msgstr "" "bekerja." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Hanya satu WorldEnvironment yang diizinkan per scene (atau atur scene-scene " "yang diacu)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8358,6 +8348,21 @@ msgstr "Error memuat font." msgid "Invalid font size." msgstr "Ukuran font tidak sah." +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Sambungkan Ke Node:" + +#, fuzzy +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Format version.txt tidak valid dalam berkas templat. Revisi tidak valid." + +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "Tidak dapat membuat folder." + #~ msgid "Next" #~ msgstr "Berikutnya" diff --git a/editor/translations/is.po b/editor/translations/is.po index 3cccf15a6c..eb4f29126c 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -1372,6 +1372,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2365,12 +2369,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2423,10 +2421,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3590,15 +3584,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3887,6 +3889,10 @@ 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 "" @@ -4421,6 +4427,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4703,10 +4725,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4719,6 +4737,10 @@ 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 "" @@ -5532,6 +5554,14 @@ 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 "Has" msgstr "" @@ -5559,11 +5589,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5823,10 +5848,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5847,7 +5868,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5867,10 +5890,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6018,7 +6037,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6162,10 +6183,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6558,10 +6575,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6671,10 +6684,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7097,11 +7106,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7109,19 +7130,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7200,6 +7221,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7229,6 +7254,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7244,6 +7273,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7743,6 +7776,14 @@ 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 "" @@ -7820,10 +7861,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/it.po b/editor/translations/it.po index 86700a094b..85f4e665a1 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -9,16 +9,18 @@ # Elia Zanaboni <elia.zanaboni@gmail.com>, 2017. # Giovanni Solimeno (Crax97) <gsolimeno97@gmail.com>, 2017. # Marco Melorio <m.melorio@icloud.com>, 2017. -# Myself <whatamidoing.wt@gmail.com>, 2017. +# Matteo <matteo.guglielmetti@hotmail.it>, 2018. +# Myself <whatamidoing.wt@gmail.com>, 2017-2018. # RealAquilus <JamesHeller@live.it>, 2017. +# Samuele Zolfanelli <samdazel@gmail.com>, 2018. # Sean Bone <seanbone@zumguy.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-12-14 12:48+0000\n" -"Last-Translator: anonymous <>\n" +"PO-Revision-Date: 2018-05-02 10:38+0000\n" +"Last-Translator: Samuele Zolfanelli <samdazel@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -26,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -505,9 +507,8 @@ msgid "Connecting Signal:" msgstr "Connessione Segnali:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Connetti '%s' a '%s'" +msgstr "Disconnetti '%s' da '%s'" #: editor/connections_dialog.cpp msgid "Connect.." @@ -525,7 +526,7 @@ msgstr "Segnali" #: editor/create_dialog.cpp #, fuzzy msgid "Change %s Type" -msgstr "Cambia Tipo" +msgstr "Cambia Tipo di %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -533,9 +534,8 @@ msgid "Change" msgstr "Cambia" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Crea Nuovo" +msgstr "Crea Nuovo %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -646,9 +646,8 @@ msgstr "" "Rimuoverli comunque? (no undo)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "Impossibile rimouvere:\n" +msgstr "Impossibile rimuovere:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -761,7 +760,7 @@ msgstr "Donatori Oro" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Sponsors Argento" +msgstr "Donatori Argento" #: editor/editor_about.cpp msgid "Bronze Donors" @@ -842,9 +841,8 @@ msgid "Rename Audio Bus" msgstr "Rinomina Bus Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Imposta Bus Audio su Solo" +msgstr "Cambia il volume del Bus Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -909,7 +907,7 @@ msgstr "Elimina Effetto" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -1090,13 +1088,12 @@ msgid "Updating scene.." msgstr "Aggiornando la scena.." #: editor/editor_data.cpp -#, fuzzy msgid "[empty]" -msgstr "(vuoto)" +msgstr "[vuoto]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[non salvato]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1349,9 +1346,8 @@ msgid "Description" msgstr "Descrizione" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Tutorials" +msgstr "Tutorial online:" #: editor/editor_help.cpp #, fuzzy @@ -1360,7 +1356,7 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Al momento una descrizione per questo metodo non esiste. Aiutaci [color=" +"Al momento una descrizione per questa classe non esiste. Aiutaci [color=" "$color][url=$url]aggiungendone una[/url][/color]!" #: editor/editor_help.cpp @@ -1417,7 +1413,11 @@ msgstr "Rimuovi" #: editor/editor_log.cpp #, fuzzy msgid "Clear Output" -msgstr "Output" +msgstr "Pulisci output" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -2382,9 +2382,8 @@ msgid "Frame #:" msgstr "Frame #:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "Tempo:" +msgstr "Tempo" #: editor/editor_profiler.cpp #, fuzzy @@ -2485,21 +2484,13 @@ msgid "Invalid version.txt format inside templates." msgstr "Formato di version.txt invalido nelle templates." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Formato di version.txt invalido nelle templates. Revision non é un " -"identificatore valido." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Non é stato trovato version.txt all'interno di templates." #: editor/export_template_manager.cpp #, fuzzy msgid "Error creating path for templates:" -msgstr "Errore di creazione del percorso per le template:\n" +msgstr "Errore di creazione del percorso per i template:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -2534,9 +2525,8 @@ msgstr "Nessuna risposta." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." -msgstr "Rich. Fall." +msgstr "Richiesta fallita." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2549,10 +2539,6 @@ msgid "Failed:" msgstr "Fallito:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Impossibile scrivere il file." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download Completato." @@ -2584,7 +2570,7 @@ msgstr "Connettendo.." #: editor/export_template_manager.cpp #, fuzzy msgid "Can't Connect" -msgstr "Impossibile connettersi" +msgstr "Impossibile connettere." #: editor/export_template_manager.cpp msgid "Connected" @@ -2604,7 +2590,6 @@ msgid "Connection Error" msgstr "Errore di connessione" #: editor/export_template_manager.cpp -#, fuzzy msgid "SSL Handshake Error" msgstr "Errore nell'Handshake SSL" @@ -2663,8 +2648,7 @@ msgstr "Visualizza elementi come una lista" #, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"\n" -"Stato: Importazione file fallita. Si prega di sistemare il file e " +"Stato: Importazione file fallita. Si prega di riparare il file e " "reimportarlo manualmente." #: editor/filesystem_dock.cpp @@ -2674,7 +2658,7 @@ msgstr "Impossibile spostare/rinominare risorse root." #: editor/filesystem_dock.cpp #, fuzzy msgid "Cannot move a folder into itself." -msgstr "Impossibile spostare una cartella in se stessa.\n" +msgstr "Impossibile spostare una cartella in se stessa." #: editor/filesystem_dock.cpp #, fuzzy @@ -2682,14 +2666,12 @@ msgid "Error moving:" msgstr "Errore spostamento:\n" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Errore in caricamento:" +msgstr "Errore duplicazione:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "Impossibile aggiornare le dipendenze:\n" +msgstr "Impossibile aggiornare le dipendenze:" #: editor/filesystem_dock.cpp msgid "No name provided" @@ -2720,14 +2702,12 @@ msgid "Renaming folder:" msgstr "Rinomina cartella:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "duplica" +msgstr "Duplicando file:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "Rinomina cartella:" +msgstr "Duplicando cartella:" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2748,7 +2728,7 @@ msgstr "Sposta in.." #: editor/filesystem_dock.cpp #, fuzzy msgid "Open Scene(s)" -msgstr "Apri Scena" +msgstr "Apri Scena/e" #: editor/filesystem_dock.cpp msgid "Instance" @@ -2763,9 +2743,8 @@ msgid "View Owners.." msgstr "Vedi Proprietari.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate.." -msgstr "duplica" +msgstr "Duplica.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2862,14 +2841,13 @@ msgid "Importing Scene.." msgstr "Importando Scena.." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating Lightmaps" -msgstr "Trasferisci a Lightmap:" +msgstr "Generando Lightmap" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Generating for Mesh: " -msgstr "Generando AABB" +msgstr "Generando per Mesh: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." @@ -3118,15 +3096,16 @@ msgstr "Copia Animazione" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" -msgstr "" +msgstr "Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" msgstr "Attiva Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Directions" -msgstr "" +msgstr "Direzioni" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" @@ -3147,12 +3126,12 @@ msgstr "1 Passo" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "2 steps" -msgstr "2 Passi" +msgstr "2 passi" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "3 steps" -msgstr "3 Passi" +msgstr "3 passi" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" @@ -3160,11 +3139,11 @@ msgstr "Solo Differenze" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Forza Modulazione Bianca" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Includi Gizmo (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3494,21 +3473,28 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Impossibile determinare un percorso di salvataggio per le immagini di " +"lightmap.\n" +"Salva la scena (per salvare le immagini nella stessa directory), o scegli un " +"percorso di salvataggio nelle proprietà di 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 "" +"Nessuna mesh da preprocessare. Assicurarsi che contengano un canale UV2 e " +"che la spunta 'Bake Light' sia abilitata." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Tentativo di creazione delle immagini di lightmap fallito, assicurarsi che " +"il percorso dei file sia scrivibile." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Trasferisci a Lightmap:" +msgstr "Preprocessa Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3756,19 +3742,29 @@ msgstr "Mostra Griglia" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show helpers" +msgid "Show Helpers" msgstr "Mostra Ossa" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show rulers" +msgid "Show Rulers" msgstr "Mostra Ossa" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Mostra guide" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Visualizza Origine" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Vista" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centra Selezione" @@ -4072,6 +4068,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "La mesh non ha superficie dalla quale creare un'outline!" #: 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 "Impossiblile creare outline!" @@ -4624,6 +4624,22 @@ msgid "Resource clipboard is empty!" msgstr "Clipboard risorse vuota!" #: 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" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Istanza:" + +#: 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 +msgid "Type:" +msgstr "Tipo:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carica Risorsa" @@ -4923,10 +4939,6 @@ msgid "Toggle Comment" msgstr "Cambia a Commento" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clona Sotto" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Svolgere Linea" @@ -4941,6 +4953,10 @@ msgid "Unfold All Lines" msgstr "Svolgere Tutte le Linee" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clona Sotto" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Completa Simbolo" @@ -5772,6 +5788,16 @@ msgid "Checked Item" msgstr "Checked Item" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Aggiungi Elemento" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Checked Item" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Ha" @@ -5799,11 +5825,6 @@ msgstr "Tab 2" msgid "Tab 3" msgstr "Tab 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipo:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipo Dato:" @@ -6082,11 +6103,6 @@ msgid "Please choose an empty folder." msgstr "Si prega di esportare al di fuori della cartella del progetto!" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Per favore seleziona una cartella che non contiene un file 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Progetto Importato" @@ -6109,7 +6125,9 @@ msgstr "Percorso di progetto invalido (cambiato qualcosa?)." #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "Impossibile creare project.godot nel percorso di progetto." #: editor/project_manager.cpp @@ -6131,11 +6149,6 @@ msgid "Rename Project" msgstr "Progetto Senza Nome" #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "Impossibile creare project.godot nel percorso di progetto." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Nuovo Progetto di Gioco" @@ -6304,8 +6317,10 @@ msgid "Mouse Button" msgstr "Pulsante Mouse" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Azione invalida (va bene tutto a parte '/' o ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6453,11 +6468,6 @@ msgstr "Elimina Input" #: editor/project_settings_editor.cpp #, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "Impossibile connetersi all'host:" - -#: editor/project_settings_editor.cpp -#, fuzzy msgid "Already existing" msgstr "Attiva Persistenza" @@ -6866,10 +6876,6 @@ msgstr "Sub-Risorse:" msgid "Clear Inheritance" msgstr "Liberare ereditarietà" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Apri nell Editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Elimina Nodo(i)" @@ -6991,10 +6997,6 @@ msgstr "" "Fai click per mostrare il dock gruppi." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Istanza:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Apri script" @@ -7436,13 +7438,26 @@ msgstr "L'oggetto non può fornire una lunghezza." #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Elimina selezionati" +msgid "Next Plane" +msgstr "Scheda successiva" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Duplica Selezione" +msgid "Previous Plane" +msgstr "Scheda precedente" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Prossimo Piano" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Floor" +msgstr "Scheda precedente" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" @@ -7450,22 +7465,23 @@ msgstr "Piano:" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Grid Map" -msgstr "Snap Griglia" +msgid "GridMap Delete Selection" +msgstr "Elimina selezionati" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Snap View" -msgstr "Vista dall'Alto" +msgid "GridMap Duplicate Selection" +msgstr "Duplica Selezione" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "Scheda precedente" +msgid "Grid Map" +msgstr "Snap Griglia" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Prossimo Piano" +#, fuzzy +msgid "Snap View" +msgstr "Vista dall'Alto" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7559,6 +7575,10 @@ msgstr "Impostazioni Snap" msgid "Pick Distance:" msgstr "Istanza:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -7593,6 +7613,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Crea Outline" @@ -7612,6 +7636,10 @@ msgstr "Progetto" msgid "Warnings" msgstr "Avvertimento" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7816,7 +7844,7 @@ msgstr "Iteratore" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "Mentre" +msgstr "While" #: modules/visual_script/visual_script_editor.cpp msgid "Return" @@ -8194,6 +8222,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin necessita di un nodo figlio ARVRCamera" #: 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 #, fuzzy msgid "Plotting Meshes: " msgstr "Bliting Immagini" @@ -8294,12 +8330,22 @@ msgstr "" "poter funzionare." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Solamente un WorldEnvironment è consentito per scena (o insieme di scene " "istanziate)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8399,6 +8445,36 @@ msgstr "Errore caricamento font." msgid "Invalid font size." msgstr "Dimensione font Invalida." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Azione invalida (va bene tutto a parte '/' o ':')." + +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Impossibile connetersi all'host:" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Formato di version.txt invalido nelle templates. Revision non é un " +#~ "identificatore valido." + +#~ msgid "Can't write file." +#~ msgstr "Impossibile scrivere il file." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Per favore seleziona una cartella che non contiene un file 'project." +#~ "godot'." + +#, fuzzy +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Impossibile creare project.godot nel percorso di progetto." + +#, fuzzy +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Impossibile creare project.godot nel percorso di progetto." + #~ msgid "Next" #~ msgstr "Successivo" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 061a3909e9..e05530b258 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -12,20 +12,20 @@ # Lexi Grafen <shfeedly@gmail.com>, 2017. # NoahDigital <taku_58@hotmail.com>, 2017. # Tetsuji Ochiai <ochiaixp@gmail.com>, 2017. -# Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>, 2017. +# Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>, 2017-2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-06 13:19+0000\n" -"Last-Translator: NoahDigital <taku_58@hotmail.com>\n" +"PO-Revision-Date: 2018-04-02 08:38+0000\n" +"Last-Translator: Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -468,7 +468,6 @@ msgstr "追加" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp -#, fuzzy msgid "Remove" msgstr "削除" @@ -1554,6 +1553,10 @@ msgstr "削除" msgid "Clear Output" msgstr "出力" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Error saving resource!" @@ -2746,14 +2749,6 @@ msgid "Invalid version.txt format inside templates." msgstr "テンプレート内のversion.txt フォーマットが不正です." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"テンプレート内のversion.txt フォーマットが不正です. Revisionは有効な識別子で" -"はありません." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "テンプレート内にversion.txtが見つかりません." @@ -2814,10 +2809,6 @@ msgid "Failed:" msgstr "失敗:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "ファイルに書き込みできませんでした." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "ダウンロード完了." @@ -4145,21 +4136,31 @@ msgstr "グリッドを表示" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show helpers" +msgid "Show Helpers" msgstr "ボーンを表示する" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show rulers" +msgid "Show Rulers" msgstr "ボーンを表示する" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Show guides" +msgid "Show Guides" msgstr "ボーンを表示する" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Show Origin" +msgstr "原点を見る" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 ビューポート" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Center Selection" msgstr "選択対象を中央に" @@ -4479,6 +4480,10 @@ 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 #, fuzzy msgid "Could not create outline!" msgstr "アウトラインを生成できませんでした!" @@ -5106,6 +5111,23 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +#, fuzzy +msgid "Type:" +msgstr "型(Type):" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "リソースを読み込む" @@ -5418,11 +5440,6 @@ msgstr "コメントを切り替える" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Clone Down" -msgstr "複製してダウンロード" - -#: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" msgstr "行に移動" @@ -5436,6 +5453,11 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy +msgid "Clone Down" +msgstr "複製してダウンロード" + +#: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Complete Symbol" msgstr "記号すべて" @@ -6317,6 +6339,16 @@ msgid "Checked Item" msgstr "チェック済みアイテム" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "アイテムを追加" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "チェック済みアイテム" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -6344,12 +6376,6 @@ msgstr "タブ2" msgid "Tab 3" msgstr "タブ3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -#, fuzzy -msgid "Type:" -msgstr "型(Type):" - #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Data Type:" @@ -6643,10 +6669,6 @@ msgid "Please choose an empty folder." msgstr "'project.godot' ファイルを選択してください." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "'project.godot'がないフォルダを選択してください." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "インポートされたプロジェクト" @@ -6670,7 +6692,9 @@ msgstr "不正なプロジェクトのパス(何か変えましたか?)" #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "project.godotをプロジェクトパスに生成できませんでした" #: editor/project_manager.cpp @@ -6694,11 +6718,6 @@ msgid "Rename Project" msgstr "名無しのプロジェクト" #: editor/project_manager.cpp -#, fuzzy -msgid "Couldn't get project.godot in the project path." -msgstr "project.godotをプロジェクトパスに生成できませんでした" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "新しいゲームプロジェクト" @@ -6846,6 +6865,8 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" +"あなたは現在どのプロジェクトも持っていません。\n" +"アセットライブラリで公式のサンプルプロジェクトを探しましょうか?" #: editor/project_settings_editor.cpp #, fuzzy @@ -6867,8 +6888,10 @@ msgid "Mouse Button" msgstr "マウスボタン" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "不正なアクション( '/' と':'は不可です)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7024,11 +7047,6 @@ msgstr "入力を消去" #: editor/project_settings_editor.cpp #, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "ホストに接続できません:" - -#: editor/project_settings_editor.cpp -#, fuzzy msgid "Already existing" msgstr "アクション'%s'は既にあります!" @@ -7471,10 +7489,6 @@ msgstr "サブリソース:" msgid "Clear Inheritance" msgstr "継承をクリアする" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "エディタで開く" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ノードを消去" @@ -7610,10 +7624,6 @@ msgstr "" "クリックしてグループのドックを表示してください." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "インスタンス:" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "フォルダを作成" @@ -8080,13 +8090,25 @@ msgstr "オブジェクトに長さがありません." #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "選択範囲を消去" +msgid "Next Plane" +msgstr "次のタブ" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "選択範囲を複製" +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:" @@ -8094,21 +8116,23 @@ msgstr "床面:" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Grid Map" -msgstr "グリッドSnap" +msgid "GridMap Delete Selection" +msgstr "選択範囲を消去" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Snap View" -msgstr "上面図" +msgid "GridMap Duplicate Selection" +msgstr "選択範囲を複製" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "前の床面" +#, fuzzy +msgid "Grid Map" +msgstr "グリッドSnap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "次の床面" +#, fuzzy +msgid "Snap View" +msgstr "上面図" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -8196,6 +8220,10 @@ msgstr "Snapの設定" msgid "Pick Distance:" msgstr "インスタンス:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -8230,6 +8258,10 @@ msgid "Mono" msgstr "モノラル音声" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "アウトラインを生成" @@ -8248,6 +8280,10 @@ msgstr "プロジェクト" msgid "Warnings" msgstr "警告" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp #, fuzzy msgid "" @@ -8865,6 +8901,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROriginはARVRCamera子ノードが必要です" #: 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 #, fuzzy msgid "Plotting Meshes: " msgstr "イメージを配置(Blit)" @@ -8963,6 +9007,10 @@ msgstr "" "す。" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp #, fuzzy msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." @@ -8970,6 +9018,12 @@ msgstr "" "1 つだけの WorldEnvironment は、シーン (またはインスタンス化されたシーンの" "セット) ごとに許可されます。" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -9070,6 +9124,34 @@ msgstr "フォント読み込みエラー。" msgid "Invalid font size." msgstr "無効なフォント サイズです。" +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "不正なアクション( '/' と':'は不可です)." + +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "ホストに接続できません:" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "テンプレート内のversion.txt フォーマットが不正です. Revisionは有効な識別子" +#~ "ではありません." + +#~ msgid "Can't write file." +#~ msgstr "ファイルに書き込みできませんでした." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "'project.godot'がないフォルダを選択してください." + +#, fuzzy +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "project.godotをプロジェクトパスに生成できませんでした" + +#, fuzzy +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "project.godotをプロジェクトパスに生成できませんでした" + #~ msgid "Next" #~ msgstr "次" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 29518c9797..c3fcfbbb72 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -3,17 +3,19 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # -# 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2018. # Ch <ccwpc@hanmail.net>, 2017. # paijai 송 (fivejobi) <xotjq237@gmail.com>, 2018. +# Sun Kim <perplexingsun@gmail.com>, 2018. # TheRedPlanet <junmo.moon8@gmail.com>, 2018. +# Xavier Cho <mysticfallband@gmail.com>, 2018. +# 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-01-20 17:48+0000\n" -"Last-Translator: 박한얼 <volzhs@gmail.com>\n" +"PO-Revision-Date: 2018-04-18 15:39+0000\n" +"Last-Translator: Sun Kim <perplexingsun@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -21,7 +23,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -37,7 +39,7 @@ msgstr "애니메이션 키프레임 시간 변경" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "애니메이션 변화 변경" +msgstr "애니메이션 트랜지션 변경" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -163,7 +165,7 @@ msgstr "비선형" #: editor/animation_editor.cpp msgid "In" -msgstr "안" +msgstr "In" #: editor/animation_editor.cpp msgid "Out" @@ -894,7 +896,7 @@ msgstr "이펙트 삭제" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "음성" +msgstr "오디오" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -1396,6 +1398,10 @@ msgstr "지우기" msgid "Clear Output" msgstr "출력 지우기" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "리소스 저장 중 에러!" @@ -2098,7 +2104,7 @@ msgstr "프로젝트 실행." #: editor/editor_node.cpp msgid "Play" -msgstr "재성" +msgstr "실행" #: editor/editor_node.cpp msgid "Pause the scene" @@ -2443,14 +2449,6 @@ msgid "Invalid version.txt format inside templates." msgstr "템플릿 안에 version.txt가 유효하지 않은 형식입니다." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"템플릿에 version.txt 형식이 유효하지 않습니다. 리비전은 유효한 식별자가 아닙" -"니다." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "템플릿에 version.txt를 찾을 수 없습니다." @@ -2505,10 +2503,6 @@ msgid "Failed:" msgstr "실패:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "파일에 쓸 수 없습니다." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "다운로드 완료." @@ -3686,18 +3680,28 @@ msgid "Show Grid" msgstr "그리드 보기" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "헬퍼 보기" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "자 보기" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "가이드 보기" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "원점 보기" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1개 뷰포트" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "선택 항목 화면 중앙에 표시" @@ -3987,6 +3991,10 @@ 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 "외곽선을 만들수 없습니다!" @@ -4521,6 +4529,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "타입:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "리소스 로드" @@ -4602,7 +4626,7 @@ msgstr "파일" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "새로운" +msgstr "새 파일" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -4805,10 +4829,6 @@ msgid "Toggle Comment" msgstr "주석 토글" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "아래로 복제" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "라인 펼치기/접기" @@ -4821,6 +4841,10 @@ 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 "자동 완성" @@ -5637,6 +5661,16 @@ msgid "Checked Item" msgstr "항목 확인됨" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "항목 추가" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "항목 확인됨" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "가진다" @@ -5664,11 +5698,6 @@ msgstr "탭 2" msgid "Tab 3" msgstr "탭 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "타입:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "데이타 타입:" @@ -5859,7 +5888,7 @@ msgstr "프로젝트의 모든 리소스 내보내기" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "선택된 리소스 내보내기 (종속된 리소스 포함)" +msgstr "선택된 씬 내보내기 (종속된 리소스 포함)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" @@ -5932,10 +5961,6 @@ msgid "Please choose an empty folder." msgstr "비어있는 폴더를 선택하세요." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "'project.godot' 파일이 없는 폴더를 선택 하십시오." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "가져온 프로젝트" @@ -5956,8 +5981,12 @@ msgid "Invalid project path (changed anything?)." msgstr "유효하지 않은 프로젝트 경로 (뭔가 변경하신 거라도?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "프로젝트 경로에 project.godot 파일을 찾을 수 없습니다." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"프로젝트 경로로 부터 project.godot 파일을 로드 할 수 없습니다 (에러 %d). 존재" +"하지 않거나 손상되었을 수 있습니다." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -5976,10 +6005,6 @@ msgid "Rename Project" msgstr "프로젝트 이름 변경" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "프로젝트 경로에 project.godot 파일을 찾을 수 없습니다." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "새 게임 프로젝트" @@ -6137,8 +6162,10 @@ msgid "Mouse Button" msgstr "마우스 버튼" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "유효하지 않은 액션 ('/' 또는 ':' 문자 사용 불가)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6281,10 +6308,6 @@ msgid "Delete Item" msgstr "아이템 삭제" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "'/' 또는 ':' 문자를 포함할 수 없음" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "이미 존재함" @@ -6678,10 +6701,6 @@ msgstr "서브-리소스" msgid "Clear Inheritance" msgstr "상속 지우기" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "에디터에서 열기" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "노드 삭제" @@ -6798,10 +6817,6 @@ msgstr "" "클릭해서 그룹 독을 보십시오." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "인스턴스:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "스크립트 열기" @@ -6811,15 +6826,15 @@ msgid "" "Click to unlock" msgstr "" "노드가 잠겨있습니다.\n" -"클릭해서 잠금해제 하십시오" +"클릭하면 잠금 해제됩니다" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" -"자식들을 선택 할 수 없습니다.\n" -"클릭해서 선택 할 수 있게 하십시오" +"자식들을 선택할 수 없습니다.\n" +"클릭하면 선택할 수 있게 됩니다" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7231,32 +7246,44 @@ msgid "Object can't provide a length." msgstr "오브젝트는 길이를 제공할 수 없습니다." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "그리드맵 선택 삭제" +msgid "Next Plane" +msgstr "다음 평면" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "그리드맵 선택 복제" +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 "Grid Map" -msgstr "그리드맵" +msgid "GridMap Delete Selection" +msgstr "그리드맵 선택 삭제" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "스냅 뷰" +msgid "GridMap Duplicate Selection" +msgstr "그리드맵 선택 복제" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "이전 층" +msgid "Grid Map" +msgstr "그리드맵" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "다음 층" +msgid "Snap View" +msgstr "스냅 뷰" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7334,6 +7361,10 @@ msgstr "그리드맵 설정" msgid "Pick Distance:" msgstr "거리 선택:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "솔루션 생성 중..." @@ -7363,6 +7394,10 @@ msgid "Mono" msgstr "모노" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "C# 지원에 대하여" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "C# 솔루션 만들기" @@ -7378,6 +7413,10 @@ msgstr "프로젝트 빌드" msgid "Warnings" msgstr "경고" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "내부 예외 스택 추적의 끝" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7408,7 +7447,8 @@ msgstr "유효하지 않은 시퀀스 출력을 반환한 노드: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "시퀀스 비트를 발견했지만 스택안의 노드에는 없습니다, 버그를 기록!" +msgstr "" +"시퀀스 비트를 발견했지만 스택안의 노드에는 없습니다, 버그를 제보하세요!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -7919,6 +7959,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin은 ARVRCamera 자식 노드를 요구 함" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(남은 시간: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "메시 구분 중: " @@ -8015,10 +8063,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Path 속성은 유효한 Spatial 노드를 가리켜야 합니다." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "씬마다 WorldEnvironment가 단 하나만 허용됩니다." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8114,6 +8172,31 @@ msgstr "폰트 로딩 에러." msgid "Invalid font size." msgstr "유효하지 않은 폰트 크기." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "유효하지 않은 액션 ('/' 또는 ':' 문자 사용 불가)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "'/' 또는 ':' 문자를 포함할 수 없음" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "템플릿에 version.txt 형식이 유효하지 않습니다. 리비전은 유효한 식별자가 아" +#~ "닙니다." + +#~ msgid "Can't write file." +#~ msgstr "파일에 쓸 수 없습니다." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "'project.godot' 파일이 없는 폴더를 선택 하십시오." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "프로젝트 경로에 project.godot 파일을 찾을 수 없습니다." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "프로젝트 경로에 project.godot 파일을 찾을 수 없습니다." + #~ msgid "Next" #~ msgstr "다음" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 5e5400d1e7..6504e570f7 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -1380,6 +1380,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2374,12 +2378,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Šablonuose nerasta version.txt failo." @@ -2433,10 +2431,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3608,15 +3602,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3905,6 +3907,10 @@ 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 "" @@ -4439,6 +4445,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4721,10 +4743,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4737,6 +4755,10 @@ 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 "" @@ -5551,6 +5573,14 @@ 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 "Has" msgstr "" @@ -5578,11 +5608,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5842,10 +5867,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5866,7 +5887,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5886,10 +5909,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6040,7 +6059,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6184,10 +6205,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6580,10 +6597,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6693,10 +6706,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7119,11 +7128,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7131,19 +7152,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7222,6 +7243,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7251,6 +7276,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7266,6 +7295,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7765,6 +7798,14 @@ 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 "" @@ -7844,10 +7885,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 623898fcb5..17123dc8fc 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -3,7 +3,7 @@ # Copyright (c) 2014-2018 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. +# Allan Nordhøy <epost@anotheragency.no>, 2017-2018. # Anonymous <GentleSaucepan@protonmail.com>, 2017. # flesk <eivindkn@gmail.com>, 2017. # Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>, 2016. @@ -14,15 +14,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-20 08:55+0000\n" -"Last-Translator: NicolaiF <nico-fre@hotmail.com>\n" +"PO-Revision-Date: 2018-03-22 03:38+0000\n" +"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-" "engine/godot/nb/>\n" "Language: nb\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 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1219,15 +1219,15 @@ msgstr "Veksle modus" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Fokuser Bane" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "Flytt favoritt oppover" +msgstr "Flytt Favoritt Oppover" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "Flytt favoritt nedover" +msgstr "Flytt Favoritt Nedover" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1235,7 +1235,7 @@ msgstr "Gå til overnevnt mappe" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "Mapper og filer:" +msgstr "Mapper og Filer:" #: editor/editor_file_dialog.cpp msgid "Preview:" @@ -1252,7 +1252,7 @@ msgstr "Må ha en gyldig filutvidelse." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "SkannKilder" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1414,6 +1414,10 @@ msgstr "Tøm" msgid "Clear Output" msgstr "Output" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Feil ved lagring av ressurs!" @@ -1640,6 +1644,9 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Valgte scene '%s' er ikke en scenefil, velg en gyldig én?\n" +"Du kan endre dette senere i \"Prosjekt Instillinger\" under 'applikasjon' " +"kategorien." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." @@ -1655,7 +1662,7 @@ msgstr "Åpne Scene" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "" +msgstr "Åpne Base Scene" #: editor/editor_node.cpp msgid "Quick Open Scene.." @@ -1787,6 +1794,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" +"Kunne ikke laste tillegsskript fra sti: '%s' Script er ikke i verktøymodus." #: editor/editor_node.cpp msgid "" @@ -2002,6 +2010,11 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" +"Når dette alternativet er aktivert, eksportering eller distribuering vil " +"produsere en kjørbar fil.\n" +"Filstystemet vil få prosjektet fra redigerinsverktøyet over nettverket. \n" +"På Android, distribusjon du vil bruke USB-kabelen for raskere ytelse. Dette " +"alternativet gjør testing for spill med et stort fotavtrykk raskere." #: editor/editor_node.cpp #, fuzzy @@ -2068,11 +2081,11 @@ msgstr "Redigeringsverktøy" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "" +msgstr "Redigeringsverktøy-instillinger" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "" +msgstr "Redigeringsverktøy Layout" #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2189,7 +2202,7 @@ msgstr "Last inn en eksisterende ressurs fra disk og rediger den." #: editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "" +msgstr "Lagre den nylige redigerte ressursen." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Save As.." @@ -2477,13 +2490,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Ugyldig version.txt format i mal." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Ugyldig version.txt format i mal. Revisjon er ikke en gyldig identifikator." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Ingen version.txt funnet i mal." @@ -2494,7 +2500,7 @@ msgstr "Feil ved laging av sti for mal:\n" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "" +msgstr "Ekstraherer Eksport Mal" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2542,10 +2548,6 @@ msgid "Failed:" msgstr "Feilet:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Kan ikke skrive fil." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Nedlastning fullført." @@ -2862,7 +2864,7 @@ msgstr "" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Genererer for Maske: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." @@ -3512,7 +3514,7 @@ msgstr "" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." -msgstr "" +msgstr "Laging av lysmapbilder feilet, forsikre om at stien er skrivbar." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" @@ -3758,19 +3760,29 @@ msgid "Show Grid" msgstr "Vis Rutenett" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Vis hjelpere" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Vis linjaler" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Vis veiledere" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Show Origin" +msgstr "Vis Rutenett" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "Vis hjelpere" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Center Selection" msgstr "Plasser Utvalg I Midten" @@ -3793,7 +3805,7 @@ msgstr "Sett inn Nøkkel" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Sett inn Nøkkel (Eksisterende Spor)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -3829,11 +3841,11 @@ msgstr "Legger til %s.." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "Ok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Kan ikke instansiere flere noder uten rot." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -4062,6 +4074,10 @@ 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 "Kunne ikke lage omriss!" @@ -4233,7 +4249,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "" +msgstr "Regner ut rutenettstørrelse…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." @@ -4294,7 +4310,7 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "Feil ved innlasting av bilde:" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." @@ -4380,7 +4396,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "Overflatepunkter" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" @@ -4492,11 +4508,11 @@ msgstr "Fjern Funksjon" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "Splitt Sti" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Fjern Stipunkt" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4574,7 +4590,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "" +msgstr "Aktiver Snap" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" @@ -4599,12 +4615,28 @@ msgstr "Fjern Ressurs" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "" +msgstr "Ressurs-utklippstavle er tom!" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Åpne i Redigeringsverktøy" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instans:" + +#: 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 +msgid "Type:" +msgstr "Type:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "" +msgstr "Last Ressurs" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4675,35 +4707,33 @@ msgstr "Flytt Ned" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "" +msgstr "Neste skript" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "Forrige skript" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Fil" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Ny" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Lagre Alle" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Kopier Sti" +msgstr "Kopier Skript-Sti" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" msgstr "Vis I Filutforsker" @@ -4717,35 +4747,35 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Gjeninnlast drakt" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Lagre drakt" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Lagre drakt som" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Lukk Dokumentasjon" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "" +msgstr "Lukk Alle" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "" +msgstr "Lukk Andre Faner" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Kjør" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "" +msgstr "Veksle skriptpanel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4759,15 +4789,15 @@ msgstr "Finn neste" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "" +msgstr "Hopp Over" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "" +msgstr "Tre inn i" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "Brekk" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp @@ -4776,35 +4806,35 @@ msgstr "Fortsett" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Hold feilretteren åpen" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" -msgstr "" +msgstr "Feilrett med ekstern behandler" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" +msgstr "Åpne Godots nettbaserte dokumentasjon" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "" +msgstr "Søk i klasse-hierarkiet." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "" +msgstr "Søk i referanse-dokumentasjonen." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Gå til tidligere redigert dokument." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "Gå til neste redigerte dokument." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "" +msgstr "Forkast" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -4818,15 +4848,15 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "Gjeninnlat" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "Lagre på nytt" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "" +msgstr "Feilretter" #: editor/plugins/script_editor_plugin.cpp msgid "" @@ -4847,15 +4877,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Store versaler" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Små bokstaver" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Store bokstaver" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4871,7 +4901,7 @@ msgstr "Lim inn" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "" +msgstr "Velg Alle" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -4880,19 +4910,15 @@ msgstr "Slett Valgte" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "" +msgstr "Innrykk Venstre" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "" +msgstr "Innrykk Høyre" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" +msgstr "Veksle kommentar" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -4901,11 +4927,15 @@ msgstr "Slett Valgte" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "" +msgstr "Fold sammen alle linjer" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "" +msgstr "Brett ut alle linjer" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Klon nedover" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" @@ -4925,7 +4955,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "" +msgstr "Automatisk innrykk" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -4946,11 +4976,11 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Convert To Uppercase" -msgstr "" +msgstr "Konverter til store versaler" #: editor/plugins/script_text_editor.cpp msgid "Convert To Lowercase" -msgstr "" +msgstr "Konverter til små versaler" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5046,7 +5076,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" -msgstr "" +msgstr "Endre Kommentar" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" @@ -5130,15 +5160,15 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "" +msgstr "Skalerer: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "" +msgstr "Oversetter: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "" +msgstr "Roterer %s grader." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." @@ -5163,7 +5193,7 @@ msgstr "Forandre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" -msgstr "" +msgstr "Overflateendringer" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -5195,31 +5225,31 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" -msgstr "" +msgstr "Venstre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "Høyrevisning." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" -msgstr "" +msgstr "Høyre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "Frontvisning." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" -msgstr "" +msgstr "Front" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "Bakvisning." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" -msgstr "" +msgstr "Bak" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" @@ -5263,15 +5293,15 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "Vis Informasjon" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" -msgstr "" +msgstr "Vis FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" -msgstr "" +msgstr "Halver Oppløsning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" @@ -5352,27 +5382,27 @@ msgstr "Snap til veiledere" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "" +msgstr "Bunnvisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "" +msgstr "Toppvisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "" +msgstr "Bakvisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "" +msgstr "Frontvisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "" +msgstr "Venstrevisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "" +msgstr "Høyrevisning" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" @@ -5558,15 +5588,15 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(tom)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animasjoner" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Hastighet (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -5727,6 +5757,15 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Legg til Element" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -5736,7 +5775,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "" +msgstr "Innstillinger" #: editor/plugins/theme_editor_plugin.cpp msgid "Have,Many,Several,Options!" @@ -5744,20 +5783,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Fane 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Fane 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" - -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" +msgstr "Fane 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" @@ -5765,7 +5799,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Ikon" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" @@ -5773,15 +5807,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "" +msgstr "Font" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Farge" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "" +msgstr "Tema" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -5822,11 +5856,11 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "" +msgstr "Speil X" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "" +msgstr "Speil Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5838,19 +5872,19 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "Roter 0 grader" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "Roter 90 grader" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "Roter 180 grader" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "Roter 270 grader" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" @@ -5912,11 +5946,11 @@ msgstr "" #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "" +msgstr "Avbryt" #: editor/project_export.cpp msgid "Runnable" -msgstr "" +msgstr "Kjørbar" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" @@ -5940,19 +5974,19 @@ msgstr "" #: editor/project_export.cpp msgid "Resources" -msgstr "" +msgstr "Ressurser" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "" +msgstr "Eksporter alle ressurser til prosjektet" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "" +msgstr "Eksporter valgte scener (og avhengigheter)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "" +msgstr "Exporter valgte ressurs (og avhengigheter)" #: editor/project_export.cpp msgid "Export Mode:" @@ -6021,10 +6055,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6046,45 +6076,44 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" +"Kunne ikke laste project.godot i prosjekt sti (error %d). Den kan være " +"manglet eller korruptert." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "" +msgstr "Kunne ikke endre project.godot i projsektstien." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "" +msgstr "Kunne ikke lage project.godot i prosjektstien." #: editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "" +msgstr "De følgende filene feilet ekstrahering fra pakke:" #: editor/project_manager.cpp msgid "Rename Project" -msgstr "" - -#: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" +msgstr "Endre Navn på Prosjekt" #: editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Nytt Spill-Prosjekt" #: editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Importer Eksisterende Prosjekt" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Importer" +msgstr "Importer & Endre" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Opprett Nytt Prosjekt" #: editor/project_manager.cpp #, fuzzy @@ -6093,24 +6122,23 @@ msgstr "Opprett skript" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "" +msgstr "Installer Prosjekt:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Installer" +msgstr "Installer & Endre" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Prosjektnavn:" #: editor/project_manager.cpp msgid "Create folder" -msgstr "" +msgstr "Opprett mappe" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Prosjektsti:" #: editor/project_manager.cpp msgid "Browse" @@ -6122,11 +6150,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Can't open project" -msgstr "" +msgstr "Kan ikke åpne prosjekt" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "" +msgstr "Er du sikker på at du vil åpne mer enn ett prosjekt?" #: editor/project_manager.cpp msgid "" @@ -6143,11 +6171,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" -msgstr "" +msgstr "Er du sikker på at du vil kjøre mer enn ett prosjekt?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" -msgstr "" +msgstr "Fjern prosjekt fra listen? (Mappeinnhold vil ikke bli modifisert)" #: editor/project_manager.cpp msgid "" @@ -6160,6 +6188,8 @@ msgid "" "You are about the scan %s folders for existing Godot projects. Do you " "confirm?" msgstr "" +"Du er i ferd med å skanne %s mapper for eksisterende Godotprosjekter. " +"Bekrefter du?" #: editor/project_manager.cpp msgid "Project Manager" @@ -6167,19 +6197,19 @@ msgstr "Prosjektleder" #: editor/project_manager.cpp msgid "Project List" -msgstr "" +msgstr "Prosjektliste" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Skann" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Velg en Mappe å Skanne" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nytt Prosjekt" #: editor/project_manager.cpp msgid "Templates" @@ -6187,15 +6217,15 @@ msgstr "" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "Avslutt" #: editor/project_manager.cpp msgid "Restart Now" -msgstr "" +msgstr "Omstart Nå" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "" +msgstr "Kan ikke kjøre prosjekt" #: editor/project_manager.cpp msgid "" @@ -6217,10 +6247,12 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Mouse Button" -msgstr "" +msgstr "Museknapp" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6366,12 +6398,8 @@ msgid "Delete Item" msgstr "Slett Valgte" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" -msgstr "" +msgstr "Eksisterer allerede" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -6766,10 +6794,6 @@ msgstr "Ressurs" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6882,10 +6906,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7313,32 +7333,46 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Slett Valgte" +msgid "Next Plane" +msgstr "Neste fane" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Dupliser Utvalg" +msgid "Previous Plane" +msgstr "Forrige fane" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "Slett Valgte" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "GridMap Duplicate Selection" +msgstr "Dupliser Utvalg" + +#: 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 @@ -7419,6 +7453,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -7453,6 +7491,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Lag Omriss" @@ -7470,6 +7512,10 @@ msgstr "Prosjekt" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7991,6 +8037,14 @@ 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 "" @@ -8068,10 +8122,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8153,6 +8217,16 @@ msgstr "" msgid "Invalid font size." msgstr "Ugyldig fontstørrelse." +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Ugyldig version.txt format i mal. Revisjon er ikke en gyldig " +#~ "identifikator." + +#~ msgid "Can't write file." +#~ msgstr "Kan ikke skrive fil." + #~ msgid "Next" #~ msgstr "Neste" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index c44ef3ebc8..9927fd8e8a 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -5,32 +5,35 @@ # # aelspire <aelspire@gmail.com>, 2017. # Aram Nap <xyphex.aram@gmail.com>, 2017. -# Arjan219 <arjannugteren1@gmail.com>, 2017. +# Arjan219 <arjannugteren1@gmail.com>, 2017-2018. # Christophe Swolfs <swolfschristophe@gmail.com>, 2017. # Cornee Traas <corneetraas@hotmail.com>, 2017. # Daeran Wereld <daeran@gmail.com>, 2017. # Dzejkop <jakubtrad@gmail.com>, 2017. # Ferdinand de Coninck <ferdinand.deconinck@gmail.com>, 2018. +# Jorn Theunissen <jorn-theunissen@hotmail.com>, 2018. # Maikel <maikel_martens_1@hotmail.com>, 2017. +# millenniumproof <millenniumproof@gmail.com>, 2018. # Pieter-Jan Briers <pieterjan.briers@gmail.com>, 2017-2018. # Robin Arys <robinarys@hotmail.com>, 2017. # Senno Kaasjager <senno.kaasjager@gmail.com>, 2017. # Uxilo <jmolendijk93@gmail.com>, 2017-2018. +# Willem <studiebolmail@gmail.com>, 2018. # Wout Standaert <wout@blobkat.com>, 2017. # Zatherz <zatherz@linux.pl>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-22 08:07+0000\n" -"Last-Translator: Pieter-Jan Briers <pieterjan.briers@gmail.com>\n" +"PO-Revision-Date: 2018-04-06 15:35+0000\n" +"Last-Translator: millenniumproof <millenniumproof@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\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 2.19-dev\n" +"X-Generator: Weblate 2.20\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -752,7 +755,7 @@ msgstr "Gouden Sponsors" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "Mini Sponsors" +msgstr "Mini Sponsoren" #: editor/editor_about.cpp msgid "Gold Donors" @@ -768,7 +771,7 @@ msgstr "Bronzen Donors" #: editor/editor_about.cpp msgid "Donors" -msgstr "Donors" +msgstr "Donoren" #: editor/editor_about.cpp msgid "License" @@ -1410,6 +1413,10 @@ msgstr "Leegmaken" msgid "Clear Output" msgstr "Maak Uitvoer Leeg" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error bij het opslaan van resource!" @@ -1693,7 +1700,6 @@ msgid "Export Mesh Library" msgstr "Exporteer Mesh Library" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." msgstr "Deze bewerking is niet mogelijk zonder een hoofdknoop." @@ -2065,7 +2071,6 @@ msgstr "" "efficiënter met het netwerk bestandssysteem." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" msgstr "Editor" @@ -2302,9 +2307,8 @@ msgid "Creating Mesh Previews" msgstr "Creëren van Mesh Previews" #: editor/editor_plugin.cpp -#, fuzzy msgid "Thumbnail.." -msgstr "Thumbnail.." +msgstr "Voorbeeld.." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2472,14 +2476,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Ongeldig version.txt formaat in sjablonen." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Ongeldig version.txt formaat in sjablonen. Revisie is geen geldig " -"identificatienummer." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Geen version.txt gevonden in sjablonen." @@ -2534,16 +2530,12 @@ msgid "Failed:" msgstr "Mislukt:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Kan niet naar bestand schrijven." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download Voltooid." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "Fout met het opvragen van url: " +msgstr "Fout bij het opvragen van een URL: " #: editor/export_template_manager.cpp msgid "Connecting to Mirror.." @@ -3100,14 +3092,12 @@ msgid "Enable Onion Skinning" msgstr "\"Onion Skinning\" Inschakelen" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Beschrijving" +msgstr "Richtingen" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" -msgstr "Plakken" +msgstr "Verleden" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" @@ -3225,7 +3215,7 @@ msgstr "Hoeveelheid:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "Mengen" +msgstr "Mengen:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" @@ -3249,7 +3239,7 @@ msgstr "Voeg invoer toe" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "Verwijder Automatische Voortgang." +msgstr "Verwijder Automatische Voortgang" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" @@ -3455,7 +3445,6 @@ msgid "Official" msgstr "Officieel" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Testing" msgstr "Testen" @@ -3626,9 +3615,8 @@ msgid "Pan Mode" msgstr "Verschuif Modus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggles snapping" -msgstr "Breekpunt Aan- of Uitschakelen" +msgstr "Snappen Aan- of Uitschakelen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" @@ -3651,9 +3639,8 @@ msgid "Configure Snap..." msgstr "Configureer Uitlijnen..." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap Relative" -msgstr "Uitlijn Relatief" +msgstr "Snap Relatief" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" @@ -3664,14 +3651,12 @@ msgid "Smart snapping" msgstr "Slim Uitlijnen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to parent" -msgstr "Uitlijnen naar ouder" +msgstr "Snap naar ouder" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node anchor" -msgstr "Uitlijnen naar node anker" +msgstr "Snap naar node anker" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" @@ -3738,18 +3723,28 @@ msgid "Show Grid" msgstr "Raster Weergeven" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Toon helpers" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Toon linialen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Toon hulplijnen" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Raster Weergeven" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "Toon helpers" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centreer Selectie" @@ -3786,9 +3781,8 @@ msgid "Drag pivot from mouse position" msgstr "Versleep draaipunt vanaf muispositie" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Verwijder Signaal" +msgstr "Plaats pivot bij muispositie" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -3908,9 +3902,8 @@ msgid "Remove point" msgstr "Punt verwijderen" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Lineair" +msgstr "Links Lineair" #: editor/plugins/curve_editor_plugin.cpp msgid "Right linear" @@ -3921,9 +3914,8 @@ msgid "Load preset" msgstr "Laad voorinstelling" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Verwijder Signaal" +msgstr "Verwijder Curve Punt" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -3939,9 +3931,8 @@ msgid "Bake GI Probe" msgstr "Bak GI Probe" #: editor/plugins/gradient_editor_plugin.cpp -#, fuzzy msgid "Add/Remove Color Ramp Point" -msgstr "Verwijder/Voeg Kleuren Hellings Punt Toe" +msgstr "Voeg Toe/Verwijder Kleur Hellingspunt" #: editor/plugins/gradient_editor_plugin.cpp #: editor/plugins/shader_graph_editor_plugin.cpp @@ -3967,7 +3958,7 @@ msgid "" "Create and assign one?" msgstr "" "Geen OccluderPolygon2D resource op deze node.\n" -"Creëer en wijs een toe?" +"Creëer en wijs één toe?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" @@ -4026,20 +4017,19 @@ msgid "Create Navigation Mesh" msgstr "Creëer Navigatie Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Contained Mesh is not of type ArrayMesh." -msgstr "Bevatte Mesh is niet van type ArrayMesh" +msgstr "Bevatte Mesh is niet van type ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "UV Uitpakken is gefaald, wellicht is de mesh niet manifold?" #: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy msgid "No mesh to debug." -msgstr "" +msgstr "Geen mesh om te debuggen." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Model has no UV in this layer" msgstr "Model heeft geen UV in deze laag" @@ -4048,11 +4038,14 @@ msgid "MeshInstance lacks a Mesh!" msgstr "MeshInstance ontbreekt een Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has not surface to create outlines from!" msgstr "Mesh heeft geen oppervlakte om omlijning van te maken!" #: 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 "Kon omlijning niet maken!" @@ -4073,14 +4066,12 @@ msgid "Create Convex Static Body" msgstr "Creëer Convex Statisch Lichaam" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Trimesh Collision Sibling" -msgstr "Creëer Trimesh Botsings Broer" +msgstr "Creëer Trimesh Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Convex Collision Sibling" -msgstr "Creëer Convex Botsings Broer" +msgstr "Creëer Convex Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4097,7 +4088,7 @@ msgstr "Geef UV2 Weer" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "Pak UV2 uit voor Lichtmap/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4105,9 +4096,8 @@ msgid "Create Outline Mesh" msgstr "Creëer Omlijning Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Outline Size:" -msgstr "Omlijning Grootte:" +msgstr "Grootte Omlijning:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." @@ -4153,7 +4143,7 @@ msgstr "Ouder heeft geen vaste vlakken om te bevolken." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "" +msgstr "Kon het gebied niet mappen." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" @@ -4165,11 +4155,11 @@ msgstr "Selecteer een Doel Oppervlakte:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Bevolk Oppervlakte" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "" +msgstr "Vul MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" @@ -4236,9 +4226,8 @@ msgid "Creating heightfield..." msgstr "Hoogteveld aan het creëeren..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Marking walkable triangles..." -msgstr "Lokale wijziging aan het opslaan.." +msgstr "Markeer loopbare driehoeken.." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4247,7 +4236,7 @@ msgstr "Compact hoogteveld aan het bouwen..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Wandelbaar gebied aan het eroderen..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Partitioning..." @@ -4263,15 +4252,15 @@ msgstr "Polymesh aan het creëeren..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Naar navigatie mesh aan het converteren..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Navigatie Mesh Generator Setup:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Geometrie aan het ontleden..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4288,262 +4277,258 @@ msgstr "AABB Genereren" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "Kan punt alleen plaatsen in een PartikelsMateriaal proces materiaal" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "Error bij het laden van afbeelding:" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgstr "Geen pixels met transparantie > 128 in afbeelding.." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Genereer Zichtbaarheid Rechthoek" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "Laad Emissie Masker" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Leeg Emissie Masker" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "" +msgstr "Partikels" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "" +msgstr "Telling Gegenereerde Punten:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "" +msgstr "Genereer Tijd (sec):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "" +msgstr "Emissie Masker" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "Neem uit Pixel" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "Kleuren Emissie" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "Node bevat geen geometrie." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "Node bevat geen geometrie (vlakken)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Een processor materiaal of type 'PartikelMateriaal' is nodig." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" -msgstr "" +msgstr "Vlakken bevatten geen gebied!" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "" +msgstr "Geen vlakken!" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "Genereer AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Creëer Emissie Punten Vanuit Mesh" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Creëer Emissie Punten Vanuit Node" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Creëer Emitter" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "Emissie Punten:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "Oppervlakte Punten" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Oppervlakte Punten+Normaal (Gericht)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Volume" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "Emissie Bron: " #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "Genereer Zichtbaarheid AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "" +msgstr "Verwijder Punt van Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "" +msgstr "Verwijder Uit-Control van Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "Verwijder In-Controle van Curve" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "" +msgstr "Voeg Punt toe aan Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "Verplaats Punt in Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Verplaats In-Control in Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Verplaats Uit-Controle in Curve" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "Selecteer Punten" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift+Drag: Selecteer Controle Punten" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "Klik: Voeg Punt Toe" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "" +msgstr "Rechter Klik: Verwijder Punt" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "" +msgstr "Selecteer Controle Punten (Shift+Sleep)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "" +msgstr "Voeg Punt Toe (in lege ruimte)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "" +msgstr "Splits Segment (in curve)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Verwijder Punt" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "" +msgstr "Sluit Curve" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "" +msgstr "Curve Punt #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Verwijder Signaal" +msgstr "Zet Curve Punt Positie" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Verwijder Signaal" +msgstr "Zet Curve In Positie" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Verwijder Signaal" +msgstr "Set Curve Uit Positie" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "Splits Pad" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Verwijder Pad Punt" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Verwijder Autoload" +msgstr "Verwijder Uit-Controle Punt" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "" +msgstr "Verwijder In-Controle Punt" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "" +msgstr "Creëer UV Map" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "" +msgstr "Transformeer UV Map" #: 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 "Move Point" -msgstr "" +msgstr "Beweeg Punt" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: Roteer" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "" +msgstr "Shift: Beweeg alles" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "" +msgstr "Shift+Ctrl: Schaal" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "" +msgstr "Beweeg Polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "" +msgstr "Roteer Polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "Schaal Polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4555,54 +4540,70 @@ msgstr "Bewerken" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "" +msgstr "Polygon->UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "" +msgstr "UV->Polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "" +msgstr "Wis UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap" -msgstr "" +msgstr "Snap" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "" +msgstr "Zet Snap Aan" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "" +msgstr "Grid" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "" +msgstr "ERROR: Laden van bron mislukt!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "" +msgstr "Voeg Bron Toe" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "" +msgstr "Naam Wijzigen Bron" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "" +msgstr "Verwijder Bron" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "" +msgstr "Bronnen klembord is leeg!" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Openen in Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instantie:" + +#: 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 +msgid "Type:" +msgstr "Type:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "" +msgstr "Laad Bron" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4612,249 +4613,246 @@ msgid "Paste" msgstr "Plakken" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Resource" +msgstr "BronnenPrelader" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "" +msgstr "Wis Recente Bestanden" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "" +msgstr "Wijzigingen oplaan en sluiten?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" -msgstr "" +msgstr "Fout bij het opslaan van het thema" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "" +msgstr "Fout bij het opslaan" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme" -msgstr "" +msgstr "Fout bij import van thema" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing" -msgstr "" +msgstr "Fout bij importeren" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "" +msgstr "Importeer Thema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "" +msgstr "Thema Opslaan Als.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Klasse Referentie" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Sorteren:" +msgstr "Sorteren" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "" +msgstr "Plaats Omhoog" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "" +msgstr "Plaats Omlaag" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "" +msgstr "Volgend script" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "Vorig script" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Bestand" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Nieuw" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Alles Opslaan" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Zacht Herladen Script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Kopieer Pad" +msgstr "Kopieer Script Pad" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" -msgstr "Weergeven in Bestandsbeheer" +msgstr "Toon in Bestandsbeheer" #: editor/plugins/script_editor_plugin.cpp msgid "History Prev" -msgstr "" +msgstr "Geschiedenis voorgaande" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "" +msgstr "Geschiedenis Volgende" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Herlaad Thema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Thema Opslaan" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Thema Opslaan Als" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Sluit Docs" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "" +msgstr "Sluit Alles" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "" +msgstr "Sluit Andere Tabbladen" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Starten" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Toggle Favoriet" +msgstr "Schakel Scripten Paneel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find.." -msgstr "" +msgstr "Vind.." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "" +msgstr "Vind Volgende" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "" +msgstr "Stap Over" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "" +msgstr "Stap In" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "Breek" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "" +msgstr "Vervolg" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Houd Debugger Open" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Afhankelijkheden Editor" +msgstr "Debug met externe editor" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" +msgstr "Open Godot online documentatie" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "" +msgstr "Zoek in de klasse hiërarchie." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "" +msgstr "Zoek in de referentie documentatie." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Ga naar voorgaand bewerkte document." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "Ga naar volgend bewerkte document." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Discard" -msgstr "Discreet" +msgstr "Verwerp" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "Creëer Script" #: editor/plugins/script_editor_plugin.cpp msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"De volgende bestanden zijn nieuwer op de schijf.\n" +"Welke aktie moet worden genomen?:" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "Herlaad" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "Heropslaan" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "" +msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" +"Ingebouwde scripts kunnen alleen ge-edit worden wanneer de bijbehorende " +"scène geladen is" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Alleen bronnen uit bestandssysteem kunnen gedropt worden." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "" +msgstr "Kies Kleur" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" -msgstr "" +msgstr "Converteer Hoofdlettergebruik" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Hoofdletters" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Kleine letters" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Maak Hoofdletters" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4873,58 +4871,56 @@ msgid "Select All" msgstr "Alles Selecteren" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Verwijder" +msgstr "Verwijder Regel" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "" +msgstr "Links Inspringen" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "" +msgstr "Rechts Inspringen" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" +msgstr "Commentaar Aan/Uit" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Ga naar Regel" +msgstr "Vouw/Ontvouw Regel" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "" +msgstr "Vouw Alle Regels" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "" +msgstr "Ontvouw Alle Regels" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Kloon Omlaag" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "" +msgstr "Voltooi Symbool" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "" +msgstr "Trim Navolgende Spaties" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "Converteer Indentatie Naar Spaties" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "" +msgstr "Converteer Indentatie Naar Tabs" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "" +msgstr "Auto Indentatie" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -4933,389 +4929,379 @@ msgstr "Breekpunt Aan- of Uitschakelen" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "" +msgstr "Verwijder Alle Breekpunten" #: editor/plugins/script_text_editor.cpp msgid "Goto Next Breakpoint" -msgstr "" +msgstr "Ga Naar Volgende Breekpunt" #: editor/plugins/script_text_editor.cpp msgid "Goto Previous Breakpoint" -msgstr "" +msgstr "Ga Naar Vorige Breekpunt" #: editor/plugins/script_text_editor.cpp msgid "Convert To Uppercase" -msgstr "" +msgstr "Converteer Naar Hoofdletters" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Lowercase" -msgstr "Verbind Aan Node:" +msgstr "Converteer Naar Kleine Letters" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "" +msgstr "Vind Vorige" #: editor/plugins/script_text_editor.cpp msgid "Replace.." -msgstr "" +msgstr "Vervang.." #: editor/plugins/script_text_editor.cpp msgid "Goto Function.." -msgstr "" +msgstr "Ga Naar Functie.." #: editor/plugins/script_text_editor.cpp msgid "Goto Line.." -msgstr "" +msgstr "Ga Naar Regel.." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "Contextuele Hulp" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" -msgstr "" +msgstr "Verander Shalar Constante" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Constant" -msgstr "" +msgstr "Verander Vec Constante" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Constant" -msgstr "" +msgstr "Verander RGB Constante" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Operator" -msgstr "" +msgstr "Verander Scalar Operator" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Operator" -msgstr "" +msgstr "Verander Vec Operator" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" -msgstr "" +msgstr "Verander Vec Scalar Operator" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" -msgstr "" +msgstr "Verander RGB Operator" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "" +msgstr "Aan/Uit Alleen Rot" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" -msgstr "" +msgstr "Verander Scalar Functie" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Verander Vec Functie" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Verander Scalar Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Verander Vec Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Verander RGB Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Verander Standaardwaarde" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" -msgstr "" +msgstr "Verander XForm Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Texture Uniform" -msgstr "" +msgstr "Verander Textuur Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Cubemap Uniform" -msgstr "" +msgstr "Verander Cubemap Uniform" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" -msgstr "" +msgstr "Verander Commentaar" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" -msgstr "" +msgstr "Voeg Toe/Verwijder van Kleur Helling" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "Voeg Toe/Verwijder van Curve Map" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" -msgstr "" +msgstr "Wijzig Curve Map" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Input Name" -msgstr "" +msgstr "Verander Input Naam" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "" +msgstr "Verbind Graaf Knooppunten" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "" +msgstr "Ontkoppel Graaf Knooppunten" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "" +msgstr "Verwijder Shader Graaf Knooppunten" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "" +msgstr "Verplaats Shader Graaf Knooppunten" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" -msgstr "" +msgstr "Dupliceer Graaf Knooppunt(en)" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "" +msgstr "Verwijder Shader Graaf Knooppunt(en)" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "" +msgstr "Fout: Cyclische Connectie Link" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "Fout: Ontbrekende Input Connecties" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" -msgstr "" +msgstr "Voeg Shader Graaf Knooppunt Toe" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" -msgstr "" +msgstr "Orthogonaal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective" -msgstr "" +msgstr "Perspectief" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "" +msgstr "Transformatie Afgebroken." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "X-As Transformatie." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "Y-As Transformatie." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "Z-As Transformatie." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Bekijk Vlak Transformatie." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "" +msgstr "Schaling: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Transitie" +msgstr "Transitie: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "" +msgstr "Roteren %s graden." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "" +msgstr "Key-en is uitgeschakeld (geen key ingevoegd)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "" +msgstr "Animatie Key Ingevoegd." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Objecten Getekend" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" -msgstr "Lokale wijziging aan het opslaan.." +msgstr "Materiaal Wijzigingen" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Wijzig" +msgstr "Shader Wijzigingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" -msgstr "" +msgstr "Oppervlakte Wijzigingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "" +msgstr "Teken Aanroepingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" -msgstr "" +msgstr "Vertices" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "" +msgstr "Bovenaanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "" +msgstr "Onderaanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" -msgstr "" +msgstr "Onder" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "" +msgstr "Linkeraanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" -msgstr "" +msgstr "Links" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "Rechteraanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" -msgstr "" +msgstr "Rechts" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "Vooraanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" -msgstr "" +msgstr "Voor" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "Achteraanzicht." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" -msgstr "" +msgstr "Achter" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" -msgstr "" +msgstr "Uitlijnen met zicht" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" -msgstr "" +msgstr "OK :(" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Geen ouder om kind aan te instantiëren." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "" +msgstr "Deze bewerking vereist één geselecteerde knooppunt." #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Weergave Normaalvector" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Weergave Wireframe" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Weergave Overdraw" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "Weergave Zonder Shading" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" -msgstr "" +msgstr "Bekijk Omgeving" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" -msgstr "" +msgstr "Bekijk Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "Bekijk Informatie" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr "Bekijk Bestanden" +msgstr "Bekijk FPS" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Half Resolution" -msgstr "Schaal Selectie" +msgstr "Halve Resolutie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Audio Luisteraar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Inschakelen" +msgstr "Inschakelen Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "Vrijekijk Links" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "Vrijekijk Rechts" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Ga Verder" +msgstr "Vrijekijk Vooruit" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Achterwaarts" +msgstr "Vrijekijk Achteruit" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "Vrijekijk Omhoog" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Scrollwiel Omlaag." +msgstr "Vrijekijk Omlaag" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Vrijekijk Snelheid Modificator" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5737,6 +5723,15 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Item Toevoegen" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "" @@ -5764,11 +5759,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -6038,10 +6028,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6063,7 +6049,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -6084,10 +6072,6 @@ msgid "Rename Project" msgstr "Hernoem Functie" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6102,7 +6086,7 @@ msgstr "Importeren" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Creëer Nieuw Project" #: editor/project_manager.cpp #, fuzzy @@ -6199,7 +6183,7 @@ msgstr "" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nieuw Project" #: editor/project_manager.cpp #, fuzzy @@ -6242,7 +6226,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6389,11 +6375,6 @@ msgid "Delete Item" msgstr "Verwijder" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "Kan niet verbinden met host:" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6791,10 +6772,6 @@ msgstr "Resource" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6907,10 +6884,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Omschrijving:" @@ -7348,33 +7321,47 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "Geselecteerde Verwijderen" +msgid "Next Plane" +msgstr "Volgend tabblad" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "Dupliceer Selectie" +msgid "Previous Plane" +msgstr "Vorig tabblad" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +#, fuzzy +msgid "Previous Floor" +msgstr "Vorig tabblad" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "Vorig tabblad" +msgid "GridMap Delete Selection" +msgstr "Geselecteerde Verwijderen" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Duplicate Selection" +msgstr "Dupliceer Selectie" + +#: 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 @@ -7456,6 +7443,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7488,6 +7479,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Subscriptie Maken" @@ -7505,6 +7500,10 @@ msgstr "Project" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8073,6 +8072,14 @@ 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 "" @@ -8163,12 +8170,22 @@ msgstr "" "Pad eigenschap moet verwijzen naar een geldige Spatial node om te werken." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Slechts één WorldEnvironment is toegestaan per scene (of set van " "geïnstantieerde scenes)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8262,6 +8279,20 @@ msgstr "Fout bij het laden van lettertype." msgid "Invalid font size." msgstr "Ongeldige lettertype grootte." +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Kan niet verbinden met host:" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Ongeldig version.txt formaat in sjablonen. Revisie is geen geldig " +#~ "identificatienummer." + +#~ msgid "Can't write file." +#~ msgstr "Kan niet naar bestand schrijven." + #~ msgid "Next" #~ msgstr "Volgende" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index f5b08d11c1..3c8ee72cec 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -8,6 +8,7 @@ # Adrian Węcławski <weclawskiadrian@gmail.com>, 2016. # aelspire <aelspire@gmail.com>, 2017. # Daniel Lewan <vision360.daniel@gmail.com>, 2016-2018. +# Dariusz Król <rexioweb@gmail.com>, 2018. # heya10 <igor.gielzak@gmail.com>, 2017. # holistyczny interlokutor <jakubowesmieci@gmail.com>, 2017. # Kajetan Kuszczyński <kajetanek99@gmail.com>, 2016. @@ -26,8 +27,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-22 08:08+0000\n" -"Last-Translator: Maksymilian Świąć <maksymilian.swiac@gmail.com>\n" +"PO-Revision-Date: 2018-04-23 15:40+0000\n" +"Last-Translator: Dariusz Król <rexioweb@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -35,7 +36,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -242,7 +243,7 @@ msgstr "Zmień pętlę animacji" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Utwórz klucz dla wpisanej wartości" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -1411,6 +1412,10 @@ msgstr "Wyczyść" msgid "Clear Output" msgstr "Wyczyść dane wyjściowe" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Błąd podczas zapisu zasobu!" @@ -2463,14 +2468,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Nieprawidłowy format pliku version.txt w szablonach." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"nieprawidłowy format pliku version.txt wewnątrz szablonów. Zmiana nie jest " -"prawidłowym identyfikatorem." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Nie znaleziono pliku version.txt w szablonach." @@ -2525,10 +2522,6 @@ msgid "Failed:" msgstr "Nie powiodło się:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Nie można zapisać pliku." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Pobieranie zakończone." @@ -3726,18 +3719,28 @@ msgid "Show Grid" msgstr "Pokaż siatkę" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Pokaż linie pomocnicze" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Pokaż linijki" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Pokaż prowadnice" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Pokaż pozycję początkową" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 widok" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Wyśrodkowywanie na zaznaczeniu" @@ -4031,6 +4034,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Siatka nie posiada powierzchni z której można utworzyć zarys!" #: 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 "Nie udało się utworzyć zarysu!" @@ -4585,6 +4592,22 @@ msgid "Resource clipboard is empty!" msgstr "Schowka zasobów jest pusty!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Otwórz w edytorze" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instancja:" + +#: 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 +msgid "Type:" +msgstr "Typ:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Wczytaj Zasób" @@ -4874,10 +4897,6 @@ msgid "Toggle Comment" msgstr "Ustaw komentarz" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Duplikuj linię" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Zwiń/rozwiń wiersz" @@ -4890,6 +4909,10 @@ msgid "Unfold All Lines" msgstr "Rozwiń wszystkie linie" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Duplikuj linię" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Uzupełnij symbol" @@ -5726,6 +5749,16 @@ msgid "Checked Item" msgstr "Zaznaczony element" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Dodaj element" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Zaznaczony element" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Ma" @@ -5756,11 +5789,6 @@ msgstr "Zakładka 2" msgid "Tab 3" msgstr "Zakładka 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Typ:" - #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Data Type:" @@ -6028,10 +6056,6 @@ msgid "Please choose an empty folder." msgstr "Proszę wybrać plik 'project.godot'." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Proszę wybrać folder nie zawierający pliku 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Zaimportowano projekt" @@ -6052,8 +6076,11 @@ msgid "Invalid project path (changed anything?)." msgstr "Niepoprawna ścieżka projektu (zmienić cokolwiek?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu." +#, fuzzy +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "Nie można było edytować engine.cfg w ścieżce projektu." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6072,10 +6099,6 @@ msgid "Rename Project" msgstr "Zmień nazwę projektu" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Nie znaleziono project.godot w ścieżce projektu." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Nowy projekt gry" @@ -6233,8 +6256,10 @@ msgid "Mouse Button" msgstr "Przycisk myszy" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Nieprawidłowa akcja (wszystko oprócz '/' lub ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6377,10 +6402,6 @@ msgid "Delete Item" msgstr "Usuń element" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Nie może zawierać '/ 'lub':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Już istnieje" @@ -6781,10 +6802,6 @@ msgstr "Zasoby" msgid "Clear Inheritance" msgstr "Wyczyść dziedziczenie" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Otwórz w edytorze" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Usuń węzeł (węzły)" @@ -6902,10 +6919,6 @@ msgstr "" "Kliknij, aby wyświetlić panel grup." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instancja:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Otwórz skrypt" @@ -7336,32 +7349,46 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "GridMap Usuń zaznaczenie" +#, fuzzy +msgid "Next Plane" +msgstr "Następna zakładka" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "GridMap duplikuj zaznaczenie" +#, fuzzy +msgid "Previous Plane" +msgstr "Poprzednia zakładka" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Następny poziom" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Poprzedni poziom" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Poziom:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Grid Map" +msgid "GridMap Delete Selection" +msgstr "GridMap Usuń zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Przyciąganie widoku" +msgid "GridMap Duplicate Selection" +msgstr "GridMap duplikuj zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Poprzedni poziom" +msgid "Grid Map" +msgstr "Grid Map" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Następny poziom" +msgid "Snap View" +msgstr "Przyciąganie widoku" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7446,6 +7473,10 @@ msgstr "Ustawienia GridMap" msgid "Pick Distance:" msgstr "Wybierz odległość:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Generowanie solucji..." @@ -7475,6 +7506,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Utwórz solucję C#" @@ -7490,6 +7525,10 @@ msgstr "Zbuduj projekt" msgid "Warnings" msgstr "Ostrzeżenia" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8029,6 +8068,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin wymaga by ARVRCamera dziedziczyła po node" #: 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 "" @@ -8123,12 +8170,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Pole Path musi wskazywać na węzeł Spatial." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Tylko jeden WorldEnvironment jest dozwolony na scenę (lub zestaw " "zinstancjonowanych scen)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8227,6 +8284,31 @@ msgstr "Błąd ładowania fonta." msgid "Invalid font size." msgstr "Niepoprawny rozmiar fonta." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Nieprawidłowa akcja (wszystko oprócz '/' lub ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Nie może zawierać '/ 'lub':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "nieprawidłowy format pliku version.txt wewnątrz szablonów. Zmiana nie " +#~ "jest prawidłowym identyfikatorem." + +#~ msgid "Can't write file." +#~ msgstr "Nie można zapisać pliku." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "Proszę wybrać folder nie zawierający pliku 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Nie znaleziono project.godot w ścieżce projektu." + #~ msgid "Next" #~ msgstr "Następny" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 3fd24dd39f..94856aa875 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -1385,6 +1385,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2382,12 +2386,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2441,10 +2439,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3622,15 +3616,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3923,6 +3925,10 @@ 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 "" @@ -4461,6 +4467,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4745,10 +4767,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Yar, Blow th' Selected Down!" @@ -4762,6 +4780,10 @@ 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 "" @@ -5582,6 +5604,14 @@ 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 "Has" msgstr "" @@ -5609,11 +5639,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5874,10 +5899,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5898,7 +5919,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5919,10 +5942,6 @@ msgid "Rename Project" msgstr "Rename Function" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6071,7 +6090,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6217,10 +6238,6 @@ msgid "Delete Item" msgstr "Yar, Blow th' Selected Down!" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6616,10 +6633,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6732,10 +6745,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7170,32 +7179,44 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Delete Selection" -msgstr "Yar, Blow th' Selected Down!" +msgid "Next Plane" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Previous Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "Yar, Blow th' Selected Down!" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +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 @@ -7275,6 +7296,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7304,6 +7329,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7319,6 +7348,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7847,6 +7880,14 @@ 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 "" @@ -7924,10 +7965,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 6963d39352..3ad4798ca0 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -4,30 +4,32 @@ # 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. # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # AWK <arthurwk1800@gmail.com>, 2017. # Francesco Perrotti-Garcia <fpg1503@gmail.com>, 2017. # George Marques <george@gmarqu.es>, 2016. # Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017. +# João Victor Lima <victordevtb@outlook.com>, 2018. +# João Vitor de Oliveira Carlos <lopogax@gmail.com>, 2018. # Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016. # jonathan railarem <railarem@gmail.com>, 2017. # Lucas Silva <lucasb.hpp@gmail.com>, 2018. # Luiz G. Correia <luizgabriell2.0@gmail.com>, 2017. # Mailson Silva Marins <mailsons335@gmail.com>, 2016. # MalcomRF <malcomkbk@gmail.com>, 2017. -# Marcus Correia <marknokalt@live.com>, 2017. +# Marcus Correia <marknokalt@live.com>, 2017-2018. # Michael Alexsander Silva Dias <michaelalexsander@protonmail.com>, 2017-2018. # Renato Rotenberg <renato.rotenberg@gmail.com>, 2017. -# Rodolfo R Gomes <rodolforg@gmail.com>, 2017. +# Rodolfo R Gomes <rodolforg@gmail.com>, 2017-2018. # Tiago Almeida <thyagoeap@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2018-01-22 08:08+0000\n" -"Last-Translator: Michael Alexsander Silva Dias <michaelalexsander@protonmail." -"com>\n" +"PO-Revision-Date: 2018-04-30 13:39+0000\n" +"Last-Translator: Rodolfo R Gomes <rodolforg@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -35,7 +37,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -43,11 +45,11 @@ msgstr "Desabilitado" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Toda a Seleção" +msgstr "Toda a seleção" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Alterar tempo de quadro-chave da animação" +msgstr "Alterar Tempo de Quadro-Chave da Anim" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -59,7 +61,7 @@ msgstr "Alterar Transformação da Anim" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Alterar valor de quadro-chave da animação" +msgstr "Alterar Valor de Quadro-Chave da Anim" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -433,7 +435,7 @@ msgstr "Coluna:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "O método no Nó destino precisa ser especificado!" +msgstr "O método no nó destino precisa ser especificado!" #: editor/connections_dialog.cpp msgid "" @@ -441,7 +443,7 @@ msgid "" "Node." msgstr "" "Método destino não encontrado! Específique um método válido ou anexe um " -"script ao Nó destino." +"script ao nó destino." #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -470,7 +472,7 @@ msgstr "Argumentos de Chamada Extras:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Caminho para o Nó:" +msgstr "Caminho para o nó:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -482,7 +484,7 @@ msgstr "Postergado" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "Uma vez" +msgstr "Oneshot" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -774,7 +776,7 @@ msgstr "Doadores" #: editor/editor_about.cpp msgid "License" -msgstr "LIcença" +msgstr "Licença" #: editor/editor_about.cpp msgid "Thirdparty License" @@ -1063,7 +1065,7 @@ msgstr "Caminho:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Nome do Nó:" +msgstr "Nome do nó:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1412,6 +1414,10 @@ msgstr "Limpar" msgid "Clear Output" msgstr "Limpar Saída" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao salvar Recurso!" @@ -1653,11 +1659,11 @@ msgstr "Abrir Cena Base" #: editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "Abri Cena Ágil..." +msgstr "Abrir Cena Rapidamente..." #: editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Abrir Rápidamente Script.." +msgstr "Abrir Script Rapidamente..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1976,7 +1982,7 @@ msgstr "Depurar" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Instalar Depuração Remota" +msgstr "Distribuir com Depuragem Remota" #: editor/editor_node.cpp msgid "" @@ -1988,7 +1994,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Instalação Pequena com FS em rede" +msgstr "Pequeno teste com o sistema de arquivos em rede" #: editor/editor_node.cpp msgid "" @@ -2031,7 +2037,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Sincronizar Alterações na Cena" +msgstr "Sincronizar Mudanças de Cena" #: editor/editor_node.cpp msgid "" @@ -2047,7 +2053,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Sincronizar Alterações no Script" +msgstr "Sincronizar Mudanças de Script" #: editor/editor_node.cpp msgid "" @@ -2360,7 +2366,7 @@ msgstr "Inclusivo" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Mesmo" +msgstr "Self" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2417,7 +2423,7 @@ msgstr "Padrão (Mesma do Editor)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Selecionar Nó(s) para Importar" +msgstr "Selecione Nó(s) para Importar" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -2468,14 +2474,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Formato do version.txt dentro dos modelos é inválido." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Formato do version.txt dentro dos modelos é inválido. A revisão não é um " -"identificador válido." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Não foi encontrado um version.txt dentro dos modelos." @@ -2530,10 +2528,6 @@ msgid "Failed:" msgstr "Falhou:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Não foi possível escrever o arquivo." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download completo." @@ -2883,7 +2877,7 @@ msgstr "Reimportar" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "Múltiplos Nós definidos" +msgstr "Múltiplos Nodes definidos" #: editor/node_dock.cpp msgid "Groups" @@ -2891,7 +2885,7 @@ msgstr "Grupos" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Selecione um Nó para editar Sinais e Grupos." +msgstr "Selecione um nó para editar Sinais e Grupos." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3260,39 +3254,39 @@ msgstr "Árvore de Animação é inválida." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Nó de Animação" +msgstr "Nó Animation" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "Nó de tipo Uma-Vez" +msgstr "Nó OneShot" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Misturar Nó" +msgstr "Nó Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "Nó Misturar2" +msgstr "Nó Blend2" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "Nó Misturar3" +msgstr "Nó Blend3" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "Nó Misturar4" +msgstr "Nó Blend4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "Nó Tempo de Escala" +msgstr "Nó TimeScale" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "Nó Tempo de Procura" +msgstr "Nó TimeSeek" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Nó de Transição" +msgstr "Nó Transition" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." @@ -3447,7 +3441,7 @@ msgstr "Oficial" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Em teste" +msgstr "Testando" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -3720,18 +3714,28 @@ msgid "Show Grid" msgstr "Mostrar Grade" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Mostrar auxiliadores" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Mostrar réguas" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Ver Origem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Viewport" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centralizar Seleção" @@ -4021,6 +4025,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Malha não tem superfície para criar contornos dela!" #: 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 "Não se pôde criar contorno!" @@ -4558,6 +4566,22 @@ msgid "Resource clipboard is empty!" msgstr "Recurso da área de transferência está vazio!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir no Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instância:" + +#: 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 +msgid "Type:" +msgstr "Tipo:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carregar Recurso" @@ -4844,10 +4868,6 @@ msgid "Toggle Comment" msgstr "Alternar Comentário" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clonar Abaixo" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Dobrar/Desdobrar Linha" @@ -4860,6 +4880,10 @@ msgid "Unfold All Lines" msgstr "Mostrar Todas as Linhas" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar Abaixo" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Completar Símbolo" @@ -5018,11 +5042,11 @@ msgstr "Alterar Nome da Entrada" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "Conectar Nós de Grafos" +msgstr "Conectar Nodes de Grafos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "Desconectar Nós de Grafos" +msgstr "Desconectar Nodes de Grafos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" @@ -5292,7 +5316,7 @@ msgstr "Modo Escala (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas Locais" +msgstr "Local Coords" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5676,6 +5700,16 @@ msgid "Checked Item" msgstr "Item Checado" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Adicionar Item" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Item Checado" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Tem" @@ -5703,11 +5737,6 @@ msgstr "Guia 2" msgid "Tab 3" msgstr "Guia 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipo:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipo de Dados:" @@ -5726,7 +5755,7 @@ msgstr "Fonte" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "Cor" +msgstr "Color" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5979,11 +6008,6 @@ msgid "Please choose an empty folder." msgstr "Por favor, escolha uma pasta vazia." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" -"Por favor, escolha uma pasta que não contenha um arquivo 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Projeto Importado" @@ -6004,8 +6028,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Caminho de projeto inválido (mudou alguma coisa?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Não foi possível encontrar project.godot no caminho do projeto." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Não foi possível carregar project.godot no caminho do projeto (erro %d). Ele " +"pode estar ausente ou corrompido." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6024,10 +6052,6 @@ msgid "Rename Project" msgstr "Renomear Projeto" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Não foi possível encontrar project.godot no caminho do projeto." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Novo Projeto de Jogo" @@ -6187,8 +6211,10 @@ msgid "Mouse Button" msgstr "Botão do Mous" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Ação Inválida (qualquer coisa serve, exceto '/' ou ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6331,10 +6357,6 @@ msgid "Delete Item" msgstr "Excluir Item" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Não pode conter '/' ou ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Já existe" @@ -6448,7 +6470,7 @@ msgstr "Remapeamentos por Localidade:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Localidade" +msgstr "Locale" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -6540,7 +6562,7 @@ msgstr "Erro ao carregar arquivo: Não é um recurso!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "Nó selecionado não é uma Viewport!" +msgstr "O nó selecionado não é uma Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6560,7 +6582,7 @@ msgstr "[Vazio]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" -msgstr "Definir" +msgstr "Set" #: editor/property_editor.cpp msgid "Properties:" @@ -6657,7 +6679,7 @@ msgstr "Mover Nó no Pai" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "Mover Nós no Pai" +msgstr "Mover Nodes no Pai" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -6731,10 +6753,6 @@ msgstr "Sub-Recursos" msgid "Clear Inheritance" msgstr "Limpar Herança" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir no Editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Excluir Nó(s)" @@ -6784,8 +6802,8 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"Instanciar um arquivo de cena como um Nó. Criar uma cena herdada se não " -"existe um nó raiz." +"Instanciar um arquivo de cena como um nó. Cria uma cena herdada se não " +"existir um nó raiz." #: editor/scene_tree_dock.cpp msgid "Filter nodes" @@ -6852,10 +6870,6 @@ msgstr "" "Clique para mostrar o painel de grupos." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instância:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Abrir script" @@ -6889,7 +6903,7 @@ msgstr "Renomear Nó" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "Árvore de Cena (Nós):" +msgstr "Árvore de Cena (Nodes):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" @@ -6977,7 +6991,7 @@ msgstr "Carregar arquivo de script existente" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "Idioma" +msgstr "Linguagem" #: editor/script_create_dialog.cpp msgid "Inherits" @@ -7065,7 +7079,7 @@ msgstr "Pilha de Rastreamento (se aplicável):" #: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "Profiler" +msgstr "Profilador" #: editor/script_editor_debugger.cpp msgid "Monitor" @@ -7089,11 +7103,11 @@ msgstr "Total:" #: editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "Memória de Vídeo" +msgstr "Mem. de Vídeo" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "Caminho do recurso" +msgstr "Caminho do Recurso" #: editor/script_editor_debugger.cpp msgid "Type" @@ -7284,32 +7298,44 @@ msgid "Object can't provide a length." msgstr "Objeto não pôde fornecer um comprimento." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Excluir Seleção do Gridap" +msgid "Next Plane" +msgstr "Próximo Plano" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Duplicar Seleção do GridMap" +msgid "Previous Plane" +msgstr "Plano Anterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Plano:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Próximo Chão" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Chão Anterior" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Chão:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Mapa de Grade" +msgid "GridMap Delete Selection" +msgstr "Excluir Seleção do Gridap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Ancorar Vista" +msgid "GridMap Duplicate Selection" +msgstr "Duplicar Seleção do GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Chão Anterior" +msgid "Grid Map" +msgstr "Mapa de Grade" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Próximo Chão" +msgid "Snap View" +msgstr "Ancorar Vista" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7387,6 +7413,10 @@ msgstr "Configurações do GridMap" msgid "Pick Distance:" msgstr "Escolha uma Distância:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Gerando solução..." @@ -7416,6 +7446,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Sobre o suporte ao C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Criar solução C#" @@ -7431,6 +7465,10 @@ msgstr "Compilar Projeto" msgid "Warnings" msgstr "Avisos" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Fim da pilha de rastreamento de exceção interna" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7453,7 +7491,7 @@ msgid "" "your node please." msgstr "" "Um valor de retorno deve ser atribuído ao primeiro elemento da memória " -"corrente do nó! Conserte seu node, por favor." +"corrente do nó! Conserte seu nó, por favor." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -7537,11 +7575,11 @@ msgstr "Adicionar Nó" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" -msgstr "Remover Nós VisualScript" +msgstr "Remover Nodes VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "Duplicar Nós VisualScript" +msgstr "Duplicar Nodes VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -7577,7 +7615,7 @@ msgstr "Adicionar Nó de Pré-carregamento" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "Adicionar Nó(s) a partir de árvore" +msgstr "Adicionar Nó(s) a Partir da Árvore" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -7601,7 +7639,7 @@ msgstr "Remover Nó VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "Conectar Nós" +msgstr "Conectar Nodes" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7609,27 +7647,27 @@ msgstr "Condição" #: modules/visual_script/visual_script_editor.cpp msgid "Sequence" -msgstr "Sequência" +msgstr "Sequence" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" -msgstr "Trocar" +msgstr "Switch" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" -msgstr "Iterador" +msgstr "Iterator" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "Enquanto" +msgstr "While" #: modules/visual_script/visual_script_editor.cpp msgid "Return" -msgstr "Retornar" +msgstr "Return" #: modules/visual_script/visual_script_editor.cpp msgid "Call" -msgstr "Chamar" +msgstr "Call" #: modules/visual_script/visual_script_editor.cpp msgid "Get" @@ -7653,7 +7691,7 @@ msgstr "Área de transferência vazia!" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" -msgstr "Colar Nós VisualScript" +msgstr "Colar Nodes VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" @@ -7689,7 +7727,7 @@ msgstr "Tipo de Base:" #: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" -msgstr "Nós Disponíveis:" +msgstr "Nodes Disponíveis:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" @@ -7713,15 +7751,15 @@ msgstr "Localizar Tipo de Nó" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "Copiar Nós" +msgstr "Copiar Nodes" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "Recortar Nós" +msgstr "Recortar Nodes" #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "Colar Nós" +msgstr "Colar Nodes" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -7741,11 +7779,11 @@ msgstr "Nome da propriedade de índice inválido." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "Objeto base não é um Node!" +msgstr "Objeto base não é um nó!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "O caminho não leva a um Node!" +msgstr "O caminho não leva a um nó!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." @@ -7985,6 +8023,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin necessita um nó ARVRCamera como filho" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Tempo Restante: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Planejando Malhas: " @@ -8082,12 +8128,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "A propriedade Caminho deve apontar para um nó Spatial para funcionar." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "É permitido apenas um nó WorldEnvironment por cena (ou conjunto de cenas " "instanciadas)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8184,6 +8240,32 @@ msgstr "Erro ao carregar fonte." msgid "Invalid font size." msgstr "Tamanho de fonte inválido." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Ação Inválida (qualquer coisa serve, exceto '/' ou ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Não pode conter '/' ou ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Formato do version.txt dentro dos modelos é inválido. A revisão não é um " +#~ "identificador válido." + +#~ msgid "Can't write file." +#~ msgstr "Não foi possível escrever o arquivo." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Por favor, escolha uma pasta que não contenha um arquivo 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Não foi possível encontrar project.godot no caminho do projeto." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Não foi possível encontrar project.godot no caminho do projeto." + #~ msgid "Next" #~ msgstr "Próximo" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 7bddb64cd0..84e80718da 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -8,6 +8,7 @@ # João Graça <jgraca95@gmail.com>, 2017. # João Lopes <linux-man@hotmail.com>, 2017-2018. # Miguel Gomes <miggas09@gmail.com>, 2017. +# Paulo Caldeira <paucal@gmail.com>, 2018. # Pedro Gomes <pedrogomes1698@gmail.com>, 2017. # Rueben Stevens <supercell03@gmail.com>, 2017. # SARDON <fabio3_Santos@hotmail.com>, 2017. @@ -16,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-22 08:08+0000\n" +"PO-Revision-Date: 2018-04-25 09:40+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" @@ -24,7 +25,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -829,31 +830,31 @@ msgstr "Adicionar Efeito" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Mudar Barramento de Áudio" +msgstr "Renomear o barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "Alterar Volume do canal áudio" +msgstr "Alterar Volume do barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Alternar solo do canal áudio" +msgstr "Alternar solo do barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Alternar silêncio do canal áudio" +msgstr "Alternar silêncio do barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "Alternar efeitos do canal áudio" +msgstr "Alternar efeitos bypass do barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Selecionar envio do canal áudio" +msgstr "Selecionar envio do barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Adicionar Efeito de Barramento de Áudio" +msgstr "Adicionar Efeito de barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -865,7 +866,7 @@ msgstr "Apagar Efeito de Barramento" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Canal áudio, arrastar e largar para reorganizar." +msgstr "Barramento de áudio, arrastar e largar para reorganizar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -902,7 +903,7 @@ msgstr "Áudio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "Adicionar Barramento de Áudio" +msgstr "Adicionar barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" @@ -910,23 +911,23 @@ msgstr "O barramento principal não pode ser removido!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "Apagar Barramento de Áudio" +msgstr "Apagar barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "Barramento de Áudio Duplicado" +msgstr "Duplicar barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "Restabelecer Volume do Barramento" +msgstr "Restabelecer volume do barramento" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Mover Barramento de Áudio" +msgstr "Mover barramento de áudio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." -msgstr "Guardar Modelo de Barramento de Áudio Como.." +msgstr "Guardar Modelo do barramento de áudio como.." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." @@ -934,7 +935,7 @@ msgstr "Localização para o Novo Modelo.." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Abrir Modelo de Barramento de Áudio" +msgstr "Abrir Modelo de barramento de áudio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -968,7 +969,7 @@ msgstr "Guardar Como" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "Guardar este Modelo de Barramento para um Ficheiro." +msgstr "Guardar este Modelo de Barramento para um ficheiro." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1097,7 +1098,7 @@ msgstr "Escolha uma Diretoria" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "Criar Pasta/Diretoria" +msgstr "Criar Pasta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1404,6 +1405,10 @@ msgstr "Limpar" msgid "Clear Output" msgstr "Limpar Saída" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao guardar recurso!" @@ -2458,14 +2463,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Formato de version.txt inválido, dentro dos Modelos." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Formato de version.txt inválido, dentro dos Modelos. Revisão não é um " -"identificador válido." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Não foi encontrado version.txt dentro dos Modelos." @@ -2520,10 +2517,6 @@ msgid "Failed:" msgstr "Falhou:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Impossível escrever o Ficheiro." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Download Completo." @@ -3435,7 +3428,7 @@ msgstr "Oficial" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "A testar" +msgstr "Em teste" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -3705,18 +3698,28 @@ msgid "Show Grid" msgstr "Mostrar grelha" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Mostrar ajudantes" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Mostrar réguas" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Ver origem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Vista" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrar seleção" @@ -4006,6 +4009,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "A Mesh não tem superfície para criar contornos!" #: 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 "Contorno não pode ser criado!" @@ -4540,6 +4547,22 @@ msgid "Resource clipboard is empty!" msgstr "Área de transferência de recursos vazia!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir no Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Instância:" + +#: 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 +msgid "Type:" +msgstr "Tipo:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carregar recurso" @@ -4826,10 +4849,6 @@ msgid "Toggle Comment" msgstr "Alternar comentário" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Clonar abaixo" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Fechar/Abrir Linha" @@ -4842,6 +4861,10 @@ msgid "Unfold All Lines" msgstr "Mostrar todas as linhas" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Clonar abaixo" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Completar símbolo" @@ -5658,6 +5681,16 @@ msgid "Checked Item" msgstr "Item verificado" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Adicionar item" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Item verificado" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Tem" @@ -5685,11 +5718,6 @@ msgstr "Aba 2" msgid "Tab 3" msgstr "Aba 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tipo:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Tipo de dados:" @@ -5959,10 +5987,6 @@ msgid "Please choose an empty folder." msgstr "Por favor escolha uma pasta vazia." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Escolha uma pasta que não contenha um Ficheiro 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Projeto importado" @@ -5983,8 +6007,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Caminho de Projeto inválido (alguma alteração?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Impossível encontrar project.godot no Caminho do Projeto." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Não foi possível carregar o project.godot no caminho do projeto (erro %d). " +"Poderá estar em falta ou corrompido." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6003,10 +6031,6 @@ msgid "Rename Project" msgstr "Renomear Projeto" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Impossível encontrar project.godot no Caminho do Projeto." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Novo Projeto de jogo" @@ -6165,8 +6189,10 @@ msgid "Mouse Button" msgstr "Botão do rato" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Ação inválida (tudo menos '/' ou ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6309,10 +6335,6 @@ msgid "Delete Item" msgstr "Apagar item" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Não pode conter '/' ou ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Já existe" @@ -6709,10 +6731,6 @@ msgstr "Sub-recursos" msgid "Clear Inheritance" msgstr "Limpar herança" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir no Editor" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Apagar Nó(s)" @@ -6830,10 +6848,6 @@ msgstr "" "Clique para mostrar doca dos grupos." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Instância:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Abrir Script" @@ -7039,7 +7053,7 @@ msgstr "Erros:" #: editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" -msgstr "Rastreamento de pilha (se aplicável):" +msgstr "Stack Trace (se aplicável):" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -7071,7 +7085,7 @@ msgstr "Memória Vídeo" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "Caminho de recurso" +msgstr "Caminho do recurso" #: editor/script_editor_debugger.cpp msgid "Type" @@ -7087,7 +7101,7 @@ msgstr "Uso" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "Misc" +msgstr "Diversos" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -7263,32 +7277,44 @@ msgid "Object can't provide a length." msgstr "Objeto não fornece um comprimento." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Apagar seleção GridMap" +msgid "Next Plane" +msgstr "Plano seguinte" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Seleção duplicada de GridMap" +msgid "Previous Plane" +msgstr "Plano anterior" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Plano:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Próximo Piso" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Piso anterior" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Piso:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Mapa de grelha" +msgid "GridMap Delete Selection" +msgstr "Apagar seleção GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Vista de Ajuste" +msgid "GridMap Duplicate Selection" +msgstr "Seleção duplicada de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Piso anterior" +msgid "Grid Map" +msgstr "Mapa de grelha" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Próximo Piso" +msgid "Snap View" +msgstr "Vista de Ajuste" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7366,6 +7392,10 @@ msgstr "Configurações do GridMap" msgid "Pick Distance:" msgstr "Distância de escolha:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "A gerar soluções..." @@ -7395,6 +7425,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Sobre o suporte C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Criar solução C#" @@ -7410,6 +7444,10 @@ msgstr "Construir Projeto" msgid "Warnings" msgstr "Avisos" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Fim do stack trace de exceção interna" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7440,12 +7478,11 @@ msgstr "O Nó retornou uma sequência de saída (output) incorreta: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "" -"A sequência foi encontrada mas não o Nó na pilha (stack), faça report de bug!" +msgstr "Foi encontrada o bit da sequência mas não o Nó na pilha, relate o bug!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " -msgstr "Stack overflow com a profundidade da pilha (stack): " +msgstr "Pilha cheia com a profundidade da pilha: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" @@ -7963,6 +8000,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin exige um Nó filho ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Tempo restante: %d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "A traçar Meshes: " @@ -8062,12 +8107,22 @@ msgstr "" "válido." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Apenas um WorldEnvironment é permitido por Cena (ou grupo de cenas " "instanciadas)." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8164,6 +8219,31 @@ msgstr "Erro ao carregar letra." msgid "Invalid font size." msgstr "Tamanho de letra inválido." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Ação inválida (tudo menos '/' ou ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Não pode conter '/' ou ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Formato de version.txt inválido, dentro dos Modelos. Revisão não é um " +#~ "identificador válido." + +#~ msgid "Can't write file." +#~ msgstr "Impossível escrever o Ficheiro." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "Escolha uma pasta que não contenha um Ficheiro 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Impossível encontrar project.godot no Caminho do Projeto." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Impossível encontrar project.godot no Caminho do Projeto." + #~ msgid "Next" #~ msgstr "Proximo" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 9aa5fbeeff..e5b3fcbad7 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -3,13 +3,14 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # +# Filip <filipanton@tutanota.com>, 2018. # TigerxWood <TigerxWood@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-20 08:55+0000\n" -"Last-Translator: TigerxWood <TigerxWood@gmail.com>\n" +"PO-Revision-Date: 2018-05-02 18:03+0000\n" +"Last-Translator: Filip <filipanton@tutanota.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -17,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -25,15 +26,15 @@ msgstr "Dezactivat" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Toate selecțiile" +msgstr "Toată selecția" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Anim Schimbare timp cadre cheie" +msgstr "Anim Schimbați Timpul Cadru Cheie" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Anim Schimbare tranziție" +msgstr "Anim Schimbați Tranziție" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -49,149 +50,149 @@ msgstr "Anim Schimbare apelare" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Anim Adăugare pistă" +msgstr "Anim Adăugați Pistă" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Anim Clonare chei" +msgstr "Anim Clonare Chei" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Mutare sus pistă anim" +msgstr "Mută Pista Anim Sus" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Mutare jos pistă anim" +msgstr "Mută Pista Anim Jos" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Eliminare pistă anim" +msgstr "Elimină Pista Anim" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "Setare tranziții la:" +msgstr "Setează Tranziții la:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Redenumire pistă anim" +msgstr "Redenumește Pista Anim" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "Anim Schimbați Interpolarea Pistei" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Anim Schimbați Modul Valorii Pistei" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "Anim Schimbați Modul Învelirii Pistei" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "Editați Curba Nodului" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "Editați Curba Selecției" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "Anim Ștergeți Cheile" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "Duplicați Selecția" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "Duplicați Transpunerea" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "Elminați Selecția" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "Continuu" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "Discret" #: editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Trăgaci" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Anim Adaugați Cheie" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Anim Mutați Cheie" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "Scalați Selecția" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Scalați De La Cursor" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "Mergeți la Pasul Următor" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "Mergeți la Pasul Anterior" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "Linear" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "Constant" #: editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "În" #: editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "Afară" #: editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "Înăuntru-Afară" #: editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "Afară-Înăuntru" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "Tranziții" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "Optimizați Animația" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "Curățați Animația" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Creați pistă NOUA pentru %s și inserați cheie?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Creați %d piste NOI și inserați cheie?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -199,270 +200,272 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp msgid "Create" -msgstr "" +msgstr "Creați" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Anim Creați și Inserați" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "Anim Inserați Pistă și Cheie" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Anim Inserați Cheie" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Schimbați Lung Anim" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Schimbați Bucla Anim" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Anim Creați Cheie Valoare Typed" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Anim Inserați" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Anim Scalați Cheile" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "Anim Adăugați Pistă Chemare" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "Zoom Animație." #: editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "Lungime (s):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "Lungime Animație (în secunde)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "" +msgstr "Pas (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "Pas Bruscare Cursor (în secunde)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "Activați / Dezactivați Repetiția în Animație." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "Adăugați piste noi." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "Mișcați pista curentă sus." #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "Mișcați pista curentă jos." #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "Ștergeți pista selectată." #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "Unelte Pistă" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "Activați editarea de chei individuale prin clic." #: editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Anim. Optimizator" #: editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "Eroare Lineară Max:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "Eroare Angulară Max:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "Max Unghi Optimizabil:" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Optimizați" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." -msgstr "" +msgstr "Selectați un Animator din Copacul Scenă să editați animații." #: editor/animation_editor.cpp msgid "Key" -msgstr "" +msgstr "Cheie" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "Tranziție" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "Proporție Scalare:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "Chemați Funcții în Care Nod?" #: editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "Ștergeți chei inoperabile" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Ștergeți piste nerezolvate sau goale" #: editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "Curățați toate animațiile" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "Curățați Animațiile (FĂRĂ ANULARE!)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "Curățați" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "Redimensionați Array-ul" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "Schimbați Tipul Array-ului" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "Schimbați Valoarea Array-ului" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Duceți-vă la Linie" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "Linia Numărul:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "Nici o Potrivire" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Înlocuit %d potriviri." #: editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "Potrivește Caz-ul" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "Cuvinte Complete" #: editor/code_editor.cpp msgid "Replace" -msgstr "" +msgstr "Înlocuiți" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Înlocuiți Tot" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Numai Selecția" #: editor/code_editor.cpp msgid "Zoom In" -msgstr "" +msgstr "Zoom-ați În" #: editor/code_editor.cpp msgid "Zoom Out" -msgstr "" +msgstr "Zoom-ați Afară" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Resetați Zoom-area" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "Linie:" #: editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "Col:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "Metoda din Nod-ul țintă trebuie specificată!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"Metoda țintă nu există! Specificați o metodă validă sau atașați un script la " +"Nod-ul țintă." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "Conectați la Nod:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "" +msgstr "Adăugați" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "Ștergeți" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Adăugați Extra Argument de Chemare:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "Extra Argumente de Chemare:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "Drum la Nod:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "Faceți Funcția" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Amânat(ă)" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "Oneshot" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -476,143 +479,147 @@ msgstr "" #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "" +msgstr "Aproape" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Conectați" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Conectați '%s' la '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "Conectați Semnal:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Deconectați '%s' de la '%s'" #: editor/connections_dialog.cpp msgid "Connect.." -msgstr "" +msgstr "Conectați.." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Deconectați" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Semnale" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "" +msgstr "Schimbați Tipul %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Change" -msgstr "" +msgstr "Schimbați" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "" +msgstr "Creați %s Nou" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Favorite:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Recent:" #: editor/create_dialog.cpp editor/editor_node.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Search:" -msgstr "" +msgstr "Cautați:" #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" -msgstr "" +msgstr "Potriviri:" #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp #: editor/script_editor_debugger.cpp msgid "Description:" -msgstr "" +msgstr "Descripție:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Cautați Înlocuitor Pentru:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "Dependențe Pentru:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"Scena '%s' este în proces de editare. \n" +"Modificările nu vor avea efect dacă nu reîncărcați." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"Resursa '%s' este în folosință.\n" +"Modificările vor avea efect după ce reîncărcați." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "Dependențe" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "Resursă" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/script_create_dialog.cpp msgid "Path" -msgstr "" +msgstr "Cale" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "Dependințe:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Reparați Stricat" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "Editor de Dependență" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "Cautați Înlocuitor Resursă:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp scene/gui/file_dialog.cpp msgid "Open" -msgstr "" +msgstr "Deschide" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "Stăpâni La:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" +msgstr "Ștergeți fișierele selectate din proiect? (fără anulare)" #: editor/dependency_editor.cpp msgid "" @@ -620,54 +627,57 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"Fișierele în proces de ștergere sunt necesare pentru alte resurse ca ele să " +"sa funcționeze.\n" +"Ștergeți oricum? (fără anulare)" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "" +msgstr "Nu se poate șterge:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "Eroare încărcând:" #: editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "Scena nu a putut fi încărcata deoarece are dependențe în lipsa:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Deschide Oricum" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Ce acțiune trebuie să fie luată?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Rezolvă dependențele" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "Erori încărcând!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Ștergeți permanent %d articol(e)? (Fără anulare!)" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "Deține" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "" +msgstr "Resurse Fără Deținere Explicită:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Explorator de Resurse Orfane" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "Ştergeți fişierele selectate?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -675,83 +685,83 @@ msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp #: editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "Ștergeți" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "" +msgstr "Schimbați Cheie Dicţionar" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "" +msgstr "Schimbaţi Valoarea Dicţionar" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" +msgstr "Mulțumesc din partea comunităţii Godot!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "" +msgstr "Mulţumiri!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "Contribuabili Motor Godot" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "" +msgstr "Fondatorii Proiectului" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "Dezvoltator Principal" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "" +msgstr "Manager de Proiect " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "Dezvoltatori" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Autori" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "Sponsori Platină" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "Sponsori Aur" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "" +msgstr "Mini Sponsori" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "Donatori de Aur" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "Donatori de Argint" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "Donatori de Bronz" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "Donatori" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Licență" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "Licenţe Thirdparty" #: editor/editor_about.cpp msgid "" @@ -760,338 +770,347 @@ msgid "" "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Motorul Godot se bazează pe un număr de biblioteci thirdparty gratis și " +"opensource, toate compatibile cu termenii licenţei MIT ai lui. Mai jos este " +"o listă exhaustivă a tuturor acestor componente de thirdparty cu declaraţii " +"de autor respective şi termenii licenței." #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "Toate Componentele" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "Componente" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licențe" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Eroare la deschiderea fişierului pachet, nu este în format zip." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "" +msgstr "Decompresez Active" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Pachet Instalat cu Succes!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Succes!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install" -msgstr "" +msgstr "Instalați" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "" +msgstr "Instalator de Pachet" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Difuzoare" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "Adaugă Efect" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "" +msgstr "Redenumiţi Pista Audio" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "" +msgstr "Schimbați Volumul Pistei Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "" +msgstr "Comutați Pista Audio Singură" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "Comutați Pista Audio Mută" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Comutați Efecte de Ocolire Pista Audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Selectați Pista Audio Trimitere" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Adaugați Efect Pista Audio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Mutați Pista Efect" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "" +msgstr "Ștergeți Pista Efect" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" +msgstr "Pista Audio, Trageți și Plasați pentru a rearanja." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Singură" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Mut" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Ocolire" #: editor/editor_audio_buses.cpp msgid "Bus options" -msgstr "" +msgstr "Opțiuni Pistă Audio" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "" +msgstr "Duplicați" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "" +msgstr "Resetați Volumul" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "" +msgstr "Ștergeți Efectul" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "" +msgstr "Adaugă Pistă Audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Imposibil de Șters Pistă Audio Master!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "" +msgstr "Ştergeţi Pista Audio" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "" +msgstr "Duplicați Pista Audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "" +msgstr "Resetați Volumul Pistei Audio" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "" +msgstr "Mutați Pista Audio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." -msgstr "" +msgstr "Salvați Pista Audio Șablon Ca.." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." -msgstr "" +msgstr "Locație pentru Noul Șablon..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "Deschideți Șablon Pistă Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Nu există nici un fişier 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "Fişier nevalid, nu un șablon de pistă audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "Adaugați Pistă Audio" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "Creaţi un Șablon nou Pistă Audio." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Load" -msgstr "" +msgstr "Încărcați" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "Încărcaţi un Șablon de Pistă Audio existent." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "" +msgstr "Salvați Ca" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "Salvaţi acest Șablon Pistă Audio într-un fişier." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "" +msgstr "Încărcați Implicit" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Încărcat Șablonul Pistă Audio implicit." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "Nume nevalid." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Caractere valide:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." msgstr "" +"Nume nevalid. Nu trebuie să se lovească cu un nume de clasa deja existent în " +"motor." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" +"Nume nevalid. Nu trebuie să se lovească cu un nume de tip deja existent în " +"motor tip." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" +"Nume nevalid. Nu trebuie să se lovească cu un nume ce constante globale." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "Cale nevalidă." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "Fișierul nu există." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "" +msgstr "Nu în calea de resurse." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Adaugați AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "AutoLoad '%s' există deja!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "Redenumiţi Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Comutați Globale AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "Mutați Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "Eliminați Autoload" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "" +msgstr "Activați" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "Rearanjați Autoload-urile" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Cale:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Nume Nod:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "" +msgstr "Nume" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Singleton" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "Scena se Actualizează" #: editor/editor_data.cpp msgid "Storing local changes.." -msgstr "" +msgstr "Modificările locale se stochează..." #: editor/editor_data.cpp msgid "Updating scene.." -msgstr "" +msgstr "Scena se Actualizează.." #: editor/editor_data.cpp msgid "[empty]" -msgstr "" +msgstr "[gol]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[nesalvat]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "" +msgstr "Vă rugăm să selectaţi mai întâi un director de baza" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "Alegeţi un Director" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Creați Director" #: 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 #: scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "Nume:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Directorul nu a putut fi creat." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "Alegeți" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "" +msgstr "Fişierul se Stochează:" #: editor/editor_export.cpp msgid "Packing" @@ -1371,6 +1390,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2364,12 +2387,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2422,10 +2439,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3588,15 +3601,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Guides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3885,6 +3906,10 @@ 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 "" @@ -4419,6 +4444,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4701,10 +4742,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4717,6 +4754,10 @@ 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 "" @@ -5530,6 +5571,14 @@ 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 "Has" msgstr "" @@ -5557,11 +5606,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5821,10 +5865,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5845,7 +5885,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5865,10 +5907,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6016,7 +6054,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6160,10 +6200,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6556,10 +6592,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6669,10 +6701,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7095,11 +7123,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7107,19 +7147,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7198,6 +7238,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7227,6 +7271,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7242,6 +7290,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7741,6 +7793,14 @@ 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 "" @@ -7818,10 +7878,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/ru.po b/editor/translations/ru.po index cf82142c80..9ddbc965e5 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -5,7 +5,9 @@ # # Artem Varaksa <aymfst@gmail.com>, 2018. # B10nicMachine <shumik1337@gmail.com>, 2017. +# Chaosus89 <chaosus89@gmail.com>, 2018. # DimOkGamer <dimokgamer@gmail.com>, 2016-2017. +# Forest Swamp <sample1989@mail.ru>, 2018. # Igor S <scorched@bk.ru>, 2017. # ijet <my-ijet@mail.ru>, 2017-2018. # Maxim Kim <habamax@gmail.com>, 2016. @@ -13,13 +15,14 @@ # outbools <drag4e@yandex.ru>, 2017. # pitchblack <pitchblack@mail.ru>, 2017. # Sergey Agarkov <zorgsoft@gmail.com>, 2017. +# Аркадий Авас <savvot@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-01-24 12:27+0000\n" -"Last-Translator: ijet <my-ijet@mail.ru>\n" +"PO-Revision-Date: 2018-04-27 16:39+0000\n" +"Last-Translator: Chaosus89 <chaosus89@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -28,7 +31,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1288,11 +1291,11 @@ msgstr "Краткое описание:" #: editor/editor_help.cpp msgid "Members" -msgstr "Участники" +msgstr "Свойства" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" -msgstr "Участники:" +msgstr "Свойства:" #: editor/editor_help.cpp msgid "Public Methods" @@ -1358,7 +1361,7 @@ msgstr "Свойства" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "Описание свойства:" +msgstr "Описание свойств:" #: editor/editor_help.cpp msgid "" @@ -1407,6 +1410,10 @@ msgstr "Очистить" msgid "Clear Output" msgstr "Очистить вывод" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Ошибка при сохранении ресурса!" @@ -2011,7 +2018,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "Видимые области навигации" +msgstr "Видимая навигация" #: editor/editor_node.cpp msgid "" @@ -2352,7 +2359,7 @@ msgstr "Включительно" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Сущность" +msgstr "Self" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2459,14 +2466,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Неверный формат version.txt файла внутри шаблонов." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Неверный формат version.txt файла внутри шаблонов. Идентификатор ревизии не " -"верен." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Не найден version.txt файл в шаблонах." @@ -2521,10 +2520,6 @@ msgid "Failed:" msgstr "Не удалось:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Не удалось записать файл." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Загрузка завершена." @@ -3711,18 +3706,28 @@ msgid "Show Grid" msgstr "Показать сетку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Показывать помощники" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Показывать линейки" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Показывать направляющие" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Отображать начало координат" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Окно" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрировать на выбранном" @@ -4012,6 +4017,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Полиcетка не имеет поверхности для создания контура!" #: 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 "Невозможно создать контур!" @@ -4546,6 +4555,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "Тип:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Загрузить ресурс" @@ -4635,7 +4660,7 @@ msgstr "Сохранить всё" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Мягко перезагрузить скрипты" +msgstr "Мягко перезагрузить скрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" @@ -4832,10 +4857,6 @@ msgid "Toggle Comment" msgstr "Переключить комментарий" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Копировать вниз" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Свернуть/Развернуть строку" @@ -4848,6 +4869,10 @@ 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 "Список автозавершения" @@ -5532,18 +5557,16 @@ msgid "Move (After)" msgstr "Переместить (после)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "SpriteFrames" -msgstr "Кадры cпрайта" +msgstr "SpriteFrames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" -msgstr "StyleBox предпросмотр:" +msgstr "Предпросмотр StyleBox:" #: editor/plugins/style_box_editor_plugin.cpp -#, fuzzy msgid "StyleBox" -msgstr "Стиль" +msgstr "StyleBox" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" @@ -5666,6 +5689,16 @@ msgid "Checked Item" msgstr "Отмеченный элемент" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Добавить элемент" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Отмеченный элемент" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Имеет" @@ -5693,11 +5726,6 @@ msgstr "Вкладка 2" msgid "Tab 3" msgstr "Вкладка 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Тип:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Тип информации:" @@ -5924,7 +5952,7 @@ msgstr "Создать латку" #: editor/project_export.cpp msgid "Features" -msgstr "Свойства" +msgstr "Особенности" #: editor/project_export.cpp msgid "Custom (comma-separated):" @@ -5963,10 +5991,6 @@ msgid "Please choose an empty folder." msgstr "Пожалуйста, выберите пустую папку." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Пожалуйста, выберите папку, которая не содержит файл 'project.godot'." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Импортированный проект" @@ -5987,8 +6011,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Неверный путь к проекту (Что-то изменили?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Отсутствует project.godot в папке проекта." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Не удалось загрузить project.godot в пути проекта (ошибка %d). Возможно, он " +"отсутствует или поврежден." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6007,10 +6035,6 @@ msgid "Rename Project" msgstr "Переименовать проект" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Отсутствует project.godot в папке проекта." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Новый игровой проект" @@ -6154,7 +6178,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "Кнопка " +msgstr "Ключ " #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -6169,8 +6193,10 @@ msgid "Mouse Button" msgstr "Кнопка мыши" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Недопустимое название действия (подойдёт всё кроме '/' или ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6313,10 +6339,6 @@ msgid "Delete Item" msgstr "Удалить элемент" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Не может содержать '/' или ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Уже существует" @@ -6715,10 +6737,6 @@ msgstr "Вложенные ресурсы" msgid "Clear Inheritance" msgstr "Очистить наследование" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Открыть в редакторе" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Удалить узел(узлы)" @@ -6836,10 +6854,6 @@ msgstr "" "Нажмите, чтобы показать панель групп." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Экземпляр:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Открыть скрипт" @@ -6981,7 +6995,7 @@ msgstr "Встроенный Скрипт" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "Добавление скрипта" +msgstr "Прикрепить скрипт" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -7268,32 +7282,44 @@ msgid "Object can't provide a length." msgstr "Объект не может предоставить длину." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Удалить выделенную сетку" +msgid "Next Plane" +msgstr "Следующая поскость" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Дублировать выделенную сетку" +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 "Grid Map" -msgstr "Сеточная карта" +msgid "GridMap Delete Selection" +msgstr "Удалить выделенную сетку" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Привязать вид" +msgid "GridMap Duplicate Selection" +msgstr "Дублировать выделенную сетку" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Предыдущий этаж" +msgid "Grid Map" +msgstr "Сеточная карта" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Следующий этаж" +msgid "Snap View" +msgstr "Привязать вид" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7371,6 +7397,10 @@ msgstr "GridMap Параметры" msgid "Pick Distance:" msgstr "Расстояние выбора:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Генерация решения..." @@ -7400,6 +7430,10 @@ msgid "Mono" msgstr "Моно" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "О C# поддержке" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Создать C# решение" @@ -7415,6 +7449,10 @@ msgstr "Собрать проект" msgid "Warnings" msgstr "Предупреждения" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Конец трассировки внутреннего стека исключений" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7818,6 +7856,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Этот узел не имеет дочерних форм, поэтому он не может взаимодействовать с " +"пространством.\n" +"Рассмотрите возможность добавления CollisionShape2D или CollisionPolygon2D " +"дочерних узлов, для определения его формы." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -7965,6 +8007,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin требует дочерний узел ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Осталось: %d:%02d сек)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Построение полисетки: " @@ -7986,6 +8036,10 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon children nodes to define " "its shape." msgstr "" +"Этот узел не имеет дочерних форм, поэтому он не может взаимодействовать с " +"пространством.\n" +"Рассмотрите возможность добавления CollisionShape или CollisionPolygon " +"дочерних узлов, чтобы определить его форму." #: scene/3d/collision_polygon.cpp msgid "" @@ -8056,12 +8110,22 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "Свойство Path должно указывать на действительный Spatial узел." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Только один WorldEnvironment допускается на сцену или совокупность " "приведённых сцен." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8161,6 +8225,32 @@ msgstr "Ошибка загрузки шрифта." msgid "Invalid font size." msgstr "Недопустимый размер шрифта." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Недопустимое название действия (подойдёт всё кроме '/' или ':')." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Не может содержать '/' или ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Неверный формат version.txt файла внутри шаблонов. Идентификатор ревизии " +#~ "не верен." + +#~ msgid "Can't write file." +#~ msgstr "Не удалось записать файл." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Пожалуйста, выберите папку, которая не содержит файл 'project.godot'." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Отсутствует project.godot в папке проекта." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Отсутствует project.godot в папке проекта." + #~ msgid "Next" #~ msgstr "Следующий" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 33c848f91b..16f675df37 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -1385,6 +1385,10 @@ msgstr "" msgid "Clear Output" msgstr "Popis:" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2385,12 +2389,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2443,11 +2441,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy -msgid "Can't write file." -msgstr "Popis:" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3623,15 +3616,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Guides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3925,6 +3926,10 @@ 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 "" @@ -4465,6 +4470,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4748,10 +4769,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4764,6 +4781,10 @@ 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 "" @@ -5585,6 +5606,14 @@ 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 "Has" msgstr "" @@ -5612,11 +5641,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5879,10 +5903,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5904,7 +5924,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5925,10 +5947,6 @@ msgid "Rename Project" msgstr "Všetky vybrané" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6079,7 +6097,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6224,10 +6244,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6623,10 +6639,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6740,10 +6752,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "Popis:" @@ -7174,32 +7182,44 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Delete Selection" -msgstr "Všetky vybrané" +msgid "Next Plane" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Previous Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "Všetky vybrané" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +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 @@ -7280,6 +7300,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7309,6 +7333,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7324,6 +7352,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7840,6 +7872,14 @@ 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 "" @@ -7917,10 +7957,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8001,6 +8051,10 @@ msgstr "" msgid "Invalid font size." msgstr "" +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "Popis:" + #~ msgid "Meta+" #~ msgstr "Meta+" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 9e9db80294..74b469fc42 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -3,16 +3,17 @@ # Copyright (c) 2014-2018 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-2017. -# Matjaž Vitas <matjaz.vitas@gmail.com>, 2017. +# matevž lapajne <sivar.lapajne@gmail.com>, 2016-2018. +# Matjaž Vitas <matjaz.vitas@gmail.com>, 2017-2018. # Miha Komatar <miha.komatar@gmail.com>, 2018. # Simon Šander <simon.sand3r@gmail.com>, 2017. +# Yahara Octanis <yaharao55@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-25 22:27+0000\n" -"Last-Translator: Miha Komatar <miha.komatar@gmail.com>\n" +"PO-Revision-Date: 2018-05-03 07:41+0000\n" +"Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" "Language: sl\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -28,130 +29,128 @@ msgstr "Onemogočen" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Vsa izbira" +msgstr "Celotna izbira" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "" +msgstr "Animacija Spremeni čas ključne slike" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Anim spremeni prehod" +msgstr "Animacija Spremeni prehod" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "Animacija Spremeni transformacijo" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "" +msgstr "Animacija Spremeni vrednost ključne slike" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Anim izberi klic" +msgstr "Animacija Spremeni klic" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "" +msgstr "Animacija Dodaj sled" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "Animacija Podvoji ključe" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "Premakni animacijsko sled gor" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "Premakni animacijsko sled dol" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Odstrani animacijsko sled" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "Nastavite Prehode na:" +msgstr "Nastavi prehode na:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "Animacija Preimenuj sled" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "Animacija Spremeni interpolacijo sledi" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Animacija Spremeni način vrednosti sledi" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "Animacija Spremeni način ovijanja sledi" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Node Curve" -msgstr "Uredi Node Krivuljo" +msgstr "Uredi krivuljo vozlišča" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Selection Curve" -msgstr "Uredi Izbor Krivulje" +msgstr "Uredi Krivulje izbora" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "" +msgstr "Animacija Izbriši ključe" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Podvoji Izbrano" +msgstr "Podvoji izbrano" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "Podvoji transponirano" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "Odstrani Izbiro" +msgstr "Odstrani izbrano" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "Neprekinjeno" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "Diskretno" #: editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Sprožilec" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Animacija Dodaj ključ" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Animacija Premakni ključ" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Povečaj Izbiro" +msgstr "Povečaj izbiro" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Povečaj iz kazalca" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "Pojdite na Naslednji Korak" +msgstr "Pojdi na naslednji korak" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "Pojdite na Predhodni Korak" +msgstr "Pojdi na prejšnji korak" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -160,7 +159,7 @@ msgstr "Linearno" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "Konstanta" #: editor/animation_editor.cpp msgid "In" @@ -192,7 +191,7 @@ msgstr "Počisti Animacijo" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Ustvari NOVI trak za %s in vstavi ključ?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -244,7 +243,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "Približaj Animacijo" +msgstr "Približaj animacijo" #: editor/animation_editor.cpp msgid "Length (s):" @@ -252,7 +251,7 @@ msgstr "Dolžina (s):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "Dolžina animacije (v sekundah)." #: editor/animation_editor.cpp msgid "Step (s):" @@ -443,7 +442,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "Odstrani" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" @@ -530,7 +529,7 @@ msgstr "Ustvari" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Priljubljene:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" @@ -588,7 +587,7 @@ msgstr "" #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/script_create_dialog.cpp msgid "Path" -msgstr "" +msgstr "Pot" #: editor/dependency_editor.cpp msgid "Dependencies:" @@ -670,7 +669,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Raziskovalec Osamljenih Virov" #: editor/dependency_editor.cpp msgid "Delete selected files?" @@ -714,7 +713,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "" +msgstr "Upravljalnik Projekta " #: editor/editor_about.cpp msgid "Developers" @@ -889,7 +888,7 @@ msgstr "Izbriši Izbrano" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Zvok" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -1045,7 +1044,7 @@ msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "" +msgstr "Ime" #: editor/editor_autoload_settings.cpp msgid "Singleton" @@ -1053,7 +1052,7 @@ msgstr "" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "Posodabljanje Scene" #: editor/editor_data.cpp msgid "Storing local changes.." @@ -1061,11 +1060,11 @@ msgstr "" #: editor/editor_data.cpp msgid "Updating scene.." -msgstr "" +msgstr "Posodabljanje scene.." #: editor/editor_data.cpp msgid "[empty]" -msgstr "" +msgstr "[prazen]" #: editor/editor_data.cpp msgid "[unsaved]" @@ -1082,7 +1081,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Ustvarite Mapo" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1117,9 +1116,8 @@ msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberite Trenutno Mapo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1143,7 +1141,7 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Vse Datoteke (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" @@ -1213,7 +1211,7 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Mape & Datoteke:" #: editor/editor_file_dialog.cpp msgid "Preview:" @@ -1222,7 +1220,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "Datoteka:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." @@ -1373,7 +1371,7 @@ msgstr "" #: editor/editor_log.cpp msgid "Output:" -msgstr "" +msgstr "Izhod:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp @@ -1386,6 +1384,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -1433,7 +1435,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "Shranjevanje Scene" #: editor/editor_node.cpp msgid "Analyzing" @@ -1594,19 +1596,19 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "Odpri Sceno" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "" +msgstr "Odpri Osnovno Sceno" #: editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "" +msgstr "Hitro Odpri Sceno.." #: editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "" +msgstr "Hitro Odpri Skripto.." #: editor/editor_node.cpp msgid "Save & Close" @@ -1618,7 +1620,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Save Scene As.." -msgstr "" +msgstr "Shrani Sceno Kot.." #: editor/editor_node.cpp msgid "No" @@ -1670,11 +1672,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "" +msgstr "Hitro Zaženi Sceno.." #: editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "Zapri" #: editor/editor_node.cpp msgid "Exit the editor?" @@ -1750,7 +1752,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "" +msgstr "Počisti Nedavne Scene" #: editor/editor_node.cpp msgid "Save Layout" @@ -1795,15 +1797,15 @@ msgstr "" #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "" +msgstr "Dodaj novo Sceno." #: editor/editor_node.cpp msgid "Scene" -msgstr "" +msgstr "Scena" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "" +msgstr "Pojdite na predhodno odprte scene." #: editor/editor_node.cpp msgid "Next tab" @@ -1823,35 +1825,35 @@ msgstr "" #: editor/editor_node.cpp msgid "New Scene" -msgstr "" +msgstr "Nova Scena" #: editor/editor_node.cpp msgid "New Inherited Scene.." -msgstr "" +msgstr "Nova Podedovana Scena.." #: editor/editor_node.cpp msgid "Open Scene.." -msgstr "" +msgstr "Odpri Sceno.." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "" +msgstr "Shrani Sceno" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "" +msgstr "Shrani vse Scene" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "" +msgstr "Zapri Sceno" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "" +msgstr "Odpri Nedavno" #: editor/editor_node.cpp msgid "Convert To.." -msgstr "" +msgstr "Pretvori V.." #: editor/editor_node.cpp msgid "MeshLibrary.." @@ -1864,16 +1866,16 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Undo" -msgstr "" +msgstr "Razveljavi" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp msgid "Redo" -msgstr "" +msgstr "Ponovi" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "" +msgstr "Povrni Sceno" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." @@ -1881,11 +1883,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Project" -msgstr "" +msgstr "Projekt" #: editor/editor_node.cpp msgid "Project Settings" -msgstr "" +msgstr "Nastavitve Projekta" #: editor/editor_node.cpp msgid "Run Script" @@ -1893,23 +1895,23 @@ msgstr "" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Izvozi" #: editor/editor_node.cpp msgid "Tools" -msgstr "" +msgstr "Orodja" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "Zapri na Seznam Projektov" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "" +msgstr "Razhroščevalnik" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "" +msgstr "Uvajanje z Oddaljenim Razhroščevanjem" #: editor/editor_node.cpp msgid "" @@ -1919,7 +1921,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Kratko Uvajanje z Omrežjem FS" #: editor/editor_node.cpp msgid "" @@ -1976,9 +1978,8 @@ msgid "" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "Uredi" +msgstr "Urejevalnik" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -1998,7 +1999,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Help" -msgstr "" +msgstr "Pomoč" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Classes" @@ -2130,7 +2131,7 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Uvozi" #: editor/editor_node.cpp msgid "Node" @@ -2138,11 +2139,11 @@ msgstr "" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "" +msgstr "DatotečniSistem" #: editor/editor_node.cpp msgid "Output" -msgstr "" +msgstr "Izhod" #: editor/editor_node.cpp msgid "Don't Save" @@ -2198,7 +2199,7 @@ msgstr "" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "" +msgstr "Odprite Asset Library" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -2380,12 +2381,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2438,10 +2433,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -2674,12 +2665,12 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Move" -msgstr "" +msgstr "Premakni" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "" +msgstr "Preimenuj" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3066,7 +3057,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "Animacija" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" @@ -3302,24 +3293,24 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" -msgstr "" +msgstr "prvi" #: editor/plugins/asset_library_editor_plugin.cpp msgid "prev" -msgstr "" +msgstr "prejšnji" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" -msgstr "" +msgstr "naslednji" #: editor/plugins/asset_library_editor_plugin.cpp msgid "last" -msgstr "" +msgstr "zadnji" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "Vse" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -3328,7 +3319,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "" +msgstr "Razvrsti:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Reverse" @@ -3337,15 +3328,15 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" -msgstr "" +msgstr "Kategorija:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "Stran:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Support.." -msgstr "" +msgstr "Podpora.." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3471,11 +3462,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" -msgstr "" +msgstr "Izberite Način" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Povlecite: Zavrti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" @@ -3487,15 +3478,15 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt+RMB: Izbira globine" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Način Premika" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Način Vrtenja" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3503,6 +3494,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Ob kliku prikaži seznam vseh objektov na tem mestu.\n" +"(isto kot Alt+RMB v načinu izbire)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -3572,12 +3565,12 @@ 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 "Izbrani predmet zaklenite na svoje mesto (ga ni mogoče premakniti)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "Odklenite izbrani predmet (ga lahko premaknete)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." @@ -3610,7 +3603,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "View" -msgstr "" +msgstr "Pogled" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3618,15 +3611,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3919,6 +3920,10 @@ 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 "" @@ -4380,7 +4385,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: Vrtenje" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" @@ -4457,6 +4462,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4591,7 +4612,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Zaženi" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" @@ -4676,7 +4697,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "" +msgstr "Razhroščevalnik" #: editor/plugins/script_editor_plugin.cpp msgid "" @@ -4741,10 +4762,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Izbriši Izbrano" @@ -4758,6 +4775,10 @@ 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 "" @@ -5164,9 +5185,8 @@ msgid "XForm Dialog" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberite Način (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -5174,18 +5194,21 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Povlecite: Zavrtite\n" +"Alt+Drag: Premaknite\n" +"Alt+RMB: Izbira globine" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" -msgstr "" +msgstr "Način Premika (W)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode (E)" -msgstr "" +msgstr "Način Vrtenja (E)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "Način Obsega (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" @@ -5193,11 +5216,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" -msgstr "" +msgstr "Lokalno prostorski način (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Mode (%s)" -msgstr "" +msgstr "Način Zaskoka (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -5267,15 +5290,15 @@ msgstr "Preklopi na Zaustavitev" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "" +msgstr "Preoblikovanje" #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap.." -msgstr "" +msgstr "Preoblikuj Zaskok.." #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." -msgstr "" +msgstr "Preoblikovanje Dialoga.." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5320,11 +5343,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "Nastavitve Zaskočenja" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Prestavi Zaskočenje:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" @@ -5352,7 +5375,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Preoblikovanje Sprememb" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" @@ -5460,7 +5483,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "" +msgstr "Način Postavljanja:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" @@ -5577,6 +5600,14 @@ 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 "Has" msgstr "" @@ -5604,11 +5635,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5862,15 +5888,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Please choose a 'project.godot' file." -msgstr "" +msgstr "Izberite datoteko 'projekt.godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." -msgstr "" - -#: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" +msgstr "Izberite prazno mapo." #: editor/project_manager.cpp msgid "Imported Project" @@ -5893,7 +5915,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5914,16 +5938,12 @@ msgid "Rename Project" msgstr "Preimenuj Funkcijo" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Novi Projekt Igre" #: editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Uvoz Obstoječega Projekta" #: editor/project_manager.cpp msgid "Import & Edit" @@ -5931,12 +5951,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Ustvarite Nov Projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Ustvari" +msgstr "Ustvari & Uredi" #: editor/project_manager.cpp msgid "Install Project:" @@ -5948,19 +5967,19 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Ime Projekta:" #: editor/project_manager.cpp msgid "Create folder" -msgstr "" +msgstr "Ustvarite mapo" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Pot Projekta:" #: editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Brskaj" #: editor/project_manager.cpp msgid "Unnamed Project" @@ -6009,32 +6028,31 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Manager" -msgstr "" +msgstr "Upravljalnik Projekta" #: editor/project_manager.cpp msgid "Project List" -msgstr "" +msgstr "Seznam Projektov" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Preglej" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Izberite Mapo za Skeniranje" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nov Projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Templates" -msgstr "Odstrani Spremenljivko" +msgstr "Predloge" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "Izhod" #: editor/project_manager.cpp msgid "Restart Now" @@ -6049,6 +6067,8 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" +"Trenutno nimate projektov.\n" +"Želite raziskovati uradne primere projektov v Asset Library?" #: editor/project_settings_editor.cpp msgid "Key " @@ -6067,7 +6087,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6213,10 +6235,6 @@ msgid "Delete Item" msgstr "Izbriši Izbrano" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6439,7 +6457,7 @@ msgstr "" #: editor/property_editor.cpp msgid "[Empty]" -msgstr "" +msgstr "[Prazen]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" @@ -6611,10 +6629,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6725,10 +6739,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7157,32 +7167,44 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Delete Selection" -msgstr "Izbriši Izbrano" +msgid "Next Plane" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Previous Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "Izbriši Izbrano" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +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 @@ -7262,6 +7284,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7291,6 +7317,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7306,20 +7336,24 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"Node je bil sprejet brez potrebnega pomnilnika, pravilen postopek je opisan " -"v dokumentaciji!" +"Vozlišče se je ustavilo brez delovnega spomina! Prosimo preberite si v " +"dokumentaciji, kako pravilno ustaviti vozlišče." #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"Node pridobljen, vendar se ne vrne v funkcijalno stanje v prvem delavnem " +"Vozlišče se je ustavilo, vendar ni vrnilo stanje funkcije v prvem delovnem " "spominu." #: modules/visual_script/visual_script.cpp @@ -7327,16 +7361,17 @@ msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" -"Vrnjena vrednost mora biti dodeljena prvemu elementu v node-delavnemu " -"spominu! Prosim, da popraviš node." +"Vrnjena vrednost mora biti dodeljena prvemu elementu delovnega spomina " +"vozlišča! Prosimo popravite vozlišče." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "Node je vrnil napačno zaporedje na izhodu: " +msgstr "Vozlišče je vrnilo napačno sekvenco na izhodu: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "Zaporedni bit najden, vendar ne node v skladu, prijavi napako!" +msgstr "" +"Sekvenčni bit je bil najden, vozlišče na skladu pa ne; prijavite napako!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -7410,7 +7445,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "Dodaj Node" +msgstr "Dodaj vozlišče" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -7446,13 +7481,13 @@ msgid "Hold Ctrl to drop a Variable Setter." msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Preload Node" -msgstr "Dodaj Node" +msgstr "Dodaj prednaloženo vozlišče" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Add Node(s) From Tree" -msgstr "Dodaj Node(e) iz Drevesa" +msgstr "Dodaj vozlišče(a) iz drevesa" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -7587,9 +7622,8 @@ msgid "Delete Selected" msgstr "Izbriši Izbrano" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Find Node Type" -msgstr "Najdi Node Type" +msgstr "Poišči tip vozlišča" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -7621,15 +7655,15 @@ msgstr "Neveljaven indeks lastnosti imena." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "Osnovni objekt ni Node!" +msgstr "Začetni objekt ni vozlišče!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "Pot ne vodi do Node!" +msgstr "Pot ne vodi do vozlišča!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "Neveljaven indeks lastnosti imena '%s' v node %s." +msgstr "Neveljaven indeks lastnosti imena '%s' v vozlišču %s." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -7649,7 +7683,7 @@ msgstr "VariableSet ni najden v skripti: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "Custom node nima _step() metode, grafa ni mogoče obdelati." +msgstr "Vozlišče po meri nima metode _step(); grafa ni mogoče obdelati." #: modules/visual_script/visual_script_nodes.cpp msgid "" @@ -7835,6 +7869,14 @@ 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 "" @@ -7912,10 +7954,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -7930,20 +7982,19 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Raw Mode" -msgstr "" +msgstr "Neobdelan način" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "Dodaj trenutno barvo za prednastavitev" +msgstr "Dodaj trenutno barvo kot prednastavljeno" #: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Opozorilo!" #: scene/gui/dialogs.cpp -#, fuzzy msgid "Please Confirm..." -msgstr "Potrdite..." +msgstr "Prosimo Potrdite..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 1c53884f32..2c2b1eb001 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -1402,6 +1402,10 @@ msgstr "Обриши" msgid "Clear Output" msgstr "Излаз" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Грешка при чувању ресурса!" @@ -2453,14 +2457,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Неважећи формат датотеке version.txt унутар шаблона." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Неважећи формат датотеке „version.txt“ унутар шаблона. „Revision“ није " -"важећи идентификатор." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "„version.txt“ није пронаћен у шаблону." @@ -2517,10 +2513,6 @@ msgid "Failed:" msgstr "Неуспех:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Неуспех при записивању датотеке." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Преузимање успешно." @@ -3710,18 +3702,28 @@ msgid "Show Grid" msgstr "Покажи мрежу" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Покажи помагаче" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Покажи лељире" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Покажи водиче" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Прикажи центар" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 прозор" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрирај одабрано" @@ -4011,6 +4013,10 @@ 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 "Неуспех при прављењу ивица!" @@ -4548,6 +4554,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "Тип:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Учитај ресурс" @@ -4840,10 +4862,6 @@ msgid "Toggle Comment" msgstr "Коментариши" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Клонирај доле" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "Откриј линију" @@ -4857,6 +4875,10 @@ 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 "Потпун симбол" @@ -5681,6 +5703,16 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Додај ствар" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "CheckBox Radio1" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Има" @@ -5710,11 +5742,6 @@ msgstr "Tab 2" msgid "Tab 3" msgstr "Tab 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Тип:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Тип податка:" @@ -5988,10 +6015,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6013,7 +6036,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -6033,10 +6058,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6187,7 +6208,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6332,10 +6355,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6730,10 +6749,6 @@ msgstr "Ресурси" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6843,10 +6858,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7271,31 +7282,45 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +#, fuzzy +msgid "Next Plane" +msgstr "Следећи таб" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Plane" +msgstr "Претходни таб" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 "Grid Map" -msgstr "Мапа мреже" +msgid "GridMap Delete Selection" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Претодни спрат" +msgid "Grid Map" +msgstr "Мапа мреже" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7374,6 +7399,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -7408,6 +7437,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Направи ивице" @@ -7425,6 +7458,10 @@ msgstr "Пројекат" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7930,6 +7967,14 @@ 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 "" @@ -8007,10 +8052,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8091,6 +8146,16 @@ msgstr "" msgid "Invalid font size." msgstr "Неважећа величина фонта." +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Неважећи формат датотеке „version.txt“ унутар шаблона. „Revision“ није " +#~ "важећи идентификатор." + +#~ msgid "Can't write file." +#~ msgstr "Неуспех при записивању датотеке." + #~ msgid "Next" #~ msgstr "Следеће" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po new file mode 100644 index 0000000000..d7cb85af1b --- /dev/null +++ b/editor/translations/sr_Latn.po @@ -0,0 +1,7954 @@ +# Serbian (latin) translation of the Godot Engine editor +# Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2018 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. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2018-04-25 14:41+0000\n" +"Last-Translator: Milos Ponjavusic <brane@branegames.com>\n" +"Language-Team: Serbian (latin) <https://hosted.weblate.org/projects/godot-" +"engine/godot/sr_Latn/>\n" +"Language: sr_Latn\n" +"Content-Type: text/plain; charset=UTF-8\n" +"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 3.0-dev\n" + +#: editor/animation_editor.cpp +msgid "Disabled" +msgstr "Onemogućeno" + +#: editor/animation_editor.cpp +msgid "All Selection" +msgstr "Sve sekcije" + +#: editor/animation_editor.cpp +msgid "Anim Change Keyframe Time" +msgstr "Animacija Promjeni Vrijeme Ključnog Kadra" + +#: editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "Animacija Promjeni Tranziciju" + +#: editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Animacija Promjeni Transformaciju" + +#: editor/animation_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Animacija Promjeni Vrijednost Ključnog Kadra" + +#: editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "Animacija Promjeni Poziv" + +#: editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Animacija Dodaj Kanal" + +#: editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Animacija Uduplaj Ključeve" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "Pomjeri Kanal Animacije Gore" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "Pomjeri Kanal Animacije Dole" + +#: editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Odstrani Kanal Animacije" + +#: editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Postavi tranzicije na:" + +#: editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Animacija Preimenuj Kanal" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "Animacija Promjeni Interpolaciju Kanala" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "Animacija Promjeni Vrijednosni Režim Kanala" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Wrap Mode" +msgstr "Animacija Promjeni Režim Omotavanja Kanala" + +#: editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "Izmjeni Krivulju Čvora" + +#: editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "Izmjeni Selekciju Krivulje" + +#: editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "Animacija Obriši Ključeve" + +#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "Uduplaj Selekciju" + +#: editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "Obriši Selekciju" + +#: editor/animation_editor.cpp +msgid "Continuous" +msgstr "Neprekidna" + +#: editor/animation_editor.cpp +msgid "Discrete" +msgstr "Diskretna" + +#: editor/animation_editor.cpp +msgid "Trigger" +msgstr "Okidač" + +#: editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "Animacija Dodaj Ključ" + +#: editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "Animacija Pomjeri Ključeve" + +#: editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "Skaliraj Selekciju" + +#: editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "Skaliraj od Kursora" + +#: editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "Otiđi Na Sljedeći Korak" + +#: editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "Otiđi Na Prethodni Korak" + +#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "Linearna" + +#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "Kontanta" + +#: editor/animation_editor.cpp +msgid "In" +msgstr "U" + +#: editor/animation_editor.cpp +msgid "Out" +msgstr "Izvan" + +#: editor/animation_editor.cpp +msgid "In-Out" +msgstr "U-Izvan" + +#: editor/animation_editor.cpp +msgid "Out-In" +msgstr "Izvan-U" + +#: editor/animation_editor.cpp +msgid "Transitions" +msgstr "Tranzicije" + +#: editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "Optimizuj Animaciju" + +#: editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "Počisti Animaciju" + +#: editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Napravi Novi kanal za %s i dodaj ključ?" + +#: editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Napravi %d novih kanala i dodaj ključeve?" + +#: editor/animation_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp +msgid "Create" +msgstr "Napravi" + +#: editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "Animacija Napravi i Dodaj" + +#: editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Animacija Dodaj kanal i ključ" + +#: editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "Animacija dodaj ključ" + +#: editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up" +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 "No Matches" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replaced %d occurrence(s)." +msgstr "" + +#: editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.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 +msgid "Zoom In" +msgstr "" + +#: editor/code_editor.cpp +msgid "Zoom Out" +msgstr "" + +#: editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: editor/code_editor.cpp editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Target method not found! Specify a valid method or attach a script to target " +"Node." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect To Node:" +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/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/theme_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 "Path to Node:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_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 "Connect '%s' to '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect.." +msgstr "" + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +#: modules/visual_script/visual_script_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/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +msgid "Search:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.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 not take effect unless reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will 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 +#: editor/script_create_dialog.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.cpp editor/editor_node.cpp editor/filesystem_dock.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.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)" +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)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Cannot remove:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Scene failed to load 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 "Owns" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Delete selected files?" +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/project_export.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete" +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 "Thanks!" +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 "" + +#: 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 "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 "Thirdparty License" +msgstr "" + +#: editor/editor_about.cpp +msgid "" +"Godot Engine relies on a number of thirdparty free and open source " +"libraries, all compatible with the terms of its MIT license. The following " +"is an exhaustive list of all such thirdparty 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 "Uncompressing Assets" +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 +#: editor/plugins/asset_library_editor_plugin.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 "Audio Bus, Drag and 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/tile_map_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 'res://default_bus_layout.tres' file." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.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 +#: editor/plugins/animation_player_editor_plugin.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_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +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 +msgid "Enable" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_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_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 +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 +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 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 +#: 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 "Packing" +msgstr "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +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 Current 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 "Show In File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder.." +msgstr "" + +#: editor/editor_file_dialog.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/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 scene/gui/file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/script_editor_debugger.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 "(Re)Importing Assets" +msgstr "" + +#: editor/editor_help.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: editor/editor_help.cpp editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations:" +msgstr "" + +#: editor/editor_help.cpp +msgid "enum " +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Online Tutorials:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There are currently no tutorials for this class, you can [color=$color][url=" +"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" +"url][/color]." +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Description:" +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 "Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Description:" +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.cpp +msgid "Search Text" +msgstr "" + +#: editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "" + +#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/property_editor.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_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As.." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/scene_tree_dock.cpp +msgid "I see.." +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 +msgid "Can't open '%s'." +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 "" +"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " +"be satisfied." +msgstr "" + +#: editor/editor_node.cpp +msgid "Failed to load resource." +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 "Error trying to save layout!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored default layout to 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 will not 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 will not 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 will not be kept.\n" +"Please read the documentation relevant to debugging to better understand " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand all properties" +msgstr "" + +#: editor/editor_node.cpp +msgid "Collapse all properties" +msgstr "" + +#: editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +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 "Current scene was never saved, please save it prior to running." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +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 "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 "Revert" +msgstr "" + +#: editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +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 "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' 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 editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Ugh" +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 "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 +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 "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 +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +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 +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp +msgid "Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor" +msgstr "" + +#: editor/editor_node.cpp editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "Help" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Q&A" +msgstr "" + +#: editor/editor_node.cpp +msgid "Issue Tracker" +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" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop" +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 "Spins when the editor window repaints!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Disable Update Spinner" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Save As.." +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Password:" +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_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Start Profiling" +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 editor/script_editor_debugger.cpp +msgid "Time:" +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_run_native.cpp +msgid "Select device from the list" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "" +"No runnable export preset found for this platform.\n" +"Please add a runnable preset in the export menu." +msgstr "" + +#: 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_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +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 "Re-Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Installed)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download" +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." +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 "" +"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 +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request Failed." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.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 "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 "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 "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select mirror from list: " +msgstr "" + +#: editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot navigate to '%s' as it has not been found in the file system!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +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 +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "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 "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 "Expand all" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Collapse all" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Rename.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scene(s)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +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_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +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/cube_grid_theme_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 "Saving.." +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 " Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp editor/property_editor.cpp +msgid "Preset.." +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Create a new polygon from scratch" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Delete points" +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 +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 "ERROR: Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: 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 +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add 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 "ERROR: No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: 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 "ERROR: 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 "Create new animation in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +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 "Edit Target Blend Times" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +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 "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/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.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_player_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations.." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters.." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "AnimationTree" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +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 "Can't resolve hostname:" +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 "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +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 "Fetching:" +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 "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 "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +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 +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +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 "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 +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +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 "Move Pivot" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new 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 new horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal and vertical guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +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 +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_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 +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate 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 "Toggles snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure 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 +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 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 +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show 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 +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "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 "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +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 "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set pivot at mouse position" +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 "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Ok" +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 Poly3D" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.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/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +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 "" +"No OccluderPolygon2D resource on this node.\n" +"Create and assign one?" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex 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 Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +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 "Create Convex Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh.." +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/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 "Parent has no solid faces to populate." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +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_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +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 +msgid "Error loading image:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image.." +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +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 "Generate Visibility 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 "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 +#: 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 "Split Segment (in curve)" +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_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/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +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 +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_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/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/spatial_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/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 +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_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 "Paste" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +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 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 "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As.." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid " Class Reference" +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 "New" +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 "Show In File System" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +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 "Save Theme As" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find.." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +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 "Step Into" +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 class hierarchy." +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 "Create Script" +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 +msgid "Reload" +msgstr "" + +#: editor/plugins/script_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 "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Capitalize" +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 +#: 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/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 "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 +#: 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 "Goto Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert To Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert To Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Replace.." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Function.." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Line.." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +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 "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 "FPS" +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 with view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "OK :(" +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 "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 "Doppler Enable" +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 "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode (Q)" +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 "Move Mode (W)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Space Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Mode (%s)" +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 "Align Selection With View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Select" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Move" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Rotate" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Scale" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +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 "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 "Skeleton Gizmo visibility" +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/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +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 Loop" +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 "Animations" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +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 "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 "SpriteFrames" +msgstr "" + +#: editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.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 +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +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 +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.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 "CheckBox Radio1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "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 "Has" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Have,Many,Several,Options!" +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 "Data Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/theme_editor_plugin.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" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase 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 "Erase selection" +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 "Mirror X" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +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 "Tile Set" +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 editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Autotiles" +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." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: set bit on.\n" +"RMB: set bit off." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select current edited sub-tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select sub-tile to change its priority." +msgstr "" + +#: editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete patch '%s' from list?" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +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 "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 (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "Patches" +msgstr "" + +#: editor/project_export.cpp +msgid "Make Patch" +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 "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +msgid "The path does not exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose an empty folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +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 "The following files failed extraction from package:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game 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 "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +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 \"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 more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The UI will update next time the editor or project manager starts." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project List" +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 "Templates" +msgstr "" + +#: editor/project_manager.cpp +msgid "Exit" +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 don't currently have any projects.\n" +"Would you like to explore the official example projects in the Asset Library?" +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 "Action '%s' already exists!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Control+" +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 "Button 6" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 7" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 8" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 9" +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 "Device" +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 "Already existing" +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 "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 editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override For.." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +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 only selected locales" +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/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease Out" +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 "New Script" +msgstr "" + +#: editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp +msgid "Show in File System" +msgstr "" + +#: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_editor.cpp +msgid "On" +msgstr "" + +#: editor/property_editor.cpp +msgid "[Empty]" +msgstr "" + +#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp +msgid "Set" +msgstr "" + +#: editor/property_editor.cpp +msgid "Properties:" +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/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +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 editor/script_create_dialog.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +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 "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 "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 "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Discard Instancing" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Makes Sense!" +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 "Remove 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 "Delete Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.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 "Filter nodes" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach a new or existing script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear a script for 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_dock.cpp +msgid "Clear!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connection(s) and group(s)\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connections.\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in 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" +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 "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 "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 "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path 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 "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +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 "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 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 "Create new script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Load existing script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Inherits" +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 "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Function:" +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 modules/mono/editor/mono_bottom_panel.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 "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 "Variable" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "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 "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video Mem" +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/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 Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_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 Ray Shape Length" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +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 "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +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 Duplicate Selection" +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 "Create Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Exterior Connector" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Erase Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear 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/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating solution..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating C# project..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to save solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Done" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create C# project." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Mono" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Create C# solution" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Build Project" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Warnings" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +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 "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +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 "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +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 "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 "Condition" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Switch" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Iterator" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "While" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Return" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Get" +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 "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 "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +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 "Paste Nodes" +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 "" + +#: 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 "" + +#: 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 children shapes, so it can't interact with the space.\n" +"Consider adding CollisionShape2D or CollisionPolygon2D children nodes 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/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 scene/3d/particles.cpp +msgid "" +"A material to process the particles is not assigned, so no behavior is " +"imprinted." +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/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D 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 will not 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 will not 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 children shapes, so it can't interact with the space.\n" +"Consider adding CollisionShape or CollisionPolygon children nodes 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/gi_probe.cpp +msgid "Plotting Meshes" +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 "" +"Nothing is visible because meshes have not been assigned to draw passes." +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/remote_transform.cpp +msgid "Path property must point to a valid Spatial node to work." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/scenario_fx.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/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/gui/color_picker.cpp +msgid "Raw Mode" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Select this Folder" +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 though, but they will " +"hide upon running." +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/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 5779cb56b1..4a861d1b76 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -1568,6 +1568,10 @@ msgstr "Rensa" msgid "Clear Output" msgstr "Output:" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Error saving resource!" @@ -2699,12 +2703,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2760,10 +2758,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Download Complete." msgstr "Nedladdning Klar." @@ -3987,15 +3981,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -4294,6 +4296,10 @@ 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 "" @@ -4839,6 +4845,24 @@ msgid "Resource clipboard is empty!" 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 +#: editor/scene_tree_editor.cpp +#, fuzzy +msgid "Instance:" +msgstr "Instans:" + +#: 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 +#, fuzzy +msgid "Type:" +msgstr "Typ:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Ladda Resurs" @@ -5151,10 +5175,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -5167,6 +5187,10 @@ 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 "" @@ -6024,6 +6048,14 @@ 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 "Has" msgstr "" @@ -6052,12 +6084,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -#, fuzzy -msgid "Type:" -msgstr "Typ:" - #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Data Type:" @@ -6331,10 +6357,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6357,7 +6379,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -6378,10 +6402,6 @@ msgid "Rename Project" msgstr "Byt namn på Projekt" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp #, fuzzy msgid "New Game Project" msgstr "Nytt Spelprojekt" @@ -6551,7 +6571,9 @@ msgid "Mouse Button" msgstr "Musknapp" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6698,10 +6720,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -7122,10 +7140,6 @@ msgstr "Resurser" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp #, fuzzy msgid "Delete Node(s)" @@ -7244,11 +7258,6 @@ msgstr "" #: editor/scene_tree_editor.cpp #, fuzzy -msgid "Instance:" -msgstr "Instans:" - -#: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" msgstr "Öppna Skript" @@ -7708,11 +7717,25 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +#, fuzzy +msgid "Next Plane" +msgstr "Nästa flik" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Previous Plane" +msgstr "Föregående flik" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7720,19 +7743,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7815,6 +7838,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Generating solution..." @@ -7849,6 +7876,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "Skapa Prenumeration" @@ -7867,6 +7898,10 @@ msgstr "Projekt" msgid "Warnings" msgstr "Varning" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8414,6 +8449,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin kräver en ARVRCamera Barn-Node" #: 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 "" @@ -8500,10 +8543,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 16e646b2a0..e7269ffa0e 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -1372,6 +1372,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2365,12 +2369,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2423,10 +2421,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3590,15 +3584,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3887,6 +3889,10 @@ 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 "" @@ -4421,6 +4427,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4703,10 +4725,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4719,6 +4737,10 @@ 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 "" @@ -5532,6 +5554,14 @@ 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 "Has" msgstr "" @@ -5559,11 +5589,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5823,10 +5848,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5847,7 +5868,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5867,10 +5890,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6018,7 +6037,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6162,10 +6183,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6558,10 +6575,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6671,10 +6684,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7097,11 +7106,23 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +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 @@ -7109,19 +7130,19 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Grid Map" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7200,6 +7221,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7229,6 +7254,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7244,6 +7273,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7743,6 +7776,14 @@ 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 "" @@ -7820,10 +7861,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/th.po b/editor/translations/th.po index 4f8b834985..74e2270f2c 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-20 09:49+0000\n" +"PO-Revision-Date: 2018-03-10 03:46+0000\n" "Last-Translator: Poommetee Ketson <poommetee@protonmail.com>\n" "Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/" "th/>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 2.20-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -102,11 +102,11 @@ msgstr "ลบคีย์แอนิเมชัน" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "ทำซ้ำในแทร็กเดิม" +msgstr "ทำซ้ำที่เลือก" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "ทำซ้ำในแทร็กที่เลือก" +msgstr "ทำซ้ำเปลี่ยนแทร็ก" #: editor/animation_editor.cpp msgid "Remove Selection" @@ -1382,6 +1382,10 @@ msgstr "ลบ" msgid "Clear Output" msgstr "ลบข้อความ" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "บันทึกรีซอร์สผิดพลาด!" @@ -2404,12 +2408,6 @@ msgid "Invalid version.txt format inside templates." msgstr "รูปแบบของ version.txt ในแม่แบบไม่ถูกต้อง" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "รูปแบบของ version.txt ในแม่แบบไม่ถูกต้อง หมายเลขรุ่น revision ต้องใช้ระบุได้" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "ไม่พบ version.txt ในแม่แบบ" @@ -2462,10 +2460,6 @@ msgid "Failed:" msgstr "ผิดพลาด:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "เขียนไฟล์ไม่ได้" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "ดาวน์โหลดเสร็จสิ้น" @@ -3639,18 +3633,28 @@ msgid "Show Grid" msgstr "แสดงเส้นตาราง" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "แสดงตัวช่วย" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "แสดงไม้บรรทัด" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "แสดงเส้นนำ" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "แสดงจุดกำเนิด" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 มุมมอง" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "ให้สิ่งที่เลือกอยู่กลางจอ" @@ -3940,6 +3944,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Mesh ไม่มีพื้นผิวให้สร้างเส้นขอบได้!" #: 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 "สร้างเส้นรอบรูปไม่ได้!" @@ -4474,6 +4482,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "ประเภท:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "โหลดรีซอร์ส" @@ -4758,10 +4782,6 @@ msgid "Toggle Comment" msgstr "เปิด/ปิด ความคิดเห็น" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "คัดลอกบรรทัดลงมา" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "ซ่อน/แสดงบรรทัด" @@ -4774,6 +4794,10 @@ 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 "เสนอแนะคำเต็ม" @@ -5590,6 +5614,16 @@ msgid "Checked Item" msgstr "ไอเทมมีเครื่องหมาย" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "เพิ่มไอเทม" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "ไอเทมมีเครื่องหมาย" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "มี" @@ -5617,11 +5651,6 @@ msgstr "แท็บ 2" msgid "Tab 3" msgstr "แท็บ 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "ประเภท:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "ชนิดข้อมูล:" @@ -5680,15 +5709,15 @@ msgstr "ค้นหา tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "สลับเปลี่ยน" +msgstr "สลับแกน" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "สะท้อนบนล่าง" +msgstr "สะท้อนซ้ายขวา" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "สะท้อนซ้ายขวา" +msgstr "สะท้อนบนล่าง" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5883,10 +5912,6 @@ msgid "Please choose an empty folder." msgstr "กรุณาเลือกโฟลเดอร์ว่างเปล่า" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "กรุณาเลือกโฟลเดอร์ที่ไม่มีไฟล์ 'project.godot'" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "นำเข้าโปรเจกต์แล้ว" @@ -5907,8 +5932,11 @@ msgid "Invalid project path (changed anything?)." msgstr "ตำแหน่งโปรเจกต์ผิดพลาด (ได้แก้ไขอะไรไปหรือไม่?)" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "ไม่พบไฟล์ project.godot" +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"โหลดไฟล์ project.godot ในโฟลเดอร์โปรเจกต์ไม่ได้ (ข้อผิดพลาด %d) ไฟล์อาจสูญหายหรือเสียหาย" #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -5927,10 +5955,6 @@ msgid "Rename Project" msgstr "เปลี่ยนชื่อโปรเจกต์" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "ไม่พบไฟล์ project.godot" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "โปรเจกต์ใหม่" @@ -6086,8 +6110,10 @@ msgid "Mouse Button" msgstr "ปุ่มเมาส์" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "ใช้ชื่อนี้ไม่ได้ (มี '/' หรือ ':')" +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6230,10 +6256,6 @@ msgid "Delete Item" msgstr "ลบไอเทม" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "ต้องไม่มี '/' หรือ ':'" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "มีอยู่ก่อนแล้ว" @@ -6343,11 +6365,11 @@ msgstr "รีซอร์ส:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "แทนที่ตามท้องถิ่น:" +msgstr "แทนที่ตามภูมิภาค:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "ท้องถิ่น" +msgstr "ภูมิภาค" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -6626,10 +6648,6 @@ msgstr "รีซอร์สย่อย" msgid "Clear Inheritance" msgstr "ลบการสืบทอด" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "เปิดในโปรแกรมแก้ไข" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ลบโหนด" @@ -6745,10 +6763,6 @@ msgstr "" "คลิกเพื่อแสดงแผงกลุ่ม" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "อินสแตนซ์:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "เปิดสคริปต์" @@ -7175,32 +7189,44 @@ msgid "Object can't provide a length." msgstr "ไม่สามารถบอกความยาวของวัตถุได้" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "ลบที่เลือกใน GridMap" +msgid "Next Plane" +msgstr "ระนาบถัดไป" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "ทำซ้ำใน GridMap" +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 "Grid Map" -msgstr "จำกัดด้วยเส้นตาราง" +msgid "GridMap Delete Selection" +msgstr "ลบที่เลือกใน GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "บังคับแนวตาราง" +msgid "GridMap Duplicate Selection" +msgstr "ทำซ้ำใน GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "ไปชั้นล่าง" +msgid "Grid Map" +msgstr "จำกัดด้วยเส้นตาราง" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "ไปชั้นบน" +msgid "Snap View" +msgstr "บังคับแนวตาราง" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7278,6 +7304,10 @@ msgstr "การตั้งค่า GridMap" msgid "Pick Distance:" msgstr "ระยะการเลือก:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "กำลังสร้าง solution..." @@ -7307,6 +7337,10 @@ msgid "Mono" msgstr "โมโน" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "เกี่ยวกับการสนับสนุน C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "สร้าง C# solution" @@ -7322,6 +7356,10 @@ msgstr "Build โปรเจกต์" msgid "Warnings" msgstr "คำเตือน" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "สิ้นสุดสแตคข้อผิดพลาดภายใน" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7837,6 +7875,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin ต้องมี ARVRCamera เป็นโหนดลูก" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(เหลืออีก: %d:%02d วิ)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "วางแนว meshes: " @@ -7924,10 +7970,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "ต้องแก้ไข Path ให้ชี้ไปยังโหนด Spatial จึงจะทำงานได้" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "จะมี WorldEnvironment ได้เพียงโหนดเดียวในฉาก (หรือกลุ่มของฉากที่เป็นอินสแตนซ์)" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8018,6 +8074,29 @@ msgstr "ผิดพลาดขณะโหลดฟอนต์" msgid "Invalid font size." msgstr "ขนาดฟอนต์ผิดพลาด" +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "ใช้ชื่อนี้ไม่ได้ (มี '/' หรือ ':')" + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "ต้องไม่มี '/' หรือ ':'" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "รูปแบบของ version.txt ในแม่แบบไม่ถูกต้อง หมายเลขรุ่น revision ต้องใช้ระบุได้" + +#~ msgid "Can't write file." +#~ msgstr "เขียนไฟล์ไม่ได้" + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "กรุณาเลือกโฟลเดอร์ที่ไม่มีไฟล์ 'project.godot'" + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "ไม่พบไฟล์ project.godot" + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "ไม่พบไฟล์ project.godot" + #~ msgid "Next" #~ msgstr "ต่อไป" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 934077d896..5e4a18ce28 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -9,6 +9,7 @@ # Enescan Yerlikaya <enescanyerlikaya@gmail.com>, 2017. # Fatih Mert Doğancan <fatihmertdogancan@hotmail.com>, 2017. # hubbyist <hub@legrud.net>, 2017. +# H.Hüseyin CİHANGİR <hashusfb@gmail.com>, 2018. # M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016. # Orkun Turan <holygatestudio@yandex.com>, 2016-2017. # razah <icnikerazah@gmail.com>, 2017-2018. @@ -18,15 +19,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 23:40+0000\n" -"Last-Translator: razah <icnikerazah@gmail.com>\n" +"PO-Revision-Date: 2018-04-19 12:41+0000\n" +"Last-Translator: H.Hüseyin CİHANGİR <hashusfb@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1401,6 +1402,10 @@ msgstr "Temizle" msgid "Clear Output" msgstr "Çıktıyı Temizle" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Kaynak kaydedilirken hata!" @@ -1961,8 +1966,9 @@ msgid "Debug" msgstr "Hata Ayıklama" #: editor/editor_node.cpp +#, fuzzy msgid "Deploy with Remote Debug" -msgstr "Uzaktan Hata Ayıklama ile Dağıt" +msgstr "Uzaktan Hata Ayıklama ile Aç" #: editor/editor_node.cpp msgid "" @@ -2017,7 +2023,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Sahne Değişikliklerini Eşzamanla" +msgstr "Sahne Değişikliklerini Eş Zamanla" #: editor/editor_node.cpp msgid "" @@ -2033,7 +2039,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Betik Değişikliklerini Eşzamanla" +msgstr "Betik Değişikliklerini Eş Zamanla" #: editor/editor_node.cpp msgid "" @@ -2453,14 +2459,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Şablonların içinde geçersiz version.txt formatı." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Şablonların içinde geçersiz version.txt formatı. Revizyon geçerli bir " -"tanımlayıcı değil." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Şablonların içinde version.txt bulunamadı." @@ -2515,10 +2513,6 @@ msgid "Failed:" msgstr "Başarısız:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Dosyaya yazılamıyor." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "İndirme Tamamlandı." @@ -3704,18 +3698,28 @@ msgid "Show Grid" msgstr "Izgarayı Göster" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Yardımcıları Göster" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Cetvelleri göster" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Kılavuzları göster" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Başlatım Görünümü" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 Görüntükapısı" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "İçre Seçimi" @@ -4005,6 +4009,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Örüntü anahat oluşturmak için bir yüzeye sahip değil!" #: 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 "Anahat oluşturulamadı!" @@ -4539,6 +4547,22 @@ msgid "Resource clipboard is empty!" msgstr "Kaynak panosu boş!" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Düzenleyicide Aç" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "Örnek:" + +#: 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 +msgid "Type:" +msgstr "Tür:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Kaynak Yükle" @@ -4825,10 +4849,6 @@ msgid "Toggle Comment" msgstr "Yorumu Aç / Kapat" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Aşağıya Eşle" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Satırı Katla/Aç" @@ -4841,6 +4861,10 @@ msgid "Unfold All Lines" msgstr "Tüm Satırları Genişlet" #: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "Aşağıya Eşle" + +#: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "Simgeyi Tamamla" @@ -5273,7 +5297,7 @@ msgstr "Ölçek Biçimi (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Yerel Koordlar" +msgstr "Yerel Kordinatlar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5657,6 +5681,16 @@ msgid "Checked Item" msgstr "Denetlenen Öğe" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Öğe Ekle" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Denetlenen Öğe" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Var" @@ -5684,11 +5718,6 @@ msgstr "Sekme 2" msgid "Tab 3" msgstr "Sekme 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Tür:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Veri Türü:" @@ -5956,10 +5985,6 @@ msgid "Please choose an empty folder." msgstr "Lütfen boş bir klasör seçin." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Lütfen 'proje.godot' dosyası içermeyen bir klasör seçin." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "İçe Aktarılan Proje" @@ -5980,8 +6005,11 @@ msgid "Invalid project path (changed anything?)." msgstr "Geçersiz proje yolu (bir şey değişti mi?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Proje yolunda proje.godot alınamadı." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Proje yolundaki proje.godot düzenlenemedi.Eksik veya bozulmuş olabilir." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6000,10 +6028,6 @@ msgid "Rename Project" msgstr "Projeyi Yeniden Adlandır" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Proje yolunda proje.godot alınamadı." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Yeni Oyun Projesi" @@ -6163,8 +6187,10 @@ msgid "Mouse Button" msgstr "Fare Düğmesi" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Geçersiz işlem (her şey ancak şu '/' ya da şuna ':' gider)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6307,10 +6333,6 @@ msgid "Delete Item" msgstr "Öğeyi Sil" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "'/' veya ':' içeremez" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Zaten mevcut" @@ -6448,7 +6470,7 @@ msgstr "Yereller:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "KendindenYükle" +msgstr "Otomatik Yükle" #: editor/property_editor.cpp msgid "Pick a Viewport" @@ -6706,10 +6728,6 @@ msgstr "Alt Kaynaklar" msgid "Clear Inheritance" msgstr "Kalıtı Temizle" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Düzenleyicide Aç" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Düğümleri Sil" @@ -6827,10 +6845,6 @@ msgstr "" "Gruplar dokunu göstermek için tıkla." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Örnek:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Betik Aç" @@ -7064,7 +7078,7 @@ msgstr "Toplam:" #: editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "İzleti Belleği" +msgstr "Görüntü Belleği" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -7084,7 +7098,7 @@ msgstr "Kullanım" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "Türlü" +msgstr "Çeşitli" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -7258,32 +7272,44 @@ msgid "Object can't provide a length." msgstr "Nesne bir uzunluk sağlayamaz." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "IzgaraHaritası Seçimi Sil" +msgid "Next Plane" +msgstr "Sonraki sekme" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "IzgaraHaritası Seçimi Çoğalt" +msgid "Previous Plane" +msgstr "Önceki sekme" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "Sekme:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "Sonraki Zemin" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "Önceki Zemin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" msgstr "Zemin:" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" -msgstr "Izgara Haritası" +msgid "GridMap Delete Selection" +msgstr "IzgaraHaritası Seçimi Sil" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Yapışma Görünümü" +msgid "GridMap Duplicate Selection" +msgstr "IzgaraHaritası Seçimi Çoğalt" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Önceki Zemin" +msgid "Grid Map" +msgstr "Izgara Haritası" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Sonraki Zemin" +msgid "Snap View" +msgstr "Yapışma Görünümü" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7361,6 +7387,10 @@ msgstr "IzgaraHaritası Ayarları" msgid "Pick Distance:" msgstr "Uzaklık Seç:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "solü oluşturuluyor..." @@ -7390,6 +7420,11 @@ msgid "Mono" msgstr "Tekli" #: modules/mono/editor/godotsharp_editor.cpp +#, fuzzy +msgid "About C# support" +msgstr "C# hakkında destek" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "C# Çözümü oluştur" @@ -7405,6 +7440,10 @@ msgstr "Projeyi İnşa et" msgid "Warnings" msgstr "Uyarılar" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7587,7 +7626,7 @@ msgstr "Dizi" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" -msgstr "Değiştir" +msgstr "Anahtar" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" @@ -7955,6 +7994,15 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin bir ARVRCamera çocuk düğümü gerektirir" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +#, fuzzy +msgid "(Time Left: %d:%02d s)" +msgstr "(Kalan Zaman:%d:%02d s)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Örüntüler Haritalanıyor: " @@ -8053,12 +8101,22 @@ msgstr "" "Yol özelliği, çalışmak için geçerli bir Spatial düğümüne işaret etmelidir." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "Her sahne başına (ya da örneklenmiş sahneler dizisine) sadece bir tane " "WorldEnvironment 'a izin verilir." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8155,6 +8213,31 @@ msgstr "Yazıtipi yükleme hatası." msgid "Invalid font size." msgstr "Geçersiz yazıtipi boyutu." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Geçersiz işlem (her şey ancak şu '/' ya da şuna ':' gider)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "'/' veya ':' içeremez" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Şablonların içinde geçersiz version.txt formatı. Revizyon geçerli bir " +#~ "tanımlayıcı değil." + +#~ msgid "Can't write file." +#~ msgstr "Dosyaya yazılamıyor." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "Lütfen 'proje.godot' dosyası içermeyen bir klasör seçin." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Proje yolunda proje.godot alınamadı." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Proje yolunda proje.godot alınamadı." + #~ msgid "Next" #~ msgstr "Sonraki" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index d01686aec4..45138cd5de 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -4,16 +4,17 @@ # 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. # Андрій Бандура <andriykopanytsia@gmail.com>, 2018. # Гидеон Теон <t.kudely94@gmail.com>, 2017. +# Максим Якимчук <xpinovo@gmail.com>, 2018. # Марс Ямбар <mjambarmeta@gmail.com>, 2017-2018. # Олександр Пилипчук <pilipchukap@rambler.ru>, 2018. -# Yuri Chornoivan <yurchor@ukr.net>, 2018. # msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" -"PO-Revision-Date: 2018-01-24 17:51+0000\n" +"PO-Revision-Date: 2018-04-20 18:42+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -22,7 +23,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -300,11 +301,11 @@ msgstr "Максимальна лінійна похибка:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "Макс. Кутові похибки:" +msgstr "Макс. кутова похибка:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "Максимальний оптимізований кут:" +msgstr "Макс. оптимізований кут:" #: editor/animation_editor.cpp msgid "Optimize" @@ -1400,6 +1401,10 @@ msgstr "Очистити" msgid "Clear Output" msgstr "Очистити вивід" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Помилка збереження ресурсу!" @@ -1961,7 +1966,7 @@ msgstr "Вийти в список проектів" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "Налагодження" +msgstr "Діагностика" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -2103,7 +2108,7 @@ msgstr "Спільнота" #: editor/editor_node.cpp msgid "About" -msgstr "Про" +msgstr "Про програму" #: editor/editor_node.cpp msgid "Play the project." @@ -2456,14 +2461,6 @@ msgid "Invalid version.txt format inside templates." msgstr "Неправильний формат version.txt у шаблонах." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" -"Неправильний формат version.txt у шаблонах. Ідентифікатор ревізії не є " -"дійсним." - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "Файл version.txt не знайдено у шаблонах." @@ -2518,10 +2515,6 @@ msgid "Failed:" msgstr "Не вдалося:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "Не вдалося записати файл." - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "Завантаження закінчено." @@ -3406,7 +3399,7 @@ msgstr "Все" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "Плагіни" +msgstr "Плаґіни" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" @@ -3708,18 +3701,28 @@ msgid "Show Grid" msgstr "Показати сітку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "Показати помічники" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "Показати лінійки" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Guides" msgstr "Показати напрямні" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "Перегляд центра" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1 панель перегляду" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрувати на вибраному" @@ -4010,6 +4013,10 @@ 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 "Не вдалося створити контур!" @@ -4545,6 +4552,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "Тип:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Завантажити ресурс" @@ -4831,10 +4854,6 @@ msgid "Toggle Comment" msgstr "Перемкнути коментар" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "Клонувати вниз" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "Згорнути/розгорнути рядок" @@ -4847,6 +4866,10 @@ 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 "Завершити символ" @@ -5663,6 +5686,16 @@ msgid "Checked Item" msgstr "Позначений елемент" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "Додати елемент" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "Позначений елемент" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "Має" @@ -5690,11 +5723,6 @@ msgstr "Вкладка 2" msgid "Tab 3" msgstr "Вкладка 3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "Тип:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "Тип даних:" @@ -5964,10 +5992,6 @@ msgid "Please choose an empty folder." msgstr "Будь ласка, виберіть порожню теку." #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "Будь ласка, виберіть теку, у якій не міститься файла «project.godot»." - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "Імпортований проект" @@ -5988,8 +6012,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Некоректний шлях до проекту (щось змінилося?)." #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "Не вдалося отримати project.godot з каталогу проекту." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"Не вдалося завантажити project.godot у каталозі проекту (помилка %d). " +"Можливо, файл вилучено або пошкоджено." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6008,10 +6036,6 @@ msgid "Rename Project" msgstr "Перейменувати проект" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "Не вдалося отримати project.godot у каталозі проекту." - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "Новий проект гри" @@ -6171,8 +6195,10 @@ msgid "Mouse Button" msgstr "Кнопка миші" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Некоректна дія (можна усе, окрім «/» або «:»)." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6315,10 +6341,6 @@ msgid "Delete Item" msgstr "Вилучити елемент" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "Не може містити «/» або «:»" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "Вже існує" @@ -6544,7 +6566,7 @@ msgstr "[Порожньо]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" -msgstr "Встановити" +msgstr "Множина" #: editor/property_editor.cpp msgid "Properties:" @@ -6716,10 +6738,6 @@ msgstr "Підресурси" msgid "Clear Inheritance" msgstr "Усунути успадкування" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Відкрити в редакторі" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Вилучити вузли" @@ -6837,10 +6855,6 @@ msgstr "" "Клацніть, щоб переглянути панель груп." #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "Екземпляр:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "Відкрити скрипт" @@ -7270,32 +7284,44 @@ msgid "Object can't provide a length." msgstr "Об'єкт не може надавати довжину." #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "Вилучення позначеного GridMap" +msgid "Next Plane" +msgstr "Наступна площина" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "Дублювання позначеного GridMap" +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 "Grid Map" -msgstr "Карта сітки" +msgid "GridMap Delete Selection" +msgstr "Вилучення позначеного GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "Миттєвий перегляд" +msgid "GridMap Duplicate Selection" +msgstr "Дублювання позначеного GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" -msgstr "Попередній поверх" +msgid "Grid Map" +msgstr "Карта сітки" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "Наступний поверх" +msgid "Snap View" +msgstr "Миттєвий перегляд" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7373,6 +7399,10 @@ msgstr "Параметри GridMap" msgid "Pick Distance:" msgstr "Відстань вибору:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "Створення розв'язку..." @@ -7402,6 +7432,10 @@ msgid "Mono" msgstr "Моно" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "Про підтримку C#" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "Створити розв'язок C#" @@ -7417,6 +7451,10 @@ msgstr "Зібрати проект" msgid "Warnings" msgstr "Попередження" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "Кінець трасування стека для внутрішнього виключення" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7968,6 +8006,14 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin повинен мати дочірній вузол ARVRCamera" #: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(Лишилося часу: %d:%02d с)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " msgstr "Побудова сітки: " @@ -8067,12 +8113,22 @@ msgstr "" "коректний вузол Spatial." #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" "У сцені (або наборі екземплярів сцен) може бути лише один елемент " "WorldEnvironment." +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8170,6 +8226,32 @@ msgstr "Помилка завантаження шрифту." msgid "Invalid font size." msgstr "Некоректний розмір шрифту." +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Некоректна дія (можна усе, окрім «/» або «:»)." + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "Не може містити «/» або «:»" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "" +#~ "Неправильний формат version.txt у шаблонах. Ідентифікатор ревізії не є " +#~ "дійсним." + +#~ msgid "Can't write file." +#~ msgstr "Не вдалося записати файл." + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "" +#~ "Будь ласка, виберіть теку, у якій не міститься файла «project.godot»." + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "Не вдалося отримати project.godot з каталогу проекту." + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "Не вдалося отримати project.godot у каталозі проекту." + #~ msgid "Next" #~ msgstr "Далі" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 9fae520b55..4f03e8a387 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -1382,6 +1382,10 @@ msgstr "" msgid "Clear Output" msgstr "سب سکریپشن بنائیں" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2377,12 +2381,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2435,11 +2433,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy -msgid "Can't write file." -msgstr "سب سکریپشن بنائیں" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3610,15 +3603,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Guides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3911,6 +3912,10 @@ 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 "" @@ -4449,6 +4454,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4732,10 +4753,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4748,6 +4765,10 @@ 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 "" @@ -5568,6 +5589,14 @@ 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 "Has" msgstr "" @@ -5595,11 +5624,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5860,10 +5884,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5885,7 +5905,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5906,10 +5928,6 @@ msgid "Rename Project" msgstr ".تمام کا انتخاب" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6059,7 +6077,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6204,10 +6224,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6601,10 +6617,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6717,10 +6729,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "سب سکریپشن بنائیں" @@ -7152,32 +7160,44 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "GridMap Delete Selection" -msgstr ".تمام کا انتخاب" +msgid "Next Plane" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +msgid "Previous Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr ".تمام کا انتخاب" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +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 @@ -7257,6 +7277,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7286,6 +7310,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "سب سکریپشن بنائیں" @@ -7302,6 +7330,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7806,6 +7838,14 @@ 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 "" @@ -7883,10 +7923,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -7967,5 +8017,9 @@ msgstr "" msgid "Invalid font size." msgstr "" +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "سب سکریپشن بنائیں" + #~ msgid "Samples" #~ msgstr "نمونے" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 018883dc91..d6284d640e 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -3,6 +3,7 @@ # Copyright (c) 2014-2018 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. # Hai Le <dark.hades.1102@gmail.com>, 2017. # Nguyễn Tuấn Anh <anhnt.fami@gmail.com>, 2017. @@ -11,15 +12,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 12:35+0000\n" -"Last-Translator: Dlean Jeans <dleanjeans@gmail.com>\n" +"PO-Revision-Date: 2018-04-18 15:44+0000\n" +"Last-Translator: 01lifeleft <01lifeleft@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -79,7 +80,7 @@ msgstr "Đổi tên Anim Track" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "Đổi phép nội suy Anim Track" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" @@ -112,31 +113,31 @@ msgstr "" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "Bỏ lựa chọn" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "Liên tục" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "Đứt đoạn" #: editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Kích hoạt" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Thêm Key Anim" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Di chuyển các Key Anim" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "Chọn Scale" #: editor/animation_editor.cpp msgid "Scale From Cursor" @@ -165,15 +166,15 @@ msgstr "Trong" #: editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "Ngoài" #: editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "Trong-Ngoài" #: editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "Ngoài-Trong" #: editor/animation_editor.cpp msgid "Transitions" @@ -185,7 +186,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "Dọn dẹp Animation" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" @@ -205,7 +206,7 @@ msgstr "Tạo" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Tạo & Chèn Anim" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" @@ -221,7 +222,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Đổi vòng lặp Anim" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" @@ -229,7 +230,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Chèn Anim" #: editor/animation_editor.cpp msgid "Anim Scale Keys" @@ -249,7 +250,7 @@ msgstr "Độ dài (giây):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "Độ dài Animation (giây)." #: editor/animation_editor.cpp msgid "Step (s):" @@ -261,7 +262,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "Mở/Tắt lặp animation." #: editor/animation_editor.cpp msgid "Add new tracks." @@ -1373,6 +1374,10 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -2368,12 +2373,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2426,10 +2425,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3594,15 +3589,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3891,6 +3894,10 @@ 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 "" @@ -4425,6 +4432,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4707,10 +4730,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "" @@ -4723,6 +4742,10 @@ 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 "" @@ -5536,6 +5559,14 @@ 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 "Has" msgstr "" @@ -5563,11 +5594,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5827,10 +5853,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5851,7 +5873,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5871,10 +5895,6 @@ msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6024,7 +6044,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6168,10 +6190,6 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6564,10 +6582,6 @@ msgstr "" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6677,10 +6691,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "" @@ -7103,31 +7113,44 @@ msgid "Object can't provide a length." msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" +msgid "Next Plane" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" +#, fuzzy +msgid "Previous Plane" +msgstr "Thư mục trước" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Floor:" +msgstr "Tầng:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7206,6 +7229,10 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7235,6 +7262,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7250,6 +7281,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7749,6 +7784,14 @@ 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 "" @@ -7826,10 +7869,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index debb1d60f3..45d2d81505 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -3,27 +3,32 @@ # Copyright (c) 2014-2018 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. # 纯洁的坏蛋 <tqj.zyy@gmail.com>, 2016. # 孤月蓝风 <trlanfeng@foxmail.com>, 2016. # 吴亮弟 <wu@liangdi.me>, 2017. # ageazrael <ageazrael@gmail.com>, 2016. # Bruce Guo <guoboism@hotmail.com>, 2016. -# dragonandy <dragonandy@foxmail.com>, 2017. +# dragonandy <dragonandy@foxmail.com>, 2017-2018. # Geequlim <geequlim@gmail.com>, 2016-2018. # lalalaring <783482203@qq.com>, 2017. # Luo Jun <vipsbpig@gmail.com>, 2016-2017. # oberon-tonya <360119124@qq.com>, 2016. # Qichunren <whyruby@gmail.com>, 2017. -# sersoong <seraphim945@qq.com>, 2017. +# seanfy <everxiao@qq.com>, 2018. +# sersoong <seraphim945@qq.com>, 2017-2018. # wanfang liu <wanfang.liu@gmail.com>, 2016. # WeiXiong Huang <wx_Huang@sina.com>, 2017. # Youmu <konpaku.w@gmail.com>, 2017. +# yuetian <18829280955@163.com>, 2018. +# Zae Chao <zae.vito@live.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2018-01-20 12:54+0000\n" +"PO-Revision-Date: 2018-05-03 08:59+0000\n" "Last-Translator: Geequlim <geequlim@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" @@ -32,7 +37,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 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -48,11 +53,11 @@ msgstr "修改动画关键帧的时间" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "动画变化过渡" +msgstr "修改动画过渡方式" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "修改变换" +msgstr "修改动画变换" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" @@ -100,7 +105,7 @@ msgstr "轨道修改为值模式" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "轨道修改为包装模式" +msgstr "轨道修改为包围模式" #: editor/animation_editor.cpp msgid "Edit Node Curve" @@ -108,7 +113,7 @@ msgstr "编辑节点曲线" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "编辑选项曲线" +msgstr "编辑所选曲线" #: editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -133,7 +138,7 @@ msgstr "连续" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "分离" +msgstr "离散" #: editor/animation_editor.cpp msgid "Trigger" @@ -198,7 +203,7 @@ msgstr "优化动画" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "清理动画" +msgstr "清空动画" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" @@ -222,7 +227,7 @@ msgstr "创建|插入动画" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "创建|插入 轨道和关键帧" +msgstr "插入轨道和关键帧" #: editor/animation_editor.cpp msgid "Anim Insert Key" @@ -246,11 +251,11 @@ msgstr "插入动画" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "缩放键" +msgstr "缩放关键帧" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "添加回调轨道" +msgstr "添加调用轨道" #: editor/animation_editor.cpp msgid "Animation zoom." @@ -298,11 +303,11 @@ msgstr "轨道工具" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "允许通过单击启用各个键的编辑。" +msgstr "允许通过单击编辑各个关键帧。" #: editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "优化动画" +msgstr "动画优化器" #: editor/animation_editor.cpp msgid "Max. Linear Error:" @@ -310,11 +315,11 @@ msgstr "最大线性错误:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "最大角错误:" +msgstr "最大角度错误:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "调整最大的角度:" +msgstr "调整最大的可优化角度:" #: editor/animation_editor.cpp msgid "Optimize" @@ -326,7 +331,7 @@ msgstr "在场景树中选择一个AnimationPlayer来编辑动画。" #: editor/animation_editor.cpp msgid "Key" -msgstr "键" +msgstr "关键帧" #: editor/animation_editor.cpp msgid "Transition" @@ -338,7 +343,7 @@ msgstr "缩放比率:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "在那个节点中调用函数?" +msgstr "在哪个节点中调用函数?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -358,7 +363,7 @@ msgstr "清除所有动画吗(无法撤销!)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "清理" +msgstr "清空" #: editor/array_property_edit.cpp msgid "Resize Array" @@ -430,13 +435,13 @@ msgstr "列:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "必须设置方法的对象节点!" +msgstr "必须指定目标节点的方法!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." -msgstr "找不到目标方法! 指定一个有效的方法或把脚本附加到目标节点。" +msgstr "找不到目标方法! 请指定一个有效的方法或把脚本附加到目标节点。" #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -805,7 +810,7 @@ msgstr "软件包安装成功!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "完成!" +msgstr "成功!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1075,7 +1080,7 @@ msgstr "[空]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "[位保存]" +msgstr "[未保存]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1152,7 +1157,7 @@ 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)" @@ -1336,8 +1341,8 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"暂时没有此类型的说明。请帮通过[color=$color][url=$url] 补充文档或提交请求 [/" -"url][/color]的方式帮助我们完善文档!" +"当前没有此类型的教程。请通过[color=$color][url=$url] 补充文档或提交请求 [/" +"url][/color]的方式帮助我们完善文档。" #: editor/editor_help.cpp msgid "Properties" @@ -1368,7 +1373,7 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"当前没有此方法的说明。请帮助我们通过 [color=$color] [url=$url] 贡献一个 [/" +"当前没有此方法的描述。请帮助我们通过 [color=$color] [url=$url] 贡献一个 [/" "url][/color]!" #: editor/editor_help.cpp @@ -1381,7 +1386,7 @@ msgstr "查找" #: editor/editor_log.cpp msgid "Output:" -msgstr "输出:" +msgstr "日志:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp @@ -1394,6 +1399,10 @@ msgstr "清除" msgid "Clear Output" msgstr "清空输出" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "保存资源出错!" @@ -1666,7 +1675,7 @@ msgstr "导出网格库(Mesh Library)" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "此操作必须有一个根节点(root node)才能执行。" +msgstr "需要有根节点才能完成此操作。" #: editor/editor_node.cpp msgid "Export Tile Set" @@ -1822,7 +1831,7 @@ msgstr "切换无干扰模式。" #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "新建场景" +msgstr "添加新场景。" #: editor/editor_node.cpp msgid "Scene" @@ -1924,7 +1933,7 @@ msgstr "导出" #: editor/editor_node.cpp msgid "Tools" -msgstr "工具" +msgstr "工具(tools)" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -1936,7 +1945,7 @@ msgstr "调试" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "部署远程调试" +msgstr "使用远程调试部署" #: editor/editor_node.cpp msgid "" @@ -1947,7 +1956,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "发布基于网络文件系统的最小应用包" +msgstr "小型部署与网络文件系统" #: editor/editor_node.cpp msgid "" @@ -1965,7 +1974,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "碰撞区域可见" +msgstr "可见碰撞区域" #: editor/editor_node.cpp msgid "" @@ -1975,7 +1984,7 @@ msgstr "如果启用此项,节点的碰撞区域和raycast将在游戏运行 #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "Navigation可见" +msgstr "可见导航" #: editor/editor_node.cpp msgid "" @@ -2177,7 +2186,7 @@ msgstr "文件系统" #: editor/editor_node.cpp msgid "Output" -msgstr "输出" +msgstr "日志" #: editor/editor_node.cpp msgid "Don't Save" @@ -2338,7 +2347,7 @@ 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." @@ -2402,7 +2411,7 @@ msgstr "(当前)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait.." -msgstr "正在链接镜像地址,请稍后.." +msgstr "检索镜像,请等待..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2417,12 +2426,6 @@ msgid "Invalid version.txt format inside templates." msgstr "模板文件中的version.txt不合法。" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "模板中的 version.txt文件格式不合法,无效的版本标识符。" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "模板中没有找到version.txt文件。" @@ -2442,7 +2445,7 @@ msgstr "导入:" msgid "" "No download links found for this version. Direct download is only available " "for official releases." -msgstr "当前版本没有下载链接。只能通过官方发布下载。" +msgstr "当前版本没有下载链接。直链下载只提供官方正式版。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2475,12 +2478,8 @@ msgid "Failed:" msgstr "失败:" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "无法写入文件。" - -#: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "下载完成" +msgstr "下载完成。" #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2488,11 +2487,11 @@ msgstr "请求链接错误: " #: editor/export_template_manager.cpp msgid "Connecting to Mirror.." -msgstr "正在连接镜像..." +msgstr "正在连接镜像网站。。" #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "链接已断开" +msgstr "已断开" #: editor/export_template_manager.cpp msgid "Resolving" @@ -2518,7 +2517,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" @@ -2727,7 +2726,7 @@ 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" @@ -2743,15 +2742,15 @@ 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" @@ -2776,7 +2775,7 @@ msgstr "正在生成光照贴图" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "正在生成Mesh" +msgstr "正在生成Mesh: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script.." @@ -3040,7 +3039,7 @@ msgstr "穿过" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "未来" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" @@ -3064,7 +3063,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)" @@ -3650,16 +3649,26 @@ msgid "Show Grid" msgstr "显示网格" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "显示辅助线" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "显示标尺" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" -msgstr "显示标尺 " +msgid "Show Guides" +msgstr "显示引导" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Origin" +msgstr "显示原点" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Viewport" +msgstr "1个视口" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3723,7 +3732,7 @@ msgstr "好的" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "无法实例化没有根的多个节点。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3778,13 +3787,12 @@ msgid "Update from Scene" msgstr "从场景中更新" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat0" msgstr "Flat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" @@ -3796,7 +3804,7 @@ msgstr "渐出" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "圆滑级别 " +msgstr "平滑插值" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" @@ -3933,7 +3941,7 @@ msgstr "包含的Mesh不是ArrayMesh类型。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "UV展开失败,可能该网格并非流形?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." @@ -3952,6 +3960,10 @@ msgid "Mesh has not surface to create outlines from!" msgstr "Mesh(网格)没有表面来创建轮廓(outlines)!" #: 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 "无法创建轮廓(outlines)!" @@ -3993,7 +4005,7 @@ msgstr "查看UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "为光照映射/环境光遮蔽展开UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" @@ -4133,7 +4145,7 @@ msgstr "标记可移动三角形..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "构建紧凑高度图... " +msgstr "构建紧凑高度图..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." @@ -4141,11 +4153,11 @@ msgstr "正在计算可行区域..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "分区中... " +msgstr "分区中..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "正在创建轮廓... " +msgstr "正在创建轮廓..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." @@ -4153,7 +4165,7 @@ msgstr "创建多边形网格..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "转换为导航网格(mesh)... " +msgstr "转换为导航网格(mesh)..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" @@ -4369,7 +4381,7 @@ msgstr "设置曲线的顶点坐标" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "设置曲线的内控制点" +msgstr "设置的曲线初始位置(Pos)" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" @@ -4486,6 +4498,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "类型:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "加载资源" @@ -4582,9 +4610,8 @@ msgid "Copy Script Path" msgstr "拷贝脚本路径" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" -msgstr "在资源管理器中展示" +msgstr "在资源管理器中显示" #: editor/plugins/script_editor_plugin.cpp msgid "History Prev" @@ -4771,10 +4798,6 @@ msgid "Toggle Comment" msgstr "切换注释" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "拷贝到下一行" - -#: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" msgstr "切换叠行" @@ -4787,6 +4810,10 @@ 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 "代码补全" @@ -5013,7 +5040,7 @@ msgstr "缩放: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "语言:" +msgstr "移动: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -5580,7 +5607,7 @@ msgstr "创建空编辑器主题模板" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "从当前编辑器主题创建" +msgstr "从当前编辑器主题模板创建" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5603,6 +5630,16 @@ msgid "Checked Item" msgstr "已选项目(Checked Item)" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Radio Item" +msgstr "添加项目" + +#: editor/plugins/theme_editor_plugin.cpp +#, fuzzy +msgid "Checked Radio Item" +msgstr "已选项目(Checked Item)" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "有(Has)" @@ -5630,11 +5667,6 @@ msgstr "分页2" msgid "Tab 3" msgstr "分页3" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "类型:" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "数据类型:" @@ -5761,7 +5793,7 @@ msgstr "错误" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" -msgstr "" +msgstr "智能瓦片" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -5775,8 +5807,8 @@ msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" -"鼠标左键: 启用bit.\n" -"鼠标右键: 禁用bit" +"鼠标左键: 启用该bit。\n" +"鼠标右键: 禁用该bit。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select current edited sub-tile." @@ -5796,7 +5828,7 @@ msgstr "可执行的" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" -msgstr "确认要从列表中删除Patch '%s' 吗?" +msgstr "从列表中删除补丁''%s'?" #: editor/project_export.cpp msgid "Delete preset '%s'?" @@ -5897,10 +5929,6 @@ msgid "Please choose an empty folder." msgstr "请选择一个空目录。" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "请选择一个不包含'project.godot'文件的文件夹。" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "已导入的项目" @@ -5921,8 +5949,11 @@ msgid "Invalid project path (changed anything?)." msgstr "项目路径非法(被外部修改?)。" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." -msgstr "无法在项目目录下找到project.godot文件。" +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" +"无法在项目路径中加载 project.godot 文件(错误 %d)。该文件可能缺失或已损坏。" #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -5941,10 +5972,6 @@ msgid "Rename Project" msgstr "重命名项目" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "无法在项目目录下找到project.godot文件。" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "新建游戏项目" @@ -6100,8 +6127,10 @@ msgid "Mouse Button" msgstr "鼠标按键" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." -msgstr "Action名非法(不得包含'/'或':')。" +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6233,7 +6262,7 @@ 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." @@ -6244,10 +6273,6 @@ msgid "Delete Item" msgstr "删除条目" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "不能包含 \"/\" 或 \":\"" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "已经存在" @@ -6309,7 +6334,7 @@ msgstr "项目设置(project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "一般" +msgstr "常规" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" @@ -6468,13 +6493,12 @@ msgid "On" msgstr "启用" #: editor/property_editor.cpp -#, fuzzy msgid "[Empty]" -msgstr "添加空白帧" +msgstr "[空]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" -msgstr "设置" +msgstr "Set" #: editor/property_editor.cpp msgid "Properties:" @@ -6486,15 +6510,15 @@ msgstr "选择属性" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "选择虚拟方法 " +msgstr "选择虚方法" #: editor/property_selector.cpp msgid "Select Method" -msgstr "选择方式" +msgstr "选择方法" #: editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" -msgstr "无法执行PVPTC工具:" +msgstr "无法执行PVRTC工具:" #: editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" @@ -6641,10 +6665,6 @@ msgstr "子资源" msgid "Clear Inheritance" msgstr "清除继承" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "在编辑器中打开" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "删除节点" @@ -6708,9 +6728,8 @@ msgid "Clear a script for the selected node." msgstr "清除选中节点的脚本。" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "移除" +msgstr "远程" #: editor/scene_tree_dock.cpp msgid "Local" @@ -6761,10 +6780,6 @@ msgstr "" "单击显示分组栏。" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "实例:" - -#: editor/scene_tree_editor.cpp msgid "Open script" msgstr "打开脚本" @@ -6842,7 +6857,7 @@ msgstr "存在同名目录" #: editor/script_create_dialog.cpp msgid "File exists, will be reused" -msgstr "文件存在,将被重用" +msgstr "文件已存在, 将被重用" #: editor/script_create_dialog.cpp msgid "Invalid extension" @@ -6909,7 +6924,6 @@ msgid "Attach Node Script" msgstr "设置节点的脚本" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " msgstr "远程 " @@ -6979,7 +6993,7 @@ msgstr "性能分析" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "显示" +msgstr "监视" #: editor/script_editor_debugger.cpp msgid "Value" @@ -7019,7 +7033,7 @@ msgstr "用量" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "杂项" +msgstr "其他" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -7192,34 +7206,44 @@ msgid "Object can't provide a length." msgstr "对象无法提供长度。" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Delete Selection" -msgstr "删除选择的GridMap" +msgid "Next Plane" +msgstr "下一个平面" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Duplicate Selection" -msgstr "复制选中项" +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 -#, fuzzy -msgid "Grid Map" -msgstr "网格吸附" +msgid "GridMap Delete Selection" +msgstr "删除选择的GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" -msgstr "吸附视图" +msgid "GridMap Duplicate Selection" +msgstr "复制选中项" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Previous Floor" -msgstr "上一个目录" +msgid "Grid Map" +msgstr "网格映射" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" -msgstr "下一层" +msgid "Snap View" +msgstr "吸附视图" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7297,9 +7321,13 @@ msgstr "GridMap设置" msgid "Pick Distance:" msgstr "拾取距离:" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "正在创生成决方案... " +msgstr "正在创生成决方案..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." @@ -7326,6 +7354,10 @@ msgid "Mono" msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "关于C#支持" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "创建C#解决方案" @@ -7341,6 +7373,10 @@ msgstr "构建项目" msgid "Warnings" msgstr "警告" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "内部异常堆栈追朔结束" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7506,11 +7542,11 @@ msgstr "连接节点" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" -msgstr "条件(Condition)" +msgstr "条件" #: modules/visual_script/visual_script_editor.cpp msgid "Sequence" -msgstr "序列(Sequence)" +msgstr "序列" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" @@ -7670,7 +7706,7 @@ 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 "" @@ -7858,23 +7894,28 @@ msgid "ARVROrigin requires an ARVRCamera child node" msgstr "ARVROrigin 必须拥有 ARVRCamera 子节点" #: scene/3d/baked_lightmap.cpp -#, fuzzy +msgid "%d%%" +msgstr "%d%%" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "(剩余时间:%d:%02d 秒)" + +#: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "正在绘制网格" +msgstr "正在绘制网格: " #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Plotting Lights:" -msgstr "正在绘制网格" +msgstr "正在绘制灯光:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" msgstr "正在完成划分" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Lighting Meshes: " -msgstr "正在绘制网格" +msgstr "正在对网格进行照明 " #: scene/3d/collision_object.cpp msgid "" @@ -7950,10 +7991,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "path属性必须指向一个合法的Spatial节点才能正常工作。" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "每个场景中只允许有一个WorldEnvironment类型的节点。" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8045,6 +8096,29 @@ msgstr "加载字体出错。" msgid "Invalid font size." msgstr "字体大小非法。" +#~ msgid "Invalid action (anything goes but '/' or ':')." +#~ msgstr "Action名非法(不得包含'/'或':')。" + +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "不能包含 \"/\" 或 \":\"" + +#~ msgid "" +#~ "Invalid version.txt format inside templates. Revision is not a valid " +#~ "identifier." +#~ msgstr "模板中的 version.txt文件格式不合法,无效的版本标识符。" + +#~ msgid "Can't write file." +#~ msgstr "无法写入文件。" + +#~ msgid "Please choose a folder that does not contain a 'project.godot' file." +#~ msgstr "请选择一个不包含'project.godot'文件的文件夹。" + +#~ msgid "Couldn't get project.godot in project path." +#~ msgstr "无法在项目目录下找到project.godot文件。" + +#~ msgid "Couldn't get project.godot in the project path." +#~ msgstr "无法在项目目录下找到project.godot文件。" + #~ msgid "Next" #~ msgstr "下一项" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 3b380305d0..f4c6a39788 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -1471,6 +1471,10 @@ msgstr "清空" msgid "Clear Output" msgstr "下一個腳本" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Error saving resource!" @@ -2520,12 +2524,6 @@ msgid "Invalid version.txt format inside templates." msgstr "無效的 version.txt 格式 inside templates." #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp #, fuzzy msgid "No version.txt found inside templates." msgstr "找不到version.txt inside templates." @@ -2583,11 +2581,6 @@ msgstr "失敗:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Can't write file." -msgstr "無法新增資料夾" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." msgstr "下載出現錯誤" @@ -3792,15 +3785,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +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 rulers" +msgid "Show Origin" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -4096,6 +4097,10 @@ 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 "" @@ -4637,6 +4642,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4930,10 +4951,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "跳到行" @@ -4947,6 +4964,10 @@ 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 "" @@ -5778,6 +5799,14 @@ 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 "Has" msgstr "" @@ -5805,11 +5834,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -6080,10 +6104,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -6105,7 +6125,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -6126,10 +6148,6 @@ msgid "Rename Project" msgstr "專案" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6284,7 +6302,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6431,11 +6451,6 @@ msgid "Delete Item" msgstr "刪除" #: editor/project_settings_editor.cpp -#, fuzzy -msgid "Can't contain '/' or ':'" -msgstr "不能連到主機:" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6837,10 +6852,6 @@ msgstr "資源" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6955,10 +6966,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "下一個腳本" @@ -7400,32 +7407,46 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "刪除選中檔案" +msgid "Next Plane" +msgstr "下一個" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "複製 Selection" +msgid "Previous Plane" +msgstr "上一個tab" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +msgid "Previous Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Previous Floor" +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Delete Selection" +msgstr "刪除選中檔案" + +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "GridMap Duplicate Selection" +msgstr "複製 Selection" + +#: 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 @@ -7508,6 +7529,10 @@ msgstr "設定" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7540,6 +7565,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp #, fuzzy msgid "Create C# solution" msgstr "縮放selection" @@ -7557,6 +7586,10 @@ msgstr "專案" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -8078,6 +8111,14 @@ 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 "" @@ -8155,10 +8196,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -8240,6 +8291,14 @@ msgstr "載入字形出現錯誤" msgid "Invalid font size." msgstr "無效字型" +#, fuzzy +#~ msgid "Can't contain '/' or ':'" +#~ msgstr "不能連到主機:" + +#, fuzzy +#~ msgid "Can't write file." +#~ msgstr "無法新增資料夾" + #~ msgid "Next" #~ msgstr "下一個" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index abdbf6dc2b..ccbd45bf31 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -4,24 +4,27 @@ # 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. # Chao Yu <casd82@gmail.com>, 2017. # Cliffs Dover <bottle@dancingbottle.com>, 2017. +# Kisaragi Hiu <mail@kisaragi-hiu.com>, 2018. # Matt <chchwy@gmail.com>, 2017. # popcade <popcade@gmail.com>, 2016. +# Qing <icinriiq@gmail.com>, 2018. # Sam Pan <sampan66@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-11-24 10:45+0000\n" -"Last-Translator: Matt <chchwy@gmail.com>\n" +"PO-Revision-Date: 2018-04-24 09:35+0000\n" +"Last-Translator: Qing <icinriiq@gmail.com>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" "Language: zh_TW\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -38,20 +41,20 @@ msgstr "動畫更改座標" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "動畫更改轉場效果" #: editor/animation_editor.cpp msgid "Anim Change Transform" msgstr "動畫更改座標" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "動畫更改座標" +msgstr "動畫更改關鍵幀數值" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Call" -msgstr "" +msgstr "動畫改變呼叫" #: editor/animation_editor.cpp msgid "Anim Add Track" @@ -90,8 +93,9 @@ msgid "Anim Track Change Value Mode" msgstr "動畫軌改變模式" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "動畫軌道更改環繞模式" #: editor/animation_editor.cpp msgid "Edit Node Curve" @@ -112,7 +116,7 @@ msgstr "複製所選" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "重複轉置" #: editor/animation_editor.cpp msgid "Remove Selection" @@ -177,7 +181,7 @@ msgstr "進出" #: editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "外-內" #: editor/animation_editor.cpp msgid "Transitions" @@ -212,28 +216,30 @@ msgid "Anim Create & Insert" msgstr "動畫建立與插入" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Insert Track & Key" -msgstr "" +msgstr "動畫新增軌跡與按鍵" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "動畫新增按鍵" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "變更動畫長度" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "變更動畫迴圈" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "動畫新增具類別之鍵值" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "插入動畫" #: editor/animation_editor.cpp msgid "Anim Scale Keys" @@ -241,19 +247,19 @@ msgstr "" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "動畫新增呼叫軌跡" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "動畫空間。" #: editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "長度(s):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "動畫長度 (秒)" +msgstr "動畫長度 (秒)。" #: editor/animation_editor.cpp msgid "Step (s):" @@ -265,75 +271,77 @@ msgstr "" #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "啟用/停用 動畫迴圈。" #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "新增動畫軌。" #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "上移當前動畫軌。" #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "下移當前動畫軌。" #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "移除選擇的動畫軌。" #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "軌跡工具" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "啟用可使用點擊來更改各個鍵。" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim. Optimizer" -msgstr "" +msgstr "動畫. 最佳化" #: editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "最大線性錯誤:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "最大角度錯誤:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "最大可優化角度:" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "最佳化" #: editor/animation_editor.cpp +#, fuzzy msgid "Select an AnimationPlayer from the Scene Tree to edit animations." -msgstr "" +msgstr "從場景樹中選擇一個 AnimationPlayer 來編輯動畫。" #: editor/animation_editor.cpp msgid "Key" -msgstr "" +msgstr "鍵" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "轉場" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "縮放比例:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "呼叫哪個節點裡的函式?" #: editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "移除無效按鍵" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" @@ -341,27 +349,27 @@ msgstr "" #: editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "清除所有動畫" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "清除動畫 (無法復原!)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "清除" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "調整陣列大小" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "調整陣列資料型態" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "調整陣列資料" #: editor/code_editor.cpp msgid "Go to Line" @@ -385,7 +393,7 @@ msgstr "符合大小寫" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "整個字" #: editor/code_editor.cpp msgid "Replace" @@ -421,17 +429,17 @@ msgstr "列:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "需指定在目標節點上的方法!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." -msgstr "" +msgstr "找不到目標方法! 指定一個對的方法或附加一個腳本到目標的節點上。" #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "連接到節點:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -448,15 +456,15 @@ msgstr "移除" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "新增額外呼叫參數:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "額外呼叫參數:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "節點路徑:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -469,7 +477,7 @@ msgstr "延遲" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "一次性" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -483,23 +491,23 @@ msgstr "" #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "" +msgstr "關閉" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "連接" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "連接 '%s' 到 '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "連結訊號:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "將 '%s' 從 '%s' 中斷連接" #: editor/connections_dialog.cpp msgid "Connect.." @@ -512,7 +520,7 @@ msgstr "斷線" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "信號" #: editor/create_dialog.cpp #, fuzzy @@ -522,7 +530,7 @@ msgstr "變更鏡頭尺寸" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Change" -msgstr "" +msgstr "更換" #: editor/create_dialog.cpp #, fuzzy @@ -559,11 +567,11 @@ msgstr "描述:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "尋找取代目標:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "相依於:" #: editor/dependency_editor.cpp msgid "" @@ -578,15 +586,17 @@ msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"'%s' 資源正在使用中。\n" +"變更會在重新載入時套用。" #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "相依" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "資源" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp @@ -596,15 +606,15 @@ msgstr "路徑" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "相依:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "修復損壞的" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "相依性編輯器" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -619,7 +629,7 @@ msgstr "開啟" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "擁有者:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" @@ -636,7 +646,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "" +msgstr "無法移除:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -656,7 +666,7 @@ msgstr "該執行什麼操作呢?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "修復相依性" #: editor/dependency_editor.cpp msgid "Errors loading!" @@ -704,7 +714,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "" +msgstr "謝謝!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -725,7 +735,7 @@ msgstr "專案創始人" #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "開發者" #: editor/editor_about.cpp msgid "Authors" @@ -761,7 +771,7 @@ msgstr "" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "授權" #: editor/editor_about.cpp msgid "Thirdparty License" @@ -785,7 +795,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "授權" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." @@ -808,7 +818,7 @@ msgstr "" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install" -msgstr "" +msgstr "安裝" #: editor/editor_asset_installer.cpp msgid "Package Installer" @@ -869,7 +879,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "靜音" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -981,11 +991,11 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "不能使用的名稱。" #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "合法字元:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." @@ -1059,7 +1069,7 @@ msgstr "名稱" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "單例" #: editor/editor_data.cpp msgid "Updating Scene" @@ -1196,7 +1206,7 @@ msgstr "往上" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "切換顯示隱藏檔案" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" @@ -1396,6 +1406,10 @@ msgstr "清除" msgid "Clear Output" msgstr "輸出:" +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "" @@ -1536,7 +1550,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "展開所有屬性" #: editor/editor_node.cpp msgid "Collapse all properties" @@ -1653,17 +1667,17 @@ msgid "Export Mesh Library" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." -msgstr "此操作無法復原, 確定要還原嗎?" +msgstr "此操作無法在沒有根節點的情況下進行。" #: editor/editor_node.cpp msgid "Export Tile Set" msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "此操作需要有選擇著節點才能進行。" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -2152,8 +2166,9 @@ msgid "Import" msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "Node" -msgstr "" +msgstr "節點" #: editor/editor_node.cpp msgid "FileSystem" @@ -2400,12 +2415,6 @@ msgid "Invalid version.txt format inside templates." msgstr "" #: editor/export_template_manager.cpp -msgid "" -"Invalid version.txt format inside templates. Revision is not a valid " -"identifier." -msgstr "" - -#: editor/export_template_manager.cpp msgid "No version.txt found inside templates." msgstr "" @@ -2460,10 +2469,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -msgid "Can't write file." -msgstr "" - -#: editor/export_template_manager.cpp msgid "Download Complete." msgstr "" @@ -3650,15 +3655,23 @@ msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show helpers" +msgid "Show Helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show rulers" +msgid "Show Rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Show guides" +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 @@ -3952,6 +3965,10 @@ 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 "" @@ -4492,6 +4509,22 @@ msgid "Resource clipboard is empty!" 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 +#: 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 +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -4780,10 +4813,6 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Clone Down" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Fold/Unfold Line" msgstr "前往第...行" @@ -4797,6 +4826,10 @@ 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 "" @@ -5619,6 +5652,14 @@ 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 "Has" msgstr "" @@ -5646,11 +5687,6 @@ msgstr "" msgid "Tab 3" msgstr "" -#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp -msgid "Type:" -msgstr "" - #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" msgstr "" @@ -5916,10 +5952,6 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a folder that does not contain a 'project.godot' file." -msgstr "" - -#: editor/project_manager.cpp msgid "Imported Project" msgstr "" @@ -5941,7 +5973,9 @@ msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in project path." +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." msgstr "" #: editor/project_manager.cpp @@ -5962,10 +5996,6 @@ msgid "Rename Project" msgstr "專案設定" #: editor/project_manager.cpp -msgid "Couldn't get project.godot in the project path." -msgstr "" - -#: editor/project_manager.cpp msgid "New Game Project" msgstr "" @@ -6117,7 +6147,9 @@ msgid "Mouse Button" msgstr "" #: editor/project_settings_editor.cpp -msgid "Invalid action (anything goes but '/' or ':')." +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" msgstr "" #: editor/project_settings_editor.cpp @@ -6263,10 +6295,6 @@ msgid "Delete Item" msgstr "刪除" #: editor/project_settings_editor.cpp -msgid "Can't contain '/' or ':'" -msgstr "" - -#: editor/project_settings_editor.cpp msgid "Already existing" msgstr "" @@ -6664,10 +6692,6 @@ msgstr "複製資源" msgid "Clear Inheritance" msgstr "" -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -6779,10 +6803,6 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -msgid "Instance:" -msgstr "" - -#: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" msgstr "開啟最近存取" @@ -6813,7 +6833,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "場景樹 (節點):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" @@ -7224,33 +7244,47 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Delete Selection" -msgstr "複製所選" +msgid "Next Plane" +msgstr "下個分頁" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "GridMap Duplicate Selection" -msgstr "複製所選" +msgid "Previous Plane" +msgstr "上個分頁" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Floor:" +msgid "Plane:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Grid Map" +msgid "Next Floor" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Snap View" +#, fuzzy +msgid "Previous Floor" +msgstr "上個分頁" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy -msgid "Previous Floor" -msgstr "上個分頁" +msgid "GridMap Delete Selection" +msgstr "複製所選" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Next Floor" +#, fuzzy +msgid "GridMap Duplicate Selection" +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 @@ -7333,6 +7367,10 @@ msgstr "專案設定" msgid "Pick Distance:" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." msgstr "" @@ -7363,6 +7401,10 @@ msgid "Mono" msgstr "" #: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" msgstr "" @@ -7379,6 +7421,10 @@ msgstr "專案設定" msgid "Warnings" msgstr "" +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " @@ -7893,6 +7939,14 @@ 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 "" @@ -7970,10 +8024,20 @@ msgid "Path property must point to a valid Spatial node to work." msgstr "" #: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +#: scene/3d/scenario_fx.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/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " @@ -7992,20 +8056,19 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "將目前顏色設為預設" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "" +msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "" +msgstr "請確認..." #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "僅選擇區域" +msgstr "選擇此資料夾" #: scene/gui/popup.cpp msgid "" @@ -8023,13 +8086,15 @@ msgstr "" #: 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 "" +"在專案設定中的預設環境(Rendering -> Environment -> Default Environment)不能被" +"載入" #: scene/main/viewport.cpp msgid "" |