diff options
Diffstat (limited to 'editor')
175 files changed, 34413 insertions, 15093 deletions
diff --git a/editor/SCsub b/editor/SCsub index 4ca6b9e3fd..a9343f7f36 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -7,7 +7,6 @@ import os import os.path from compat import encode_utf8, byte_to_str, open_utf8, escape_string - def make_certs_header(target, source, env): src = source[0].srcnode().abspath @@ -147,268 +146,6 @@ def make_translations_header(target, source, env): g.close() - -def make_authors_header(target, source, env): - - sections = ["Project Founders", "Lead Developer", "Project Manager", "Developers"] - sections_id = ["dev_founders", "dev_lead", "dev_manager", "dev_names"] - - src = source[0].srcnode().abspath - dst = target[0].srcnode().abspath - f = open_utf8(src, "r") - g = open_utf8(dst, "w") - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _EDITOR_AUTHORS_H\n") - g.write("#define _EDITOR_AUTHORS_H\n") - - current_section = "" - reading = False - - def close_section(): - g.write("\t0\n") - g.write("};\n") - - for line in f: - if reading: - if line.startswith(" "): - g.write("\t\"" + escape_string(line.strip()) + "\",\n") - continue - if line.startswith("## "): - if reading: - close_section() - reading = False - for i in range(len(sections)): - if line.strip().endswith(sections[i]): - current_section = escape_string(sections_id[i]) - reading = True - g.write("static const char *" + current_section + "[] = {\n") - break - - if reading: - close_section() - - 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"] - sections_id = ["donor_s_plat", "donor_s_gold", "donor_s_mini", "donor_gold", "donor_silver", "donor_bronze"] - - src = source[0].srcnode().abspath - dst = target[0].srcnode().abspath - f = open_utf8(src, "r") - g = open_utf8(dst, "w") - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _EDITOR_DONORS_H\n") - g.write("#define _EDITOR_DONORS_H\n") - - current_section = "" - reading = False - - def close_section(): - g.write("\t0\n") - g.write("};\n") - - for line in f: - if reading >= 0: - if line.startswith(" "): - g.write("\t\"" + escape_string(line.strip()) + "\",\n") - continue - if line.startswith("## "): - if reading: - close_section() - reading = False - for i in range(len(sections)): - if line.strip().endswith(sections[i]): - current_section = escape_string(sections_id[i]) - reading = True - g.write("static const char *" + current_section + "[] = {\n") - break - - if reading: - close_section() - - g.write("#endif\n") - - g.close() - f.close() - - -def make_license_header(target, source, env): - - src_copyright = source[0].srcnode().abspath - src_license = source[1].srcnode().abspath - dst = target[0].srcnode().abspath - f = open_utf8(src_license, "r") - fc = open_utf8(src_copyright, "r") - g = open_utf8(dst, "w") - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _EDITOR_LICENSE_H\n") - g.write("#define _EDITOR_LICENSE_H\n") - g.write("static const char *about_license =") - - for line in f: - escaped_string = escape_string(line.strip()) - g.write("\n\t\"" + escaped_string + "\\n\"") - - g.write(";\n") - - tp_current = 0 - tp_file = "" - tp_comment = "" - tp_copyright = "" - tp_license = "" - - tp_licensename = "" - tp_licensebody = "" - - tp = [] - tp_licensetext = [] - for line in fc: - if line.startswith("#"): - continue - - if line.startswith("Files:"): - tp_file = line[6:].strip() - tp_current = 1 - elif line.startswith("Comment:"): - tp_comment = line[8:].strip() - tp_current = 2 - elif line.startswith("Copyright:"): - tp_copyright = line[10:].strip() - tp_current = 3 - elif line.startswith("License:"): - if tp_current != 0: - tp_license = line[8:].strip() - tp_current = 4 - else: - tp_licensename = line[8:].strip() - tp_current = 5 - elif line.startswith(" "): - if tp_current == 1: - tp_file += "\n" + line.strip() - elif tp_current == 3: - tp_copyright += "\n" + line.strip() - elif tp_current == 5: - if line.strip() == ".": - tp_licensebody += "\n" - else: - tp_licensebody += line[1:] - else: - if tp_current != 0: - if tp_current == 5: - tp_licensetext.append([tp_licensename, tp_licensebody]) - - tp_licensename = "" - tp_licensebody = "" - else: - added = False - for i in tp: - if i[0] == tp_comment: - i[1].append([tp_file, tp_copyright, tp_license]) - added = True - break - if not added: - tp.append([tp_comment,[[tp_file, tp_copyright, tp_license]]]) - - tp_file = [] - tp_comment = "" - tp_copyright = [] - tp_license = "" - tp_current = 0 - - tp_licensetext.append([tp_licensename, tp_licensebody]) - - about_thirdparty = "" - about_tp_copyright_count = "" - about_tp_license = "" - about_tp_copyright = "" - about_tp_file = "" - - for i in tp: - about_thirdparty += "\t\"" + i[0] + "\",\n" - about_tp_copyright_count += str(len(i[1])) + ", " - for j in i[1]: - file_body = "" - copyright_body = "" - for k in j[0].split("\n"): - if file_body != "": - file_body += "\\n\"\n" - escaped_string = escape_string(k.strip()) - file_body += "\t\"" + escaped_string - for k in j[1].split("\n"): - if copyright_body != "": - copyright_body += "\\n\"\n" - escaped_string = escape_string(k.strip()) - copyright_body += "\t\"" + escaped_string - - about_tp_file += "\t" + file_body + "\",\n" - about_tp_copyright += "\t" + copyright_body + "\",\n" - about_tp_license += "\t\"" + j[2] + "\",\n" - - about_license_name = "" - about_license_body = "" - - for i in tp_licensetext: - body = "" - for j in i[1].split("\n"): - if body != "": - body += "\\n\"\n" - escaped_string = escape_string(j.strip()) - body += "\t\"" + escaped_string - - about_license_name += "\t\"" + i[0] + "\",\n" - about_license_body += "\t" + body + "\",\n" - - g.write("static const char *about_thirdparty[] = {\n") - g.write(about_thirdparty) - g.write("\t0\n") - g.write("};\n") - g.write("#define THIRDPARTY_COUNT " + str(len(tp)) + "\n") - - g.write("static const int about_tp_copyright_count[] = {\n\t") - g.write(about_tp_copyright_count) - g.write("0\n};\n") - - g.write("static const char *about_tp_file[] = {\n") - g.write(about_tp_file) - g.write("\t0\n") - g.write("};\n") - - g.write("static const char *about_tp_copyright[] = {\n") - g.write(about_tp_copyright) - g.write("\t0\n") - g.write("};\n") - - g.write("static const char *about_tp_license[] = {\n") - g.write(about_tp_license) - g.write("\t0\n") - g.write("};\n") - - g.write("static const char *about_license_name[] = {\n") - g.write(about_license_name) - g.write("\t0\n") - g.write("};\n") - g.write("#define LICENSE_COUNT " + str(len(tp_licensetext)) + "\n") - - g.write("static const char *about_license_body[] = {\n") - g.write(about_license_body) - g.write("\t0\n") - g.write("};\n") - - 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") @@ -455,10 +192,10 @@ if env['tools']: docs = sorted(docs) env.Depends("#editor/doc_data_compressed.gen.h", docs) - env.Command("#editor/doc_data_compressed.gen.h", docs, make_doc_header) + env.CommandNoCache("#editor/doc_data_compressed.gen.h", docs, make_doc_header) # Certificates env.Depends("#editor/certs_compressed.gen.h", "#thirdparty/certs/ca-certificates.crt") - env.Command("#editor/certs_compressed.gen.h", "#thirdparty/certs/ca-certificates.crt", make_certs_header) + env.CommandNoCache("#editor/certs_compressed.gen.h", "#thirdparty/certs/ca-certificates.crt", make_certs_header) import glob path = env.Dir('.').abspath @@ -466,26 +203,13 @@ if env['tools']: # Translations tlist = glob.glob(path + "/translations/*.po") env.Depends('#editor/translations.gen.h', tlist) - env.Command('#editor/translations.gen.h', tlist, make_translations_header) + env.CommandNoCache('#editor/translations.gen.h', tlist, make_translations_header) # Fonts flist = glob.glob(path + "/../thirdparty/fonts/*.ttf") flist.append(glob.glob(path + "/../thirdparty/fonts/*.otf")) env.Depends('#editor/builtin_fonts.gen.h', flist) - env.Command('#editor/builtin_fonts.gen.h', flist, make_fonts_header) - - # Authors - env.Depends('#editor/authors.gen.h', "../AUTHORS.md") - env.Command('#editor/authors.gen.h', "../AUTHORS.md", make_authors_header) - - # Donors - env.Depends('#editor/donors.gen.h', "../DONORS.md") - env.Command('#editor/donors.gen.h', "../DONORS.md", make_donors_header) - - # License - env.Depends('#editor/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"]) - env.Command('#editor/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"], make_license_header) - + env.CommandNoCache('#editor/builtin_fonts.gen.h', flist, make_fonts_header) env.add_source_files(env.editor_sources, "*.cpp") env.add_source_files(env.editor_sources, ["#thirdparty/misc/clipper.cpp"]) diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp new file mode 100644 index 0000000000..197599442b --- /dev/null +++ b/editor/animation_bezier_editor.cpp @@ -0,0 +1,1183 @@ +#include "animation_bezier_editor.h" + +float AnimationBezierTrackEdit::_bezier_h_to_pixel(float p_h) { + float h = p_h; + h = (h - v_scroll) / v_zoom; + h = (get_size().height / 2) - h; + return h; +} + +static _FORCE_INLINE_ Vector2 _bezier_interp(real_t t, const Vector2 &start, const Vector2 &control_1, const Vector2 &control_2, const Vector2 &end) { + /* Formula from Wikipedia article on Bezier curves. */ + real_t omt = (1.0 - t); + real_t omt2 = omt * omt; + real_t omt3 = omt2 * omt; + real_t t2 = t * t; + real_t t3 = t2 * t; + + return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3; +} + +void AnimationBezierTrackEdit::_draw_track(int p_track, const Color &p_color) { + + float scale = timeline->get_zoom_scale(); + int limit = timeline->get_name_limit(); + int right_limit = get_size().width - timeline->get_buttons_width(); + + //selection may have altered the order of keys + Map<float, int> key_order; + + for (int i = 0; i < animation->track_get_key_count(p_track); i++) { + float ofs = animation->track_get_key_time(p_track, i); + if (moving_selection && track == p_track && selection.has(i)) { + ofs += moving_selection_offset.x; + } + + key_order[ofs] = i; + } + + for (Map<float, int>::Element *E = key_order.front(); E; E = E->next()) { + + int i = E->get(); + + if (!E->next()) + break; + + int i_n = E->next()->get(); + + float offset = animation->track_get_key_time(p_track, i); + float height = animation->bezier_track_get_key_value(p_track, i); + Vector2 out_handle = animation->bezier_track_get_key_out_handle(p_track, i); + if (track == p_track && moving_handle != 0 && moving_handle_key == i) { + out_handle = moving_handle_right; + } + + if (moving_selection && track == p_track && selection.has(i)) { + offset += moving_selection_offset.x; + height += moving_selection_offset.y; + } + + out_handle += Vector2(offset, height); + + float offset_n = animation->track_get_key_time(p_track, i_n); + float height_n = animation->bezier_track_get_key_value(p_track, i_n); + Vector2 in_handle = animation->bezier_track_get_key_in_handle(p_track, i_n); + if (track == p_track && moving_handle != 0 && moving_handle_key == i_n) { + in_handle = moving_handle_left; + } + + if (moving_selection && track == p_track && selection.has(i_n)) { + offset_n += moving_selection_offset.x; + height_n += moving_selection_offset.y; + } + + in_handle += Vector2(offset_n, height_n); + + Vector2 start(offset, height); + Vector2 end(offset_n, height_n); + + int from_x = (offset - timeline->get_value()) * scale + limit; + int point_start = from_x; + int to_x = (offset_n - timeline->get_value()) * scale + limit; + int point_end = to_x; + + if (from_x > right_limit) //not visible + continue; + + if (to_x < limit) //not visible + continue; + + from_x = MAX(from_x, limit); + to_x = MIN(to_x, right_limit); + + Vector<Vector2> lines; + + Vector2 prev_pos; + + for (int j = from_x; j <= to_x; j++) { + + float t = (j - limit) / scale + timeline->get_value(); + + float h; + + if (j == point_end) { + h = end.y; //make sure it always connects + } else if (j == point_start) { + h = start.y; //make sure it always connects + } else { //custom interpolation, used because it needs to show paths affected by moving the selection or handles + int iterations = 10; + float low = 0; + float high = 1; + float middle; + + //narrow high and low as much as possible + for (int k = 0; k < iterations; k++) { + + middle = (low + high) / 2; + + Vector2 interp = _bezier_interp(middle, start, out_handle, in_handle, end); + + if (interp.x < t) { + low = middle; + } else { + high = middle; + } + } + + //interpolate the result: + Vector2 low_pos = _bezier_interp(low, start, out_handle, in_handle, end); + Vector2 high_pos = _bezier_interp(high, start, out_handle, in_handle, end); + + float c = (t - low_pos.x) / (high_pos.x - low_pos.x); + + h = low_pos.linear_interpolate(high_pos, c).y; + } + + h = _bezier_h_to_pixel(h); + + Vector2 pos(j, h); + + if (j > from_x) { + lines.push_back(prev_pos); + lines.push_back(pos); + } + prev_pos = pos; + } + + if (lines.size() >= 2) { + draw_multiline(lines, p_color); + } + } +} + +void AnimationBezierTrackEdit::_draw_line_clipped(const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, int p_clip_left, int p_clip_right) { + + Vector2 from = p_from; + Vector2 to = p_to; + + if (from.x == to.x) + return; + if (to.x < from.x) { + SWAP(to, from); + } + + if (to.x < p_clip_left) + return; + + if (from.x > p_clip_right) + return; + + if (to.x > p_clip_right) { + float c = (p_clip_right - from.x) / (to.x - from.x); + to = from.linear_interpolate(to, c); + } + + if (from.x < p_clip_left) { + float c = (p_clip_left - from.x) / (to.x - from.x); + from = from.linear_interpolate(to, c); + } + + draw_line(from, to, p_color); +} + +void AnimationBezierTrackEdit::_notification(int p_what) { + + if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) { + bezier_icon = get_icon("KeyBezierPoint", "EditorIcons"); + bezier_handle_icon = get_icon("KeyBezierHandle", "EditorIcons"); + selected_icon = get_icon("KeyBezierSelected", "EditorIcons"); + if (handle_mode_option->get_item_count() == 0) { + handle_mode_option->add_icon_item(get_icon("BezierHandlesFree", "EditorIcons"), TTR("Free"), HANDLE_MODE_FREE); + handle_mode_option->add_icon_item(get_icon("BezierHandlesBalanced", "EditorIcons"), TTR("Balanced"), HANDLE_MODE_BALANCED); + handle_mode_option->add_icon_item(get_icon("BezierHandlesMirror", "EditorIcons"), TTR("Mirror"), HANDLE_MODE_MIRROR); + } + } + if (p_what == NOTIFICATION_RESIZED) { + + int right_limit = get_size().width - timeline->get_buttons_width(); + int hsep = get_constant("hseparation", "ItemList"); + int vsep = get_constant("vseparation", "ItemList"); + + handle_mode_option->set_position(Vector2(right_limit + hsep, get_size().height - handle_mode_option->get_combined_minimum_size().height - vsep)); + handle_mode_option->set_size(Vector2(timeline->get_buttons_width() - hsep * 2, handle_mode_option->get_combined_minimum_size().height)); + } + if (p_what == NOTIFICATION_DRAW) { + if (animation.is_null()) + return; + + int limit = timeline->get_name_limit(); + + if (has_focus()) { + Color accent = get_color("accent_color", "Editor"); + accent.a *= 0.7; + draw_rect(Rect2(Point2(), get_size()), accent, false); + } + + Ref<Font> font = get_font("font", "Label"); + Color color = get_color("font_color", "Label"); + int hsep = get_constant("hseparation", "ItemList"); + int vsep = get_constant("vseparation", "ItemList"); + Color linecolor = color; + linecolor.a = 0.2; + + draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor); + + int right_limit = get_size().width - timeline->get_buttons_width(); + + draw_line(Point2(right_limit, 0), Point2(right_limit, get_size().height), linecolor); + + Ref<Texture> close_icon = get_icon("Close", "EditorIcons"); + + close_icon_rect.position = Vector2(get_size().width - close_icon->get_width() - hsep, hsep); + close_icon_rect.size = close_icon->get_size(); + draw_texture(close_icon, close_icon_rect.position); + + String base_path = animation->track_get_path(track); + int end = base_path.find(":"); + if (end != -1) { + base_path = base_path.substr(0, end + 1); + } + + // NAMES AND ICON + int vofs = vsep; + int margin = 0; + + { + int ofs = 0; + + NodePath path = animation->track_get_path(track); + + Node *node = NULL; + + if (root && root->has_node(path)) { + node = root->get_node(path); + } + + String text; + + int h = font->get_height(); + + if (node) { + Ref<Texture> icon; + if (has_icon(node->get_class(), "EditorIcons")) { + icon = get_icon(node->get_class(), "EditorIcons"); + } else { + icon = get_icon("Node", "EditorIcons"); + } + + h = MAX(h, icon->get_height()); + + draw_texture(icon, Point2(ofs, vofs + int(h - icon->get_height()) / 2)); + + margin = icon->get_width(); + + text = node->get_name(); + ofs += hsep; + ofs += icon->get_width(); + + Vector2 string_pos = Point2(ofs, vofs + (h - font->get_height()) / 2 + font->get_ascent()); + string_pos = string_pos.floor(); + draw_string(font, string_pos, text, color, limit - ofs - hsep); + + vofs += h + vsep; + } + } + + // RELATED TRACKS TITLES + + Map<int, Color> subtrack_colors; + subtracks.clear(); + + for (int i = 0; i < animation->get_track_count(); i++) { + if (animation->track_get_type(i) != Animation::TYPE_BEZIER) + continue; + String path = animation->track_get_path(i); + if (!path.begins_with(base_path)) + continue; //another node + path = path.replace_first(base_path, ""); + + Color cc = color; + Rect2 rect = Rect2(margin, vofs, limit - margin - hsep, font->get_height() + vsep); + if (i != track) { + cc.a *= 0.7; + uint32_t hash = path.hash(); + hash = ((hash >> 16) ^ hash) * 0x45d9f3b; + hash = ((hash >> 16) ^ hash) * 0x45d9f3b; + hash = (hash >> 16) ^ hash; + float h = (hash % 65535) / 65536.0; + Color subcolor; + subcolor.set_hsv(h, 0.2, 0.8); + subcolor.a = 0.5; + draw_rect(Rect2(0, vofs + font->get_height() * 0.1, margin - hsep, font->get_height() * 0.8), subcolor); + subtrack_colors[i] = subcolor; + + subtracks[i] = rect; + } else { + Color ac = get_color("accent_color", "Editor"); + ac.a = 0.5; + draw_rect(rect, ac); + } + draw_string(font, Point2(margin, vofs + font->get_ascent()), path, cc, limit - margin - hsep); + + vofs += font->get_height() + vsep; + } + + Color accent = get_color("accent_color", "Editor"); + + { //guides + float min_left_scale = font->get_height() + vsep; + + float scale = 1; + + while (scale / v_zoom < min_left_scale * 2) { + scale *= 5; + } + + bool first = true; + int prev_iv = 0; + for (int i = font->get_height(); i < get_size().height; i++) { + + float ofs = get_size().height / 2 - i; + ofs *= v_zoom; + ofs += v_scroll; + + int iv = int(ofs / scale); + if (ofs < 0) + iv -= 1; + if (!first && iv != prev_iv) { + + Color lc = linecolor; + lc.a *= 0.5; + draw_line(Point2(limit, i), Point2(right_limit, i), lc); + Color c = color; + c.a *= 0.5; + draw_string(font, Point2(limit + 8, i - 2), itos((iv + 1) * scale), c); + } + + first = false; + prev_iv = iv; + } + } + + { //draw OTHER curves + + float scale = timeline->get_zoom_scale(); + Ref<Texture> point = get_icon("KeyValue", "EditorIcons"); + for (Map<int, Color>::Element *E = subtrack_colors.front(); E; E = E->next()) { + + _draw_track(E->key(), E->get()); + + for (int i = 0; i < animation->track_get_key_count(E->key()); i++) { + + float offset = animation->track_get_key_time(E->key(), i); + float value = animation->bezier_track_get_key_value(E->key(), i); + + Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value)); + + if (pos.x >= limit && pos.x <= right_limit) { + draw_texture(point, pos - point->get_size() / 2, E->get()); + } + } + } + + //draw edited curve + _draw_track(track, accent); + } + + //draw editor handles + { + + float scale = timeline->get_zoom_scale(); + edit_points.clear(); + + for (int i = 0; i < animation->track_get_key_count(track); i++) { + + float offset = animation->track_get_key_time(track, i); + float value = animation->bezier_track_get_key_value(track, i); + + if (moving_selection && selection.has(i)) { + offset += moving_selection_offset.x; + value += moving_selection_offset.y; + } + + Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value)); + + Vector2 in_vec = animation->bezier_track_get_key_in_handle(track, i); + if (moving_handle != 0 && moving_handle_key == i) { + in_vec = moving_handle_left; + } + Vector2 pos_in = Vector2(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y)); + + Vector2 out_vec = animation->bezier_track_get_key_out_handle(track, i); + + if (moving_handle != 0 && moving_handle_key == i) { + out_vec = moving_handle_right; + } + + Vector2 pos_out = Vector2(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y)); + + _draw_line_clipped(pos, pos_in, accent, limit, right_limit); + _draw_line_clipped(pos, pos_out, accent, limit, right_limit); + + EditPoint ep; + if (pos.x >= limit && pos.x <= right_limit) { + ep.point_rect.position = (pos - bezier_icon->get_size() / 2).floor(); + ep.point_rect.size = bezier_icon->get_size(); + if (selection.has(i)) { + draw_texture(selected_icon, ep.point_rect.position); + } else { + draw_texture(bezier_icon, ep.point_rect.position); + } + ep.point_rect = ep.point_rect.grow(ep.point_rect.size.width * 0.5); + } + if (pos_in.x >= limit && pos_in.x <= right_limit) { + ep.in_rect.position = (pos_in - bezier_handle_icon->get_size() / 2).floor(); + ep.in_rect.size = bezier_handle_icon->get_size(); + draw_texture(bezier_handle_icon, ep.in_rect.position); + ep.in_rect = ep.in_rect.grow(ep.in_rect.size.width * 0.5); + } + if (pos_out.x >= limit && pos_out.x <= right_limit) { + ep.out_rect.position = (pos_out - bezier_handle_icon->get_size() / 2).floor(); + ep.out_rect.size = bezier_handle_icon->get_size(); + draw_texture(bezier_handle_icon, ep.out_rect.position); + ep.out_rect = ep.out_rect.grow(ep.out_rect.size.width * 0.5); + } + edit_points.push_back(ep); + } + } + + if (box_selecting) { + Color bs = accent; + bs.a *= 0.5; + Vector2 bs_from = box_selection_from; + Vector2 bs_to = box_selection_to; + if (bs_from.x > bs_to.x) { + SWAP(bs_from.x, bs_to.x); + } + if (bs_from.y > bs_to.y) { + SWAP(bs_from.y, bs_to.y); + } + draw_rect(Rect2(bs_from, bs_to - bs_from), bs); + } + +#if 0 + // KEYFAMES // + + { + + float scale = timeline->get_zoom_scale(); + int limit_end = get_size().width - timeline->get_buttons_width(); + + for (int i = 0; i < animation->track_get_key_count(track); i++) { + + float offset = animation->track_get_key_time(track, i) - timeline->get_value(); + if (editor->is_key_selected(track, i) && editor->is_moving_selection()) { + offset += editor->get_moving_selection_offset(); + } + offset = offset * scale + limit; + draw_key(i, scale, int(offset), editor->is_key_selected(track, i), limit, limit_end); + } + } +#endif + } +} + +Ref<Animation> AnimationBezierTrackEdit::get_animation() const { + return animation; +} + +void AnimationBezierTrackEdit::set_animation_and_track(const Ref<Animation> &p_animation, int p_track) { + + animation = p_animation; + track = p_track; + update(); +} + +Size2 AnimationBezierTrackEdit::get_minimum_size() const { + + return Vector2(1, 1); +} + +void AnimationBezierTrackEdit::set_undo_redo(UndoRedo *p_undo_redo) { + undo_redo = p_undo_redo; +} + +void AnimationBezierTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { + timeline = p_timeline; + timeline->connect("zoom_changed", this, "_zoom_changed"); +} +void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { + editor = p_editor; +} + +void AnimationBezierTrackEdit::_play_position_draw() { + + if (!animation.is_valid() || play_position_pos < 0) + return; + + float scale = timeline->get_zoom_scale(); + int h = get_size().height; + + int px = (-timeline->get_value() + play_position_pos) * scale + timeline->get_name_limit(); + + if (px >= timeline->get_name_limit() && px < (get_size().width - timeline->get_buttons_width())) { + Color color = get_color("accent_color", "Editor"); + play_position->draw_line(Point2(px, 0), Point2(px, h), color); + } +} + +void AnimationBezierTrackEdit::set_play_position(float p_pos) { + + play_position_pos = p_pos; + play_position->update(); +} + +void AnimationBezierTrackEdit::update_play_position() { + play_position->update(); +} + +void AnimationBezierTrackEdit::set_root(Node *p_root) { + root = p_root; +} +void AnimationBezierTrackEdit::_zoom_changed() { + update(); +} + +String AnimationBezierTrackEdit::get_tooltip(const Point2 &p_pos) const { + + return Control::get_tooltip(p_pos); +} + +void AnimationBezierTrackEdit::_clear_selection() { + selection.clear(); + update(); +} + +void AnimationBezierTrackEdit::_clear_selection_for_anim(const Ref<Animation> &p_anim) { + + if (!(animation == p_anim)) + return; + //selection.clear(); + _clear_selection(); +} + +void AnimationBezierTrackEdit::_select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos) { + + if (!(animation == p_anim)) + return; + + int idx = animation->track_find_key(p_track, p_pos, true); + ERR_FAIL_COND(idx < 0); + + selection.insert(idx); + update(); +} + +void AnimationBezierTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { + + if (p_event->is_pressed()) { + if (ED_GET_SHORTCUT("animation_editor/duplicate_selection")->is_shortcut(p_event)) { + duplicate_selection(); + accept_event(); + } + + if (ED_GET_SHORTCUT("animation_editor/delete_selection")->is_shortcut(p_event)) { + delete_selection(); + accept_event(); + } + } + + Ref<InputEventMouseButton> mb = p_event; + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_WHEEL_DOWN) { + if (mb->get_command()) { + timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05); + } else { + if (v_zoom < 1000) { + v_zoom *= 1.2; + } + } + update(); + } + + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_WHEEL_UP) { + if (mb->get_command()) { + timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05); + } else { + if (v_zoom > 0.01) { + v_zoom /= 1.2; + } + } + update(); + } + + if (mb.is_valid() && mb->get_button_index() == BUTTON_MIDDLE) { + + if (mb->is_pressed()) { + int x = mb->get_position().x - timeline->get_name_limit(); + panning_timeline_from = x / timeline->get_zoom_scale(); + panning_timeline = true; + panning_timeline_at = timeline->get_value(); + } else { + panning_timeline = false; + } + } + + if (mb.is_valid() && mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { + + menu_insert_key = mb->get_position(); + Vector2 popup_pos = get_global_transform().xform(mb->get_position()); + + menu->clear(); + menu->add_icon_item(bezier_icon, TTR("Insert Key Here"), MENU_KEY_INSERT); + if (selection.size()) { + menu->add_separator(); + menu->add_icon_item(get_icon("Duplicate", "EditorIcons"), TTR("Duplicate Selected Key(s)"), MENU_KEY_DUPLICATE); + menu->add_separator(); + menu->add_icon_item(get_icon("Remove", "EditorIcons"), TTR("Delete Selected Key(s)"), MENU_KEY_DELETE); + } + + menu->set_as_minsize(); + menu->set_position(popup_pos); + menu->popup(); + } + + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + if (close_icon_rect.has_point(mb->get_position())) { + emit_signal("close_request"); + return; + } + for (Map<int, Rect2>::Element *E = subtracks.front(); E; E = E->next()) { + if (E->get().has_point(mb->get_position())) { + set_animation_and_track(animation, E->key()); + return; + } + } + + for (int i = 0; i < edit_points.size(); i++) { + + //first check point + //command makes it ignore the main point, so control point editors can be force-edited + //path 2D editing in the 3D and 2D editors works the same way + if (!mb->get_command()) { + if (edit_points[i].point_rect.has_point(mb->get_position())) { + if (mb->get_shift()) { + //add to selection + if (selection.has(i)) { + selection.erase(i); + } else { + selection.insert(i); + } + update(); + select_single_attempt = -1; + } else if (selection.has(i)) { + moving_selection_attempt = true; + moving_selection = false; + moving_selection_from_key = i; + moving_selection_offset = Vector2(); + select_single_attempt = i; + update(); + } else { + + moving_selection_attempt = true; + moving_selection = true; + moving_selection_from_key = i; + moving_selection_offset = Vector2(); + selection.clear(); + selection.insert(i); + update(); + } + return; + } + } + + if (edit_points[i].in_rect.has_point(mb->get_position())) { + moving_handle = -1; + moving_handle_key = i; + moving_handle_left = animation->bezier_track_get_key_in_handle(track, i); + moving_handle_right = animation->bezier_track_get_key_out_handle(track, i); + update(); + return; + } + + if (edit_points[i].out_rect.has_point(mb->get_position())) { + moving_handle = 1; + moving_handle_key = i; + moving_handle_left = animation->bezier_track_get_key_in_handle(track, i); + moving_handle_right = animation->bezier_track_get_key_out_handle(track, i); + update(); + return; + ; + } + } + + //insert new point + if (mb->get_command() && mb->get_position().x >= timeline->get_name_limit() && mb->get_position().x < get_size().width - timeline->get_buttons_width()) { + + Array new_point; + new_point.resize(5); + + float h = (get_size().height / 2 - mb->get_position().y) * v_zoom + v_scroll; + + new_point[0] = h; + new_point[1] = -0.25; + new_point[2] = 0; + new_point[3] = 0.25; + new_point[4] = 0; + + float time = ((mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); + while (animation->track_find_key(track, time, true) != -1) { + time += 0.001; + } + + undo_redo->create_action("Add Bezier Point"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, time, new_point); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, time); + undo_redo->commit_action(); + + //then attempt to move + int index = animation->track_find_key(track, time, true); + ERR_FAIL_COND(index == -1); + _clear_selection(); + selection.insert(index); + + moving_selection_attempt = true; + moving_selection = false; + moving_selection_from_key = index; + moving_selection_offset = Vector2(); + select_single_attempt = -1; + update(); + + return; + } + + //box select + if (mb->get_position().x >= timeline->get_name_limit() && mb->get_position().x < get_size().width - timeline->get_buttons_width()) { + box_selecting_attempt = true; + box_selecting = false; + box_selecting_add = false; + box_selection_from = mb->get_position(); + return; + } + } + + if (box_selecting_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + if (box_selecting) { + //do actual select + if (!box_selecting_add) { + _clear_selection(); + } + + Vector2 bs_from = box_selection_from; + Vector2 bs_to = box_selection_to; + if (bs_from.x > bs_to.x) { + SWAP(bs_from.x, bs_to.x); + } + if (bs_from.y > bs_to.y) { + SWAP(bs_from.y, bs_to.y); + } + Rect2 selection_rect(bs_from, bs_to - bs_from); + + for (int i = 0; i < edit_points.size(); i++) { + + if (edit_points[i].point_rect.intersects(selection_rect)) { + selection.insert(i); + } + } + } else { + _clear_selection(); //clicked and nothing happened, so clear the selection + } + box_selecting_attempt = false; + box_selecting = false; + update(); + } + + if (moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + undo_redo->create_action("Move Bezier Points"); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, moving_handle_left); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, moving_handle_right); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, animation->bezier_track_get_key_in_handle(track, moving_handle_key)); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, animation->bezier_track_get_key_out_handle(track, moving_handle_key)); + undo_redo->commit_action(); + + moving_handle = 0; + update(); + } + + if (moving_selection_attempt && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + if (moving_selection) { + //combit it + + undo_redo->create_action("Move Bezier Points"); + + List<AnimMoveRestore> to_restore; + // 1-remove the keys + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", track, E->get()); + } + // 2- remove overlapped keys + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float newtime = animation->track_get_key_time(track, E->get()) + moving_selection_offset.x; + + int idx = animation->track_find_key(track, newtime, true); + if (idx == -1) + continue; + + if (selection.has(idx)) + continue; //already in selection, don't save + + undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", track, newtime); + AnimMoveRestore amr; + + amr.key = animation->track_get_key_value(track, idx); + amr.track = track; + amr.time = newtime; + + to_restore.push_back(amr); + } + + // 3-move the keys (re insert them) + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = animation->track_get_key_time(track, E->get()) + moving_selection_offset.x; + /* + if (newpos<0) + continue; //no add at the beginning + */ + Array key = animation->track_get_key_value(track, E->get()); + float h = key[0]; + h += moving_selection_offset.y; + key[0] = h; + undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, newpos, key, 1); + } + + // 4-(undo) remove inserted keys + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = animation->track_get_key_time(track, E->get()) + moving_selection_offset.x; + /* + if (newpos<0) + continue; //no remove what no inserted + */ + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, newpos); + } + + // 5-(undo) reinsert keys + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float oldpos = animation->track_get_key_time(track, E->get()); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, oldpos, animation->track_get_key_value(track, E->get()), 1); + } + + // 6-(undo) reinsert overlapped keys + for (List<AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, 1); + } + + // 6-(undo) reinsert overlapped keys + for (List<AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, 1); + } + + undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + + // 7-reselect + + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float oldpos = animation->track_get_key_time(track, E->get()); + float newpos = oldpos + moving_selection_offset.x; + + undo_redo->add_do_method(this, "_select_at_anim", animation, track, newpos); + undo_redo->add_undo_method(this, "_select_at_anim", animation, track, oldpos); + } + + undo_redo->commit_action(); + + moving_selection = false; + } else if (select_single_attempt != -1) { + selection.clear(); + selection.insert(select_single_attempt); + } + + moving_selection_attempt = false; + update(); + } + + Ref<InputEventMouseMotion> mm = p_event; + if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_MIDDLE) { + v_scroll += mm->get_relative().y * v_zoom; + if (v_scroll > 100000) + v_scroll = 100000; + if (v_scroll < -100000) + v_scroll = -100000; + + int x = mm->get_position().x - timeline->get_name_limit(); + float ofs = x / timeline->get_zoom_scale(); + float diff = ofs - panning_timeline_from; + timeline->set_value(panning_timeline_at - diff); + + update(); + } + if (moving_selection_attempt && mm.is_valid()) { + + if (!moving_selection) { + moving_selection = true; + select_single_attempt = -1; + } + + float y = (get_size().height / 2 - mm->get_position().y) * v_zoom + v_scroll; + float x = ((mm->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); + + moving_selection_offset = Vector2(x - animation->track_get_key_time(track, moving_selection_from_key), y - animation->bezier_track_get_key_value(track, moving_selection_from_key)); + update(); + } + + if (box_selecting_attempt && mm.is_valid()) { + + if (!box_selecting) { + box_selecting = true; + box_selecting_add = mm->get_shift(); + } + + box_selection_to = mm->get_position(); + + if (get_local_mouse_position().y < 0) { + //avoid cursor from going too above, so it does not lose focus with viewport + warp_mouse(Vector2(get_local_mouse_position().x, 0)); + } + update(); + } + + if (moving_handle != 0 && mm.is_valid()) { + + float y = (get_size().height / 2 - mm->get_position().y) * v_zoom + v_scroll; + float x = ((mm->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); + + Vector2 key_pos = Vector2(animation->track_get_key_time(track, moving_handle_key), animation->bezier_track_get_key_value(track, moving_handle_key)); + + Vector2 moving_handle_value = Vector2(x, y) - key_pos; + + moving_handle_left = animation->bezier_track_get_key_in_handle(track, moving_handle_key); + moving_handle_right = animation->bezier_track_get_key_out_handle(track, moving_handle_key); + + if (moving_handle == -1) { + moving_handle_left = moving_handle_value; + if (moving_handle_left.x > 0) { + moving_handle_left.x = 0; + } + + if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) { + Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom); + moving_handle_right = (-(moving_handle_left * scale).normalized() * (moving_handle_right * scale).length()) / scale; + + } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) { + moving_handle_right = -moving_handle_left; + } + } + + if (moving_handle == 1) { + moving_handle_right = moving_handle_value; + if (moving_handle_right.x < 0) { + moving_handle_right.x = 0; + } + + if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) { + Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom); + moving_handle_left = (-(moving_handle_right * scale).normalized() * (moving_handle_left * scale).length()) / scale; + } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) { + moving_handle_left = -moving_handle_right; + } + } + + update(); + } +} + +void AnimationBezierTrackEdit::_menu_selected(int p_index) { + + switch (p_index) { + case MENU_KEY_INSERT: { + + Array new_point; + new_point.resize(5); + + float h = (get_size().height / 2 - menu_insert_key.y) * v_zoom + v_scroll; + + new_point[0] = h; + new_point[1] = -0.25; + new_point[2] = 0; + new_point[3] = 0.25; + new_point[4] = 0; + + float time = ((menu_insert_key.x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); + while (animation->track_find_key(track, time, true) != -1) { + time += 0.001; + } + + undo_redo->create_action("Add Bezier Point"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, time, new_point); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, time); + undo_redo->commit_action(); + + } break; + case MENU_KEY_DUPLICATE: { + duplicate_selection(); + } break; + case MENU_KEY_DELETE: { + delete_selection(); + } break; + } +} + +void AnimationBezierTrackEdit::duplicate_selection() { + + if (selection.size() == 0) + return; + + float top_time = 1e10; + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float t = animation->track_get_key_time(track, E->get()); + if (t < top_time) + top_time = t; + } + + undo_redo->create_action(TTR("Anim Duplicate Keys")); + + List<Pair<int, float> > new_selection_values; + + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + float t = animation->track_get_key_time(track, E->get()); + float dst_time = t + (timeline->get_play_position() - top_time); + int existing_idx = animation->track_find_key(track, dst_time, true); + + undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, dst_time, animation->track_get_key_value(track, E->get()), animation->track_get_key_transition(track, E->get())); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, dst_time); + + Pair<int, float> p; + p.first = track; + p.second = dst_time; + new_selection_values.push_back(p); + + if (existing_idx != -1) { + + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, dst_time, animation->track_get_key_value(track, existing_idx), animation->track_get_key_transition(track, existing_idx)); + } + } + + undo_redo->commit_action(); + + //reselect duplicated + + selection.clear(); + for (List<Pair<int, float> >::Element *E = new_selection_values.front(); E; E = E->next()) { + + int track = E->get().first; + float time = E->get().second; + + int existing_idx = animation->track_find_key(track, time, true); + + if (existing_idx == -1) + continue; + + selection.insert(existing_idx); + } + + update(); +} + +void AnimationBezierTrackEdit::delete_selection() { + if (selection.size()) { + undo_redo->create_action(TTR("Anim Delete Keys")); + + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", track, E->get()); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, animation->track_get_key_time(track, E->get()), animation->track_get_key_value(track, E->get()), 1); + } + undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + undo_redo->commit_action(); + //selection.clear(); + } +} + +void AnimationBezierTrackEdit::set_block_animation_update_ptr(bool *p_block_ptr) { + block_animation_update_ptr = p_block_ptr; +} + +void AnimationBezierTrackEdit::_bind_methods() { + + ClassDB::bind_method("_zoom_changed", &AnimationBezierTrackEdit::_zoom_changed); + ClassDB::bind_method("_menu_selected", &AnimationBezierTrackEdit::_menu_selected); + ClassDB::bind_method("_gui_input", &AnimationBezierTrackEdit::_gui_input); + ClassDB::bind_method("_play_position_draw", &AnimationBezierTrackEdit::_play_position_draw); + + ClassDB::bind_method("_clear_selection", &AnimationBezierTrackEdit::_clear_selection); + ClassDB::bind_method("_clear_selection_for_anim", &AnimationBezierTrackEdit::_clear_selection); + ClassDB::bind_method("_select_at_anim", &AnimationBezierTrackEdit::_clear_selection); + + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("remove_request", PropertyInfo(Variant::INT, "track"))); + ADD_SIGNAL(MethodInfo("insert_key", PropertyInfo(Variant::REAL, "ofs"))); + ADD_SIGNAL(MethodInfo("select_key", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "single"))); + ADD_SIGNAL(MethodInfo("deselect_key", PropertyInfo(Variant::INT, "index"))); + ADD_SIGNAL(MethodInfo("clear_selection")); + ADD_SIGNAL(MethodInfo("close_request")); + + ADD_SIGNAL(MethodInfo("move_selection_begin")); + ADD_SIGNAL(MethodInfo("move_selection", PropertyInfo(Variant::REAL, "ofs"))); + ADD_SIGNAL(MethodInfo("move_selection_commit")); + ADD_SIGNAL(MethodInfo("move_selection_cancel")); +} + +AnimationBezierTrackEdit::AnimationBezierTrackEdit() { + undo_redo = NULL; + timeline = NULL; + root = NULL; + menu = NULL; + block_animation_update_ptr = NULL; + + moving_selection_attempt = false; + moving_selection = false; + select_single_attempt = -1; + box_selecting = false; + box_selecting_attempt = false; + + moving_handle = 0; + + play_position_pos = 0; + play_position = memnew(Control); + play_position->set_mouse_filter(MOUSE_FILTER_PASS); + add_child(play_position); + play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->connect("draw", this, "_play_position_draw"); + set_focus_mode(FOCUS_CLICK); + + v_scroll = 0; + v_zoom = 1; + + panning_timeline = false; + set_clip_contents(true); + handle_mode = HANDLE_MODE_FREE; + handle_mode_option = memnew(OptionButton); + add_child(handle_mode_option); + + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("id_pressed", this, "_menu_selected"); + + //set_mouse_filter(MOUSE_FILTER_PASS); //scroll has to work too for selection +} diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h new file mode 100644 index 0000000000..544690844a --- /dev/null +++ b/editor/animation_bezier_editor.h @@ -0,0 +1,141 @@ +#ifndef ANIMATION_BEZIER_EDITOR_H +#define ANIMATION_BEZIER_EDITOR_H + +#include "animation_track_editor.h" + +class AnimationBezierTrackEdit : public Control { + + GDCLASS(AnimationBezierTrackEdit, Control) + + enum HandleMode { + HANDLE_MODE_FREE, + HANDLE_MODE_BALANCED, + HANDLE_MODE_MIRROR + }; + + enum { + MENU_KEY_INSERT, + MENU_KEY_DUPLICATE, + MENU_KEY_DELETE + }; + + HandleMode handle_mode; + OptionButton *handle_mode_option; + + AnimationTimelineEdit *timeline; + UndoRedo *undo_redo; + Node *root; + Control *play_position; //separate control used to draw so updates for only position changed are much faster + float play_position_pos; + + Ref<Animation> animation; + int track; + + Vector<Rect2> view_rects; + + Ref<Texture> bezier_icon; + Ref<Texture> bezier_handle_icon; + Ref<Texture> selected_icon; + + Rect2 close_icon_rect; + + Map<int, Rect2> subtracks; + + float v_scroll; + float v_zoom; + + PopupMenu *menu; + + void _zoom_changed(); + + void _gui_input(const Ref<InputEvent> &p_event); + void _menu_selected(int p_index); + + bool *block_animation_update_ptr; //used to block all tracks re-gen (speed up) + + void _play_position_draw(); + + Vector2 insert_at_pos; + + bool moving_selection_attempt; + int select_single_attempt; + bool moving_selection; + int moving_selection_from_key; + + Vector2 moving_selection_offset; + + bool box_selecting_attempt; + bool box_selecting; + bool box_selecting_add; + Vector2 box_selection_from; + Vector2 box_selection_to; + + int moving_handle; //0 no move -1 or +1 out + int moving_handle_key; + Vector2 moving_handle_left; + Vector2 moving_handle_right; + + void _clear_selection(); + void _clear_selection_for_anim(const Ref<Animation> &p_anim); + void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos); + + Vector2 menu_insert_key; + + struct AnimMoveRestore { + + int track; + float time; + Variant key; + float transition; + }; + + AnimationTrackEditor *editor; + + struct EditPoint { + Rect2 point_rect; + Rect2 in_rect; + Rect2 out_rect; + }; + + Vector<EditPoint> edit_points; + + Set<int> selection; + + bool panning_timeline; + float panning_timeline_from; + float panning_timeline_at; + + void _draw_line_clipped(const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, int p_clip_left, int p_clip_right); + void _draw_track(int p_track, const Color &p_color); + + float _bezier_h_to_pixel(float p_h); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + virtual String get_tooltip(const Point2 &p_pos) const; + + Ref<Animation> get_animation() const; + + void set_animation_and_track(const Ref<Animation> &p_animation, int p_track); + virtual Size2 get_minimum_size() const; + + void set_undo_redo(UndoRedo *p_undo_redo); + void set_timeline(AnimationTimelineEdit *p_timeline); + void set_editor(AnimationTrackEditor *p_editor); + void set_root(Node *p_root); + + void set_block_animation_update_ptr(bool *p_block_ptr); + + void set_play_position(float p_pos); + void update_play_position(); + + void duplicate_selection(); + void delete_selection(); + + AnimationBezierTrackEdit(); +}; + +#endif // ANIMATION_BEZIER_EDITOR_H diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp deleted file mode 100644 index a03bf76d1b..0000000000 --- a/editor/animation_editor.cpp +++ /dev/null @@ -1,4146 +0,0 @@ -/*************************************************************************/ -/* animation_editor.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 "animation_editor.h" - -#include "editor/plugins/animation_player_editor_plugin.h" -#include "editor_node.h" -#include "editor_settings.h" -#include "io/resource_saver.h" -#include "os/keyboard.h" -#include "os/os.h" -#include "pair.h" -#include "scene/gui/separator.h" -#include "scene/main/viewport.h" - -/* Missing to fix: - - *Set - *Find better source for hint for edited value keys - * + button on track to add a key - * when clicked for first time, erase selection of not selected at first - * automatically create discrete/continuous tracks!! - *when create track do undo/redo -*/ - -class AnimationCurveEdit : public Control { - GDCLASS(AnimationCurveEdit, Control); - -public: - enum Mode { - MODE_DISABLED, - MODE_SINGLE, - MODE_MULTIPLE - }; - -private: - Set<float> multiples; - float transition; - Mode mode; - - LineEdit *value_edit; - - void _notification(int p_what) { - - if (p_what == NOTIFICATION_DRAW) { - - RID ci = get_canvas_item(); - - Size2 s = get_size(); - Rect2 r(Point2(), s); - - //r=r.grow(3); - Ref<StyleBox> sb = get_stylebox("normal", "LineEdit"); - sb->draw(ci, r); - r.size -= sb->get_minimum_size(); - r.position += sb->get_offset(); - //VisualServer::get_singleton()->canvas_item_add - - Ref<Font> f = get_font("font", "Label"); - r = r.grow(-2); - Color color = get_color("font_color", "Label"); - - int points = 48; - if (mode == MODE_MULTIPLE) { - - Color mcolor = color; - mcolor.a *= 0.3; - - Set<float>::Element *E = multiples.front(); - for (int j = 0; j < 16; j++) { - - if (!E) - break; - - float prev = 1.0; - float exp = E->get(); - bool flip = false; //hint_text=="attenuation"; - - for (int i = 1; i <= points; i++) { - - float ifl = i / float(points); - float iflp = (i - 1) / float(points); - - float h = 1.0 - Math::ease(ifl, exp); - - if (flip) { - ifl = 1.0 - ifl; - iflp = 1.0 - iflp; - } - - VisualServer::get_singleton()->canvas_item_add_line(ci, r.position + Point2(iflp * r.size.width, prev * r.size.height), r.position + Point2(ifl * r.size.width, h * r.size.height), mcolor); - prev = h; - } - - E = E->next(); - } - } - - float exp = transition; - if (mode != MODE_DISABLED) { - - float prev = 1.0; - - bool flip = false; //hint_text=="attenuation"; - - for (int i = 1; i <= points; i++) { - - float ifl = i / float(points); - float iflp = (i - 1) / float(points); - - float h = 1.0 - Math::ease(ifl, exp); - - if (flip) { - ifl = 1.0 - ifl; - iflp = 1.0 - iflp; - } - - VisualServer::get_singleton()->canvas_item_add_line(ci, r.position + Point2(iflp * r.size.width, prev * r.size.height), r.position + Point2(ifl * r.size.width, h * r.size.height), color); - prev = h; - } - } - - if (mode == MODE_DISABLED) { - f->draw(ci, Point2(5, 5 + f->get_ascent()), TTR("Disabled"), color); - } else if (mode == MODE_MULTIPLE) { - f->draw(ci, Point2(5, 5 + f->get_ascent() + value_edit->get_size().height), TTR("All Selection"), color); - } - } - } - - void _gui_input(const Ref<InputEvent> &p_ev) { - - Ref<InputEventMouseMotion> mm = p_ev; - if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_LEFT) { - - if (mode == MODE_DISABLED) - return; - - value_edit->release_focus(); - - float rel = mm->get_relative().x; - if (rel == 0) - return; - - bool flip = false; - - if (flip) - rel = -rel; - - float val = transition; - if (val == 0) - return; - bool sg = val < 0; - val = Math::absf(val); - - val = Math::log(val) / Math::log((float)2.0); - //logspace - val += rel * 0.05; - // - - val = Math::pow((float)2.0, val); - if (sg) - val = -val; - - force_transition(val); - } - } - - void _edit_value_changed(const String &p_value_str) { - - force_transition(p_value_str.to_float()); - } - -public: - static void _bind_methods() { - - //ClassDB::bind_method("_update_obj",&AnimationKeyEdit::_update_obj); - ClassDB::bind_method("_gui_input", &AnimationCurveEdit::_gui_input); - ClassDB::bind_method("_edit_value_changed", &AnimationCurveEdit::_edit_value_changed); - ADD_SIGNAL(MethodInfo("transition_changed")); - } - - void set_mode(Mode p_mode) { - - mode = p_mode; - value_edit->set_visible(mode != MODE_DISABLED); - update(); - } - - void clear_multiples() { - multiples.clear(); - update(); - } - void set_multiple(float p_transition) { - - multiples.insert(p_transition); - } - - void set_transition(float p_transition) { - transition = Math::stepify(p_transition, 0.01); - value_edit->set_text(String::num(transition)); - update(); - } - - float get_transition() const { - return transition; - } - - void force_transition(float p_value) { - if (mode == MODE_DISABLED) - return; - set_transition(p_value); - emit_signal("transition_changed", p_value); - } - - AnimationCurveEdit() { - - transition = 1.0; - set_default_cursor_shape(CURSOR_HSPLIT); - mode = MODE_DISABLED; - - value_edit = memnew(LineEdit); - value_edit->hide(); - value_edit->connect("text_entered", this, "_edit_value_changed"); - add_child(value_edit); - } -}; - -class AnimationKeyEdit : public Object { - - GDCLASS(AnimationKeyEdit, Object); - -public: - bool setting; - bool hidden; - - static void _bind_methods() { - - ClassDB::bind_method("_update_obj", &AnimationKeyEdit::_update_obj); - ClassDB::bind_method("_key_ofs_changed", &AnimationKeyEdit::_key_ofs_changed); - } - - //PopupDialog *ke_dialog; - - void _fix_node_path(Variant &value) { - - NodePath np = value; - - if (np == NodePath()) - return; - - Node *root = EditorNode::get_singleton()->get_tree()->get_root(); - - Node *np_node = root->get_node(np); - ERR_FAIL_COND(!np_node); - - Node *edited_node = root->get_node(base); - ERR_FAIL_COND(!edited_node); - - value = edited_node->get_path_to(np_node); - } - - void _update_obj(const Ref<Animation> &p_anim) { - if (setting) - return; - if (hidden) - return; - if (!(animation == p_anim)) - return; - notify_change(); - } - - void _key_ofs_changed(const Ref<Animation> &p_anim, float from, float to) { - if (hidden) - return; - if (!(animation == p_anim)) - return; - if (from != key_ofs) - return; - key_ofs = to; - if (setting) - return; - notify_change(); - } - - bool _set(const StringName &p_name, const Variant &p_value) { - - int key = animation->track_find_key(track, key_ofs, true); - ERR_FAIL_COND_V(key == -1, false); - - String name = p_name; - if (name == "time") { - - float new_time = p_value; - if (new_time == key_ofs) - return true; - - int existing = animation->track_find_key(track, new_time, true); - - setting = true; - undo_redo->create_action(TTR("Anim Change Keyframe Time"), UndoRedo::MERGE_ENDS); - - Variant val = animation->track_get_key_value(track, key); - float trans = animation->track_get_key_transition(track, key); - - undo_redo->add_do_method(animation.ptr(), "track_remove_key", track, key); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, new_time, val, trans); - undo_redo->add_do_method(this, "_key_ofs_changed", animation, key_ofs, new_time); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, new_time); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, key_ofs, val, trans); - undo_redo->add_undo_method(this, "_key_ofs_changed", animation, new_time, key_ofs); - - if (existing != -1) { - Variant v = animation->track_get_key_value(track, existing); - float trans = animation->track_get_key_transition(track, existing); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, new_time, v, trans); - } - - undo_redo->commit_action(); - setting = false; - - return true; - } else if (name == "easing") { - - float val = p_value; - float prev_val = animation->track_get_key_transition(track, key); - setting = true; - undo_redo->create_action(TTR("Anim Change Transition"), UndoRedo::MERGE_ENDS); - undo_redo->add_do_method(animation.ptr(), "track_set_key_transition", track, key, val); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", track, key, prev_val); - undo_redo->add_do_method(this, "_update_obj", animation); - undo_redo->add_undo_method(this, "_update_obj", animation); - undo_redo->commit_action(); - setting = false; - return true; - } - - switch (animation->track_get_type(track)) { - - case Animation::TYPE_TRANSFORM: { - - Dictionary d_old = animation->track_get_key_value(track, key); - Dictionary d_new = d_old; - d_new[p_name] = p_value; - setting = true; - undo_redo->create_action(TTR("Anim Change Transform")); - undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, d_new); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, d_old); - undo_redo->add_do_method(this, "_update_obj", animation); - undo_redo->add_undo_method(this, "_update_obj", animation); - undo_redo->commit_action(); - setting = false; - return true; - - } break; - case Animation::TYPE_VALUE: { - - if (name == "value") { - - Variant value = p_value; - - if (value.get_type() == Variant::NODE_PATH) { - - _fix_node_path(value); - } - - setting = true; - undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); - Variant prev = animation->track_get_key_value(track, key); - undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, value); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, prev); - undo_redo->add_do_method(this, "_update_obj", animation); - undo_redo->add_undo_method(this, "_update_obj", animation); - undo_redo->commit_action(); - setting = false; - return true; - } - - } break; - case Animation::TYPE_METHOD: { - - Dictionary d_old = animation->track_get_key_value(track, key); - Dictionary d_new = d_old; - - bool change_notify_deserved = false; - bool mergeable = false; - - if (name == "name") { - - d_new["method"] = p_value; - } - - if (name == "arg_count") { - - Vector<Variant> args = d_old["args"]; - args.resize(p_value); - d_new["args"] = args; - change_notify_deserved = true; - } - - if (name.begins_with("args/")) { - - Vector<Variant> args = d_old["args"]; - int idx = name.get_slice("/", 1).to_int(); - ERR_FAIL_INDEX_V(idx, args.size(), false); - - String what = name.get_slice("/", 2); - if (what == "type") { - Variant::Type t = Variant::Type(int(p_value)); - - if (t != args[idx].get_type()) { - Variant::CallError err; - if (Variant::can_convert(args[idx].get_type(), t)) { - Variant old = args[idx]; - Variant *ptrs[1] = { &old }; - args[idx] = Variant::construct(t, (const Variant **)ptrs, 1, err); - } else { - - args[idx] = Variant::construct(t, NULL, 0, err); - } - change_notify_deserved = true; - d_new["args"] = args; - } - } - if (what == "value") { - - Variant value = p_value; - if (value.get_type() == Variant::NODE_PATH) { - - _fix_node_path(value); - } - - args[idx] = value; - d_new["args"] = args; - mergeable = true; - } - } - - if (mergeable) - undo_redo->create_action(TTR("Anim Change Call"), UndoRedo::MERGE_ENDS); - else - undo_redo->create_action(TTR("Anim Change Call")); - - Variant prev = animation->track_get_key_value(track, key); - setting = true; - undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, d_new); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, d_old); - undo_redo->add_do_method(this, "_update_obj", animation); - undo_redo->add_undo_method(this, "_update_obj", animation); - undo_redo->commit_action(); - setting = false; - if (change_notify_deserved) - notify_change(); - return true; - } break; - } - - return false; - } - - bool _get(const StringName &p_name, Variant &r_ret) const { - - int key = animation->track_find_key(track, key_ofs, true); - ERR_FAIL_COND_V(key == -1, false); - - String name = p_name; - if (name == "time") { - r_ret = key_ofs; - return true; - } else if (name == "easing") { - r_ret = animation->track_get_key_transition(track, key); - return true; - } - - switch (animation->track_get_type(track)) { - - case Animation::TYPE_TRANSFORM: { - - Dictionary d = animation->track_get_key_value(track, key); - ERR_FAIL_COND_V(!d.has(name), false); - r_ret = d[p_name]; - return true; - - } break; - case Animation::TYPE_VALUE: { - - if (name == "value") { - r_ret = animation->track_get_key_value(track, key); - return true; - } - - } break; - case Animation::TYPE_METHOD: { - - Dictionary d = animation->track_get_key_value(track, key); - - if (name == "name") { - - ERR_FAIL_COND_V(!d.has("method"), false); - r_ret = d["method"]; - return true; - } - - ERR_FAIL_COND_V(!d.has("args"), false); - - Vector<Variant> args = d["args"]; - - if (name == "arg_count") { - - r_ret = args.size(); - return true; - } - - if (name.begins_with("args/")) { - - int idx = name.get_slice("/", 1).to_int(); - ERR_FAIL_INDEX_V(idx, args.size(), false); - - String what = name.get_slice("/", 2); - if (what == "type") { - r_ret = args[idx].get_type(); - return true; - } - if (what == "value") { - r_ret = args[idx]; - return true; - } - } - - } break; - } - - return false; - } - void _get_property_list(List<PropertyInfo> *p_list) const { - - if (animation.is_null()) - return; - - ERR_FAIL_INDEX(track, animation->get_track_count()); - int key = animation->track_find_key(track, key_ofs, true); - ERR_FAIL_COND(key == -1); - - p_list->push_back(PropertyInfo(Variant::REAL, "time", PROPERTY_HINT_RANGE, "0," + rtos(animation->get_length()) + ",0.01")); - - switch (animation->track_get_type(track)) { - - case Animation::TYPE_TRANSFORM: { - - p_list->push_back(PropertyInfo(Variant::VECTOR3, "location")); - p_list->push_back(PropertyInfo(Variant::QUAT, "rotation")); - p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale")); - - } break; - case Animation::TYPE_VALUE: { - - Variant v = animation->track_get_key_value(track, key); - - if (hint.type != Variant::NIL) { - - PropertyInfo pi = hint; - pi.name = "value"; - p_list->push_back(pi); - } else { - - PropertyHint hint = PROPERTY_HINT_NONE; - String hint_string; - - if (v.get_type() == Variant::OBJECT) { - //could actually check the object property if exists..? yes i will! - Ref<Resource> res = v; - if (res.is_valid()) { - - hint = PROPERTY_HINT_RESOURCE_TYPE; - hint_string = res->get_class(); - } - } - - if (v.get_type() != Variant::NIL) - p_list->push_back(PropertyInfo(v.get_type(), "value", hint, hint_string)); - } - - } break; - case Animation::TYPE_METHOD: { - - p_list->push_back(PropertyInfo(Variant::STRING, "name")); - p_list->push_back(PropertyInfo(Variant::INT, "arg_count", PROPERTY_HINT_RANGE, "0,5,1")); - - Dictionary d = animation->track_get_key_value(track, key); - ERR_FAIL_COND(!d.has("args")); - Vector<Variant> args = d["args"]; - String vtypes; - for (int i = 0; i < Variant::VARIANT_MAX; i++) { - - if (i > 0) - vtypes += ","; - vtypes += Variant::get_type_name(Variant::Type(i)); - } - - for (int i = 0; i < args.size(); i++) { - - p_list->push_back(PropertyInfo(Variant::INT, "args/" + itos(i) + "/type", PROPERTY_HINT_ENUM, vtypes)); - if (args[i].get_type() != Variant::NIL) - p_list->push_back(PropertyInfo(args[i].get_type(), "args/" + itos(i) + "/value")); - } - - } break; - } - - /* - if (animation->track_get_type(track)!=Animation::TYPE_METHOD) - p_list->push_back( PropertyInfo( Variant::REAL, "easing", PROPERTY_HINT_EXP_EASING)); - */ - } - - UndoRedo *undo_redo; - Ref<Animation> animation; - int track; - float key_ofs; - - PropertyInfo hint; - NodePath base; - - void notify_change() { - - _change_notify(); - } - - AnimationKeyEdit() { - hidden = true; - key_ofs = 0; - track = -1; - setting = false; - } -}; - -void AnimationKeyEditor::_menu_add_track(int p_type) { - - ERR_FAIL_COND(!animation.is_valid()); - - switch (p_type) { - - case ADD_TRACK_MENU_ADD_CALL_TRACK: { - if (root) { - call_select->popup_centered_ratio(); - break; - } - } break; - case ADD_TRACK_MENU_ADD_VALUE_TRACK: - case ADD_TRACK_MENU_ADD_TRANSFORM_TRACK: { - - undo_redo->create_action(TTR("Anim Add Track")); - undo_redo->add_do_method(animation.ptr(), "add_track", p_type); - undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), "."); - undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); - undo_redo->commit_action(); - - } break; - } -} - -void AnimationKeyEditor::_anim_duplicate_keys(bool transpose) { - //duplicait! - if (selection.size() && animation.is_valid() && selected_track >= 0 && selected_track < animation->get_track_count()) { - - int top_track = 0x7FFFFFFF; - float top_time = 1e10; - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - const SelectedKey &sk = E->key(); - - float t = animation->track_get_key_time(sk.track, sk.key); - if (t < top_time) - top_time = t; - if (sk.track < top_track) - top_track = sk.track; - } - ERR_FAIL_COND(top_track == 0x7FFFFFFF || top_time == 1e10); - - // - - int start_track = transpose ? selected_track : top_track; - - undo_redo->create_action(TTR("Anim Duplicate Keys")); - - List<Pair<int, float> > new_selection_values; - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - const SelectedKey &sk = E->key(); - - float t = animation->track_get_key_time(sk.track, sk.key); - - float dst_time = t + (timeline_pos - top_time); - int dst_track = sk.track + (start_track - top_track); - - if (dst_track < 0 || dst_track >= animation->get_track_count()) - continue; - - if (animation->track_get_type(dst_track) != animation->track_get_type(sk.track)) - continue; - - int existing_idx = animation->track_find_key(dst_track, dst_time, true); - - undo_redo->add_do_method(animation.ptr(), "track_insert_key", dst_track, dst_time, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", dst_track, dst_time); - - Pair<int, float> p; - p.first = dst_track; - p.second = dst_time; - new_selection_values.push_back(p); - - if (existing_idx != -1) { - - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", dst_track, dst_time, animation->track_get_key_value(dst_track, existing_idx), animation->track_get_key_transition(dst_track, existing_idx)); - } - } - - undo_redo->commit_action(); - - //reselect duplicated - - Map<SelectedKey, KeyInfo> new_selection; - for (List<Pair<int, float> >::Element *E = new_selection_values.front(); E; E = E->next()) { - - int track = E->get().first; - float time = E->get().second; - - int existing_idx = animation->track_find_key(track, time, true); - - if (existing_idx == -1) - continue; - SelectedKey sk2; - sk2.track = track; - sk2.key = existing_idx; - - KeyInfo ki; - ki.pos = time; - - new_selection[sk2] = ki; - } - - selection = new_selection; - track_editor->update(); - _edit_if_single_selection(); - } -} - -void AnimationKeyEditor::_menu_track(int p_type) { - - ERR_FAIL_COND(!animation.is_valid()); - - last_menu_track_opt = p_type; - switch (p_type) { - - case TRACK_MENU_SCALE: - case TRACK_MENU_SCALE_PIVOT: { - - scale_dialog->popup_centered(Size2(200, 100)); - } break; - case TRACK_MENU_MOVE_UP: { - - int idx = selected_track; - if (idx > 0 && idx < animation->get_track_count()) { - undo_redo->create_action(TTR("Move Anim Track Up")); - undo_redo->add_do_method(animation.ptr(), "track_move_down", idx); - undo_redo->add_undo_method(animation.ptr(), "track_move_up", idx - 1); - undo_redo->commit_action(); - selected_track = idx - 1; - } - - } break; - case TRACK_MENU_MOVE_DOWN: { - - int idx = selected_track; - if (idx >= 0 && idx < animation->get_track_count() - 1) { - undo_redo->create_action(TTR("Move Anim Track Down")); - undo_redo->add_do_method(animation.ptr(), "track_move_up", idx); - undo_redo->add_undo_method(animation.ptr(), "track_move_down", idx + 1); - undo_redo->commit_action(); - selected_track = idx + 1; - } - - } break; - case TRACK_MENU_REMOVE: { - - int idx = selected_track; - if (idx >= 0 && idx < animation->get_track_count()) { - undo_redo->create_action(TTR("Remove Anim Track")); - undo_redo->add_do_method(animation.ptr(), "remove_track", idx); - undo_redo->add_undo_method(animation.ptr(), "add_track", animation->track_get_type(idx), idx); - undo_redo->add_undo_method(animation.ptr(), "track_set_path", idx, animation->track_get_path(idx)); - //todo interpolation - for (int i = 0; i < animation->track_get_key_count(idx); i++) { - - Variant v = animation->track_get_key_value(idx, i); - float time = animation->track_get_key_time(idx, i); - float trans = animation->track_get_key_transition(idx, i); - - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", idx, time, v); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", idx, i, trans); - } - - undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_type", idx, animation->track_get_interpolation_type(idx)); - if (animation->track_get_type(idx) == Animation::TYPE_VALUE) { - undo_redo->add_undo_method(animation.ptr(), "value_track_set_update_mode", idx, animation->value_track_get_update_mode(idx)); - } - - undo_redo->commit_action(); - } - - } break; - case TRACK_MENU_DUPLICATE: - case TRACK_MENU_DUPLICATE_TRANSPOSE: { - - _anim_duplicate_keys(p_type == TRACK_MENU_DUPLICATE_TRANSPOSE); - } break; - case TRACK_MENU_SET_ALL_TRANS_LINEAR: - case TRACK_MENU_SET_ALL_TRANS_CONSTANT: - case TRACK_MENU_SET_ALL_TRANS_OUT: - case TRACK_MENU_SET_ALL_TRANS_IN: - case TRACK_MENU_SET_ALL_TRANS_INOUT: - case TRACK_MENU_SET_ALL_TRANS_OUTIN: { - - if (!selection.size() || !animation.is_valid()) - break; - - float t = 0; - switch (p_type) { - case TRACK_MENU_SET_ALL_TRANS_LINEAR: t = 1.0; break; - case TRACK_MENU_SET_ALL_TRANS_CONSTANT: t = 0.0; break; - case TRACK_MENU_SET_ALL_TRANS_OUT: t = 0.5; break; - case TRACK_MENU_SET_ALL_TRANS_IN: t = 2.0; break; - case TRACK_MENU_SET_ALL_TRANS_INOUT: t = -0.5; break; - case TRACK_MENU_SET_ALL_TRANS_OUTIN: t = -2.0; break; - } - - undo_redo->create_action(TTR("Set Transitions to:") + " " + rtos(t)); - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - const SelectedKey &sk = E->key(); - - undo_redo->add_do_method(animation.ptr(), "track_set_key_transition", sk.track, sk.key, t); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", sk.track, sk.key, animation->track_get_key_transition(sk.track, sk.key)); - } - - undo_redo->commit_action(); - - } break; - case TRACK_MENU_NEXT_STEP: { - - if (animation.is_null()) - break; - float step = animation->get_step(); - if (step == 0) - step = 1; - - float pos = timeline_pos; - - pos = Math::stepify(pos + step, step); - if (pos > animation->get_length()) - pos = animation->get_length(); - timeline_pos = pos; - track_pos->update(); - emit_signal("timeline_changed", pos, true); - - } break; - case TRACK_MENU_PREV_STEP: { - if (animation.is_null()) - break; - float step = animation->get_step(); - if (step == 0) - step = 1; - - float pos = timeline_pos; - pos = Math::stepify(pos - step, step); - if (pos < 0) - pos = 0; - timeline_pos = pos; - track_pos->update(); - emit_signal("timeline_changed", pos, true); - - } break; - - case TRACK_MENU_OPTIMIZE: { - - optimize_dialog->popup_centered(Size2(250, 180)); - } break; - case TRACK_MENU_CLEAN_UP: { - - cleanup_dialog->popup_centered_minsize(Size2(300, 0)); - } break; - case TRACK_MENU_CLEAN_UP_CONFIRM: { - - if (cleanup_all->is_pressed()) { - List<StringName> names; - AnimationPlayerEditor::singleton->get_player()->get_animation_list(&names); - for (List<StringName>::Element *E = names.front(); E; E = E->next()) { - _cleanup_animation(AnimationPlayerEditor::singleton->get_player()->get_animation(E->get())); - } - } else { - _cleanup_animation(animation); - } - } break; - case CURVE_SET_LINEAR: { - curve_edit->force_transition(1.0); - - } break; - case CURVE_SET_IN: { - - curve_edit->force_transition(4.0); - - } break; - case CURVE_SET_OUT: { - - curve_edit->force_transition(0.25); - } break; - case CURVE_SET_INOUT: { - curve_edit->force_transition(-4); - - } break; - case CURVE_SET_OUTIN: { - - curve_edit->force_transition(-0.25); - } break; - case CURVE_SET_CONSTANT: { - - curve_edit->force_transition(0); - } break; - } -} - -void AnimationKeyEditor::_cleanup_animation(Ref<Animation> p_animation) { - - for (int i = 0; i < p_animation->get_track_count(); i++) { - - bool prop_exists = false; - Variant::Type valid_type = Variant::NIL; - Object *obj = NULL; - - RES res; - Vector<StringName> leftover_path; - - Node *node = root->get_node_and_resource(p_animation->track_get_path(i), res, leftover_path); - - if (res.is_valid()) { - obj = res.ptr(); - } else if (node) { - obj = node; - } - - if (obj && p_animation->track_get_type(i) == Animation::TYPE_VALUE) { - valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists); - } - - if (!obj && cleanup_tracks->is_pressed()) { - - p_animation->remove_track(i); - i--; - continue; - } - - if (!prop_exists || p_animation->track_get_type(i) != Animation::TYPE_VALUE || cleanup_keys->is_pressed() == false) - continue; - - for (int j = 0; j < p_animation->track_get_key_count(i); j++) { - - Variant v = p_animation->track_get_key_value(i, j); - - if (!Variant::can_convert(v.get_type(), valid_type)) { - p_animation->track_remove_key(i, j); - j--; - } - } - - if (p_animation->track_get_key_count(i) == 0 && cleanup_tracks->is_pressed()) { - p_animation->remove_track(i); - i--; - } - } - - undo_redo->clear_history(); - _update_paths(); -} - -void AnimationKeyEditor::_animation_optimize() { - - animation->optimize(optimize_linear_error->get_value(), optimize_angular_error->get_value(), optimize_max_angle->get_value()); - track_editor->update(); - undo_redo->clear_history(); -} - -float AnimationKeyEditor::_get_zoom_scale() const { - - float zv = zoom->get_value(); - if (zv < 1) { - zv = 1.0 - zv; - return Math::pow(1.0f + zv, 8.0f) * 100; - } else { - return 1.0 / Math::pow(zv, 8.0f) * 100; - } -} - -void AnimationKeyEditor::_track_position_draw() { - - if (!animation.is_valid()) { - return; - } - - Ref<StyleBox> style = get_stylebox("normal", "TextEdit"); - Size2 size = track_editor->get_size() - style->get_minimum_size(); - Size2 ofs = style->get_offset(); - - int settings_limit = size.width - right_data_size_cache; - int name_limit = settings_limit * name_column_ratio; - - float keys_from = h_scroll->get_value(); - float zoom_scale = _get_zoom_scale(); - float keys_to = keys_from + (settings_limit - name_limit) / zoom_scale; - - //will move to separate control! (for speedup) - if (timeline_pos >= keys_from && timeline_pos < keys_to) { - //draw position - int pixel = (timeline_pos - h_scroll->get_value()) * zoom_scale; - pixel += name_limit; - track_pos->draw_line(ofs + Point2(pixel, 0), ofs + Point2(pixel, size.height), get_color("accent_color", "Editor")); - } -} - -void AnimationKeyEditor::_track_editor_draw() { - - if (animation.is_valid() && animation->get_track_count()) { - if (selected_track < 0) - selected_track = 0; - else if (selected_track >= animation->get_track_count()) - selected_track = animation->get_track_count() - 1; - } - - track_pos->update(); - Control *te = track_editor; - Ref<StyleBox> style = get_stylebox("normal", "TextEdit"); - te->draw_style_box(style, Rect2(Point2(), track_editor->get_size())); - - if (te->has_focus()) { - te->draw_style_box(get_stylebox("bg_focus", "Tree"), Rect2(Point2(), track_editor->get_size())); - } - - 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); - key_editor_tab->hide(); - move_up_button->set_disabled(true); - move_down_button->set_disabled(true); - remove_button->set_disabled(true); - - 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); - move_up_button->set_disabled(false); - move_down_button->set_disabled(false); - remove_button->set_disabled(false); - if (edit_button->is_pressed()) - key_editor_tab->show(); - - te_drawing = true; - - Size2 size = te->get_size() - style->get_minimum_size(); - Size2 ofs = style->get_offset(); - - Ref<Font> font = te->get_font("font", "Tree"); - int sep = get_constant("vseparation", "Tree"); - int hsep = get_constant("hseparation", "Tree"); - Color color = get_color("font_color", "Tree"); - Color sepcolor = color; - sepcolor.a = 0.2; - Color timecolor = color; - timecolor.a = 0.2; - Color hover_color = color; - hover_color.a = 0.05; - Color select_color = color; - select_color.a = 0.1; - Color invalid_path_color = get_color("error_color", "Editor"); - Color track_select_color = get_color("highlighted_font_color", "Editor"); - - Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); - Ref<Texture> move_up_icon = get_icon("MoveUp", "EditorIcons"); - Ref<Texture> move_down_icon = get_icon("MoveDown", "EditorIcons"); - Ref<Texture> remove_icon_hl = get_icon("RemoveHl", "EditorIcons"); - Ref<Texture> move_up_icon_hl = get_icon("MoveUpHl", "EditorIcons"); - Ref<Texture> move_down_icon_hl = get_icon("MoveDownHl", "EditorIcons"); - Ref<Texture> add_key_icon = get_icon("TrackAddKey", "EditorIcons"); - Ref<Texture> add_key_icon_hl = get_icon("TrackAddKeyHl", "EditorIcons"); - Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); - Ref<Texture> checked = get_icon("checked", "Tree"); - Ref<Texture> unchecked = get_icon("unchecked", "Tree"); - - Ref<Texture> wrap_icon[2] = { - get_icon("InterpWrapClamp", "EditorIcons"), - get_icon("InterpWrapLoop", "EditorIcons"), - }; - - Ref<Texture> interp_icon[3] = { - get_icon("InterpRaw", "EditorIcons"), - get_icon("InterpLinear", "EditorIcons"), - get_icon("InterpCubic", "EditorIcons") - }; - Ref<Texture> cont_icon[3] = { - get_icon("TrackContinuous", "EditorIcons"), - get_icon("TrackDiscrete", "EditorIcons"), - get_icon("TrackTrigger", "EditorIcons") - }; - Ref<Texture> type_icon[3] = { - get_icon("KeyValue", "EditorIcons"), - get_icon("KeyXform", "EditorIcons"), - get_icon("KeyCall", "EditorIcons") - }; - - Ref<Texture> valid_icon = get_icon("KeyValid", "EditorIcons"); - Ref<Texture> invalid_icon = get_icon("KeyInvalid", "EditorIcons"); - const Color modulate_selected = Color(0x84 / 255.0, 0xc2 / 255.0, 0xff / 255.0); - - Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); - - int right_separator_ofs = right_data_size_cache; - - int h = font->get_height() + sep; - - int fit = (size.height / h) - 1; - int total = animation->get_track_count(); - if (total < fit) { - v_scroll->hide(); - v_scroll->set_max(total); - v_scroll->set_page(fit); - } else { - v_scroll->show(); - v_scroll->set_max(total); - v_scroll->set_page(fit); - } - - int left_check_ofs = checked->get_width(); - int settings_limit = size.width - right_separator_ofs; - int name_limit = settings_limit * name_column_ratio; - - Color linecolor = color; - linecolor.a = 0.2; - te->draw_line(ofs + Point2(name_limit, 0), ofs + Point2(name_limit, size.height), linecolor); - te->draw_line(ofs + Point2(settings_limit, 0), ofs + Point2(settings_limit, size.height), linecolor); - te->draw_texture(hsize_icon, ofs + Point2(name_limit - hsize_icon->get_width() - hsep, (h - hsize_icon->get_height()) / 2)); - - te->draw_line(ofs + Point2(0, h), ofs + Point2(size.width, h), linecolor); - // draw time - - float keys_from; - float keys_to; - float zoom_scale; - - { - - int zoomw = settings_limit - name_limit; - - float scale = _get_zoom_scale(); - zoom_scale = scale; - - float l = animation->get_length(); - if (l <= 0) - l = 0.001; //avoid crashor - - int end_px = (l - h_scroll->get_value()) * scale; - int begin_px = -h_scroll->get_value() * scale; - Color notimecol = get_color("dark_color_2", "Editor"); - - { - - te->draw_rect(Rect2(ofs + Point2(name_limit, 0), Point2(zoomw - 1, h)), notimecol); - - if (begin_px < zoomw && end_px > 0) { - - if (begin_px < 0) - begin_px = 0; - if (end_px > zoomw) - end_px = zoomw; - - te->draw_rect(Rect2(ofs + Point2(name_limit + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor); - } - } - - keys_from = h_scroll->get_value(); - keys_to = keys_from + zoomw / scale; - - { - float time_min = 0; - float time_max = animation->get_length(); - for (int i = 0; i < animation->get_track_count(); i++) { - - if (animation->track_get_key_count(i) > 0) { - - float beg = animation->track_get_key_time(i, 0); - if (beg < time_min) - time_min = beg; - float end = animation->track_get_key_time(i, animation->track_get_key_count(i) - 1); - if (end > time_max) - time_max = end; - } - } - - float extra = (zoomw / scale) * 0.5; - - if (time_min < -0.001) - time_min -= extra; - time_max += extra; - h_scroll->set_min(time_min); - h_scroll->set_max(time_max); - - if (zoomw / scale < (time_max - time_min)) { - h_scroll->show(); - - } else { - - h_scroll->hide(); - } - } - - h_scroll->set_page(zoomw / scale); - - Color color_time_sec = color; - Color color_time_dec = color; - color_time_dec.a *= 0.5; -#define SC_ADJ 100 - int min = 30; - int dec = 1; - int step = 1; - 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++) { - - step = (_multp[i] * dec); - if (step * scale / SC_ADJ > min) { - step_found = true; - break; - } - } - if (step_found) - break; - dec *= 10; - decimals--; - if (decimals < 0) - decimals = 0; - } - - for (int i = 0; i < zoomw; i++) { - - float pos = h_scroll->get_value() + double(i) / scale; - float prev = h_scroll->get_value() + (double(i) - 1.0) / scale; - - int sc = int(Math::floor(pos * SC_ADJ)); - int prev_sc = int(Math::floor(prev * SC_ADJ)); - bool sub = (sc % SC_ADJ); - - if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) { - - int scd = sc < 0 ? prev_sc : sc; - te->draw_line(ofs + Point2(name_limit + i, 0), ofs + Point2(name_limit + i, h), linecolor); - te->draw_string(font, ofs + Point2(name_limit + i + 3, (h - font->get_height()) / 2 + font->get_ascent()).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), sub ? color_time_dec : color_time_sec, zoomw - i); - } - } - } - - color.a *= 0.5; - - for (int i = 0; i < fit; i++) { - - //this code sucks, i always forget how it works - - int idx = v_scroll->get_value() + i; - if (idx >= animation->get_track_count()) - break; - int y = h + i * h + sep; - - bool prop_exists = false; - Variant::Type valid_type = Variant::NIL; - Object *obj = NULL; - - RES res; - Vector<StringName> leftover_path; - - Node *node = root ? root->get_node_and_resource(animation->track_get_path(idx), res, leftover_path) : (Node *)NULL; - - if (res.is_valid()) { - obj = res.ptr(); - } else if (node) { - obj = node; - } - - if (obj && animation->track_get_type(idx) == Animation::TYPE_VALUE) { - // While leftover_path might be still empty, we wouldn't be able to get here anyway - valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists); - } - - // Draw background color of the whole track - if (/*mouse_over.over!=MouseOver::OVER_NONE &&*/ idx == mouse_over.track) { - Color sepc = hover_color; - te->draw_rect(Rect2(ofs + Point2(0, y), Size2(size.width, h - 1)), sepc); - } - - if (selected_track == idx) { - Color tc = select_color; - //tc.a*=0.7; - te->draw_rect(Rect2(ofs + Point2(0, y), Size2(size.width - 1, h - 1)), tc); - } - - // Draw track enabled state check box - Ref<Texture> check_box = animation->track_is_enabled(idx) ? checked : unchecked; - te->draw_texture(check_box, ofs + Point2(0, y + (h - checked->get_height()) / 2).floor()); - - // Draw track type glyph and node path - te->draw_texture(type_icon[animation->track_get_type(idx)], ofs + Point2(left_check_ofs + sep, y + (h - type_icon[0]->get_height()) / 2).floor()); - NodePath np = animation->track_get_path(idx); - Node *n = root ? root->get_node(np) : (Node *)NULL; - 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 - (left_check_ofs + sep) - (type_icon[0]->get_width() + sep) - 5); - - // Draw separator line below track area - if (!obj) - te->draw_line(ofs + Point2(0, y + h / 2), ofs + Point2(name_limit, y + h / 2), invalid_path_color); - - te->draw_line(ofs + Point2(0, y + h), ofs + Point2(size.width, y + h), sepcolor); - - Point2 icon_ofs = ofs + Point2(size.width, y + (h - remove_icon->get_height()) / 2).floor(); - icon_ofs.y += 4 * EDSCALE; - - /* icon_ofs.x-=remove_icon->get_width(); - - te->draw_texture((mouse_over.over==MouseOver::OVER_REMOVE && mouse_over.track==idx)?remove_icon_hl:remove_icon,icon_ofs); - icon_ofs.x-=hsep; - icon_ofs.x-=move_down_icon->get_width(); - te->draw_texture((mouse_over.over==MouseOver::OVER_DOWN && mouse_over.track==idx)?move_down_icon_hl:move_down_icon,icon_ofs); - icon_ofs.x-=hsep; - icon_ofs.x-=move_up_icon->get_width(); - te->draw_texture((mouse_over.over==MouseOver::OVER_UP && mouse_over.track==idx)?move_up_icon_hl:move_up_icon,icon_ofs); - icon_ofs.x-=hsep; - te->draw_line(Point2(icon_ofs.x,ofs.y+y),Point2(icon_ofs.x,ofs.y+y+h),sepcolor); - - icon_ofs.x-=hsep; - */ - track_ofs[0] = size.width - icon_ofs.x + ofs.x; - icon_ofs.x -= down_icon->get_width(); - te->draw_texture(down_icon, icon_ofs - Size2(0, 4 * EDSCALE)); - - int wrap_type = animation->track_get_interpolation_loop_wrap(idx) ? 1 : 0; - icon_ofs.x -= hsep; - icon_ofs.x -= wrap_icon[wrap_type]->get_width(); - te->draw_texture(wrap_icon[wrap_type], icon_ofs); - - icon_ofs.x -= hsep; - te->draw_line(Point2(icon_ofs.x, ofs.y + y), Point2(icon_ofs.x, ofs.y + y + h), sepcolor); - - track_ofs[1] = size.width - icon_ofs.x + ofs.x; - - icon_ofs.x -= down_icon->get_width(); - te->draw_texture(down_icon, icon_ofs - Size2(0, 4 * EDSCALE)); - - int interp_type = animation->track_get_interpolation_type(idx); - ERR_CONTINUE(interp_type < 0 || interp_type >= 3); - icon_ofs.x -= hsep; - icon_ofs.x -= interp_icon[interp_type]->get_width(); - te->draw_texture(interp_icon[interp_type], icon_ofs); - - icon_ofs.x -= hsep; - te->draw_line(Point2(icon_ofs.x, ofs.y + y), Point2(icon_ofs.x, ofs.y + y + h), sepcolor); - - track_ofs[2] = size.width - icon_ofs.x + ofs.x; - - if (animation->track_get_type(idx) == Animation::TYPE_VALUE) { - - int umode = animation->value_track_get_update_mode(idx); - - icon_ofs.x -= hsep; - icon_ofs.x -= down_icon->get_width(); - te->draw_texture(down_icon, icon_ofs - Size2(0, 4 * EDSCALE)); - - icon_ofs.x -= hsep; - icon_ofs.x -= cont_icon[umode]->get_width(); - te->draw_texture(cont_icon[umode], icon_ofs); - } else { - - icon_ofs.x -= hsep * 2 + cont_icon[0]->get_width() + down_icon->get_width(); - } - - icon_ofs.x -= hsep; - te->draw_line(Point2(icon_ofs.x, ofs.y + y), Point2(icon_ofs.x, ofs.y + y + h), sepcolor); - - track_ofs[3] = size.width - icon_ofs.x + ofs.x; - - icon_ofs.x -= hsep; - icon_ofs.x -= add_key_icon->get_width(); - te->draw_texture((mouse_over.over == MouseOver::OVER_ADD_KEY && mouse_over.track == idx) ? add_key_icon_hl : add_key_icon, icon_ofs); - track_ofs[4] = size.width - icon_ofs.x + ofs.x; - - //draw the keys; - int tt = animation->track_get_type(idx); - float key_vofs = Math::floor((float)(h - type_icon[tt]->get_height()) / 2); - float key_hofs = -Math::floor((float)type_icon[tt]->get_height() / 2); - - int kc = animation->track_get_key_count(idx); - bool first = true; - - for (int i = 0; i < kc; i++) { - - float time = animation->track_get_key_time(idx, i); - if (time < keys_from) - continue; - if (time > keys_to) { - - if (first && i > 0 && animation->track_get_key_value(idx, i) == animation->track_get_key_value(idx, i - 1)) { - //draw whole line - te->draw_line(ofs + Vector2(name_limit, y + h / 2), ofs + Point2(settings_limit, y + h / 2), color); - } - - break; - } - - 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; - sk.track = idx; - if (selection.has(sk)) { - - if (click.click == ClickOver::CLICK_MOVE_KEYS) - continue; - is_selected = true; - } - - if (mouse_over.over == MouseOver::OVER_KEY && mouse_over.track == idx && mouse_over.over_key == i) - 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); - } - - if (i < kc - 1 && value == animation->track_get_key_value(idx, i + 1)) { - float x_n = key_hofs + name_limit + (animation->track_get_key_time(idx, i + 1) - keys_from) * zoom_scale; - - x_n = MIN(x_n, settings_limit); - te->draw_line(ofs + Point2(x_n, y + h / 2), ofs + Point2(x, y + h / 2), color); - } - - te->draw_texture(tex, ofs + Point2(x, y + key_vofs).floor(), modulate); - - first = false; - } - } - - switch (click.click) { - case ClickOver::CLICK_SELECT_KEYS: { - - Color box_color = get_color("accent_color", "Editor"); - box_color.a = 0.35; - te->draw_rect(Rect2(click.at, click.to - click.at), box_color); - - } break; - case ClickOver::CLICK_MOVE_KEYS: { - - float from_t = 1e20; - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - float t = animation->track_get_key_time(E->key().track, E->key().key); - if (t < from_t) - from_t = t; - } - - float motion = from_t + (click.to.x - click.at.x) / zoom_scale; - if (step->get_value()) - motion = Math::stepify(motion, step->get_value()); - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - - int idx = E->key().track; - int i = idx - (int)v_scroll->get_value(); - if (i < 0 || i >= fit) - continue; - int y = h + i * h + sep; - - 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; - - float t = motion + diff; - - float x = (t - keys_from) * zoom_scale; - //x+=click.to.x - click.at.x; - if (x < 0 || x >= (settings_limit - name_limit)) - continue; - - x += name_limit; - - te->draw_texture(valid_icon, ofs + Point2(x + key_hofs, y + key_vofs).floor(), modulate_selected); - } - } break; - default: {}; - } - - te_drawing = false; -} - -void AnimationKeyEditor::_track_name_changed(const String &p_name) { - - ERR_FAIL_COND(!animation.is_valid()); - undo_redo->create_action(TTR("Anim Track Rename")); - undo_redo->add_do_method(animation.ptr(), "track_set_path", track_name_editing, p_name); - undo_redo->add_undo_method(animation.ptr(), "track_set_path", track_name_editing, animation->track_get_path(track_name_editing)); - undo_redo->commit_action(); - track_name->hide(); -} - -void AnimationKeyEditor::_track_menu_selected(int p_idx) { - - ERR_FAIL_COND(!animation.is_valid()); - - if (interp_editing != -1) { - - ERR_FAIL_INDEX(interp_editing, animation->get_track_count()); - undo_redo->create_action(TTR("Anim Track Change Interpolation")); - undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_type", interp_editing, p_idx); - undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_type", interp_editing, animation->track_get_interpolation_type(interp_editing)); - undo_redo->commit_action(); - } else if (cont_editing != -1) { - - ERR_FAIL_INDEX(cont_editing, animation->get_track_count()); - - undo_redo->create_action(TTR("Anim Track Change Value Mode")); - undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", cont_editing, p_idx); - undo_redo->add_undo_method(animation.ptr(), "value_track_set_update_mode", cont_editing, animation->value_track_get_update_mode(cont_editing)); - undo_redo->commit_action(); - } else if (wrap_editing != -1) { - - ERR_FAIL_INDEX(wrap_editing, animation->get_track_count()); - - undo_redo->create_action(TTR("Anim Track Change Wrap Mode")); - undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_loop_wrap", wrap_editing, p_idx ? true : false); - undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_loop_wrap", wrap_editing, animation->track_get_interpolation_loop_wrap(wrap_editing)); - undo_redo->commit_action(); - } else { - switch (p_idx) { - - case RIGHT_MENU_DUPLICATE: - _anim_duplicate_keys(); - break; - case RIGHT_MENU_DUPLICATE_TRANSPOSE: - _anim_duplicate_keys(true); - break; - case RIGHT_MENU_REMOVE: - _anim_delete_keys(); - break; - } - } -} - -struct _AnimMoveRestore { - - int track; - float time; - Variant key; - float transition; -}; - -void AnimationKeyEditor::_clear_selection_for_anim(const Ref<Animation> &p_anim) { - - if (!(animation == p_anim)) - return; - //selection.clear(); - _clear_selection(); -} - -void AnimationKeyEditor::_select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos) { - - if (!(animation == p_anim)) - return; - - int idx = animation->track_find_key(p_track, p_pos, true); - ERR_FAIL_COND(idx < 0); - - SelectedKey sk; - sk.track = p_track; - sk.key = idx; - KeyInfo ki; - ki.pos = p_pos; - - selection.insert(sk, ki); -} - -PropertyInfo AnimationKeyEditor::_find_hint_for_track(int p_idx, NodePath &r_base_path) { - - r_base_path = NodePath(); - ERR_FAIL_COND_V(!animation.is_valid(), PropertyInfo()); - ERR_FAIL_INDEX_V(p_idx, animation->get_track_count(), PropertyInfo()); - - if (!root) - return PropertyInfo(); - - NodePath path = animation->track_get_path(p_idx); - - if (!root->has_node_and_resource(path)) - return PropertyInfo(); - - RES res; - Vector<StringName> leftover_path; - Node *node = root->get_node_and_resource(path, res, leftover_path, true); - - if (node) { - r_base_path = node->get_path(); - } - - if (leftover_path.empty()) - return PropertyInfo(); - - Variant property_info_base; - if (res.is_valid()) - property_info_base = res; - else if (node) - property_info_base = node; - - for (int i = 0; i < leftover_path.size() - 1; i++) { - property_info_base = property_info_base.get_named(leftover_path[i]); - } - - List<PropertyInfo> pinfo; - property_info_base.get_property_list(&pinfo); - - for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { - - if (E->get().name == leftover_path[leftover_path.size() - 1]) { - return E->get(); - } - } - - return PropertyInfo(); -} - -void AnimationKeyEditor::_curve_transition_changed(float p_what) { - - if (selection.size() == 0) - return; - if (selection.size() == 1) - undo_redo->create_action(TTR("Edit Node Curve"), UndoRedo::MERGE_ENDS); - else - undo_redo->create_action(TTR("Edit Selection Curve"), UndoRedo::MERGE_ENDS); - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - - int track = E->key().track; - int key = E->key().key; - float prev_val = animation->track_get_key_transition(track, key); - undo_redo->add_do_method(animation.ptr(), "track_set_key_transition", track, key, p_what); - undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", track, key, prev_val); - } - - undo_redo->commit_action(); -} - -void AnimationKeyEditor::_toggle_edit_curves() { - - if (edit_button->is_pressed()) - key_editor_tab->show(); - else - key_editor_tab->hide(); -} - -bool AnimationKeyEditor::_edit_if_single_selection() { - - if (selection.size() != 1) { - - if (selection.size() == 0) { - curve_edit->set_mode(AnimationCurveEdit::MODE_DISABLED); - //print_line("disable"); - } else { - - curve_edit->set_mode(AnimationCurveEdit::MODE_MULTIPLE); - curve_edit->set_transition(1.0); - curve_edit->clear_multiples(); - //add all - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - - curve_edit->set_multiple(animation->track_get_key_transition(E->key().track, E->key().key)); - } - //print_line("multiple"); - } - return false; - } - curve_edit->set_mode(AnimationCurveEdit::MODE_SINGLE); - //print_line("regular"); - - int idx = selection.front()->key().track; - int key = selection.front()->key().key; - { - - key_edit->animation = animation; - key_edit->track = idx; - key_edit->key_ofs = animation->track_get_key_time(idx, key); - key_edit->hint = _find_hint_for_track(idx, key_edit->base); - key_edit->notify_change(); - - curve_edit->set_transition(animation->track_get_key_transition(idx, key)); - - /*key_edit_dialog->set_size( Size2( 200,200) ); - key_edit_dialog->set_position( track_editor->get_global_position() + ofs + mpos +Point2(-100,20)); - key_edit_dialog->popup();*/ - } - - return true; -} - -void AnimationKeyEditor::_anim_delete_keys() { - if (selection.size()) { - undo_redo->create_action(TTR("Anim Delete Keys")); - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - } - undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->commit_action(); - //selection.clear(); - accept_event(); - _edit_if_single_selection(); - } -} - -void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) { - - Control *te = track_editor; - Ref<StyleBox> style = get_stylebox("normal", "TextEdit"); - - if (!animation.is_valid()) { - return; - } - - Size2 size = te->get_size() - style->get_minimum_size(); - Size2 ofs = style->get_offset(); - - Ref<Font> font = te->get_font("font", "Tree"); - int sep = get_constant("vseparation", "Tree"); - int hsep = get_constant("hseparation", "Tree"); - Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); - Ref<Texture> move_up_icon = get_icon("MoveUp", "EditorIcons"); - Ref<Texture> move_down_icon = get_icon("MoveDown", "EditorIcons"); - Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); - Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); - Ref<Texture> add_key_icon = get_icon("TrackAddKey", "EditorIcons"); - Ref<Texture> check_icon = get_icon("checked", "Tree"); - - Ref<Texture> wrap_icon[2] = { - get_icon("InterpWrapClamp", "EditorIcons"), - get_icon("InterpWrapLoop", "EditorIcons"), - }; - Ref<Texture> interp_icon[3] = { - get_icon("InterpRaw", "EditorIcons"), - get_icon("InterpLinear", "EditorIcons"), - get_icon("InterpCubic", "EditorIcons") - }; - Ref<Texture> cont_icon[3] = { - get_icon("TrackContinuous", "EditorIcons"), - get_icon("TrackDiscrete", "EditorIcons"), - get_icon("TrackTrigger", "EditorIcons") - }; - Ref<Texture> type_icon[3] = { - get_icon("KeyValue", "EditorIcons"), - get_icon("KeyXform", "EditorIcons"), - get_icon("KeyCall", "EditorIcons") - }; - int right_separator_ofs = right_data_size_cache; - - int h = font->get_height() + sep; - - int fit = (size.height / h) - 1; - int total = animation->get_track_count(); - if (total < fit) { - v_scroll->hide(); - } else { - v_scroll->show(); - v_scroll->set_max(total); - v_scroll->set_page(fit); - } - - int left_check_ofs = check_icon->get_width(); - int settings_limit = size.width - right_separator_ofs; - int name_limit = settings_limit * name_column_ratio; - - Ref<InputEventKey> key = p_input; - if (key.is_valid()) { - - if (key->get_scancode() == KEY_D && key->is_pressed() && key->get_command()) { - - if (key->get_shift()) - _menu_track(TRACK_MENU_DUPLICATE_TRANSPOSE); - else - _menu_track(TRACK_MENU_DUPLICATE); - - accept_event(); - - } else if (key->get_scancode() == KEY_DELETE && key->is_pressed() && click.click == ClickOver::CLICK_NONE) { - - _anim_delete_keys(); - } else if (animation.is_valid() && animation->get_track_count() > 0) { - - if (key->is_pressed() && (key->is_action("ui_up") || key->is_action("ui_page_up"))) { - - if (key->is_action("ui_up")) - selected_track--; - if (v_scroll->is_visible_in_tree() && key->is_action("ui_page_up")) - selected_track--; - - if (selected_track < 0) - selected_track = 0; - - if (v_scroll->is_visible_in_tree()) { - if (v_scroll->get_value() > selected_track) - v_scroll->set_value(selected_track); - } - - track_editor->update(); - accept_event(); - } - - if (key->is_pressed() && (key->is_action("ui_down") || key->is_action("ui_page_down"))) { - - if (key->is_action("ui_down")) - selected_track++; - else if (v_scroll->is_visible_in_tree() && key->is_action("ui_page_down")) - selected_track += v_scroll->get_page(); - - if (selected_track >= animation->get_track_count()) - selected_track = animation->get_track_count() - 1; - - if (v_scroll->is_visible_in_tree() && v_scroll->get_page() + v_scroll->get_value() < selected_track + 1) { - v_scroll->set_value(selected_track - v_scroll->get_page() + 1); - } - - track_editor->update(); - accept_event(); - } - } - } - - Ref<InputEventMouseButton> mb = p_input; - - if (mb.is_valid()) { - - if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) { - - if (mb->get_command()) { - - zoom->set_value(zoom->get_value() + zoom->get_step()); - } else { - - v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * mb->get_factor() / 8); - } - } - - if (mb->get_button_index() == BUTTON_WHEEL_DOWN && mb->is_pressed()) { - - if (mb->get_command()) { - - zoom->set_value(zoom->get_value() - zoom->get_step()); - } else { - - v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * mb->get_factor() / 8); - } - } - - if (mb->get_button_index() == BUTTON_WHEEL_RIGHT && mb->is_pressed()) { - - h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * mb->get_factor() / 8); - } - - if (mb->get_button_index() == BUTTON_WHEEL_LEFT && mb->is_pressed()) { - - v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * mb->get_factor() / 8); - } - - if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { - - Point2 mpos = mb->get_position() - ofs; - - if (selection.size() == 0) { - // Auto-select on right-click if nothing is selected - // Note: This code is pretty much duplicated from the left click code, - // both codes could be moved into a function to avoid the duplicated code. - Point2 mpos = mb->get_position() - ofs; - - if (mpos.y < h) { - return; - } - - mpos.y -= h; - - int idx = mpos.y / h; - idx += v_scroll->get_value(); - if (idx < 0 || idx >= animation->get_track_count()) - return; - - if (mpos.x < name_limit) { - } else if (mpos.x < settings_limit) { - float pos = mpos.x - name_limit; - pos /= _get_zoom_scale(); - pos += h_scroll->get_value(); - float w_time = (type_icon[0]->get_width() / _get_zoom_scale()) / 2.0; - - int kidx = animation->track_find_key(idx, pos); - int kidx_n = kidx + 1; - int key = -1; - - if (kidx >= 0 && kidx < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx); - if (ABS(pos - kpos) <= w_time) { - - key = kidx; - } - } - - if (key == -1 && kidx_n >= 0 && kidx_n < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx_n); - if (ABS(pos - kpos) <= w_time) { - - key = kidx_n; - } - } - - if (key == -1) { - - click.click = ClickOver::CLICK_SELECT_KEYS; - click.at = mb->get_position(); - click.to = click.at; - click.shift = mb->get_shift(); - selected_track = idx; - track_editor->update(); - //drag select region - return; - } - - SelectedKey sk; - sk.track = idx; - sk.key = key; - KeyInfo ki; - ki.pos = animation->track_get_key_time(idx, key); - click.shift = mb->get_shift(); - click.selk = sk; - - if (!mb->get_shift() && !selection.has(sk)) - _clear_selection(); - - selection.insert(sk, ki); - - click.click = ClickOver::CLICK_MOVE_KEYS; - click.at = mb->get_position(); - click.to = click.at; - update(); - selected_track = idx; - track_editor->update(); - - if (_edit_if_single_selection() && mb->get_command()) { - edit_button->set_pressed(true); - key_editor_tab->show(); - } - } - } - - if (selection.size()) { - // User has right clicked and we have a selection, show a popup menu with options - track_menu->clear(); - track_menu->set_size(Point2(1, 1)); - track_menu->add_item(TTR("Duplicate Selection"), RIGHT_MENU_DUPLICATE); - track_menu->add_item(TTR("Duplicate Transposed"), RIGHT_MENU_DUPLICATE_TRANSPOSE); - track_menu->add_item(TTR("Remove Selection"), RIGHT_MENU_REMOVE); - - track_menu->set_position(te->get_global_position() + mpos); - - interp_editing = -1; - cont_editing = -1; - wrap_editing = -1; - - track_menu->popup(); - } - } - - if (mb->get_button_index() == BUTTON_LEFT && !(mb->get_button_mask() & ~BUTTON_MASK_LEFT)) { - - if (mb->is_pressed()) { - - Point2 mpos = mb->get_position() - ofs; - - if (mpos.y < h) { - - if (mpos.x < name_limit && mpos.x > (name_limit - hsep - hsize_icon->get_width())) { - - click.click = ClickOver::CLICK_RESIZE_NAMES; - click.at = mb->get_position(); - click.to = click.at; - click.at.y = name_limit; - } - - if (mpos.x >= name_limit && mpos.x < settings_limit) { - //seek - //int zoomw = settings_limit-name_limit; - float scale = _get_zoom_scale(); - float pos = h_scroll->get_value() + (mpos.x - name_limit) / scale; - if (animation->get_step()) - pos = Math::stepify(pos, animation->get_step()); - - if (pos < 0) - pos = 0; - if (pos >= animation->get_length()) - pos = animation->get_length(); - timeline_pos = pos; - click.click = ClickOver::CLICK_DRAG_TIMELINE; - click.at = mb->get_position(); - click.to = click.at; - emit_signal("timeline_changed", pos, false); - } - - return; - } - - mpos.y -= h; - - int idx = mpos.y / h; - idx += v_scroll->get_value(); - if (idx < 0) - return; - - if (idx >= animation->get_track_count()) { - - if (mpos.x >= name_limit && mpos.x < settings_limit) { - - click.click = ClickOver::CLICK_SELECT_KEYS; - click.at = mb->get_position(); - click.to = click.at; - //drag select region - } - - return; - } - - if (mpos.x < left_check_ofs) { - // Checkbox on the very left to enable/disable tracks. - - animation->track_set_enabled(idx, !animation->track_is_enabled(idx)); - - } else if (mpos.x < name_limit - (type_icon[0]->get_width() / 2.0)) { - //name column - - // area - if (idx != selected_track) { - - selected_track = idx; - track_editor->update(); - return; - } - - Rect2 area(ofs.x + left_check_ofs + sep, ofs.y + ((int(mpos.y) / h) + 1) * h, name_limit - left_check_ofs - sep, h); - track_name->set_text(animation->track_get_path(idx)); - track_name->set_position(te->get_global_position() + area.position); - track_name->set_size(area.size); - track_name->show_modal(); - track_name->grab_focus(); - track_name->select_all(); - track_name_editing = idx; - - } else if (mpos.x < settings_limit) { - - float pos = mpos.x - name_limit; - pos /= _get_zoom_scale(); - pos += h_scroll->get_value(); - float w_time = (type_icon[0]->get_width() / _get_zoom_scale()) / 2.0; - - int kidx = animation->track_find_key(idx, pos); - int kidx_n = kidx + 1; - int key = -1; - - if (kidx >= 0 && kidx < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx); - if (ABS(pos - kpos) <= w_time) { - - key = kidx; - } - } - - if (key == -1 && kidx_n >= 0 && kidx_n < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx_n); - if (ABS(pos - kpos) <= w_time) { - - key = kidx_n; - } - } - - if (key == -1) { - - click.click = ClickOver::CLICK_SELECT_KEYS; - click.at = mb->get_position(); - click.to = click.at; - click.shift = mb->get_shift(); - selected_track = idx; - track_editor->update(); - //drag select region - return; - } - - SelectedKey sk; - sk.track = idx; - sk.key = key; - KeyInfo ki; - ki.pos = animation->track_get_key_time(idx, key); - click.shift = mb->get_shift(); - click.selk = sk; - - if (!mb->get_shift() && !selection.has(sk)) - _clear_selection(); - - selection.insert(sk, ki); - - click.click = ClickOver::CLICK_MOVE_KEYS; - click.at = mb->get_position(); - click.to = click.at; - update(); - selected_track = idx; - track_editor->update(); - - if (_edit_if_single_selection() && mb->get_command()) { - edit_button->set_pressed(true); - key_editor_tab->show(); - } - } else { - //button column - int ofsx = size.width - mpos.x; - if (ofsx < 0) - return; - /* - if (ofsx < remove_icon->get_width()) { - - undo_redo->create_action("Remove Anim Track"); - undo_redo->add_do_method(animation.ptr(),"remove_track",idx); - undo_redo->add_undo_method(animation.ptr(),"add_track",animation->track_get_type(idx),idx); - undo_redo->add_undo_method(animation.ptr(),"track_set_path",idx,animation->track_get_path(idx)); - //todo interpolation - for(int i=0;i<animation->track_get_key_count(idx);i++) { - - Variant v = animation->track_get_key_value(idx,i); - float time = animation->track_get_key_time(idx,i); - float trans = animation->track_get_key_transition(idx,i); - - undo_redo->add_undo_method(animation.ptr(),"track_insert_key",idx,time,v); - undo_redo->add_undo_method(animation.ptr(),"track_set_key_transition",idx,i,trans); - - } - - undo_redo->add_undo_method(animation.ptr(),"track_set_interpolation_type",idx,animation->track_get_interpolation_type(idx)); - if (animation->track_get_type(idx)==Animation::TYPE_VALUE) { - undo_redo->add_undo_method(animation.ptr(),"value_track_set_continuous",idx,animation->value_track_is_continuous(idx)); - - } - - undo_redo->commit_action(); - - - return; - } - - ofsx-=hsep+remove_icon->get_width(); - - if (ofsx < move_down_icon->get_width()) { - - if (idx < animation->get_track_count() -1) { - undo_redo->create_action("Move Anim Track Down"); - undo_redo->add_do_method(animation.ptr(),"track_move_up",idx); - undo_redo->add_undo_method(animation.ptr(),"track_move_down",idx+1); - undo_redo->commit_action(); - } - return; - } - - ofsx-=hsep+move_down_icon->get_width(); - - if (ofsx < move_up_icon->get_width()) { - - if (idx >0) { - undo_redo->create_action("Move Anim Track Up"); - undo_redo->add_do_method(animation.ptr(),"track_move_down",idx); - undo_redo->add_undo_method(animation.ptr(),"track_move_up",idx-1); - undo_redo->commit_action(); - } - return; - } - - - ofsx-=hsep*3+move_up_icon->get_width(); - */ - - if (ofsx < track_ofs[1]) { - - track_menu->clear(); - track_menu->set_size(Point2(1, 1)); - static const char *interp_name[2] = { "Clamp Loop Interp", "Wrap Loop Interp" }; - for (int i = 0; i < 2; i++) { - track_menu->add_icon_item(wrap_icon[i], interp_name[i]); - } - - int popup_y = ofs.y + ((int(mpos.y) / h) + 2) * h; - int popup_x = size.width - track_ofs[1]; - - track_menu->set_position(te->get_global_position() + Point2(popup_x, popup_y)); - - wrap_editing = idx; - interp_editing = -1; - cont_editing = -1; - - track_menu->popup(); - - return; - } - - if (ofsx < track_ofs[2]) { - - track_menu->clear(); - track_menu->set_size(Point2(1, 1)); - static const char *interp_name[3] = { "Nearest", "Linear", "Cubic" }; - for (int i = 0; i < 3; i++) { - track_menu->add_icon_item(interp_icon[i], interp_name[i]); - } - - int popup_y = ofs.y + ((int(mpos.y) / h) + 2) * h; - int popup_x = size.width - track_ofs[2]; - - track_menu->set_position(te->get_global_position() + Point2(popup_x, popup_y)); - - interp_editing = idx; - cont_editing = -1; - wrap_editing = -1; - - track_menu->popup(); - - return; - } - - if (ofsx < track_ofs[3]) { - - track_menu->clear(); - track_menu->set_size(Point2(1, 1)); - String cont_name[3] = { TTR("Continuous"), TTR("Discrete"), TTR("Trigger") }; - for (int i = 0; i < 3; i++) { - track_menu->add_icon_item(cont_icon[i], cont_name[i]); - } - - int popup_y = ofs.y + ((int(mpos.y) / h) + 2) * h; - int popup_x = size.width - track_ofs[3]; - - track_menu->set_position(te->get_global_position() + Point2(popup_x, popup_y)); - - interp_editing = -1; - wrap_editing = -1; - cont_editing = idx; - - track_menu->popup(); - - return; - } - - if (ofsx < track_ofs[4]) { - - Animation::TrackType tt = animation->track_get_type(idx); - - float pos = timeline_pos; - int existing = animation->track_find_key(idx, pos, true); - - Variant newval; - - if (tt == Animation::TYPE_TRANSFORM) { - Dictionary d; - d["location"] = Vector3(); - d["rotation"] = Quat(); - d["scale"] = Vector3(); - newval = d; - - } else if (tt == Animation::TYPE_METHOD) { - - Dictionary d; - d["method"] = ""; - d["args"] = Vector<Variant>(); - - newval = d; - } else if (tt == Animation::TYPE_VALUE) { - - NodePath np; - PropertyInfo inf = _find_hint_for_track(idx, np); - if (inf.type != Variant::NIL) { - - Variant::CallError err; - newval = Variant::construct(inf.type, NULL, 0, err); - } - - if (newval.get_type() == Variant::NIL) { - //popup a new type - cvi_track = idx; - cvi_pos = pos; - - type_menu->set_position(get_global_position() + mpos + ofs); - type_menu->popup(); - return; - } - } - - undo_redo->create_action(TTR("Anim Add Key")); - - undo_redo->add_do_method(animation.ptr(), "track_insert_key", idx, pos, newval, 1); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", idx, pos); - - if (existing != -1) { - Variant v = animation->track_get_key_value(idx, existing); - float trans = animation->track_get_key_transition(idx, existing); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", idx, pos, v, trans); - } - - undo_redo->commit_action(); - - return; - } - } - - } else { - - switch (click.click) { - case ClickOver::CLICK_SELECT_KEYS: { - - float zoom_scale = _get_zoom_scale(); - float keys_from = h_scroll->get_value(); - float keys_to = keys_from + (settings_limit - name_limit) / zoom_scale; - - float from_time = keys_from + (click.at.x - (name_limit + ofs.x)) / zoom_scale; - float to_time = keys_from + (click.to.x - (name_limit + ofs.x)) / zoom_scale; - - if (to_time < from_time) - SWAP(from_time, to_time); - - if (from_time > keys_to || to_time < keys_from) - break; - - if (from_time < keys_from) - from_time = keys_from; - - if (to_time >= keys_to) - to_time = keys_to; - - int from_track = int(click.at.y - ofs.y - h - sep) / h + v_scroll->get_value(); - int to_track = int(click.to.y - ofs.y - h - sep) / h + v_scroll->get_value(); - int from_mod = int(click.at.y - ofs.y - sep) % h; - int to_mod = int(click.to.y - ofs.y - sep) % h; - - if (to_track < from_track) { - - SWAP(from_track, to_track); - SWAP(from_mod, to_mod); - } - - if ((from_mod > (h / 2)) && ((click.at.y - ofs.y) >= (h + sep))) { - from_track++; - } - - if (to_mod < h / 2) { - to_track--; - } - - if (from_track > to_track) { - if (!click.shift) - _clear_selection(); - _edit_if_single_selection(); - break; - } - - int tracks_from = v_scroll->get_value(); - int tracks_to = v_scroll->get_value() + fit - 1; - if (tracks_to >= animation->get_track_count()) - tracks_to = animation->get_track_count() - 1; - - tracks_from = 0; - tracks_to = animation->get_track_count() - 1; - if (to_track > tracks_to) - to_track = tracks_to; - if (from_track < tracks_from) - from_track = tracks_from; - - if (from_track > tracks_to || to_track < tracks_from) { - if (!click.shift) - _clear_selection(); - _edit_if_single_selection(); - break; - } - - if (!click.shift) - _clear_selection(); - - int higher_track = 0x7FFFFFFF; - for (int i = from_track; i <= to_track; i++) { - - int kc = animation->track_get_key_count(i); - for (int j = 0; j < kc; j++) { - - float t = animation->track_get_key_time(i, j); - if (t < from_time) - continue; - if (t > to_time) - break; - - if (i < higher_track) - higher_track = i; - - SelectedKey sk; - sk.track = i; - sk.key = j; - KeyInfo ki; - ki.pos = t; - selection[sk] = ki; - } - } - - if (higher_track != 0x7FFFFFFF) { - selected_track = higher_track; - track_editor->update(); - } - - _edit_if_single_selection(); - - } break; - case ClickOver::CLICK_MOVE_KEYS: { - - if (selection.empty()) - break; - if (click.at == click.to) { - - if (!click.shift) { - - KeyInfo ki = selection[click.selk]; - _clear_selection(); - selection[click.selk] = ki; - _edit_if_single_selection(); - } - - break; - } - - float from_t = 1e20; - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - float t = animation->track_get_key_time(E->key().track, E->key().key); - if (t < from_t) - from_t = t; - } - - float motion = from_t + (click.to.x - click.at.x) / _get_zoom_scale(); - if (step->get_value()) - motion = Math::stepify(motion, step->get_value()); - - undo_redo->create_action(TTR("Anim Move Keys")); - - List<_AnimMoveRestore> to_restore; - - // 1-remove the keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); - } - // 2- remove overlapped keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newtime = E->get().pos - from_t + motion; - int idx = animation->track_find_key(E->key().track, newtime, true); - if (idx == -1) - continue; - SelectedKey sk; - sk.key = idx; - sk.track = E->key().track; - if (selection.has(sk)) - continue; //already in selection, don't save - - undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); - _AnimMoveRestore amr; - - amr.key = animation->track_get_key_value(E->key().track, idx); - amr.track = E->key().track; - amr.time = newtime; - amr.transition = animation->track_get_key_transition(E->key().track, idx); - - to_restore.push_back(amr); - } - - // 3-move the keys (re insert them) - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newpos = E->get().pos - from_t + motion; - /* - if (newpos<0) - continue; //no add at the beginning - */ - undo_redo->add_do_method(animation.ptr(), "track_insert_key", E->key().track, newpos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - } - - // 4-(undo) remove inserted keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newpos = E->get().pos + -from_t + motion; - /* - if (newpos<0) - continue; //no remove what no inserted - */ - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); - } - - // 5-(undo) reinsert keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - } - - // 6-(undo) reinsert overlapped keys - for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { - - _AnimMoveRestore &amr = E->get(); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); - } - - // 6-(undo) reinsert overlapped keys - for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { - - _AnimMoveRestore &amr = E->get(); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); - } - - undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - - // 7-reselect - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float oldpos = E->get().pos; - float newpos = oldpos - from_t + motion; - //if (newpos>=0) - undo_redo->add_do_method(this, "_select_at_anim", animation, E->key().track, newpos); - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, oldpos); - } - - undo_redo->commit_action(); - _edit_if_single_selection(); - - } break; - default: {} - } - - //button released - click.click = ClickOver::CLICK_NONE; - track_editor->update(); - } - } - } - - Ref<InputEventMouseMotion> mm = p_input; - - if (mm.is_valid()) { - - mouse_over.over = MouseOver::OVER_NONE; - mouse_over.track = -1; - te->update(); - track_editor->set_tooltip(""); - - if (!track_editor->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field())) - track_editor->call_deferred("grab_focus"); - - if (click.click != ClickOver::CLICK_NONE) { - - switch (click.click) { - case ClickOver::CLICK_RESIZE_NAMES: { - - float base = click.at.y; - float clickp = click.at.x - ofs.x; - float dif = base - clickp; - - float target = mm->get_position().x + dif - ofs.x; - - float ratio = target / settings_limit; - - if (ratio > 0.9) - ratio = 0.9; - else if (ratio < 0.2) - ratio = 0.2; - - name_column_ratio = ratio; - - } break; - case ClickOver::CLICK_DRAG_TIMELINE: { - - Point2 mpos = mm->get_position() - ofs; - /* - if (mpos.x<name_limit) - mpos.x=name_limit; - if (mpos.x>settings_limit) - mpos.x=settings_limit; - */ - - //int zoomw = settings_limit-name_limit; - float scale = _get_zoom_scale(); - float pos = h_scroll->get_value() + (mpos.x - name_limit) / scale; - if (animation->get_step()) { - pos = Math::stepify(pos, animation->get_step()); - } - if (pos < 0) - pos = 0; - if (pos >= animation->get_length()) - pos = animation->get_length(); - - if (pos < h_scroll->get_value()) { - h_scroll->set_value(pos); - } else if (pos > h_scroll->get_value() + (settings_limit - name_limit) / scale) { - h_scroll->set_value(pos - (settings_limit - name_limit) / scale); - } - - timeline_pos = pos; - emit_signal("timeline_changed", pos, true); - - } break; - case ClickOver::CLICK_SELECT_KEYS: { - - click.to = mm->get_position(); - if (click.to.y < h && click.at.y > h && mm->get_relative().y < 0) { - - float prev = v_scroll->get_value(); - v_scroll->set_value(v_scroll->get_value() - 1); - if (prev != v_scroll->get_value()) - click.at.y += h; - } - if (click.to.y > size.height && click.at.y < size.height && mm->get_relative().y > 0) { - - float prev = v_scroll->get_value(); - v_scroll->set_value(v_scroll->get_value() + 1); - if (prev != v_scroll->get_value()) - click.at.y -= h; - } - - } break; - case ClickOver::CLICK_MOVE_KEYS: { - - click.to = mm->get_position(); - } break; - default: {} - } - - return; - } else if (mm->get_button_mask() & BUTTON_MASK_MIDDLE) { - - int rel = mm->get_relative().x; - float relf = rel / _get_zoom_scale(); - h_scroll->set_value(h_scroll->get_value() - relf); - } - - if (mm->get_button_mask() == 0) { - - Point2 mpos = mm->get_position() - ofs; - - if (mpos.y < h) { - return; - } - - mpos.y -= h; - - int idx = mpos.y / h; - idx += v_scroll->get_value(); - if (idx < 0 || idx >= animation->get_track_count()) - return; - - mouse_over.track = idx; - - if (mpos.x < name_limit) { - //name column - - mouse_over.over = MouseOver::OVER_NAME; - - } else if (mpos.x < settings_limit) { - - float pos = mpos.x - name_limit; - pos /= _get_zoom_scale(); - pos += h_scroll->get_value(); - float w_time = (type_icon[0]->get_width() / _get_zoom_scale()) / 2.0; - - int kidx = animation->track_find_key(idx, pos); - int kidx_n = kidx + 1; - - bool found = false; - - if (kidx >= 0 && kidx < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx); - if (ABS(pos - kpos) <= w_time) { - - mouse_over.over = MouseOver::OVER_KEY; - mouse_over.track = idx; - mouse_over.over_key = kidx; - found = true; - } - } - - if (!found && kidx_n >= 0 && kidx_n < animation->track_get_key_count(idx)) { - - float kpos = animation->track_get_key_time(idx, kidx_n); - if (ABS(pos - kpos) <= w_time) { - - mouse_over.over = MouseOver::OVER_KEY; - mouse_over.track = idx; - mouse_over.over_key = kidx_n; - found = true; - } - } - - if (found) { - - String text; - text = "time: " + rtos(animation->track_get_key_time(idx, mouse_over.over_key)) + "\n"; - - switch (animation->track_get_type(idx)) { - - case Animation::TYPE_TRANSFORM: { - - Dictionary d = animation->track_get_key_value(idx, mouse_over.over_key); - if (d.has("location")) - text += "location: " + String(d["location"]) + "\n"; - if (d.has("rotation")) - text += "rot: " + String(d["rotation"]) + "\n"; - if (d.has("scale")) - text += "scale: " + String(d["scale"]) + "\n"; - } break; - case Animation::TYPE_VALUE: { - - Variant v = animation->track_get_key_value(idx, mouse_over.over_key); - //text+="value: "+String(v)+"\n"; - - bool prop_exists = false; - Variant::Type valid_type = Variant::NIL; - Object *obj = NULL; - - RES res; - Vector<StringName> leftover_path; - Node *node = root->get_node_and_resource(animation->track_get_path(idx), res, leftover_path); - - if (res.is_valid()) { - obj = res.ptr(); - } else if (node) { - obj = node; - } - - if (obj) { - valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists); - } - - text += "type: " + Variant::get_type_name(v.get_type()) + "\n"; - if (prop_exists && !Variant::can_convert(v.get_type(), valid_type)) { - text += "value: " + String(v) + " (Invalid, expected type: " + Variant::get_type_name(valid_type) + ")\n"; - } else { - text += "value: " + String(v) + "\n"; - } - - } break; - case Animation::TYPE_METHOD: { - - Dictionary d = animation->track_get_key_value(idx, mouse_over.over_key); - if (d.has("method")) - text += String(d["method"]); - text += "("; - Vector<Variant> args; - if (d.has("args")) - args = d["args"]; - for (int i = 0; i < args.size(); i++) { - - if (i > 0) - text += ", "; - text += String(args[i]); - } - text += ")\n"; - - } break; - } - text += "easing: " + rtos(animation->track_get_key_transition(idx, mouse_over.over_key)); - - track_editor->set_tooltip(text); - return; - } - - } else { - //button column - int ofsx = size.width - mpos.x; - if (ofsx < 0) - return; - /* - if (ofsx < remove_icon->get_width()) { - - mouse_over.over=MouseOver::OVER_REMOVE; - - return; - } - - ofsx-=hsep+remove_icon->get_width(); - - if (ofsx < move_down_icon->get_width()) { - - mouse_over.over=MouseOver::OVER_DOWN; - return; - } - - ofsx-=hsep+move_down_icon->get_width(); - - if (ofsx < move_up_icon->get_width()) { - - mouse_over.over=MouseOver::OVER_UP; - return; - } - - ofsx-=hsep*3+move_up_icon->get_width(); - -*/ - - if (ofsx < down_icon->get_width() + wrap_icon[0]->get_width() + hsep * 3) { - - mouse_over.over = MouseOver::OVER_WRAP; - return; - } - - ofsx -= hsep * 3 + wrap_icon[0]->get_width() + down_icon->get_width(); - - if (ofsx < down_icon->get_width() + interp_icon[0]->get_width() + hsep * 3) { - - mouse_over.over = MouseOver::OVER_INTERP; - return; - } - - ofsx -= hsep * 2 + interp_icon[0]->get_width() + down_icon->get_width(); - - if (ofsx < down_icon->get_width() + cont_icon[0]->get_width() + hsep * 3) { - - mouse_over.over = MouseOver::OVER_VALUE; - return; - } - - ofsx -= hsep * 3 + cont_icon[0]->get_width() + down_icon->get_width(); - - if (ofsx < add_key_icon->get_width()) { - - mouse_over.over = MouseOver::OVER_ADD_KEY; - return; - } - } - } - } - - Ref<InputEventMagnifyGesture> magnify_gesture = p_input; - if (magnify_gesture.is_valid()) { - zoom->set_value(zoom->get_value() * magnify_gesture->get_factor()); - } - - 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); - } -} - -void AnimationKeyEditor::_notification(int p_what) { - - switch (p_what) { - case NOTIFICATION_VISIBILITY_CHANGED: { - - update_keying(); - EditorNode::get_singleton()->update_keying(); - emit_signal("keying_changed"); - } break; - - case NOTIFICATION_ENTER_TREE: { - - key_editor->edit(key_edit); - - zoomicon->set_custom_minimum_size(Size2(24 * EDSCALE, 0)); - zoomicon->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); - - menu_track->set_icon(get_icon("Tools", "EditorIcons")); - menu_track->get_popup()->add_item(TTR("Scale Selection"), TRACK_MENU_SCALE); - menu_track->get_popup()->add_item(TTR("Scale From Cursor"), TRACK_MENU_SCALE_PIVOT); - menu_track->get_popup()->add_separator(); - menu_track->get_popup()->add_item(TTR("Duplicate Selection"), TRACK_MENU_DUPLICATE); - menu_track->get_popup()->add_item(TTR("Duplicate Transposed"), TRACK_MENU_DUPLICATE_TRANSPOSE); - menu_track->get_popup()->add_separator(); - menu_track->get_popup()->add_item(TTR("Goto Next Step"), TRACK_MENU_NEXT_STEP, KEY_MASK_CMD | KEY_RIGHT); - menu_track->get_popup()->add_item(TTR("Goto Prev Step"), TRACK_MENU_PREV_STEP, KEY_MASK_CMD | KEY_LEFT); - menu_track->get_popup()->add_separator(); - PopupMenu *tpp = memnew(PopupMenu); - tpp->add_item(TTR("Linear"), TRACK_MENU_SET_ALL_TRANS_LINEAR); - tpp->add_item(TTR("Constant"), TRACK_MENU_SET_ALL_TRANS_CONSTANT); - tpp->add_item(TTR("In"), TRACK_MENU_SET_ALL_TRANS_IN); - tpp->add_item(TTR("Out"), TRACK_MENU_SET_ALL_TRANS_OUT); - tpp->add_item(TTR("In-Out"), TRACK_MENU_SET_ALL_TRANS_INOUT); - tpp->add_item(TTR("Out-In"), TRACK_MENU_SET_ALL_TRANS_OUTIN); - tpp->set_name(TTR("Transitions")); - tpp->connect("id_pressed", this, "_menu_track"); - optimize_dialog->connect("confirmed", this, "_animation_optimize"); - - menu_track->get_popup()->add_child(tpp); - - menu_track->get_popup()->add_item(TTR("Optimize Animation"), TRACK_MENU_OPTIMIZE); - menu_track->get_popup()->add_item(TTR("Clean-Up Animation"), TRACK_MENU_CLEAN_UP); - - curve_linear->connect("pressed", this, "_menu_track", varray(CURVE_SET_LINEAR)); - curve_in->connect("pressed", this, "_menu_track", varray(CURVE_SET_IN)); - curve_out->connect("pressed", this, "_menu_track", varray(CURVE_SET_OUT)); - curve_inout->connect("pressed", this, "_menu_track", varray(CURVE_SET_INOUT)); - curve_outin->connect("pressed", this, "_menu_track", varray(CURVE_SET_OUTIN)); - curve_constant->connect("pressed", this, "_menu_track", varray(CURVE_SET_CONSTANT)); - - edit_button->connect("pressed", this, "_toggle_edit_curves"); - - curve_edit->connect("transition_changed", this, "_curve_transition_changed"); - call_select->connect("selected", this, "_add_call_track"); - - _update_menu(); - - } break; - - case NOTIFICATION_THEME_CHANGED: { - zoomicon->set_texture(get_icon("Zoom", "EditorIcons")); - - menu_add_track->set_icon(get_icon("Add", "EditorIcons")); - - menu_track->set_icon(get_icon("Tools", "EditorIcons")); - - menu_add_track->get_popup()->set_item_icon(ADD_TRACK_MENU_ADD_VALUE_TRACK, get_icon("KeyValue", "EditorIcons")); - menu_add_track->get_popup()->set_item_icon(ADD_TRACK_MENU_ADD_TRANSFORM_TRACK, get_icon("KeyXform", "EditorIcons")); - menu_add_track->get_popup()->set_item_icon(ADD_TRACK_MENU_ADD_CALL_TRACK, get_icon("KeyCall", "EditorIcons")); - - curve_linear->set_icon(get_icon("CurveLinear", "EditorIcons")); - curve_in->set_icon(get_icon("CurveIn", "EditorIcons")); - curve_out->set_icon(get_icon("CurveOut", "EditorIcons")); - curve_inout->set_icon(get_icon("CurveInOut", "EditorIcons")); - curve_outin->set_icon(get_icon("CurveOutIn", "EditorIcons")); - curve_constant->set_icon(get_icon("CurveConstant", "EditorIcons")); - - move_up_button->set_icon(get_icon("MoveUp", "EditorIcons")); - move_down_button->set_icon(get_icon("MoveDown", "EditorIcons")); - remove_button->set_icon(get_icon("Remove", "EditorIcons")); - edit_button->set_icon(get_icon("EditKey", "EditorIcons")); - - loop->set_icon(get_icon("Loop", "EditorIcons")); - - { - - right_data_size_cache = 0; - int hsep = get_constant("hseparation", "Tree"); - Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); - Ref<Texture> move_up_icon = get_icon("MoveUp", "EditorIcons"); - Ref<Texture> move_down_icon = get_icon("MoveDown", "EditorIcons"); - Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); - Ref<Texture> add_key_icon = get_icon("TrackAddKey", "EditorIcons"); - Ref<Texture> interp_icon[3] = { - get_icon("InterpRaw", "EditorIcons"), - get_icon("InterpLinear", "EditorIcons"), - get_icon("InterpCubic", "EditorIcons") - }; - Ref<Texture> cont_icon[3] = { - get_icon("TrackContinuous", "EditorIcons"), - get_icon("TrackDiscrete", "EditorIcons"), - get_icon("TrackTrigger", "EditorIcons") - }; - - Ref<Texture> wrap_icon[2] = { - 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 * 9; - } - } break; - } -} - -void AnimationKeyEditor::_scroll_changed(double) { - - if (te_drawing) - return; - - track_editor->update(); -} - -void AnimationKeyEditor::_update_paths() { - - if (animation.is_valid()) { - //timeline->set_max(animation->get_length()); - //timeline->set_step(0.01); - track_editor->update(); - length->set_value(animation->get_length()); - step->set_value(animation->get_step()); - } -} - -void AnimationKeyEditor::_root_removed() { - - root = NULL; -} - -void AnimationKeyEditor::_update_menu() { - - updating = true; - - if (animation.is_valid()) { - - length->set_value(animation->get_length()); - loop->set_pressed(animation->has_loop()); - step->set_value(animation->get_step()); - } - - track_editor->update(); - updating = false; -} -void AnimationKeyEditor::_clear_selection() { - - selection.clear(); - key_edit->animation = Ref<Animation>(); - key_edit->track = 0; - key_edit->key_ofs = 0; - key_edit->hint = PropertyInfo(); - key_edit->base = NodePath(); - key_edit->notify_change(); -} - -void AnimationKeyEditor::set_animation(const Ref<Animation> &p_anim) { - - if (animation.is_valid()) - animation->disconnect("changed", this, "_update_paths"); - animation = p_anim; - if (animation.is_valid()) - animation->connect("changed", this, "_update_paths"); - - timeline_pos = 0; - _clear_selection(); - - _update_menu(); - selected_track = -1; - _edit_if_single_selection(); - - EditorNode::get_singleton()->update_keying(); -} - -void AnimationKeyEditor::set_root(Node *p_root) { - - if (root) - root->disconnect("tree_exiting", this, "_root_removed"); - - root = p_root; - - if (root) - root->connect("tree_exiting", this, "_root_removed", make_binds(), CONNECT_ONESHOT); -} - -Node *AnimationKeyEditor::get_root() const { - - return root; -} - -void AnimationKeyEditor::update_keying() { - - bool keying_enabled = is_visible_in_tree() && animation.is_valid(); - - if (keying_enabled == keying) - return; - - keying = keying_enabled; - _update_menu(); - emit_signal("keying_changed"); -} - -bool AnimationKeyEditor::has_keying() const { - - return keying; -} - -void AnimationKeyEditor::_query_insert(const InsertData &p_id) { - - if (insert_frame != Engine::get_singleton()->get_frames_drawn()) { - //clear insert list for the frame if frame changed - if (insert_confirm->is_visible_in_tree()) - return; //do nothing - insert_data.clear(); - insert_query = false; - } - insert_frame = Engine::get_singleton()->get_frames_drawn(); - - for (List<InsertData>::Element *E = insert_data.front(); E; E = E->next()) { - //prevent insertion of multiple tracks - if (E->get().path == p_id.path) - return; //already inserted a track for this on this frame - } - - insert_data.push_back(p_id); - - if (p_id.track_idx == -1) { - if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { - //potential new key, does not exist - if (insert_data.size() == 1) - insert_confirm->set_text(vformat(TTR("Create NEW track for %s and insert key?"), p_id.query)); - else - insert_confirm->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"), insert_data.size())); - - insert_confirm->get_ok()->set_text(TTR("Create")); - insert_confirm->popup_centered_minsize(); - insert_query = true; - } else { - call_deferred("_insert_delay"); - insert_queue = true; - } - - } else { - if (!insert_query && !insert_queue) { - call_deferred("_insert_delay"); - insert_queue = true; - } - } -} - -void AnimationKeyEditor::insert_transform_key(Spatial *p_node, const String &p_sub, const Transform &p_xform) { - - if (!keying) - return; - if (!animation.is_valid()) - return; - - ERR_FAIL_COND(!root); - //let's build a node path - String path = root->get_path_to(p_node); - if (p_sub != "") - path += ":" + p_sub; - - NodePath np = path; - - int track_idx = -1; - - for (int i = 0; i < animation->get_track_count(); i++) { - - if (animation->track_get_type(i) != Animation::TYPE_TRANSFORM) - continue; - if (animation->track_get_path(i) != np) - continue; - - track_idx = i; - break; - } - - InsertData id; - Dictionary val; - - id.path = np; - id.track_idx = track_idx; - id.value = p_xform; - id.type = Animation::TYPE_TRANSFORM; - id.query = "node '" + p_node->get_name() + "'"; - id.advance = false; - - //dialog insert - - _query_insert(id); -} - -void AnimationKeyEditor::insert_node_value_key(Node *p_node, const String &p_property, const Variant &p_value, bool p_only_if_exists) { - - ERR_FAIL_COND(!root); - //let's build a node path - - Node *node = p_node; - - String path = root->get_path_to(node); - - for (int i = 1; i < history->get_path_size(); i++) { - - String prop = history->get_path_property(i); - ERR_FAIL_COND(prop == ""); - path += ":" + prop; - } - - path += ":" + p_property; - - NodePath np = path; - - //locate track - - int track_idx = -1; - - for (int i = 0; i < animation->get_track_count(); i++) { - - if (animation->track_get_type(i) != Animation::TYPE_VALUE) - continue; - if (animation->track_get_path(i) != np) - continue; - - track_idx = i; - break; - } - - if (p_only_if_exists && track_idx == -1) - return; - InsertData id; - id.path = np; - id.track_idx = track_idx; - id.value = p_value; - id.type = Animation::TYPE_VALUE; - id.query = "property '" + p_property + "'"; - id.advance = false; - //dialog insert - _query_insert(id); -} - -void AnimationKeyEditor::insert_value_key(const String &p_property, const Variant &p_value, bool p_advance) { - - ERR_FAIL_COND(!root); - //let's build a node path - ERR_FAIL_COND(history->get_path_size() == 0); - Object *obj = ObjectDB::get_instance(history->get_path_object(0)); - ERR_FAIL_COND(!Object::cast_to<Node>(obj)); - - Node *node = Object::cast_to<Node>(obj); - - String path = root->get_path_to(node); - - for (int i = 1; i < history->get_path_size(); i++) { - - String prop = history->get_path_property(i); - ERR_FAIL_COND(prop == ""); - path += ":" + prop; - } - - path += ":" + p_property; - - NodePath np = path; - - //locate track - - int track_idx = -1; - - for (int i = 0; i < animation->get_track_count(); i++) { - - if (animation->track_get_type(i) != Animation::TYPE_VALUE) - continue; - if (animation->track_get_path(i) != np) - continue; - - track_idx = i; - break; - } - - InsertData id; - id.path = np; - id.track_idx = track_idx; - id.value = p_value; - id.type = Animation::TYPE_VALUE; - id.query = "property '" + p_property + "'"; - id.advance = p_advance; - //dialog insert - _query_insert(id); -} - -void AnimationKeyEditor::_confirm_insert_list() { - - undo_redo->create_action(TTR("Anim Create & Insert")); - - int last_track = animation->get_track_count(); - while (insert_data.size()) { - - last_track = _confirm_insert(insert_data.front()->get(), last_track); - insert_data.pop_front(); - } - - undo_redo->commit_action(); -} - -int AnimationKeyEditor::_confirm_insert(InsertData p_id, int p_last_track) { - - if (p_last_track == -1) - p_last_track = animation->get_track_count(); - - bool created = false; - if (p_id.track_idx < 0) { - - created = true; - undo_redo->create_action(TTR("Anim Insert Track & Key")); - Animation::UpdateMode update_mode = Animation::UPDATE_DISCRETE; - - if (p_id.type == Animation::TYPE_VALUE) { - //wants a new tack - - { - //hack - NodePath np; - animation->add_track(p_id.type); - animation->track_set_path(animation->get_track_count() - 1, p_id.path); - PropertyInfo h = _find_hint_for_track(animation->get_track_count() - 1, np); - animation->remove_track(animation->get_track_count() - 1); //hack - - if (h.type == Variant::REAL || - h.type == Variant::VECTOR2 || - h.type == Variant::RECT2 || - h.type == Variant::VECTOR3 || - h.type == Variant::AABB || - h.type == Variant::QUAT || - h.type == Variant::COLOR || - h.type == Variant::TRANSFORM) { - - update_mode = Animation::UPDATE_CONTINUOUS; - } - - if (h.usage & PROPERTY_USAGE_ANIMATE_AS_TRIGGER) { - update_mode = Animation::UPDATE_TRIGGER; - } - } - } - - p_id.track_idx = p_last_track; - - undo_redo->add_do_method(animation.ptr(), "add_track", p_id.type); - undo_redo->add_do_method(animation.ptr(), "track_set_path", p_id.track_idx, p_id.path); - if (p_id.type == Animation::TYPE_VALUE) - undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", p_id.track_idx, update_mode); - - } else { - undo_redo->create_action(TTR("Anim Insert Key")); - } - - float time = timeline_pos; - Variant value; - - switch (p_id.type) { - - case Animation::TYPE_VALUE: { - - value = p_id.value; - - } break; - case Animation::TYPE_TRANSFORM: { - - Transform tr = p_id.value; - Dictionary d; - d["location"] = tr.origin; - d["scale"] = tr.basis.get_scale(); - d["rotation"] = Quat(tr.basis); //.orthonormalized(); - value = d; - } break; - default: {} - } - - undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_id.track_idx, time, value); - - if (created) { - - //just remove the track - undo_redo->add_undo_method(animation.ptr(), "remove_track", p_last_track); - p_last_track++; - } else { - - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_id.track_idx, time); - int existing = animation->track_find_key(p_id.track_idx, time, true); - if (existing != -1) { - Variant v = animation->track_get_key_value(p_id.track_idx, existing); - float trans = animation->track_get_key_transition(p_id.track_idx, existing); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", p_id.track_idx, time, v, trans); - } - } - - undo_redo->add_do_method(this, "update"); - undo_redo->add_undo_method(this, "update"); - undo_redo->add_do_method(track_editor, "update"); - undo_redo->add_undo_method(track_editor, "update"); - undo_redo->add_do_method(track_pos, "update"); - undo_redo->add_undo_method(track_pos, "update"); - - undo_redo->commit_action(); - - return p_last_track; -} - -Ref<Animation> AnimationKeyEditor::get_current_animation() const { - - return animation; -} - -void AnimationKeyEditor::_animation_len_changed(float p_len) { - - if (updating) - return; - - if (!animation.is_null()) { - - undo_redo->create_action(TTR("Change Anim Len")); - undo_redo->add_do_method(animation.ptr(), "set_length", p_len); - undo_redo->add_undo_method(animation.ptr(), "set_length", animation->get_length()); - undo_redo->add_do_method(this, "_animation_len_update"); - undo_redo->add_undo_method(this, "_animation_len_update"); - undo_redo->commit_action(); - } -} - -void AnimationKeyEditor::_animation_len_update() { - - if (!animation.is_null()) - emit_signal(alc, animation->get_length()); -} - -void AnimationKeyEditor::_animation_changed() { - if (updating) - return; - _update_menu(); -} - -void AnimationKeyEditor::_animation_loop_changed() { - - if (updating) - return; - - if (!animation.is_null()) { - - undo_redo->create_action(TTR("Change Anim Loop")); - undo_redo->add_do_method(animation.ptr(), "set_loop", loop->is_pressed()); - undo_redo->add_undo_method(animation.ptr(), "set_loop", !loop->is_pressed()); - undo_redo->commit_action(); - } -} - -void AnimationKeyEditor::_create_value_item(int p_type) { - - undo_redo->create_action(TTR("Anim Create Typed Value Key")); - - Variant::CallError ce; - Variant v = Variant::construct(Variant::Type(p_type), NULL, 0, ce); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", cvi_track, cvi_pos, v); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", cvi_track, cvi_pos); - - int existing = animation->track_find_key(cvi_track, cvi_pos, true); - - if (existing != -1) { - Variant v = animation->track_get_key_value(cvi_track, existing); - float trans = animation->track_get_key_transition(cvi_track, existing); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", cvi_track, cvi_pos, v, trans); - } - - undo_redo->commit_action(); -} - -void AnimationKeyEditor::set_anim_pos(float p_pos) { - - if (animation.is_null()) - return; - timeline_pos = p_pos; - update(); - track_pos->update(); - track_editor->update(); -} - -void AnimationKeyEditor::_pane_drag(const Point2 &p_delta) { - - Size2 ecs = ec->get_custom_minimum_size(); - ecs.y -= p_delta.y; - if (ecs.y < 100) - ecs.y = 100; - ec->set_custom_minimum_size(ecs); -} - -void AnimationKeyEditor::_insert_delay() { - - if (insert_query) { - //discard since it's entered into query mode - insert_queue = false; - return; - } - - undo_redo->create_action(TTR("Anim Insert")); - - int last_track = animation->get_track_count(); - bool advance = false; - while (insert_data.size()) { - - if (insert_data.front()->get().advance) - advance = true; - last_track = _confirm_insert(insert_data.front()->get(), last_track); - insert_data.pop_front(); - } - - undo_redo->commit_action(); - - if (advance) { - float step = animation->get_step(); - if (step == 0) - step = 1; - - float pos = timeline_pos; - - pos = Math::stepify(pos + step, step); - if (pos > animation->get_length()) - pos = animation->get_length(); - timeline_pos = pos; - track_pos->update(); - emit_signal("timeline_changed", pos, true); - } - insert_queue = false; -} - -void AnimationKeyEditor::_step_changed(float p_len) { - - updating = true; - if (!animation.is_null()) { - animation->set_step(p_len); - emit_signal("animation_step_changed", animation->get_step()); - } - updating = false; -} - -void AnimationKeyEditor::_scale() { - - if (selection.empty()) - return; - - float from_t = 1e20; - float to_t = -1e20; - float len = -1e20; - float pivot = 0; - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { - float t = animation->track_get_key_time(E->key().track, E->key().key); - if (t < from_t) - from_t = t; - if (t > to_t) - to_t = t; - } - - len = to_t - from_t; - if (last_menu_track_opt == TRACK_MENU_SCALE_PIVOT) { - pivot = timeline_pos; - - } else { - - pivot = from_t; - } - - float s = scale->get_value(); - if (s == 0) { - ERR_PRINT("Can't scale to 0"); - } - - undo_redo->create_action(TTR("Anim Scale Keys")); - - List<_AnimMoveRestore> to_restore; - - // 1-remove the keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); - } - // 2- remove overlapped keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newtime = (E->get().pos - from_t) * s + from_t; - int idx = animation->track_find_key(E->key().track, newtime, true); - if (idx == -1) - continue; - SelectedKey sk; - sk.key = idx; - sk.track = E->key().track; - if (selection.has(sk)) - continue; //already in selection, don't save - - undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); - _AnimMoveRestore amr; - - amr.key = animation->track_get_key_value(E->key().track, idx); - amr.track = E->key().track; - amr.time = newtime; - amr.transition = animation->track_get_key_transition(E->key().track, idx); - - to_restore.push_back(amr); - } - -#define _NEW_POS(m_ofs) (((s > 0) ? m_ofs : from_t + (len - (m_ofs - from_t))) - pivot) * ABS(s) + from_t - // 3-move the keys (re insert them) - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newpos = _NEW_POS(E->get().pos); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", E->key().track, newpos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - } - - // 4-(undo) remove inserted keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float newpos = _NEW_POS(E->get().pos); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); - } - - // 5-(undo) reinsert keys - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - } - - // 6-(undo) reinsert overlapped keys - for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { - - _AnimMoveRestore &amr = E->get(); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); - } - - // 6-(undo) reinsert overlapped keys - for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { - - _AnimMoveRestore &amr = E->get(); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); - } - - undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - - // 7-reselect - - for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - - float oldpos = E->get().pos; - float newpos = _NEW_POS(oldpos); - if (newpos >= 0) - undo_redo->add_do_method(this, "_select_at_anim", animation, E->key().track, newpos); - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, oldpos); - } -#undef _NEW_POS - undo_redo->commit_action(); -} - -void AnimationKeyEditor::_add_call_track(const NodePath &p_base) { - - Node *base = EditorNode::get_singleton()->get_edited_scene(); - if (!base) - return; - Node *from = base->get_node(p_base); - if (!from || !root) - return; - - NodePath path = root->get_path_to(from); - - //print_line("root: "+String(root->get_path())); - //print_line("path: "+String(path)); - - undo_redo->create_action(TTR("Anim Add Call Track")); - undo_redo->add_do_method(animation.ptr(), "add_track", Animation::TYPE_METHOD); - undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), path); - undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); - undo_redo->commit_action(); -} - -void AnimationKeyEditor::cleanup() { - - set_animation(Ref<Animation>()); -} - -void AnimationKeyEditor::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_root_removed"), &AnimationKeyEditor::_root_removed); - ClassDB::bind_method(D_METHOD("_scale"), &AnimationKeyEditor::_scale); - ClassDB::bind_method(D_METHOD("set_root"), &AnimationKeyEditor::set_root); - - //ClassDB::bind_method(D_METHOD("_confirm_insert"),&AnimationKeyEditor::_confirm_insert); - ClassDB::bind_method(D_METHOD("_confirm_insert_list"), &AnimationKeyEditor::_confirm_insert_list); - - ClassDB::bind_method(D_METHOD("_update_paths"), &AnimationKeyEditor::_update_paths); - ClassDB::bind_method(D_METHOD("_track_editor_draw"), &AnimationKeyEditor::_track_editor_draw); - - ClassDB::bind_method(D_METHOD("_animation_changed"), &AnimationKeyEditor::_animation_changed); - ClassDB::bind_method(D_METHOD("_scroll_changed"), &AnimationKeyEditor::_scroll_changed); - ClassDB::bind_method(D_METHOD("_track_editor_gui_input"), &AnimationKeyEditor::_track_editor_gui_input); - ClassDB::bind_method(D_METHOD("_track_name_changed"), &AnimationKeyEditor::_track_name_changed); - ClassDB::bind_method(D_METHOD("_track_menu_selected"), &AnimationKeyEditor::_track_menu_selected); - ClassDB::bind_method(D_METHOD("_menu_add_track"), &AnimationKeyEditor::_menu_add_track); - ClassDB::bind_method(D_METHOD("_menu_track"), &AnimationKeyEditor::_menu_track); - ClassDB::bind_method(D_METHOD("_clear_selection_for_anim"), &AnimationKeyEditor::_clear_selection_for_anim); - ClassDB::bind_method(D_METHOD("_select_at_anim"), &AnimationKeyEditor::_select_at_anim); - ClassDB::bind_method(D_METHOD("_track_position_draw"), &AnimationKeyEditor::_track_position_draw); - ClassDB::bind_method(D_METHOD("_insert_delay"), &AnimationKeyEditor::_insert_delay); - ClassDB::bind_method(D_METHOD("_step_changed"), &AnimationKeyEditor::_step_changed); - - ClassDB::bind_method(D_METHOD("_animation_loop_changed"), &AnimationKeyEditor::_animation_loop_changed); - ClassDB::bind_method(D_METHOD("_animation_len_changed"), &AnimationKeyEditor::_animation_len_changed); - ClassDB::bind_method(D_METHOD("_create_value_item"), &AnimationKeyEditor::_create_value_item); - ClassDB::bind_method(D_METHOD("_pane_drag"), &AnimationKeyEditor::_pane_drag); - - ClassDB::bind_method(D_METHOD("_animation_len_update"), &AnimationKeyEditor::_animation_len_update); - - ClassDB::bind_method(D_METHOD("set_animation"), &AnimationKeyEditor::set_animation); - ClassDB::bind_method(D_METHOD("_animation_optimize"), &AnimationKeyEditor::_animation_optimize); - ClassDB::bind_method(D_METHOD("_curve_transition_changed"), &AnimationKeyEditor::_curve_transition_changed); - ClassDB::bind_method(D_METHOD("_toggle_edit_curves"), &AnimationKeyEditor::_toggle_edit_curves); - ClassDB::bind_method(D_METHOD("_add_call_track"), &AnimationKeyEditor::_add_call_track); - - ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop"))); - ADD_SIGNAL(MethodInfo("keying_changed")); - ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); - ADD_SIGNAL(MethodInfo("animation_len_changed", PropertyInfo(Variant::REAL, "len"))); - ADD_SIGNAL(MethodInfo("animation_step_changed", PropertyInfo(Variant::REAL, "step"))); - ADD_SIGNAL(MethodInfo("key_edited", PropertyInfo(Variant::INT, "track"), PropertyInfo(Variant::INT, "key"))); -} - -AnimationKeyEditor::AnimationKeyEditor() { - - alc = "animation_len_changed"; - editor_selection = EditorNode::get_singleton()->get_editor_selection(); - - selected_track = -1; - updating = false; - te_drawing = false; - undo_redo = EditorNode::get_singleton()->get_undo_redo(); - history = EditorNode::get_singleton()->get_editor_history(); - - ec = memnew(Control); - ec->set_custom_minimum_size(Size2(0, 150) * EDSCALE); - add_child(ec); - ec->set_v_size_flags(SIZE_EXPAND_FILL); - - h_scroll = memnew(HScrollBar); - h_scroll->connect("value_changed", this, "_scroll_changed"); - add_child(h_scroll); - h_scroll->set_value(0); - - HBoxContainer *hb = memnew(HBoxContainer); - add_child(hb); - - root = NULL; - //menu = memnew( MenuButton ); - //menu->set_flat(true); - //menu->set_position(Point2()); - //add_child(menu); - - zoomicon = memnew(TextureRect); - hb->add_child(zoomicon); - zoomicon->set_tooltip(TTR("Animation zoom.")); - - zoom = memnew(HSlider); - //hb->add_child(zoom); - zoom->set_step(0.01); - zoom->set_min(0.0); - zoom->set_max(2.0); - zoom->set_value(1.0); - zoom->set_h_size_flags(SIZE_EXPAND_FILL); - zoom->set_v_size_flags(SIZE_EXPAND_FILL); - zoom->set_stretch_ratio(2); - hb->add_child(zoom); - zoom->connect("value_changed", this, "_scroll_changed"); - zoom->set_tooltip(TTR("Animation zoom.")); - - hb->add_child(memnew(VSeparator)); - - Label *l = memnew(Label); - l->set_text(TTR("Length (s):")); - hb->add_child(l); - - length = memnew(SpinBox); - length->set_min(0.01); - length->set_max(10000); - length->set_step(0.01); - 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"); - - l = memnew(Label); - l->set_text(TTR("Step (s):")); - hb->add_child(l); - - step = memnew(SpinBox); - step->set_min(0.00); - step->set_max(128); - step->set_step(0.01); - step->set_value(0.0); - 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"); - - loop = memnew(ToolButton); - loop->set_toggle_mode(true); - 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)); - - menu_add_track = memnew(MenuButton); - hb->add_child(menu_add_track); - menu_add_track->get_popup()->connect("id_pressed", this, "_menu_add_track"); - menu_add_track->set_tooltip(TTR("Add new tracks.")); - menu_add_track->get_popup()->add_icon_item(get_icon("KeyValue", "EditorIcons"), "Add Normal Track", ADD_TRACK_MENU_ADD_VALUE_TRACK); - menu_add_track->get_popup()->add_icon_item(get_icon("KeyXform", "EditorIcons"), "Add Transform Track", ADD_TRACK_MENU_ADD_TRANSFORM_TRACK); - menu_add_track->get_popup()->add_icon_item(get_icon("KeyCall", "EditorIcons"), "Add Call Func Track", ADD_TRACK_MENU_ADD_CALL_TRACK); - - move_up_button = memnew(ToolButton); - hb->add_child(move_up_button); - move_up_button->connect("pressed", this, "_menu_track", make_binds(TRACK_MENU_MOVE_UP)); - move_up_button->set_focus_mode(FOCUS_NONE); - move_up_button->set_disabled(true); - move_up_button->set_tooltip(TTR("Move current track up.")); - - move_down_button = memnew(ToolButton); - hb->add_child(move_down_button); - move_down_button->connect("pressed", this, "_menu_track", make_binds(TRACK_MENU_MOVE_DOWN)); - move_down_button->set_focus_mode(FOCUS_NONE); - move_down_button->set_disabled(true); - move_down_button->set_tooltip(TTR("Move current track down.")); - - remove_button = memnew(ToolButton); - hb->add_child(remove_button); - remove_button->connect("pressed", this, "_menu_track", make_binds(TRACK_MENU_REMOVE)); - remove_button->set_focus_mode(FOCUS_NONE); - remove_button->set_disabled(true); - remove_button->set_tooltip(TTR("Remove selected track.")); - - hb->add_child(memnew(VSeparator)); - - 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")); - - edit_button = memnew(ToolButton); - edit_button->set_toggle_mode(true); - edit_button->set_focus_mode(FOCUS_NONE); - edit_button->set_disabled(true); - - hb->add_child(edit_button); - edit_button->set_tooltip(TTR("Enable editing of individual keys by clicking them.")); - - optimize_dialog = memnew(ConfirmationDialog); - add_child(optimize_dialog); - optimize_dialog->set_title(TTR("Anim. Optimizer")); - VBoxContainer *optimize_vb = memnew(VBoxContainer); - optimize_dialog->add_child(optimize_vb); - - optimize_linear_error = memnew(SpinBox); - optimize_linear_error->set_max(1.0); - optimize_linear_error->set_min(0.001); - optimize_linear_error->set_step(0.001); - optimize_linear_error->set_value(0.05); - optimize_vb->add_margin_child(TTR("Max. Linear Error:"), optimize_linear_error); - optimize_angular_error = memnew(SpinBox); - optimize_angular_error->set_max(1.0); - optimize_angular_error->set_min(0.001); - optimize_angular_error->set_step(0.001); - optimize_angular_error->set_value(0.01); - - optimize_vb->add_margin_child(TTR("Max. Angular Error:"), optimize_angular_error); - optimize_max_angle = memnew(SpinBox); - optimize_vb->add_margin_child(TTR("Max Optimizable Angle:"), optimize_max_angle); - optimize_max_angle->set_max(360.0); - optimize_max_angle->set_min(0.0); - optimize_max_angle->set_step(0.1); - optimize_max_angle->set_value(22); - - optimize_dialog->get_ok()->set_text(TTR("Optimize")); - - /*keying = memnew( Button ); - keying->set_toggle_mode(true); - //keying->set_text("Keys"); - keying->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,60); - keying->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,10); - keying->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_BEGIN,55); - keying->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN,10); - //add_child(keying); - keying->connect("pressed",this,"_keying_toggled"); - */ - - /* l = memnew( Label ); - l->set_text("Base: "); - l->set_position(Point2(0,3)); - //dr_panel->add_child(l);*/ - - //menu->get_popup()->connect("id_pressed",this,"_menu_callback"); - - hb = memnew(HBoxContainer); - hb->set_anchors_and_margins_preset(Control::PRESET_WIDE); - ec->add_child(hb); - hb->set_v_size_flags(SIZE_EXPAND_FILL); - - track_editor = memnew(Control); - track_editor->connect("draw", this, "_track_editor_draw"); - hb->add_child(track_editor); - track_editor->connect("gui_input", this, "_track_editor_gui_input"); - track_editor->set_focus_mode(Control::FOCUS_ALL); - track_editor->set_h_size_flags(SIZE_EXPAND_FILL); - - track_pos = memnew(Control); - track_pos->set_anchors_and_margins_preset(Control::PRESET_WIDE); - track_pos->set_mouse_filter(MOUSE_FILTER_IGNORE); - track_editor->add_child(track_pos); - track_pos->connect("draw", this, "_track_position_draw"); - - select_anim_warning = memnew(Label); - track_editor->add_child(select_anim_warning); - select_anim_warning->set_anchors_and_margins_preset(Control::PRESET_WIDE); - select_anim_warning->set_text(TTR("Select an AnimationPlayer from the Scene Tree to edit animations.")); - select_anim_warning->set_autowrap(true); - select_anim_warning->set_align(Label::ALIGN_CENTER); - select_anim_warning->set_valign(Label::VALIGN_CENTER); - - v_scroll = memnew(VScrollBar); - hb->add_child(v_scroll); - v_scroll->connect("value_changed", this, "_scroll_changed"); - v_scroll->set_value(0); - - key_editor_tab = memnew(TabContainer); - key_editor_tab->set_tab_align(TabContainer::ALIGN_LEFT); - hb->add_child(key_editor_tab); - key_editor_tab->set_custom_minimum_size(Size2(200, 0) * EDSCALE); - - key_editor = memnew(PropertyEditor); - key_editor->hide_top_label(); - key_editor->set_name(TTR("Key")); - key_editor_tab->add_child(key_editor); - - key_edit = memnew(AnimationKeyEdit); - key_edit->undo_redo = undo_redo; - //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); - type_menu->connect("id_pressed", this, "_create_value_item"); - - VBoxContainer *curve_vb = memnew(VBoxContainer); - curve_vb->set_name(TTR("Transition")); - HBoxContainer *curve_hb = memnew(HBoxContainer); - curve_vb->add_child(curve_hb); - - curve_linear = memnew(ToolButton); - curve_linear->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_linear); - curve_in = memnew(ToolButton); - curve_in->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_in); - curve_out = memnew(ToolButton); - curve_out->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_out); - curve_inout = memnew(ToolButton); - curve_inout->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_inout); - curve_outin = memnew(ToolButton); - curve_outin->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_outin); - curve_constant = memnew(ToolButton); - curve_constant->set_focus_mode(FOCUS_NONE); - curve_hb->add_child(curve_constant); - - curve_edit = memnew(AnimationCurveEdit); - curve_vb->add_child(curve_edit); - curve_edit->set_v_size_flags(SIZE_EXPAND_FILL); - key_editor_tab->add_child(curve_vb); - - track_name = memnew(LineEdit); - track_name->set_as_toplevel(true); - track_name->hide(); - 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"); - - key_editor_tab->hide(); - - last_idx = 1; - - _update_menu(); - - insert_confirm = memnew(ConfirmationDialog); - add_child(insert_confirm); - insert_confirm->connect("confirmed", this, "_confirm_insert_list"); - - click.click = ClickOver::CLICK_NONE; - - name_column_ratio = 0.3; - timeline_pos = 0; - - keying = false; - insert_frame = 0; - insert_query = false; - insert_queue = false; - - editor_selection->connect("selection_changed", track_editor, "update"); - - scale_dialog = memnew(ConfirmationDialog); - VBoxContainer *vbc = memnew(VBoxContainer); - scale_dialog->add_child(vbc); - - scale = memnew(SpinBox); - scale->set_min(-99999); - scale->set_max(99999); - scale->set_step(0.001); - vbc->add_margin_child(TTR("Scale Ratio:"), scale); - scale_dialog->connect("confirmed", this, "_scale"); - add_child(scale_dialog); - - call_select = memnew(SceneTreeDialog); - add_child(call_select); - call_select->set_title(TTR("Call Functions in Which Node?")); - - cleanup_dialog = memnew(ConfirmationDialog); - add_child(cleanup_dialog); - VBoxContainer *cleanup_vb = memnew(VBoxContainer); - cleanup_dialog->add_child(cleanup_vb); - - cleanup_keys = memnew(CheckButton); - cleanup_keys->set_text(TTR("Remove invalid keys")); - cleanup_keys->set_pressed(true); - cleanup_vb->add_child(cleanup_keys); - - cleanup_tracks = memnew(CheckButton); - cleanup_tracks->set_text(TTR("Remove unresolved and empty tracks")); - cleanup_tracks->set_pressed(true); - cleanup_vb->add_child(cleanup_tracks); - - cleanup_all = memnew(CheckButton); - cleanup_all->set_text(TTR("Clean-up all animations")); - cleanup_vb->add_child(cleanup_all); - - cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); - cleanup_dialog->get_ok()->set_text(TTR("Clean-Up")); - - cleanup_dialog->connect("confirmed", this, "_menu_track", varray(TRACK_MENU_CLEAN_UP_CONFIRM)); - - track_editor->set_clip_contents(true); -} - -AnimationKeyEditor::~AnimationKeyEditor() { - - memdelete(key_edit); -} diff --git a/editor/animation_editor.h b/editor/animation_editor.h deleted file mode 100644 index 1e593f237c..0000000000 --- a/editor/animation_editor.h +++ /dev/null @@ -1,348 +0,0 @@ -/*************************************************************************/ -/* animation_editor.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 ANIMATION_EDITOR_H -#define ANIMATION_EDITOR_H - -#include "scene/gui/control.h" -#include "scene/gui/file_dialog.h" -#include "scene/gui/menu_button.h" -#include "scene/gui/scroll_bar.h" -#include "scene/gui/slider.h" -#include "scene/gui/spin_box.h" -#include "scene/gui/tab_container.h" -#include "scene/gui/texture_rect.h" -#include "scene/gui/tool_button.h" - -#include "editor_data.h" -#include "property_editor.h" -#include "scene/animation/animation_cache.h" -#include "scene/resources/animation.h" -#include "scene_tree_editor.h" - -class AnimationKeyEdit; -class AnimationCurveEdit; - -class AnimationKeyEditor : public VBoxContainer { - - GDCLASS(AnimationKeyEditor, VBoxContainer); - - /* - enum { - - MENU_NEW_ANIMATION, - MENU_OPEN_ANIMATION, - MENU_EDIT_ANIMATION, - MENU_CLOSE_ANIMATION, - MENU_KEYING_ACTIVE, - MENU_SET_ROOT_NODE, - MENU_SYNC_TO_PLAYER, - MENU_ANIM_BASE=100, - }; - -*/ - - enum { - - ADD_TRACK_MENU_ADD_VALUE_TRACK, - ADD_TRACK_MENU_ADD_TRANSFORM_TRACK, - ADD_TRACK_MENU_ADD_CALL_TRACK, - TRACK_MENU_SCALE, - TRACK_MENU_SCALE_PIVOT, - TRACK_MENU_MOVE_UP, - TRACK_MENU_MOVE_DOWN, - TRACK_MENU_REMOVE, - TRACK_MENU_DUPLICATE, - TRACK_MENU_DUPLICATE_TRANSPOSE, - TRACK_MENU_SET_ALL_TRANS_LINEAR, - TRACK_MENU_SET_ALL_TRANS_CONSTANT, - TRACK_MENU_SET_ALL_TRANS_OUT, - TRACK_MENU_SET_ALL_TRANS_IN, - TRACK_MENU_SET_ALL_TRANS_INOUT, - TRACK_MENU_SET_ALL_TRANS_OUTIN, - TRACK_MENU_NEXT_STEP, - TRACK_MENU_PREV_STEP, - TRACK_MENU_OPTIMIZE, - TRACK_MENU_CLEAN_UP, - TRACK_MENU_CLEAN_UP_CONFIRM, - CURVE_SET_LINEAR, - CURVE_SET_IN, - CURVE_SET_OUT, - CURVE_SET_INOUT, - CURVE_SET_OUTIN, - CURVE_SET_CONSTANT - }; - - enum { - RIGHT_MENU_DUPLICATE, - RIGHT_MENU_DUPLICATE_TRANSPOSE, - RIGHT_MENU_REMOVE - }; - - struct MouseOver { - - enum Over { - OVER_NONE, - OVER_NAME, - OVER_KEY, - OVER_VALUE, - OVER_INTERP, - OVER_WRAP, - OVER_UP, - OVER_DOWN, - OVER_REMOVE, - OVER_ADD_KEY, - }; - - Over over; - int track; - int over_key; - - } mouse_over; - - struct SelectedKey { - - int track; - int key; - bool operator<(const SelectedKey &p_key) const { return track == p_key.track ? key < p_key.key : track < p_key.track; }; - }; - - struct KeyInfo { - - float pos; - }; - - Map<SelectedKey, KeyInfo> selection; - - struct ClickOver { - - enum Click { - - CLICK_NONE, - CLICK_RESIZE_NAMES, - CLICK_DRAG_TIMELINE, - CLICK_MOVE_KEYS, - CLICK_SELECT_KEYS - - }; - - SelectedKey selk; - bool shift; - Click click; - Point2 at; - Point2 to; - } click; - - float timeline_pos; - - float name_column_ratio; - - int track_name_editing; - int interp_editing; - int cont_editing; - int wrap_editing; - int selected_track; - int track_ofs[5]; - - int last_menu_track_opt; - LineEdit *track_name; - PopupMenu *track_menu; - PopupMenu *type_menu; - - Control *ec; - TextureRect *zoomicon; - HSlider *zoom; - //MenuButton *menu; - SpinBox *length; - Button *loop; - bool keying; - ToolButton *edit_button; - ToolButton *move_up_button; - ToolButton *move_down_button; - ToolButton *remove_button; - - ToolButton *curve_linear; - ToolButton *curve_in; - ToolButton *curve_out; - ToolButton *curve_inout; - ToolButton *curve_outin; - ToolButton *curve_constant; - - ConfirmationDialog *optimize_dialog; - SpinBox *optimize_linear_error; - SpinBox *optimize_angular_error; - SpinBox *optimize_max_angle; - - ConfirmationDialog *cleanup_dialog; - CheckButton *cleanup_keys; - CheckButton *cleanup_tracks; - CheckButton *cleanup_all; - - SpinBox *step; - - MenuButton *menu_add_track; - MenuButton *menu_track; - - HScrollBar *h_scroll; - VScrollBar *v_scroll; - - Control *track_editor; - Control *track_pos; - TabContainer *key_editor_tab; - - ConfirmationDialog *scale_dialog; - SpinBox *scale; - - PropertyEditor *key_editor; - - SceneTreeDialog *call_select; - - Ref<Animation> animation; - void _update_paths(); - - int last_idx; - - Node *root; - - UndoRedo *undo_redo; - EditorHistory *history; - ConfirmationDialog *insert_confirm; - - AnimationKeyEdit *key_edit; - AnimationCurveEdit *curve_edit; - - bool inserting; - - bool updating; - bool te_drawing; - - void _animation_len_changed(float p_len); - void _animation_loop_changed(); - void _step_changed(float p_len); - - struct InsertData { - - Animation::TrackType type; - NodePath path; - int track_idx; - Variant value; - String query; - bool advance; - }; /* insert_data;*/ - - bool insert_query; - List<InsertData> insert_data; - uint64_t insert_frame; - - int cvi_track; - float cvi_pos; - - int right_data_size_cache; - - EditorSelection *editor_selection; - - Label *select_anim_warning; - - float _get_zoom_scale() const; - - void _track_editor_draw(); - void _track_editor_gui_input(const Ref<InputEvent> &p_input); - void _track_position_draw(); - - void _track_name_changed(const String &p_name); - void _track_menu_selected(int p_idx); - void _confirm_insert_list(); - int _confirm_insert(InsertData p_id, int p_last_track = -1); - void _query_insert(const InsertData &p_id); - void _update_menu(); - bool insert_queue; - void _insert_delay(); - void _scale(); - - void _clear_selection(); - - //void _browse_path(); - - StringName alc; - - void _animation_changed(); - void _animation_optimize(); - void _cleanup_animation(Ref<Animation> p_animation); - - void _scroll_changed(double); - - void _menu_add_track(int p_type); - void _menu_track(int p_type); - - void _clear_selection_for_anim(const Ref<Animation> &p_anim); - void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos); - void _curve_transition_changed(float p_what); - - PropertyInfo _find_hint_for_track(int p_idx, NodePath &r_base_path); - - void _create_value_item(int p_type); - void _pane_drag(const Point2 &p_delta); - bool _edit_if_single_selection(); - - void _toggle_edit_curves(); - void _animation_len_update(); - - void _add_call_track(const NodePath &p_base); - - void _anim_duplicate_keys(bool transpose = false); - void _anim_delete_keys(); - - void _root_removed(); - -protected: - void _notification(int p_what); - static void _bind_methods(); - -public: - void set_animation(const Ref<Animation> &p_anim); - Ref<Animation> get_current_animation() const; - void set_root(Node *p_root); - Node *get_root() const; - void update_keying(); - bool has_keying() const; - - void cleanup(); - - void set_anim_pos(float p_pos); - void insert_node_value_key(Node *p_node, const String &p_property, const Variant &p_value, bool p_only_if_exists = false); - void insert_value_key(const String &p_property, const Variant &p_value, bool p_advance); - void insert_transform_key(Spatial *p_node, const String &p_sub, const Transform &p_xform); - - void show_select_node_warning(bool p_show) { select_anim_warning->set_visible(p_show); } - AnimationKeyEditor(); - ~AnimationKeyEditor(); -}; - -#endif // ANIMATION_EDITOR_H diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp new file mode 100644 index 0000000000..02d667031a --- /dev/null +++ b/editor/animation_track_editor.cpp @@ -0,0 +1,5032 @@ +#include "animation_track_editor.h" +#include "animation_track_editor_plugins.h" +#include "editor/animation_bezier_editor.h" +#include "editor/plugins/animation_player_editor_plugin.h" +#include "editor_node.h" +#include "editor_scale.h" +#include "os/keyboard.h" +#include "scene/main/viewport.h" +#include "servers/audio/audio_stream.h" + +class AnimationTrackKeyEdit : public Object { + + GDCLASS(AnimationTrackKeyEdit, Object); + +public: + bool setting; + bool hidden; + + bool _hide_script_from_inspector() { + return true; + } + + static void _bind_methods() { + + ClassDB::bind_method("_update_obj", &AnimationTrackKeyEdit::_update_obj); + ClassDB::bind_method("_key_ofs_changed", &AnimationTrackKeyEdit::_key_ofs_changed); + ClassDB::bind_method("_hide_script_from_inspector", &AnimationTrackKeyEdit::_hide_script_from_inspector); + } + + //PopupDialog *ke_dialog; + + void _fix_node_path(Variant &value) { + + NodePath np = value; + + if (np == NodePath()) + return; + + Node *root = EditorNode::get_singleton()->get_tree()->get_root(); + + Node *np_node = root->get_node(np); + ERR_FAIL_COND(!np_node); + + Node *edited_node = root->get_node(base); + ERR_FAIL_COND(!edited_node); + + value = edited_node->get_path_to(np_node); + } + + void _update_obj(const Ref<Animation> &p_anim) { + if (setting) + return; + if (hidden) + return; + if (!(animation == p_anim)) + return; + notify_change(); + } + + void _key_ofs_changed(const Ref<Animation> &p_anim, float from, float to) { + if (hidden) + return; + if (!(animation == p_anim)) + return; + if (from != key_ofs) + return; + key_ofs = to; + if (setting) + return; + notify_change(); + } + + bool _set(const StringName &p_name, const Variant &p_value) { + + int key = animation->track_find_key(track, key_ofs, true); + ERR_FAIL_COND_V(key == -1, false); + + String name = p_name; + if (name == "time") { + + float new_time = p_value; + if (new_time == key_ofs) + return true; + + int existing = animation->track_find_key(track, new_time, true); + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Time"), UndoRedo::MERGE_ENDS); + + Variant val = animation->track_get_key_value(track, key); + float trans = animation->track_get_key_transition(track, key); + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", track, key); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, new_time, val, trans); + undo_redo->add_do_method(this, "_key_ofs_changed", animation, key_ofs, new_time); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, new_time); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, key_ofs, val, trans); + undo_redo->add_undo_method(this, "_key_ofs_changed", animation, new_time, key_ofs); + + if (existing != -1) { + Variant v = animation->track_get_key_value(track, existing); + float trans = animation->track_get_key_transition(track, existing); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, new_time, v, trans); + } + + undo_redo->commit_action(); + setting = false; + + return true; + } else if (name == "easing") { + + float val = p_value; + float prev_val = animation->track_get_key_transition(track, key); + setting = true; + undo_redo->create_action(TTR("Anim Change Transition"), UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(animation.ptr(), "track_set_key_transition", track, key, val); + undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", track, key, prev_val); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + + switch (animation->track_get_type(track)) { + + case Animation::TYPE_TRANSFORM: { + + Dictionary d_old = animation->track_get_key_value(track, key); + Dictionary d_new = d_old; + d_new[p_name] = p_value; + setting = true; + undo_redo->create_action(TTR("Anim Change Transform")); + undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, d_new); + undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, d_old); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + + } break; + case Animation::TYPE_VALUE: { + + if (name == "value") { + + Variant value = p_value; + + if (value.get_type() == Variant::NODE_PATH) { + + _fix_node_path(value); + } + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + Variant prev = animation->track_get_key_value(track, key); + undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + + } break; + case Animation::TYPE_METHOD: { + + Dictionary d_old = animation->track_get_key_value(track, key); + Dictionary d_new = d_old; + + bool change_notify_deserved = false; + bool mergeable = false; + + if (name == "name") { + + d_new["method"] = p_value; + } + + if (name == "arg_count") { + + Vector<Variant> args = d_old["args"]; + args.resize(p_value); + d_new["args"] = args; + change_notify_deserved = true; + } + + if (name.begins_with("args/")) { + + Vector<Variant> args = d_old["args"]; + int idx = name.get_slice("/", 1).to_int(); + ERR_FAIL_INDEX_V(idx, args.size(), false); + + String what = name.get_slice("/", 2); + if (what == "type") { + Variant::Type t = Variant::Type(int(p_value)); + + if (t != args[idx].get_type()) { + Variant::CallError err; + if (Variant::can_convert(args[idx].get_type(), t)) { + Variant old = args[idx]; + Variant *ptrs[1] = { &old }; + args[idx] = Variant::construct(t, (const Variant **)ptrs, 1, err); + } else { + + args[idx] = Variant::construct(t, NULL, 0, err); + } + change_notify_deserved = true; + d_new["args"] = args; + } + } + if (what == "value") { + + Variant value = p_value; + if (value.get_type() == Variant::NODE_PATH) { + + _fix_node_path(value); + } + + args[idx] = value; + d_new["args"] = args; + mergeable = true; + } + } + + if (mergeable) + undo_redo->create_action(TTR("Anim Change Call"), UndoRedo::MERGE_ENDS); + else + undo_redo->create_action(TTR("Anim Change Call")); + + Variant prev = animation->track_get_key_value(track, key); + setting = true; + undo_redo->add_do_method(animation.ptr(), "track_set_key_value", track, key, d_new); + undo_redo->add_undo_method(animation.ptr(), "track_set_key_value", track, key, d_old); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + if (change_notify_deserved) + notify_change(); + return true; + } break; + case Animation::TYPE_BEZIER: { + + if (name == "value") { + + Variant value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + float prev = animation->bezier_track_get_key_value(track, key); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_value", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_value", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + if (name == "in_handle") { + + Variant value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + Vector2 prev = animation->bezier_track_get_key_in_handle(track, key); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_in_handle", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_in_handle", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + if (name == "out_handle") { + + Variant value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + Vector2 prev = animation->bezier_track_get_key_out_handle(track, key); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_out_handle", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_out_handle", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + + } break; + case Animation::TYPE_AUDIO: { + + if (name == "stream") { + + Ref<AudioStream> stream = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + RES prev = animation->audio_track_get_key_stream(track, key); + undo_redo->add_do_method(animation.ptr(), "audio_track_set_key_stream", track, key, stream); + undo_redo->add_undo_method(animation.ptr(), "audio_track_set_key_stream", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + if (name == "start_offset") { + + float value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + float prev = animation->audio_track_get_key_start_offset(track, key); + undo_redo->add_do_method(animation.ptr(), "audio_track_set_key_start_offset", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "audio_track_set_key_start_offset", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + if (name == "end_offset") { + + float value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + float prev = animation->audio_track_get_key_end_offset(track, key); + undo_redo->add_do_method(animation.ptr(), "audio_track_set_key_end_offset", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "audio_track_set_key_end_offset", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + + } break; + case Animation::TYPE_ANIMATION: { + + if (name == "animation") { + + StringName name = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + StringName prev = animation->animation_track_get_key_animation(track, key); + undo_redo->add_do_method(animation.ptr(), "animation_track_set_key_animation", track, key, name); + undo_redo->add_undo_method(animation.ptr(), "animation_track_set_key_animation", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + setting = false; + return true; + } + + } break; + } + + return false; + } + + bool _get(const StringName &p_name, Variant &r_ret) const { + + int key = animation->track_find_key(track, key_ofs, true); + ERR_FAIL_COND_V(key == -1, false); + + String name = p_name; + if (name == "time") { + r_ret = key_ofs; + return true; + } else if (name == "easing") { + r_ret = animation->track_get_key_transition(track, key); + return true; + } + + switch (animation->track_get_type(track)) { + + case Animation::TYPE_TRANSFORM: { + + Dictionary d = animation->track_get_key_value(track, key); + ERR_FAIL_COND_V(!d.has(name), false); + r_ret = d[p_name]; + return true; + + } break; + case Animation::TYPE_VALUE: { + + if (name == "value") { + r_ret = animation->track_get_key_value(track, key); + return true; + } + + } break; + case Animation::TYPE_METHOD: { + + Dictionary d = animation->track_get_key_value(track, key); + + if (name == "name") { + + ERR_FAIL_COND_V(!d.has("method"), false); + r_ret = d["method"]; + return true; + } + + ERR_FAIL_COND_V(!d.has("args"), false); + + Vector<Variant> args = d["args"]; + + if (name == "arg_count") { + + r_ret = args.size(); + return true; + } + + if (name.begins_with("args/")) { + + int idx = name.get_slice("/", 1).to_int(); + ERR_FAIL_INDEX_V(idx, args.size(), false); + + String what = name.get_slice("/", 2); + if (what == "type") { + r_ret = args[idx].get_type(); + return true; + } + if (what == "value") { + r_ret = args[idx]; + return true; + } + } + + } break; + case Animation::TYPE_BEZIER: { + + if (name == "value") { + r_ret = animation->bezier_track_get_key_value(track, key); + return true; + } + if (name == "in_handle") { + r_ret = animation->bezier_track_get_key_in_handle(track, key); + return true; + } + if (name == "out_handle") { + r_ret = animation->bezier_track_get_key_out_handle(track, key); + return true; + } + + } break; + case Animation::TYPE_AUDIO: { + + if (name == "stream") { + r_ret = animation->audio_track_get_key_stream(track, key); + return true; + } + if (name == "start_offset") { + r_ret = animation->audio_track_get_key_start_offset(track, key); + return true; + } + if (name == "end_offset") { + r_ret = animation->audio_track_get_key_end_offset(track, key); + return true; + } + + } break; + case Animation::TYPE_ANIMATION: { + + if (name == "animation") { + r_ret = animation->animation_track_get_key_animation(track, key); + return true; + } + + } break; + } + + return false; + } + void _get_property_list(List<PropertyInfo> *p_list) const { + + if (animation.is_null()) + return; + + ERR_FAIL_INDEX(track, animation->get_track_count()); + int key = animation->track_find_key(track, key_ofs, true); + ERR_FAIL_COND(key == -1); + + p_list->push_back(PropertyInfo(Variant::REAL, "time", PROPERTY_HINT_RANGE, "0," + rtos(animation->get_length()) + ",0.01")); + + switch (animation->track_get_type(track)) { + + case Animation::TYPE_TRANSFORM: { + + p_list->push_back(PropertyInfo(Variant::VECTOR3, "location")); + p_list->push_back(PropertyInfo(Variant::QUAT, "rotation")); + p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale")); + + } break; + case Animation::TYPE_VALUE: { + + Variant v = animation->track_get_key_value(track, key); + + if (hint.type != Variant::NIL) { + + PropertyInfo pi = hint; + pi.name = "value"; + p_list->push_back(pi); + } else { + + PropertyHint hint = PROPERTY_HINT_NONE; + String hint_string; + + if (v.get_type() == Variant::OBJECT) { + //could actually check the object property if exists..? yes i will! + Ref<Resource> res = v; + if (res.is_valid()) { + + hint = PROPERTY_HINT_RESOURCE_TYPE; + hint_string = res->get_class(); + } + } + + if (v.get_type() != Variant::NIL) + p_list->push_back(PropertyInfo(v.get_type(), "value", hint, hint_string)); + } + + } break; + case Animation::TYPE_METHOD: { + + p_list->push_back(PropertyInfo(Variant::STRING, "name")); + p_list->push_back(PropertyInfo(Variant::INT, "arg_count", PROPERTY_HINT_RANGE, "0,5,1")); + + Dictionary d = animation->track_get_key_value(track, key); + ERR_FAIL_COND(!d.has("args")); + Vector<Variant> args = d["args"]; + String vtypes; + for (int i = 0; i < Variant::VARIANT_MAX; i++) { + + if (i > 0) + vtypes += ","; + vtypes += Variant::get_type_name(Variant::Type(i)); + } + + for (int i = 0; i < args.size(); i++) { + + p_list->push_back(PropertyInfo(Variant::INT, "args/" + itos(i) + "/type", PROPERTY_HINT_ENUM, vtypes)); + if (args[i].get_type() != Variant::NIL) + p_list->push_back(PropertyInfo(args[i].get_type(), "args/" + itos(i) + "/value")); + } + + } break; + case Animation::TYPE_BEZIER: { + + p_list->push_back(PropertyInfo(Variant::REAL, "value")); + p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle")); + p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle")); + + } break; + case Animation::TYPE_AUDIO: { + + p_list->push_back(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream")); + p_list->push_back(PropertyInfo(Variant::REAL, "start_offset", PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); + p_list->push_back(PropertyInfo(Variant::REAL, "end_offset", PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); + + } break; + case Animation::TYPE_ANIMATION: { + + String animations; + + if (root_path && root_path->has_node(animation->track_get_path(track))) { + + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(root_path->get_node(animation->track_get_path(track))); + if (ap) { + List<StringName> anims; + ap->get_animation_list(&anims); + for (List<StringName>::Element *E = anims.front(); E; E = E->next()) { + if (animations != String()) { + animations += ","; + } + + animations += String(E->get()); + } + } + } + + if (animations != String()) { + animations += ","; + } + animations += "[stop]"; + + p_list->push_back(PropertyInfo(Variant::STRING, "animation", PROPERTY_HINT_ENUM, animations)); + + } break; + } + + if (animation->track_get_type(track) == Animation::TYPE_VALUE) { + p_list->push_back(PropertyInfo(Variant::REAL, "easing", PROPERTY_HINT_EXP_EASING)); + } + } + + UndoRedo *undo_redo; + Ref<Animation> animation; + int track; + float key_ofs; + Node *root_path; + + PropertyInfo hint; + NodePath base; + + void notify_change() { + + _change_notify(); + } + + AnimationTrackKeyEdit() { + hidden = true; + key_ofs = 0; + track = -1; + setting = false; + root_path = NULL; + } +}; + +void AnimationTimelineEdit::_zoom_changed(double) { + + update(); + play_position->update(); + emit_signal("zoom_changed"); +} + +float AnimationTimelineEdit::get_zoom_scale() const { + + float zv = zoom->get_value(); + if (zv < 1) { + zv = 1.0 - zv; + return Math::pow(1.0f + zv, 8.0f) * 100; + } else { + return 1.0 / Math::pow(zv, 8.0f) * 100; + } +} + +void AnimationTimelineEdit::_anim_length_changed(double p_new_len) { + + if (editing) + return; + + p_new_len = MAX(0.001, p_new_len); + + editing = true; + *block_animation_update_ptr = true; + undo_redo->create_action("Change animation length"); + undo_redo->add_do_method(animation.ptr(), "set_length", p_new_len); + undo_redo->add_undo_method(animation.ptr(), "set_length", animation->get_length()); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + editing = false; + update(); + + emit_signal("length_changed", p_new_len); +} + +void AnimationTimelineEdit::_anim_loop_pressed() { + + *block_animation_update_ptr = true; + undo_redo->create_action("Change animation loop"); + undo_redo->add_do_method(animation.ptr(), "set_loop", loop->is_pressed()); + undo_redo->add_undo_method(animation.ptr(), "set_loop", animation->has_loop()); + undo_redo->commit_action(); + *block_animation_update_ptr = false; +} + +int AnimationTimelineEdit::get_buttons_width() const { + + Ref<Texture> interp_mode = get_icon("TrackContinuous", "EditorIcons"); + Ref<Texture> interp_type = get_icon("InterpRaw", "EditorIcons"); + Ref<Texture> loop_type = get_icon("InterpWrapClamp", "EditorIcons"); + Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); + Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); + + int total_w = interp_mode->get_width() + interp_type->get_width() + loop_type->get_width() + remove_icon->get_width(); + total_w += (down_icon->get_width() + 4 * EDSCALE) * 4; + + return total_w; +} + +int AnimationTimelineEdit::get_name_limit() const { + + Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); + + int limit = MAX(name_limit, add_track->get_minimum_size().width + hsize_icon->get_width()); + + limit = MIN(limit, get_size().width - get_buttons_width() - 1); + + return limit; +} + +void AnimationTimelineEdit::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE) { + add_track->set_icon(get_icon("Add", "EditorIcons")); + loop->set_icon(get_icon("Loop", "EditorIcons")); + time_icon->set_texture(get_icon("Time", "EditorIcons")); + + add_track->get_popup()->clear(); + add_track->get_popup()->add_icon_item(get_icon("KeyValue", "EditorIcons"), TTR("Property Track")); + add_track->get_popup()->add_icon_item(get_icon("KeyXform", "EditorIcons"), TTR("3D Transform Track")); + add_track->get_popup()->add_icon_item(get_icon("KeyCall", "EditorIcons"), TTR("Call Method Track")); + add_track->get_popup()->add_icon_item(get_icon("KeyBezier", "EditorIcons"), TTR("Bezier Curve Track")); + add_track->get_popup()->add_icon_item(get_icon("KeyAudio", "EditorIcons"), TTR("Audio Playback Track")); + add_track->get_popup()->add_icon_item(get_icon("KeyAnimation", "EditorIcons"), TTR("Animation Playback Track")); + } + + if (p_what == NOTIFICATION_RESIZED) { + len_hb->set_position(Vector2(get_size().width - get_buttons_width(), 0)); + len_hb->set_size(Size2(get_buttons_width(), get_size().height)); + } + if (p_what == NOTIFICATION_DRAW) { + + int key_range = get_size().width - get_buttons_width() - get_name_limit(); + + if (!animation.is_valid()) + return; + + Ref<Font> font = get_font("font", "Label"); + Color color = get_color("font_color", "Label"); + + int zoomw = key_range; + float scale = get_zoom_scale(); + int h = get_size().height; + + float l = animation->get_length(); + if (l <= 0) + l = 0.001; //avoid crashor + + Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); + hsize_rect = Rect2(get_name_limit() - hsize_icon->get_width() - 2 * EDSCALE, (get_size().height - hsize_icon->get_height()) / 2, hsize_icon->get_width(), hsize_icon->get_height()); + draw_texture(hsize_icon, hsize_rect.position); + + float keys_from = get_value(); + float keys_to = keys_from + zoomw / scale; + + { + float time_min = 0; + float time_max = animation->get_length(); + for (int i = 0; i < animation->get_track_count(); i++) { + + if (animation->track_get_key_count(i) > 0) { + + float beg = animation->track_get_key_time(i, 0); + /*if (animation->track_get_type(i) == Animation::TYPE_BEZIER) { + beg += animation->bezier_track_get_key_in_handle(i, 0).x; + }* not worth it since they have no use */ + + if (beg < time_min) + time_min = beg; + + float end = animation->track_get_key_time(i, animation->track_get_key_count(i) - 1); + /*if (animation->track_get_type(i) == Animation::TYPE_BEZIER) { + end += animation->bezier_track_get_key_out_handle(i, animation->track_get_key_count(i) - 1).x; + } not worth it since they have no use */ + + if (end > time_max) + time_max = end; + } + } + + float extra = (zoomw / scale) * 0.5; + + //if (time_min < -0.001) + // time_min -= extra; + time_max += extra; + set_min(time_min); + set_max(time_max); + + if (zoomw / scale < (time_max - time_min)) { + hscroll->show(); + + } else { + + hscroll->hide(); + } + } + + set_page(zoomw / scale); + + int end_px = (l - get_value()) * scale; + int begin_px = -get_value() * scale; + Color notimecol = get_color("dark_color_2", "Editor"); + Color timecolor = color; + timecolor.a = 0.2; + Color linecolor = color; + linecolor.a = 0.2; + + { + + draw_rect(Rect2(Point2(get_name_limit(), 0), Point2(zoomw - 1, h)), notimecol); + + if (begin_px < zoomw && end_px > 0) { + + if (begin_px < 0) + begin_px = 0; + if (end_px > zoomw) + end_px = zoomw; + + draw_rect(Rect2(Point2(get_name_limit() + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor); + } + } + + Color color_time_sec = color; + Color color_time_dec = color; + color_time_dec.a *= 0.5; +#define SC_ADJ 100 + int min = 30; + int dec = 1; + int step = 1; + 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++) { + + step = (_multp[i] * dec); + if (step * scale / SC_ADJ > min) { + step_found = true; + break; + } + } + if (step_found) + break; + dec *= 10; + decimals--; + if (decimals < 0) + decimals = 0; + } + + for (int i = 0; i < zoomw; i++) { + + float pos = get_value() + double(i) / scale; + float prev = get_value() + (double(i) - 1.0) / scale; + + int sc = int(Math::floor(pos * SC_ADJ)); + int prev_sc = int(Math::floor(prev * SC_ADJ)); + bool sub = (sc % SC_ADJ); + + if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) { + + int scd = sc < 0 ? prev_sc : sc; + draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor); + draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height()) / 2 + font->get_ascent()).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), sub ? color_time_dec : color_time_sec, zoomw - i); + } + } + + draw_line(Vector2(0, get_size().height), get_size(), linecolor); + } +} + +void AnimationTimelineEdit::set_animation(const Ref<Animation> &p_animation) { + animation = p_animation; + if (animation.is_valid()) { + len_hb->show(); + add_track->show(); + } else { + len_hb->hide(); + add_track->hide(); + } + update(); + update_values(); +} + +Size2 AnimationTimelineEdit::get_minimum_size() const { + + Size2 ms = add_track->get_minimum_size(); + Ref<Font> font = get_font("font", "Label"); + ms.height = MAX(ms.height, font->get_height()); + ms.width = get_buttons_width() + add_track->get_minimum_size().width + get_icon("Hsize", "EditorIcons")->get_width() + 2; + return ms; +} + +void AnimationTimelineEdit::set_block_animation_update_ptr(bool *p_block_ptr) { + block_animation_update_ptr = p_block_ptr; +} + +void AnimationTimelineEdit::set_undo_redo(UndoRedo *p_undo_redo) { + undo_redo = p_undo_redo; +} + +void AnimationTimelineEdit::set_zoom(Range *p_zoom) { + zoom = p_zoom; + zoom->connect("value_changed", this, "_zoom_changed"); +} + +void AnimationTimelineEdit::set_play_position(float p_pos) { + + play_position_pos = p_pos; + play_position->update(); +} + +float AnimationTimelineEdit::get_play_position() const { + return play_position_pos; +} + +void AnimationTimelineEdit::update_play_position() { + play_position->update(); +} + +void AnimationTimelineEdit::update_values() { + + if (!animation.is_valid() || editing) + return; + + editing = true; + length->set_value(animation->get_length()); + loop->set_pressed(animation->has_loop()); + editing = false; +} + +void AnimationTimelineEdit::_play_position_draw() { + + if (!animation.is_valid() || play_position_pos < 0) + return; + + float scale = get_zoom_scale(); + int h = play_position->get_size().height; + + int px = (-get_value() + play_position_pos) * scale + get_name_limit(); + + if (px >= get_name_limit() && px < (play_position->get_size().width - get_buttons_width())) { + Color color = get_color("accent_color", "Editor"); + play_position->draw_line(Point2(px, 0), Point2(px, h), color); + } +} + +void AnimationTimelineEdit::_gui_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventMouseButton> mb = p_event; + + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && hsize_rect.has_point(mb->get_position())) { + + dragging_hsize = true; + dragging_hsize_from = mb->get_position().x; + dragging_hsize_at = name_limit; + } + + if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && dragging_hsize) { + dragging_hsize = false; + } + if (mb.is_valid() && mb->get_position().x > get_name_limit() && mb->get_position().x < (get_size().width - get_buttons_width())) { + + if (!panning_timeline && mb->get_button_index() == BUTTON_LEFT) { + int x = mb->get_position().x - get_name_limit(); + + float ofs = x / get_zoom_scale() + get_value(); + emit_signal("timeline_changed", ofs, false); + dragging_timeline = true; + } + if (!dragging_timeline && mb->get_button_index() == BUTTON_MIDDLE) { + int x = mb->get_position().x - get_name_limit(); + panning_timeline_from = x / get_zoom_scale(); + panning_timeline = true; + panning_timeline_at = get_value(); + } + } + + if (dragging_timeline && mb.is_valid() && mb->get_button_index() == BUTTON_LEFT && !mb->is_pressed()) { + dragging_timeline = false; + } + + if (panning_timeline && mb.is_valid() && mb->get_button_index() == BUTTON_MIDDLE && !mb->is_pressed()) { + panning_timeline = false; + } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid()) { + + if (dragging_hsize) { + int ofs = mm->get_position().x - dragging_hsize_from; + name_limit = dragging_hsize_at + ofs; + update(); + emit_signal("name_limit_changed"); + play_position->update(); + } + if (dragging_timeline) { + int x = mm->get_position().x - get_name_limit(); + float ofs = x / get_zoom_scale() + get_value(); + emit_signal("timeline_changed", ofs, false); + } + if (panning_timeline) { + int x = mm->get_position().x - get_name_limit(); + float ofs = x / get_zoom_scale(); + float diff = ofs - panning_timeline_from; + set_value(panning_timeline_at - diff); + } + } +} + +void AnimationTimelineEdit::set_hscroll(HScrollBar *p_hscroll) { + + hscroll = p_hscroll; +} + +void AnimationTimelineEdit::_track_added(int p_track) { + emit_signal("track_added", p_track); +} + +void AnimationTimelineEdit::_bind_methods() { + ClassDB::bind_method("_zoom_changed", &AnimationTimelineEdit::_zoom_changed); + ClassDB::bind_method("_anim_length_changed", &AnimationTimelineEdit::_anim_length_changed); + ClassDB::bind_method("_anim_loop_pressed", &AnimationTimelineEdit::_anim_loop_pressed); + ClassDB::bind_method("_play_position_draw", &AnimationTimelineEdit::_play_position_draw); + ClassDB::bind_method("_gui_input", &AnimationTimelineEdit::_gui_input); + ClassDB::bind_method("_track_added", &AnimationTimelineEdit::_track_added); + + ADD_SIGNAL(MethodInfo("zoom_changed")); + ADD_SIGNAL(MethodInfo("name_limit_changed")); + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("track_added", PropertyInfo(Variant::INT, "track"))); + ADD_SIGNAL(MethodInfo("length_changed", PropertyInfo(Variant::REAL, "size"))); +} + +AnimationTimelineEdit::AnimationTimelineEdit() { + + block_animation_update_ptr = NULL; + editing = false; + name_limit = 150; + zoom = NULL; + + play_position_pos = 0; + play_position = memnew(Control); + play_position->set_mouse_filter(MOUSE_FILTER_PASS); + add_child(play_position); + play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->connect("draw", this, "_play_position_draw"); + + add_track = memnew(MenuButton); + add_track->set_position(Vector2(0, 0)); + add_child(add_track); + add_track->set_text(TTR("Add Track")); + + len_hb = memnew(HBoxContainer); + + Control *expander = memnew(Control); + expander->set_h_size_flags(SIZE_EXPAND_FILL); + len_hb->add_child(expander); + time_icon = memnew(TextureRect); + time_icon->set_v_size_flags(SIZE_SHRINK_CENTER); + time_icon->set_tooltip(TTR("Animation Length Time (seconds)")); + len_hb->add_child(time_icon); + length = memnew(EditorSpinSlider); + length->set_min(0.001); + length->set_max(3600); + length->set_step(0.01); + length->set_allow_greater(true); + length->set_custom_minimum_size(Vector2(70 * EDSCALE, 0)); + length->set_hide_slider(true); + length->set_tooltip(TTR("Animation Length Time (seconds)")); + length->connect("value_changed", this, "_anim_length_changed"); + len_hb->add_child(length); + loop = memnew(ToolButton); + loop->set_tooltip(TTR("Animation Looping")); + loop->connect("pressed", this, "_anim_loop_pressed"); + loop->set_toggle_mode(true); + len_hb->add_child(loop); + add_child(len_hb); + + add_track->hide(); + add_track->get_popup()->connect("index_pressed", this, "_track_added"); + len_hb->hide(); + + panning_timeline = false; + dragging_timeline = false; + dragging_hsize = false; +} + +//////////////////////////////////// + +void AnimationTrackEdit::_notification(int p_what) { + if (p_what == NOTIFICATION_DRAW) { + if (animation.is_null()) + return; + ERR_FAIL_INDEX(track, animation->get_track_count()); + + int limit = timeline->get_name_limit(); + + if (has_focus()) { + Color accent = get_color("accent_color", "Editor"); + accent.a *= 0.7; + draw_rect(Rect2(Point2(), get_size()), accent, false); + } + + Ref<Font> font = get_font("font", "Label"); + Color color = get_color("font_color", "Label"); + Ref<Texture> type_icons[6] = { + get_icon("KeyValue", "EditorIcons"), + get_icon("KeyXform", "EditorIcons"), + get_icon("KeyCall", "EditorIcons"), + get_icon("KeyBezier", "EditorIcons"), + get_icon("KeyAudio", "EditorIcons"), + get_icon("KeyAnimation", "EditorIcons") + }; + int hsep = get_constant("hseparation", "ItemList"); + Color linecolor = color; + linecolor.a = 0.2; + + // NAMES AND ICONS // + + { + + Ref<Texture> check = animation->track_is_enabled(track) ? get_icon("checked", "CheckBox") : get_icon("unchecked", "CheckBox"); + + int ofs = in_group ? check->get_width() : 0; //not the best reference for margin but.. + + check_rect = Rect2(Point2(ofs, int(get_size().height - check->get_height()) / 2), check->get_size()); + + draw_texture(check, check_rect.position); + + ofs += check->get_width() + hsep; + + Ref<Texture> type_icon = type_icons[animation->track_get_type(track)]; + + draw_texture(type_icon, Point2(ofs, int(get_size().height - type_icon->get_height()) / 2)); + ofs += type_icon->get_width() + hsep; + + NodePath path = animation->track_get_path(track); + + Node *node = NULL; + + if (root && root->has_node(path)) { + node = root->get_node(path); + } + + String text; + Color text_color = color; + if (node && EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) { + text_color = get_color("accent_color", "Editor"); + } + + if (in_group) { + + if (animation->track_get_type(track) == Animation::TYPE_METHOD) { + text = TTR("Functions:"); + } else if (animation->track_get_type(track) == Animation::TYPE_AUDIO) { + text = TTR("Audio Clips:"); + } else if (animation->track_get_type(track) == Animation::TYPE_ANIMATION) { + text = TTR("Anim Clips:"); + } else { + Vector<StringName> sn = path.get_subnames(); + for (int i = 0; i < sn.size(); i++) { + if (i > 0) { + text += "."; + } + text += sn[i]; + } + } + text_color.a *= 0.7; + } else if (node) { + Ref<Texture> icon; + if (has_icon(node->get_class(), "EditorIcons")) { + icon = get_icon(node->get_class(), "EditorIcons"); + } else { + icon = get_icon("Node", "EditorIcons"); + } + + draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2)); + icon_cache = icon; + + text = node->get_name(); + ofs += hsep; + ofs += icon->get_width(); + Vector<StringName> sn = path.get_subnames(); + for (int i = 0; i < sn.size(); i++) { + text += "."; + text += sn[i]; + } + } else { + icon_cache = type_icon; + + text = path; + } + + path_cache = text; + + path_rect = Rect2(ofs, 0, limit - ofs - hsep, get_size().height); + + Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height()) / 2 + font->get_ascent()); + string_pos = string_pos.floor(); + draw_string(font, string_pos, text, text_color, limit - ofs - hsep); + + draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor); + } + + // KEYFAMES // + + draw_bg(limit, get_size().width - timeline->get_buttons_width()); + + { + + float scale = timeline->get_zoom_scale(); + int limit_end = get_size().width - timeline->get_buttons_width(); + + for (int i = 0; i < animation->track_get_key_count(track); i++) { + + float offset = animation->track_get_key_time(track, i) - timeline->get_value(); + if (editor->is_key_selected(track, i) && editor->is_moving_selection()) { + offset += editor->get_moving_selection_offset(); + } + offset = offset * scale + limit; + if (i < animation->track_get_key_count(track) - 1) { + + float offset_n = animation->track_get_key_time(track, i + 1) - timeline->get_value(); + if (editor->is_key_selected(track, i + 1) && editor->is_moving_selection()) { + offset_n += editor->get_moving_selection_offset(); + } + offset_n = offset_n * scale + limit; + + draw_key_link(i, scale, int(offset), int(offset_n), limit, limit_end); + } + + draw_key(i, scale, int(offset), editor->is_key_selected(track, i), limit, limit_end); + } + } + + draw_fg(limit, get_size().width - timeline->get_buttons_width()); + + // BUTTONS // + { + + Ref<Texture> wrap_icon[2] = { + get_icon("InterpWrapClamp", "EditorIcons"), + get_icon("InterpWrapLoop", "EditorIcons"), + }; + + Ref<Texture> interp_icon[3] = { + get_icon("InterpRaw", "EditorIcons"), + get_icon("InterpLinear", "EditorIcons"), + get_icon("InterpCubic", "EditorIcons") + }; + Ref<Texture> cont_icon[4] = { + get_icon("TrackContinuous", "EditorIcons"), + get_icon("TrackDiscrete", "EditorIcons"), + get_icon("TrackTrigger", "EditorIcons"), + get_icon("TrackCapture", "EditorIcons") + }; + + int ofs = get_size().width - timeline->get_buttons_width(); + + Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); + + draw_line(Point2(ofs, 0), Point2(ofs, get_size().height), linecolor); + + ofs += hsep; + { + //callmode + + Animation::UpdateMode update_mode; + + if (animation->track_get_type(track) == Animation::TYPE_VALUE) { + update_mode = animation->value_track_get_update_mode(track); + } else { + update_mode = Animation::UPDATE_CONTINUOUS; + } + + Ref<Texture> update_icon = cont_icon[update_mode]; + + update_mode_rect.position.x = ofs; + update_mode_rect.position.y = int(get_size().height - update_icon->get_height()) / 2; + update_mode_rect.size = update_icon->get_size(); + + if (animation->track_get_type(track) == Animation::TYPE_VALUE) { + draw_texture(update_icon, update_mode_rect.position); + } + //make it easier to click + update_mode_rect.position.y = 0; + update_mode_rect.size.y = get_size().height; + + ofs += update_icon->get_width() + hsep; + update_mode_rect.size.x += hsep; + + if (animation->track_get_type(track) == Animation::TYPE_VALUE) { + draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2)); + update_mode_rect.size.x += down_icon->get_width(); + bezier_edit_rect = Rect2(); + } else if (animation->track_get_type(track) == Animation::TYPE_BEZIER) { + Ref<Texture> bezier_icon = get_icon("EditBezier", "EditorIcons"); + update_mode_rect.size.x += down_icon->get_width(); + bezier_edit_rect.position = update_mode_rect.position + (update_mode_rect.size - bezier_icon->get_size()) / 2; + bezier_edit_rect.size = bezier_icon->get_size(); + draw_texture(bezier_icon, bezier_edit_rect.position); + update_mode_rect = Rect2(); + } else { + update_mode_rect = Rect2(); + bezier_edit_rect = Rect2(); + } + + ofs += down_icon->get_width(); + draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor); + ofs += hsep; + } + + { + //interp + + Animation::InterpolationType interp_mode = animation->track_get_interpolation_type(track); + + Ref<Texture> icon = interp_icon[interp_mode]; + + interp_mode_rect.position.x = ofs; + interp_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2; + interp_mode_rect.size = icon->get_size(); + + if (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_TRANSFORM) { + draw_texture(icon, interp_mode_rect.position); + } + //make it easier to click + interp_mode_rect.position.y = 0; + interp_mode_rect.size.y = get_size().height; + + ofs += icon->get_width() + hsep; + interp_mode_rect.size.x += hsep; + + if (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_TRANSFORM) { + draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2)); + interp_mode_rect.size.x += down_icon->get_width(); + } else { + interp_mode_rect = Rect2(); + } + + ofs += down_icon->get_width(); + draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor); + ofs += hsep; + } + + { + //loop + + bool loop_wrap = animation->track_get_interpolation_loop_wrap(track); + + Ref<Texture> icon = wrap_icon[loop_wrap ? 1 : 0]; + + loop_mode_rect.position.x = ofs; + loop_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2; + loop_mode_rect.size = icon->get_size(); + + if (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_TRANSFORM) { + draw_texture(icon, loop_mode_rect.position); + } + + loop_mode_rect.position.y = 0; + loop_mode_rect.size.y = get_size().height; + + ofs += icon->get_width() + hsep; + loop_mode_rect.size.x += hsep; + + if (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_TRANSFORM) { + draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2)); + loop_mode_rect.size.x += down_icon->get_width(); + } else { + loop_mode_rect = Rect2(); + } + + ofs += down_icon->get_width(); + draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor); + ofs += hsep; + } + + { + //erase + + Ref<Texture> icon = get_icon("Remove", "EditorIcons"); + + remove_rect.position.x = ofs + ((get_size().width - ofs) - icon->get_width()) / 2; + remove_rect.position.y = int(get_size().height - icon->get_height()) / 2; + remove_rect.size = icon->get_size(); + + draw_texture(icon, remove_rect.position); + } + } + + if (in_group) { + draw_line(Vector2(timeline->get_name_limit(), get_size().height), get_size(), linecolor); + } else { + draw_line(Vector2(0, get_size().height), get_size(), linecolor); + } + + if (dropping_at != 0) { + Color drop_color = get_color("accent_color", "Editor"); + if (dropping_at < 0) { + draw_line(Vector2(0, 0), Vector2(get_size().width, 0), drop_color); + } else { + draw_line(Vector2(0, get_size().height), get_size(), drop_color); + } + } + } + + if (p_what == NOTIFICATION_MOUSE_EXIT || p_what == NOTIFICATION_DRAG_END) { + cancel_drop(); + } +} + +int AnimationTrackEdit::get_key_height() const { + if (!animation.is_valid()) + return 0; + + return type_icon->get_height(); +} +Rect2 AnimationTrackEdit::get_key_rect(int p_index, float p_pixels_sec) { + + if (!animation.is_valid()) + return Rect2(); + Rect2 rect = Rect2(-type_icon->get_width() / 2, 0, type_icon->get_width(), get_size().height); + + //make it a big easier to click + rect.position.x -= rect.size.x * 0.5; + rect.size.x *= 2; + return rect; +} + +bool AnimationTrackEdit::is_key_selectable_by_distance() const { + return true; +} + +void AnimationTrackEdit::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { + if (p_next_x < p_clip_left) + return; + if (p_x > p_clip_right) + return; + + Variant current = animation->track_get_key_value(get_track(), p_index); + Variant next = animation->track_get_key_value(get_track(), p_index + 1); + if (current != next) + return; + + Color color = get_color("font_color", "Label"); + color.a = 0.5; + + int from_x = MAX(p_x, p_clip_left); + int to_x = MIN(p_next_x, p_clip_right); + + draw_line(Point2(from_x + 1, get_size().height / 2), Point2(to_x, get_size().height / 2), color, 2); +} + +void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + if (!animation.is_valid()) + return; + + if (p_x < p_clip_left || p_x > p_clip_right) + return; + + Vector2 ofs(p_x - type_icon->get_width() / 2, int(get_size().height - type_icon->get_height()) / 2); + + if (animation->track_get_type(track) == Animation::TYPE_METHOD) { + Ref<Font> font = get_font("font", "Label"); + Color color = get_color("font_color", "Label"); + color.a = 0.5; + + Dictionary d = animation->track_get_key_value(track, p_index); + String text; + + if (d.has("method")) + text += String(d["method"]); + text += "("; + Vector<Variant> args; + if (d.has("args")) + args = d["args"]; + for (int i = 0; i < args.size(); i++) { + + if (i > 0) + text += ", "; + text += String(args[i]); + } + text += ")"; + + int limit = MAX(0, p_clip_right - p_x - type_icon->get_width()); + if (limit > 0) { + draw_string(font, Vector2(p_x + type_icon->get_width(), int(get_size().height - font->get_height()) / 2 + font->get_ascent()), text, color, limit); + } + } + if (p_selected) { + draw_texture(selected_icon, ofs); + } else { + draw_texture(type_icon, ofs); + } +} + +//helper +void AnimationTrackEdit::draw_rect_clipped(const Rect2 &p_rect, const Color &p_color, bool p_filled) { + + int clip_left = timeline->get_name_limit(); + int clip_right = get_size().width - timeline->get_buttons_width(); + + if (p_rect.position.x > clip_right) + return; + if (p_rect.position.x + p_rect.size.x < clip_left) + return; + Rect2 clip = Rect2(clip_left, 0, clip_right - clip_left, get_size().height); + draw_rect(clip.clip(p_rect), p_color, p_filled); +} + +void AnimationTrackEdit::draw_bg(int p_clip_left, int p_clip_right) { +} + +void AnimationTrackEdit::draw_fg(int p_clip_left, int p_clip_right) { +} + +void AnimationTrackEdit::draw_texture_clipped(const Ref<Texture> &p_texture, const Vector2 &p_pos) { + + draw_texture_region_clipped(p_texture, Rect2(p_pos, p_texture->get_size()), Rect2(Point2(), p_texture->get_size())); +} + +void AnimationTrackEdit::draw_texture_region_clipped(const Ref<Texture> &p_texture, const Rect2 &p_rect, const Rect2 &p_region) { + + int clip_left = timeline->get_name_limit(); + int clip_right = get_size().width - timeline->get_buttons_width(); + + //clip left and right + if (clip_left > p_rect.position.x + p_rect.size.x) + return; + if (clip_right < p_rect.position.x) + return; + + Rect2 rect = p_rect; + Rect2 region = p_region; + + if (clip_left > rect.position.x) { + int rect_pixels = (clip_left - rect.position.x); + int region_pixels = rect_pixels * region.size.x / rect.size.x; + + rect.position.x += rect_pixels; + rect.size.x -= rect_pixels; + + region.position.x += region_pixels; + region.size.x -= region_pixels; + } + + if (clip_right < rect.position.x + rect.size.x) { + + int rect_pixels = rect.position.x + rect.size.x - clip_right; + int region_pixels = rect_pixels * region.size.x / rect.size.x; + + rect.size.x -= rect_pixels; + region.size.x -= region_pixels; + } + + draw_texture_rect_region(p_texture, rect, region); +} + +int AnimationTrackEdit::get_track() const { + return track; +} + +Ref<Animation> AnimationTrackEdit::get_animation() const { + return animation; +} + +void AnimationTrackEdit::set_animation_and_track(const Ref<Animation> &p_animation, int p_track) { + + animation = p_animation; + track = p_track; + update(); + + Ref<Texture> type_icons[6] = { + get_icon("KeyValue", "EditorIcons"), + get_icon("KeyXform", "EditorIcons"), + get_icon("KeyCall", "EditorIcons"), + get_icon("KeyBezier", "EditorIcons"), + get_icon("KeyAudio", "EditorIcons"), + get_icon("KeyAnimation", "EditorIcons") + }; + + ERR_FAIL_INDEX(track, animation->get_track_count()); + + type_icon = type_icons[animation->track_get_type(track)]; + selected_icon = get_icon("KeySelected", "EditorIcons"); +} + +Size2 AnimationTrackEdit::get_minimum_size() const { + + Ref<Texture> texture = get_icon("Object", "EditorIcons"); + Ref<Font> font = get_font("font", "Label"); + int separation = get_constant("vseparation", "ItemList"); + + int max_h = MAX(texture->get_height(), font->get_height()); + max_h = MAX(max_h, get_key_height()); + + return Vector2(1, max_h + separation); +} + +void AnimationTrackEdit::set_undo_redo(UndoRedo *p_undo_redo) { + undo_redo = p_undo_redo; +} + +void AnimationTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { + timeline = p_timeline; + timeline->connect("zoom_changed", this, "_zoom_changed"); + timeline->connect("name_limit_changed", this, "_zoom_changed"); +} +void AnimationTrackEdit::set_editor(AnimationTrackEditor *p_editor) { + editor = p_editor; +} + +void AnimationTrackEdit::_play_position_draw() { + + if (!animation.is_valid() || play_position_pos < 0) + return; + + float scale = timeline->get_zoom_scale(); + int h = get_size().height; + + int px = (-timeline->get_value() + play_position_pos) * scale + timeline->get_name_limit(); + + if (px >= timeline->get_name_limit() && px < (get_size().width - timeline->get_buttons_width())) { + Color color = get_color("accent_color", "Editor"); + play_position->draw_line(Point2(px, 0), Point2(px, h), color); + } +} + +void AnimationTrackEdit::set_play_position(float p_pos) { + + play_position_pos = p_pos; + play_position->update(); +} + +void AnimationTrackEdit::update_play_position() { + play_position->update(); +} + +void AnimationTrackEdit::set_root(Node *p_root) { + root = p_root; +} +void AnimationTrackEdit::_zoom_changed() { + update(); + play_position->update(); +} + +void AnimationTrackEdit::_path_entered(const String &p_text) { + + *block_animation_update_ptr = true; + undo_redo->create_action("Change Track Path"); + undo_redo->add_do_method(animation.ptr(), "track_set_path", track, p_text); + undo_redo->add_undo_method(animation.ptr(), "track_set_path", track, animation->track_get_path(track)); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + update(); + path->hide(); +} + +String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const { + + if (check_rect.has_point(p_pos)) { + return TTR("Toggle this track on/off"); + } + + if (path_rect.has_point(p_pos)) { + return animation->track_get_path(track); + } + + if (update_mode_rect.has_point(p_pos)) { + return TTR("Update Mode (How this property is set)."); + } + + if (interp_mode_rect.has_point(p_pos)) { + return TTR("Interpolation Mode"); + } + + if (loop_mode_rect.has_point(p_pos)) { + return TTR("Loop Wrap Mode (Interpolate end with beginning on loop"); + } + + if (remove_rect.has_point(p_pos)) { + return TTR("Remove this track"); + } + + if (p_pos.x >= timeline->get_name_limit() && p_pos.x <= (get_size().width - timeline->get_buttons_width())) { + + int key_idx = -1; + float key_distance = 1e20; + + for (int i = animation->track_get_key_count(track) - 1; i >= 0; i--) { //select should happen in the opposite order of drawing for more accurate overlap select + + Rect2 rect = const_cast<AnimationTrackEdit *>(this)->get_key_rect(i, timeline->get_zoom_scale()); + float offset = animation->track_get_key_time(track, i) - timeline->get_value(); + offset = offset * timeline->get_zoom_scale() + timeline->get_name_limit(); + rect.position.x += offset; + + if (rect.has_point(p_pos)) { + + if (const_cast<AnimationTrackEdit *>(this)->is_key_selectable_by_distance()) { + float distance = ABS(offset - p_pos.x); + if (key_idx == -1 || distance < key_distance) { + key_idx = i; + key_distance = distance; + } + } else { + //first one does it + break; + } + } + } + + if (key_idx != -1) { + + String text = TTR("Time (s): ") + rtos(animation->track_get_key_time(track, key_idx)) + "\n"; + switch (animation->track_get_type(track)) { + + case Animation::TYPE_TRANSFORM: { + + Dictionary d = animation->track_get_key_value(track, key_idx); + if (d.has("location")) + text += "Pos: " + String(d["location"]) + "\n"; + if (d.has("rotation")) + text += "Rot: " + String(d["rotation"]) + "\n"; + if (d.has("scale")) + text += "Scale: " + String(d["scale"]) + "\n"; + } break; + case Animation::TYPE_VALUE: { + + Variant v = animation->track_get_key_value(track, key_idx); + //text+="value: "+String(v)+"\n"; + + bool prop_exists = false; + Variant::Type valid_type = Variant::NIL; + Object *obj = NULL; + + RES res; + Vector<StringName> leftover_path; + Node *node = root->get_node_and_resource(animation->track_get_path(track), res, leftover_path); + + if (res.is_valid()) { + obj = res.ptr(); + } else if (node) { + obj = node; + } + + if (obj) { + valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists); + } + + text += "Type: " + Variant::get_type_name(v.get_type()) + "\n"; + if (prop_exists && !Variant::can_convert(v.get_type(), valid_type)) { + text += "Value: " + String(v) + " (Invalid, expected type: " + Variant::get_type_name(valid_type) + ")\n"; + } else { + text += "Value: " + String(v) + "\n"; + } + text += "Easing: " + rtos(animation->track_get_key_transition(track, key_idx)); + + } break; + case Animation::TYPE_METHOD: { + + Dictionary d = animation->track_get_key_value(track, key_idx); + if (d.has("method")) + text += String(d["method"]); + text += "("; + Vector<Variant> args; + if (d.has("args")) + args = d["args"]; + for (int i = 0; i < args.size(); i++) { + + if (i > 0) + text += ", "; + text += String(args[i]); + } + text += ")\n"; + + } break; + case Animation::TYPE_BEZIER: { + + float h = animation->bezier_track_get_key_value(track, key_idx); + text += "Value: " + rtos(h) + "\n"; + Vector2 ih = animation->bezier_track_get_key_in_handle(track, key_idx); + text += "In-Handle: " + ih + "\n"; + Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx); + text += "Out-Handle: " + oh + "\n"; + } break; + case Animation::TYPE_AUDIO: { + + String stream_name = "null"; + RES stream = animation->audio_track_get_key_stream(track, key_idx); + if (stream.is_valid()) { + if (stream->get_path().is_resource_file()) { + stream_name = stream->get_path().get_file(); + } else if (stream->get_name() != "") { + stream_name = stream->get_name(); + } else { + stream_name = stream->get_class(); + } + } + + text += "Stream: " + stream_name + "\n"; + float so = animation->audio_track_get_key_start_offset(track, key_idx); + text += "Start (s): " + rtos(so) + "\n"; + float eo = animation->audio_track_get_key_end_offset(track, key_idx); + text += "End (s): " + rtos(eo) + "\n"; + } break; + case Animation::TYPE_ANIMATION: { + + String name = animation->animation_track_get_key_animation(track, key_idx); + text += "Animation Clip: " + name + "\n"; + } break; + } + return text; + } + } + + return Control::get_tooltip(p_pos); +} + +void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { + + if (p_event->is_pressed()) { + if (ED_GET_SHORTCUT("animation_editor/duplicate_selection")->is_shortcut(p_event)) { + emit_signal("duplicate_request"); + accept_event(); + } + + if (ED_GET_SHORTCUT("animation_editor/duplicate_selection_transposed")->is_shortcut(p_event)) { + emit_signal("duplicate_transpose_request"); + accept_event(); + } + + if (ED_GET_SHORTCUT("animation_editor/delete_selection")->is_shortcut(p_event)) { + emit_signal("delete_request"); + accept_event(); + } + } + + Ref<InputEventMouseButton> mb = p_event; + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + Point2 pos = mb->get_position(); + + if (check_rect.has_point(pos)) { + *block_animation_update_ptr = true; + undo_redo->create_action("Toggle track enabled"); + undo_redo->add_do_method(animation.ptr(), "track_set_enabled", track, !animation->track_is_enabled(track)); + undo_redo->add_undo_method(animation.ptr(), "track_set_enabled", track, animation->track_is_enabled(track)); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + update(); + accept_event(); + } + if (path_rect.has_point(pos)) { + + clicking_on_name = true; + accept_event(); + } + + if (update_mode_rect.has_point(pos)) { + if (!menu) { + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("id_pressed", this, "_menu_selected"); + } + menu->clear(); + menu->add_icon_item(get_icon("TrackContinuous", "EditorIcons"), TTR("Continuous"), MENU_CALL_MODE_CONTINUOUS); + menu->add_icon_item(get_icon("TrackDiscrete", "EditorIcons"), TTR("Discrete"), MENU_CALL_MODE_DISCRETE); + menu->add_icon_item(get_icon("TrackTrigger", "EditorIcons"), TTR("Trigger"), MENU_CALL_MODE_TRIGGER); + menu->add_icon_item(get_icon("TrackCapture", "EditorIcons"), TTR("Capture"), MENU_CALL_MODE_CAPTURE); + menu->set_as_minsize(); + + Vector2 popup_pos = get_global_position() + update_mode_rect.position + Vector2(0, update_mode_rect.size.height); + menu->set_global_position(popup_pos); + menu->popup(); + accept_event(); + } + + if (interp_mode_rect.has_point(pos)) { + if (!menu) { + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("id_pressed", this, "_menu_selected"); + } + menu->clear(); + menu->add_icon_item(get_icon("InterpRaw", "EditorIcons"), TTR("Nearest"), MENU_INTERPOLATION_NEAREST); + menu->add_icon_item(get_icon("InterpLinear", "EditorIcons"), TTR("Linear"), MENU_INTERPOLATION_LINEAR); + menu->add_icon_item(get_icon("InterpCubic", "EditorIcons"), TTR("Cubic"), MENU_INTERPOLATION_CUBIC); + menu->set_as_minsize(); + + Vector2 popup_pos = get_global_position() + interp_mode_rect.position + Vector2(0, interp_mode_rect.size.height); + menu->set_global_position(popup_pos); + menu->popup(); + accept_event(); + } + + if (loop_mode_rect.has_point(pos)) { + if (!menu) { + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("id_pressed", this, "_menu_selected"); + } + menu->clear(); + menu->add_icon_item(get_icon("InterpWrapClamp", "EditorIcons"), TTR("Clamp Loop Interp"), MENU_LOOP_CLAMP); + menu->add_icon_item(get_icon("InterpWrapLoop", "EditorIcons"), TTR("Wrap Loop Interp"), MENU_LOOP_WRAP); + menu->set_as_minsize(); + + Vector2 popup_pos = get_global_position() + loop_mode_rect.position + Vector2(0, loop_mode_rect.size.height); + menu->set_global_position(popup_pos); + menu->popup(); + accept_event(); + } + + if (remove_rect.has_point(pos)) { + emit_signal("remove_request", track); + accept_event(); + } + + if (bezier_edit_rect.has_point(pos)) { + emit_signal("bezier_edit"); + accept_event(); + } + + //check keyframes + + float scale = timeline->get_zoom_scale(); + int limit = timeline->get_name_limit(); + int limit_end = get_size().width - timeline->get_buttons_width(); + + if (pos.x >= limit && pos.x <= limit_end) { + + int key_idx = -1; + float key_distance = 1e20; + + for (int i = animation->track_get_key_count(track) - 1; i >= 0; i--) { //select should happen in the opposite order of drawing for more accurate overlap select + + Rect2 rect = get_key_rect(i, scale); + float offset = animation->track_get_key_time(track, i) - timeline->get_value(); + offset = offset * scale + limit; + rect.position.x += offset; + + if (rect.has_point(pos)) { + + if (is_key_selectable_by_distance()) { + float distance = ABS(offset - pos.x); + if (key_idx == -1 || distance < key_distance) { + key_idx = i; + key_distance = distance; + } + } else { + //first one does it + key_idx = i; + break; + } + } + } + + if (key_idx != -1) { + if (mb->get_command() || mb->get_shift()) { + if (editor->is_key_selected(track, key_idx)) { + emit_signal("deselect_key", key_idx); + + } else { + emit_signal("select_key", key_idx, false); + moving_selection_attempt = true; + select_single_attempt = -1; + moving_selection_from_ofs = (mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale(); + } + } else { + if (!editor->is_key_selected(track, key_idx)) { + emit_signal("select_key", key_idx, true); + select_single_attempt = -1; + } else { + select_single_attempt = key_idx; + } + + moving_selection_attempt = true; + moving_selection_from_ofs = (mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale(); + } + accept_event(); + } else { + emit_signal("clear_selection"); + } + } + + /*using focus instead + * if (!selected && pos.x >= timeline->get_name_limit() && pos.x < (get_size().width - timeline->get_buttons_width())) { + set_selected(true); + emit_signal("selected"); + } + */ + } + + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) { + Point2 pos = mb->get_position(); + if (pos.x >= timeline->get_name_limit() && pos.x <= get_size().width - timeline->get_buttons_width()) { + //can do something with menu too! show insert key + float offset = (pos.x - timeline->get_name_limit()) / timeline->get_zoom_scale(); + if (!menu) { + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("id_pressed", this, "_menu_selected"); + } + + menu->clear(); + menu->add_icon_item(get_icon("Key", "EditorIcons"), TTR("Insert Key"), MENU_KEY_INSERT); + if (editor->is_selection_active()) { + menu->add_separator(); + menu->add_icon_item(get_icon("Duplicate", "EditorIcons"), TTR("Duplicate Key(s)"), MENU_KEY_DUPLICATE); + menu->add_separator(); + menu->add_icon_item(get_icon("Remove", "EditorIcons"), TTR("Delete Key(s)"), MENU_KEY_DELETE); + } + menu->set_as_minsize(); + + Vector2 popup_pos = get_global_transform().xform(get_local_mouse_position()); + menu->set_global_position(popup_pos); + menu->popup(); + + insert_at_pos = offset + timeline->get_value(); + accept_event(); + } + } + + if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && clicking_on_name) { + + if (!path) { + path = memnew(LineEdit); + add_child(path); + path->set_as_toplevel(true); + path->connect("text_entered", this, "_path_entered"); + } + + path->set_text(animation->track_get_path(track)); + Vector2 theme_ofs = path->get_stylebox("normal", "LineEdit")->get_offset(); + path->set_position(get_global_position() + path_rect.position - theme_ofs); + path->set_size(path_rect.size); + path->show_modal(); + path->grab_focus(); + path->set_cursor_position(path->get_text().length()); + clicking_on_name = false; + } + + if (mb.is_valid() && moving_selection_attempt) { + + if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + moving_selection_attempt = false; + if (moving_selection) { + emit_signal("move_selection_commit"); + } else if (select_single_attempt != -1) { + emit_signal("select_key", select_single_attempt, true); + } + moving_selection = false; + select_single_attempt = -1; + } + + if (moving_selection && mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) { + + moving_selection_attempt = false; + moving_selection = false; + emit_signal("move_selection_cancel"); + } + } + + Ref<InputEventMouseMotion> mm = p_event; + if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_LEFT && moving_selection_attempt) { + + if (!moving_selection) { + moving_selection = true; + emit_signal("move_selection_begin"); + } + + float new_ofs = (mm->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale(); + emit_signal("move_selection", new_ofs - moving_selection_from_ofs); + } +} + +Variant AnimationTrackEdit::get_drag_data(const Point2 &p_point) { + + if (!clicking_on_name) + return Variant(); + + Dictionary drag_data; + drag_data["type"] = "animation_track"; + drag_data["index"] = track; + + ToolButton *tb = memnew(ToolButton); + tb->set_text(path_cache); + tb->set_icon(icon_cache); + set_drag_preview(tb); + + clicking_on_name = false; + + return drag_data; +} + +bool AnimationTrackEdit::can_drop_data(const Point2 &p_point, const Variant &p_data) const { + + Dictionary d = p_data; + if (!d.has("type")) { + return false; + } + + String type = d["type"]; + if (type != "animation_track") + return false; + + if (p_point.y < get_size().height / 2) { + dropping_at = -1; + } else { + dropping_at = 1; + } + + const_cast<AnimationTrackEdit *>(this)->update(); + const_cast<AnimationTrackEdit *>(this)->emit_signal("drop_attempted", track); + + return true; +} +void AnimationTrackEdit::drop_data(const Point2 &p_point, const Variant &p_data) { + + Dictionary d = p_data; + if (!d.has("type")) { + return; + } + + String type = d["type"]; + if (type != "animation_track") + return; + + int from_track = d["index"]; + + if (dropping_at < 0) { + emit_signal("dropped", from_track, track); + } else { + emit_signal("dropped", from_track, track + 1); + } +} + +void AnimationTrackEdit::_menu_selected(int p_index) { + + switch (p_index) { + case MENU_CALL_MODE_CONTINUOUS: + case MENU_CALL_MODE_DISCRETE: + case MENU_CALL_MODE_TRIGGER: + case MENU_CALL_MODE_CAPTURE: { + + Animation::UpdateMode update_mode = Animation::UpdateMode(p_index); + *block_animation_update_ptr = true; + undo_redo->create_action("Change animation update mode"); + undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", track, update_mode); + undo_redo->add_undo_method(animation.ptr(), "value_track_set_update_mode", track, animation->value_track_get_update_mode(track)); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + update(); + + } break; + case MENU_INTERPOLATION_NEAREST: + case MENU_INTERPOLATION_LINEAR: + case MENU_INTERPOLATION_CUBIC: { + + Animation::InterpolationType interp_mode = Animation::InterpolationType(p_index - MENU_INTERPOLATION_NEAREST); + *block_animation_update_ptr = true; + undo_redo->create_action("Change animation interpolation mode"); + undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_type", track, interp_mode); + undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_type", track, animation->track_get_interpolation_type(track)); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + update(); + } break; + case MENU_LOOP_WRAP: + case MENU_LOOP_CLAMP: { + + bool loop_wrap = p_index == MENU_LOOP_WRAP; + *block_animation_update_ptr = true; + undo_redo->create_action("Change animation loop mode"); + undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_loop_wrap", track, loop_wrap); + undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_loop_wrap", track, animation->track_get_interpolation_loop_wrap(track)); + undo_redo->commit_action(); + *block_animation_update_ptr = false; + update(); + + } break; + case MENU_KEY_INSERT: { + emit_signal("insert_key", insert_at_pos); + } break; + case MENU_KEY_DUPLICATE: { + emit_signal("duplicate_request"); + + } break; + case MENU_KEY_DELETE: { + emit_signal("delete_request"); + + } break; + } +} + +void AnimationTrackEdit::set_block_animation_update_ptr(bool *p_block_ptr) { + block_animation_update_ptr = p_block_ptr; +} + +void AnimationTrackEdit::cancel_drop() { + if (dropping_at != 0) { + dropping_at = 0; + update(); + } +} +void AnimationTrackEdit::set_in_group(bool p_enable) { + in_group = p_enable; + update(); +} + +void AnimationTrackEdit::append_to_selection(const Rect2 &p_box) { + + Rect2 select_rect(timeline->get_name_limit(), 0, get_size().width - timeline->get_name_limit() - timeline->get_buttons_width(), get_size().height); + select_rect = select_rect.clip(p_box); + + for (int i = animation->track_get_key_count(track) - 1; i >= 0; i--) { //select should happen in the opposite order of drawing for more accurate overlap select + + Rect2 rect = const_cast<AnimationTrackEdit *>(this)->get_key_rect(i, timeline->get_zoom_scale()); + float offset = animation->track_get_key_time(track, i) - timeline->get_value(); + offset = offset * timeline->get_zoom_scale() + timeline->get_name_limit(); + rect.position.x += offset; + + if (select_rect.intersects(rect)) { + emit_signal("select_key", i, false); + } + } +} + +void AnimationTrackEdit::_bind_methods() { + + ClassDB::bind_method("_zoom_changed", &AnimationTrackEdit::_zoom_changed); + ClassDB::bind_method("_menu_selected", &AnimationTrackEdit::_menu_selected); + ClassDB::bind_method("_gui_input", &AnimationTrackEdit::_gui_input); + ClassDB::bind_method("_path_entered", &AnimationTrackEdit::_path_entered); + ClassDB::bind_method("_play_position_draw", &AnimationTrackEdit::_play_position_draw); + + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("remove_request", PropertyInfo(Variant::INT, "track"))); + ADD_SIGNAL(MethodInfo("dropped", PropertyInfo(Variant::INT, "from_track"), PropertyInfo(Variant::INT, "to_track"))); + ADD_SIGNAL(MethodInfo("insert_key", PropertyInfo(Variant::REAL, "ofs"))); + ADD_SIGNAL(MethodInfo("select_key", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "single"))); + ADD_SIGNAL(MethodInfo("deselect_key", PropertyInfo(Variant::INT, "index"))); + ADD_SIGNAL(MethodInfo("clear_selection")); + ADD_SIGNAL(MethodInfo("bezier_edit")); + + ADD_SIGNAL(MethodInfo("move_selection_begin")); + ADD_SIGNAL(MethodInfo("move_selection", PropertyInfo(Variant::REAL, "ofs"))); + ADD_SIGNAL(MethodInfo("move_selection_commit")); + ADD_SIGNAL(MethodInfo("move_selection_cancel")); + + ADD_SIGNAL(MethodInfo("duplicate_request")); + ADD_SIGNAL(MethodInfo("duplicate_transpose_request")); + ADD_SIGNAL(MethodInfo("delete_request")); +} + +AnimationTrackEdit::AnimationTrackEdit() { + undo_redo = NULL; + timeline = NULL; + root = NULL; + path = NULL; + menu = NULL; + block_animation_update_ptr = NULL; + clicking_on_name = false; + dropping_at = 0; + + in_group = false; + + moving_selection_attempt = false; + moving_selection = false; + select_single_attempt = -1; + + play_position_pos = 0; + play_position = memnew(Control); + play_position->set_mouse_filter(MOUSE_FILTER_PASS); + add_child(play_position); + play_position->set_anchors_and_margins_preset(PRESET_WIDE); + play_position->connect("draw", this, "_play_position_draw"); + set_focus_mode(FOCUS_CLICK); + set_mouse_filter(MOUSE_FILTER_PASS); //scroll has to work too for selection +} + +////////////////////////////////////// + +AnimationTrackEdit *AnimationTrackEditPlugin::create_value_track_edit(Object *p_object, Variant::Type p_type, const String &p_property, PropertyHint p_hint, const String &p_hint_string, int p_usage) { + if (get_script_instance()) { + Variant args[6] = { + p_object, + p_type, + p_property, + p_hint, + p_hint_string, + p_usage + }; + + Variant *argptrs[6] = { + &args[0], + &args[1], + &args[2], + &args[3], + &args[4], + &args[5] + }; + + Variant::CallError ce; + return Object::cast_to<AnimationTrackEdit>(get_script_instance()->call("create_value_track_edit", (const Variant **)&argptrs, 6, ce).operator Object *()); + } + return NULL; +} + +AnimationTrackEdit *AnimationTrackEditPlugin::create_audio_track_edit() { + + if (get_script_instance()) { + return Object::cast_to<AnimationTrackEdit>(get_script_instance()->call("create_audio_track_edit").operator Object *()); + } + return NULL; +} + +AnimationTrackEdit *AnimationTrackEditPlugin::create_animation_track_edit(Object *p_object) { + if (get_script_instance()) { + return Object::cast_to<AnimationTrackEdit>(get_script_instance()->call("create_animation_track_edit", p_object).operator Object *()); + } + return NULL; +} + +/////////////////////////////////////// + +void AnimationTrackEditGroup::_notification(int p_what) { + + if (p_what == NOTIFICATION_DRAW) { + Ref<Font> font = get_font("font", "Label"); + int separation = get_constant("hseparation", "ItemList"); + Color color = get_color("font_color", "Label"); + + if (root && root->has_node(node)) { + Node *n = root->get_node(node); + if (n && EditorNode::get_singleton()->get_editor_selection()->is_selected(n)) { + color = get_color("accent_color", "Editor"); + } + } + + Color bgcol = get_color("dark_color_2", "Editor"); + bgcol.a *= 0.6; + draw_rect(Rect2(Point2(), get_size()), bgcol); + Color linecolor = color; + linecolor.a = 0.2; + + draw_line(Point2(), Point2(get_size().width, 0), linecolor); + draw_line(Point2(timeline->get_name_limit(), 0), Point2(timeline->get_name_limit(), get_size().height), linecolor); + draw_line(Point2(get_size().width - timeline->get_buttons_width(), 0), Point2(get_size().width - timeline->get_buttons_width(), get_size().height), linecolor); + + int ofs = 0; + draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2)); + ofs += separation + icon->get_width(); + draw_string(font, Point2(ofs, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), node_name, color, timeline->get_name_limit() - ofs); + + int px = (-timeline->get_value() + timeline->get_play_position()) * timeline->get_zoom_scale() + timeline->get_name_limit(); + + if (px >= timeline->get_name_limit() && px < (get_size().width - timeline->get_buttons_width())) { + Color accent = get_color("accent_color", "Editor"); + draw_line(Point2(px, 0), Point2(px, get_size().height), accent); + } + } +} + +void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture> &p_type, const String &p_name, const NodePath &p_node) { + icon = p_type; + node_name = p_name; + node = p_node; + update(); + minimum_size_changed(); +} + +Size2 AnimationTrackEditGroup::get_minimum_size() const { + + Ref<Font> font = get_font("font", "Label"); + int separation = get_constant("vseparation", "ItemList"); + + return Vector2(0, MAX(font->get_height(), icon->get_height()) + separation); +} + +void AnimationTrackEditGroup::set_timeline(AnimationTimelineEdit *p_timeline) { + timeline = p_timeline; + timeline->connect("zoom_changed", this, "_zoom_changed"); + timeline->connect("name_limit_changed", this, "_zoom_changed"); +} + +void AnimationTrackEditGroup::set_root(Node *p_root) { + root = p_root; + update(); +} + +void AnimationTrackEditGroup::_zoom_changed() { + update(); +} + +void AnimationTrackEditGroup::_bind_methods() { + ClassDB::bind_method("_zoom_changed", &AnimationTrackEditGroup::_zoom_changed); +} + +AnimationTrackEditGroup::AnimationTrackEditGroup() { + set_mouse_filter(MOUSE_FILTER_PASS); +} + +////////////////////////////////////// + +void AnimationTrackEditor::add_track_edit_plugin(const Ref<AnimationTrackEditPlugin> &p_plugin) { + + if (track_edit_plugins.find(p_plugin) != -1) + return; + track_edit_plugins.push_back(p_plugin); +} + +void AnimationTrackEditor::remove_track_edit_plugin(const Ref<AnimationTrackEditPlugin> &p_plugin) { + + track_edit_plugins.erase(p_plugin); +} + +void AnimationTrackEditor::set_animation(const Ref<Animation> &p_anim) { + + if (animation != p_anim && _get_track_selected() >= 0) { + track_edits[_get_track_selected()]->release_focus(); + } + if (animation.is_valid()) { + animation->disconnect("changed", this, "_animation_changed"); + _clear_selection(); + } + animation = p_anim; + timeline->set_animation(p_anim); + + _cancel_bezier_edit(); + _update_tracks(); + + if (animation.is_valid()) { + animation->connect("changed", this, "_animation_changed"); + + step->set_block_signals(true); + step->set_value(animation->get_step()); + step->set_block_signals(false); + step->set_read_only(false); + snap->set_disabled(false); + } else { + step->set_block_signals(true); + step->set_value(0); + step->set_block_signals(false); + step->set_read_only(true); + snap->set_disabled(true); + } +} + +Ref<Animation> AnimationTrackEditor::get_current_animation() const { + + return animation; +} +void AnimationTrackEditor::_root_removed(Node *p_root) { + root = NULL; +} + +void AnimationTrackEditor::set_root(Node *p_root) { + if (root) { + root->disconnect("tree_exiting", this, "_root_removed"); + } + + root = p_root; + + if (root) { + root->connect("tree_exiting", this, "_root_removed", make_binds(), CONNECT_ONESHOT); + } + + _update_tracks(); +} + +Node *AnimationTrackEditor::get_root() const { + + return root; +} + +void AnimationTrackEditor::update_keying() { + bool keying_enabled = is_visible_in_tree() && animation.is_valid(); + + if (keying_enabled == keying) + return; + + keying = keying_enabled; + //_update_menu(); + emit_signal("keying_changed"); +} + +bool AnimationTrackEditor::has_keying() const { + return keying; +} + +void AnimationTrackEditor::cleanup() { + set_animation(Ref<Animation>()); +} + +void AnimationTrackEditor::_name_limit_changed() { + + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } +} + +void AnimationTrackEditor::_timeline_changed(float p_new_pos, bool p_drag) { + + emit_signal("timeline_changed", p_new_pos, p_drag); +} + +void AnimationTrackEditor::_track_remove_request(int p_track) { + + int idx = p_track; + if (idx >= 0 && idx < animation->get_track_count()) { + _clear_selection(); + undo_redo->create_action(TTR("Remove Anim Track")); + undo_redo->add_do_method(animation.ptr(), "remove_track", idx); + undo_redo->add_undo_method(animation.ptr(), "add_track", animation->track_get_type(idx), idx); + undo_redo->add_undo_method(animation.ptr(), "track_set_path", idx, animation->track_get_path(idx)); + //todo interpolation + for (int i = 0; i < animation->track_get_key_count(idx); i++) { + + Variant v = animation->track_get_key_value(idx, i); + float time = animation->track_get_key_time(idx, i); + float trans = animation->track_get_key_transition(idx, i); + + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", idx, time, v); + undo_redo->add_undo_method(animation.ptr(), "track_set_key_transition", idx, i, trans); + } + + undo_redo->add_undo_method(animation.ptr(), "track_set_interpolation_type", idx, animation->track_get_interpolation_type(idx)); + if (animation->track_get_type(idx) == Animation::TYPE_VALUE) { + undo_redo->add_undo_method(animation.ptr(), "value_track_set_update_mode", idx, animation->value_track_get_update_mode(idx)); + } + + undo_redo->commit_action(); + } +} + +void AnimationTrackEditor::set_anim_pos(float p_pos) { + + timeline->set_play_position(p_pos); + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->set_play_position(p_pos); + } + for (int i = 0; i < groups.size(); i++) { + groups[i]->update(); + } + bezier_edit->set_play_position(p_pos); +} + +void AnimationTrackEditor::_query_insert(const InsertData &p_id) { + + if (insert_frame != Engine::get_singleton()->get_frames_drawn()) { + //clear insert list for the frame if frame changed + if (insert_confirm->is_visible_in_tree()) + return; //do nothing + insert_data.clear(); + insert_query = false; + } + insert_frame = Engine::get_singleton()->get_frames_drawn(); + + for (List<InsertData>::Element *E = insert_data.front(); E; E = E->next()) { + //prevent insertion of multiple tracks + if (E->get().path == p_id.path) + return; //already inserted a track for this on this frame + } + + insert_data.push_back(p_id); + + if (p_id.track_idx == -1) { + if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { + //potential new key, does not exist + if (insert_data.size() == 1) + insert_confirm_text->set_text(vformat(TTR("Create NEW track for %s and insert key?"), p_id.query)); + else + insert_confirm_text->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"), insert_data.size())); + + bool all_bezier = true; + for (int i = 0; i < insert_data.size(); i++) { + if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { + all_bezier = false; + } + + if (insert_data[i].type != Animation::TYPE_VALUE) { + continue; + } + switch (insert_data[i].value.get_type()) { + case Variant::INT: + case Variant::REAL: + case Variant::VECTOR2: + case Variant::VECTOR3: + case Variant::QUAT: + case Variant::PLANE: + case Variant::COLOR: { + //good + } break; + default: { + all_bezier = false; + } + } + } + + insert_confirm_bezier->set_visible(all_bezier); + insert_confirm->get_ok()->set_text(TTR("Create")); + insert_confirm->popup_centered_minsize(); + insert_query = true; + } else { + call_deferred("_insert_delay"); + insert_queue = true; + } + + } else { + if (!insert_query && !insert_queue) { + call_deferred("_insert_delay"); + insert_queue = true; + } + } +} + +void AnimationTrackEditor::_insert_delay() { + + if (insert_query) { + //discard since it's entered into query mode + insert_queue = false; + return; + } + + undo_redo->create_action(TTR("Anim Insert")); + + int last_track = animation->get_track_count(); + bool advance = false; + while (insert_data.size()) { + + if (insert_data.front()->get().advance) + advance = true; + last_track = _confirm_insert(insert_data.front()->get(), last_track); + insert_data.pop_front(); + } + + undo_redo->commit_action(); + + if (advance) { + float step = animation->get_step(); + if (step == 0) + step = 1; + + float pos = timeline->get_play_position(); + + pos = Math::stepify(pos + step, step); + if (pos > animation->get_length()) + pos = animation->get_length(); + set_anim_pos(pos); + emit_signal("timeline_changed", pos, true); + } + insert_queue = false; +} + +void AnimationTrackEditor::insert_transform_key(Spatial *p_node, const String &p_sub, const Transform &p_xform) { + + if (!keying) + return; + if (!animation.is_valid()) + return; + + ERR_FAIL_COND(!root); + //let's build a node path + String path = root->get_path_to(p_node); + if (p_sub != "") + path += ":" + p_sub; + + NodePath np = path; + + int track_idx = -1; + + for (int i = 0; i < animation->get_track_count(); i++) { + + if (animation->track_get_type(i) != Animation::TYPE_TRANSFORM) + continue; + if (animation->track_get_path(i) != np) + continue; + + track_idx = i; + break; + } + + InsertData id; + Dictionary val; + + id.path = np; + id.track_idx = track_idx; + id.value = p_xform; + id.type = Animation::TYPE_TRANSFORM; + id.query = "node '" + p_node->get_name() + "'"; + id.advance = false; + + //dialog insert + + _query_insert(id); +} + +void AnimationTrackEditor::_insert_animation_key(NodePath p_path, const Variant &p_value) { + + String path = p_path; + + //animation property is a special case, always creates an animation track + for (int i = 0; i < animation->get_track_count(); i++) { + + String np = animation->track_get_path(i); + + if (path == np && animation->track_get_type(i) == Animation::TYPE_ANIMATION) { + //exists + InsertData id; + id.path = path; + id.track_idx = i; + id.value = p_value; + id.type = Animation::TYPE_ANIMATION; + id.query = "animation"; + id.advance = false; + //dialog insert + _query_insert(id); + return; + } + } + + InsertData id; + id.path = path; + id.track_idx = -1; + id.value = p_value; + id.type = Animation::TYPE_ANIMATION; + id.query = "animation"; + id.advance = false; + //dialog insert + _query_insert(id); +} + +void AnimationTrackEditor::insert_node_value_key(Node *p_node, const String &p_property, const Variant &p_value, bool p_only_if_exists) { + + ERR_FAIL_COND(!root); + //let's build a node path + + Node *node = p_node; + + String path = root->get_path_to(node); + + if (Object::cast_to<AnimationPlayer>(node) && p_property == "current_animation") { + if (node == AnimationPlayerEditor::singleton->get_player()) { + EditorNode::get_singleton()->show_warning(TTR("AnimationPlayer can't animate itself, only other players.")); + return; + } + _insert_animation_key(path, p_value); + return; + } + + EditorHistory *history = EditorNode::get_singleton()->get_editor_history(); + for (int i = 1; i < history->get_path_size(); i++) { + + String prop = history->get_path_property(i); + ERR_FAIL_COND(prop == ""); + path += ":" + prop; + } + + path += ":" + p_property; + + NodePath np = path; + + //locate track + + bool inserted = false; + + for (int i = 0; i < animation->get_track_count(); i++) { + + if (animation->track_get_type(i) == Animation::TYPE_VALUE) { + if (animation->track_get_path(i) != np) + continue; + + InsertData id; + id.path = np; + id.track_idx = i; + id.value = p_value; + id.type = Animation::TYPE_VALUE; + id.query = "property '" + p_property + "'"; + id.advance = false; + //dialog insert + _query_insert(id); + inserted = true; + } else if (animation->track_get_type(i) == Animation::TYPE_BEZIER) { + + Variant value; + if (animation->track_get_path(i) == np) { + value = p_value; //all good + } else { + String path = animation->track_get_path(i); + if (NodePath(path.get_basename()) == np) { + String subindex = path.get_extension(); + value = p_value.get(subindex); + } else { + continue; + } + } + + InsertData id; + id.path = animation->track_get_path(i); + id.track_idx = i; + id.value = value; + id.type = Animation::TYPE_BEZIER; + id.query = "property '" + p_property + "'"; + id.advance = false; + //dialog insert + _query_insert(id); + inserted = true; + } + } + + if (inserted || p_only_if_exists) + return; + InsertData id; + id.path = np; + id.track_idx = -1; + id.value = p_value; + id.type = Animation::TYPE_VALUE; + id.query = "property '" + p_property + "'"; + id.advance = false; + //dialog insert + _query_insert(id); +} + +void AnimationTrackEditor::insert_value_key(const String &p_property, const Variant &p_value, bool p_advance) { + + EditorHistory *history = EditorNode::get_singleton()->get_editor_history(); + + ERR_FAIL_COND(!root); + //let's build a node path + ERR_FAIL_COND(history->get_path_size() == 0); + Object *obj = ObjectDB::get_instance(history->get_path_object(0)); + ERR_FAIL_COND(!Object::cast_to<Node>(obj)); + + Node *node = Object::cast_to<Node>(obj); + + String path = root->get_path_to(node); + + if (Object::cast_to<AnimationPlayer>(node) && p_property == "current_animation") { + if (node == AnimationPlayerEditor::singleton->get_player()) { + EditorNode::get_singleton()->show_warning(TTR("AnimationPlayer can't animate itself, only other players.")); + return; + } + _insert_animation_key(path, p_value); + return; + } + + for (int i = 1; i < history->get_path_size(); i++) { + + String prop = history->get_path_property(i); + ERR_FAIL_COND(prop == ""); + path += ":" + prop; + } + + path += ":" + p_property; + + NodePath np = path; + + //locate track + + bool inserted = false; + + for (int i = 0; i < animation->get_track_count(); i++) { + + if (animation->track_get_type(i) == Animation::TYPE_VALUE) { + if (animation->track_get_path(i) != np) + continue; + + InsertData id; + id.path = np; + id.track_idx = i; + id.value = p_value; + id.type = Animation::TYPE_VALUE; + id.query = "property '" + p_property + "'"; + id.advance = p_advance; + //dialog insert + _query_insert(id); + inserted = true; + } else if (animation->track_get_type(i) == Animation::TYPE_BEZIER) { + + Variant value; + if (animation->track_get_path(i) == np) { + value = p_value; //all good + } else { + String path = animation->track_get_path(i); + if (NodePath(path.get_basename()) == np) { + String subindex = path.get_extension(); + value = p_value.get(subindex); + } else { + continue; + } + } + + InsertData id; + id.path = animation->track_get_path(i); + id.track_idx = i; + id.value = value; + id.type = Animation::TYPE_BEZIER; + id.query = "property '" + p_property + "'"; + id.advance = p_advance; + //dialog insert + _query_insert(id); + inserted = true; + } + } + + if (!inserted) { + InsertData id; + id.path = np; + id.track_idx = -1; + id.value = p_value; + id.type = Animation::TYPE_VALUE; + id.query = "property '" + p_property + "'"; + id.advance = p_advance; + //dialog insert + _query_insert(id); + } +} + +void AnimationTrackEditor::_confirm_insert_list() { + + undo_redo->create_action(TTR("Anim Create & Insert")); + + int last_track = animation->get_track_count(); + while (insert_data.size()) { + + last_track = _confirm_insert(insert_data.front()->get(), last_track, insert_confirm_bezier->is_pressed()); + insert_data.pop_front(); + } + + undo_redo->commit_action(); +} + +PropertyInfo AnimationTrackEditor::_find_hint_for_track(int p_idx, NodePath &r_base_path, Variant *r_current_val) { + + r_base_path = NodePath(); + ERR_FAIL_COND_V(!animation.is_valid(), PropertyInfo()); + ERR_FAIL_INDEX_V(p_idx, animation->get_track_count(), PropertyInfo()); + + if (!root) { + return PropertyInfo(); + } + + NodePath path = animation->track_get_path(p_idx); + + if (!root->has_node_and_resource(path)) { + return PropertyInfo(); + } + + RES res; + Vector<StringName> leftover_path; + Node *node = root->get_node_and_resource(path, res, leftover_path, true); + + if (node) { + r_base_path = node->get_path(); + } + + if (leftover_path.empty()) { + if (r_current_val) { + if (res.is_valid()) { + *r_current_val = res; + } else if (node) { + *r_current_val = node; + } + } + return PropertyInfo(); + } + + Variant property_info_base; + if (res.is_valid()) { + property_info_base = res; + if (r_current_val) { + *r_current_val = res->get(leftover_path[leftover_path.size() - 1]); + } + } else if (node) { + property_info_base = node; + if (r_current_val) { + *r_current_val = node->get(leftover_path[leftover_path.size() - 1]); + } + } + + for (int i = 0; i < leftover_path.size() - 1; i++) { + property_info_base = property_info_base.get_named(leftover_path[i]); + } + + List<PropertyInfo> pinfo; + property_info_base.get_property_list(&pinfo); + + for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { + + if (E->get().name == leftover_path[leftover_path.size() - 1]) { + return E->get(); + } + } + + return PropertyInfo(); +} + +static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool *r_valid = NULL) { + Vector<String> subindices; + if (r_valid) { + *r_valid = true; + } + switch (p_type) { + case Variant::INT: { + subindices.push_back(""); + } break; + case Variant::REAL: { + subindices.push_back(""); + } break; + case Variant::VECTOR2: { + subindices.push_back(".x"); + subindices.push_back(".y"); + } break; + case Variant::VECTOR3: { + subindices.push_back(".x"); + subindices.push_back(".y"); + subindices.push_back(".z"); + } break; + case Variant::QUAT: { + subindices.push_back(".x"); + subindices.push_back(".y"); + subindices.push_back(".z"); + subindices.push_back(".w"); + } break; + case Variant::COLOR: { + subindices.push_back(".r"); + subindices.push_back(".g"); + subindices.push_back(".b"); + subindices.push_back(".a"); + } break; + case Variant::PLANE: { + subindices.push_back(".x"); + subindices.push_back(".y"); + subindices.push_back(".z"); + subindices.push_back(".d"); + } break; + default: { + if (r_valid) { + *r_valid = false; + } + } + } + + return subindices; +} + +int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers) { + + if (p_last_track == -1) + p_last_track = animation->get_track_count(); + + bool created = false; + if (p_id.track_idx < 0) { + + if (p_create_beziers && (p_id.value.get_type() == Variant::VECTOR2 || + p_id.value.get_type() == Variant::VECTOR3 || + p_id.value.get_type() == Variant::QUAT || + p_id.value.get_type() == Variant::COLOR || + p_id.value.get_type() == Variant::PLANE)) { + + Vector<String> subindices = _get_bezier_subindices_for_type(p_id.value.get_type()); + + for (int i = 0; i < subindices.size(); i++) { + InsertData id = p_id; + id.type = Animation::TYPE_BEZIER; + id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); + id.path = String(p_id.path) + subindices[i]; + _confirm_insert(id, p_last_track + i); + } + + return p_last_track + subindices.size() - 1; + } + created = true; + undo_redo->create_action(TTR("Anim Insert Track & Key")); + Animation::UpdateMode update_mode = Animation::UPDATE_DISCRETE; + + if (p_id.type == Animation::TYPE_VALUE || p_id.type == Animation::TYPE_BEZIER) { + //wants a new tack + + { + //hack + NodePath np; + animation->add_track(p_id.type); + animation->track_set_path(animation->get_track_count() - 1, p_id.path); + PropertyInfo h = _find_hint_for_track(animation->get_track_count() - 1, np); + animation->remove_track(animation->get_track_count() - 1); //hack + + if (h.type == Variant::REAL || + h.type == Variant::VECTOR2 || + h.type == Variant::RECT2 || + h.type == Variant::VECTOR3 || + h.type == Variant::AABB || + h.type == Variant::QUAT || + h.type == Variant::COLOR || + h.type == Variant::PLANE || + h.type == Variant::TRANSFORM2D || + h.type == Variant::TRANSFORM) { + + update_mode = Animation::UPDATE_CONTINUOUS; + } + + if (h.usage & PROPERTY_USAGE_ANIMATE_AS_TRIGGER) { + update_mode = Animation::UPDATE_TRIGGER; + } + } + } + + p_id.track_idx = p_last_track; + + undo_redo->add_do_method(animation.ptr(), "add_track", p_id.type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", p_id.track_idx, p_id.path); + if (p_id.type == Animation::TYPE_VALUE) + undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", p_id.track_idx, update_mode); + + } else { + undo_redo->create_action(TTR("Anim Insert Key")); + } + + float time = timeline->get_play_position(); + Variant value; + + switch (p_id.type) { + + case Animation::TYPE_VALUE: { + + value = p_id.value; + + } break; + case Animation::TYPE_TRANSFORM: { + + Transform tr = p_id.value; + Dictionary d; + d["location"] = tr.origin; + d["scale"] = tr.basis.get_scale(); + d["rotation"] = Quat(tr.basis); //.orthonormalized(); + value = d; + } break; + case Animation::TYPE_BEZIER: { + Array array; + array.resize(5); + array[0] = p_id.value; + array[1] = -0.25; + array[2] = 0; + array[3] = 0.25; + array[4] = 0; + value = array; + + } break; + case Animation::TYPE_ANIMATION: { + value = p_id.value; + } break; + default: {} + } + + undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_id.track_idx, time, value); + + if (created) { + + //just remove the track + undo_redo->add_undo_method(animation.ptr(), "remove_track", p_last_track); + p_last_track++; + } else { + + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_id.track_idx, time); + int existing = animation->track_find_key(p_id.track_idx, time, true); + if (existing != -1) { + Variant v = animation->track_get_key_value(p_id.track_idx, existing); + float trans = animation->track_get_key_transition(p_id.track_idx, existing); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", p_id.track_idx, time, v, trans); + } + } + + /* + undo_redo->add_do_method(this, "update_tracks"); + undo_redo->add_undo_method(this, "update"); + undo_redo->add_do_method(track_editor, "update"); + undo_redo->add_undo_method(track_editor, "update"); + undo_redo->add_do_method(track_pos, "update"); + undo_redo->add_undo_method(track_pos, "update"); +*/ + undo_redo->commit_action(); + + return p_last_track; +} + +void AnimationTrackEditor::show_select_node_warning(bool p_show) { +} + +bool AnimationTrackEditor::is_key_selected(int p_track, int p_key) const { + + SelectedKey sk; + sk.key = p_key; + sk.track = p_track; + + return selection.has(sk); +} + +bool AnimationTrackEditor::is_selection_active() const { + return selection.size(); +} + +void AnimationTrackEditor::_update_tracks() { + + int selected = _get_track_selected(); + + while (track_vbox->get_child_count()) { + memdelete(track_vbox->get_child(0)); + } + + track_edits.clear(); + groups.clear(); + + if (animation.is_null()) + return; + + Map<String, VBoxContainer *> group_sort; + + bool use_grouping = !view_group->is_pressed(); + bool use_filter = selected_filter->is_pressed(); + + for (int i = 0; i < animation->get_track_count(); i++) { + AnimationTrackEdit *track_edit = NULL; + + //find hint and info for plugin + + if (use_filter) { + NodePath path = animation->track_get_path(i); + + if (root && root->has_node(path)) { + Node *node = root->get_node(path); + if (!node) { + continue; // no node, no filter + } + if (!EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) { + continue; //skip track due to not selected + } + } + } + + if (animation->track_get_type(i) == Animation::TYPE_VALUE) { + + NodePath path = animation->track_get_path(i); + + if (root && root->has_node_and_resource(path)) { + RES res; + Vector<StringName> leftover_path; + Node *node = root->get_node_and_resource(path, res, leftover_path, true); + + Object *object = node; + if (res.is_valid()) { + object = res.ptr(); + } else { + object = node; + } + + if (object && !leftover_path.empty()) { + //not a property (value track?) + PropertyInfo pinfo; + pinfo.name = leftover_path[leftover_path.size() - 1]; + //now let's see if we can get more info about it + + List<PropertyInfo> plist; + object->get_property_list(&plist); + + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { + + if (E->get().name == leftover_path[leftover_path.size() - 1]) { + pinfo = E->get(); + break; + } + } + + for (int j = 0; j < track_edit_plugins.size(); j++) { + track_edit = track_edit_plugins[j]->create_value_track_edit(object, pinfo.type, pinfo.name, pinfo.hint, pinfo.hint_string, pinfo.usage); + if (track_edit) { + break; + } + } + } + } + } + if (animation->track_get_type(i) == Animation::TYPE_AUDIO) { + + for (int j = 0; j < track_edit_plugins.size(); j++) { + track_edit = track_edit_plugins[j]->create_audio_track_edit(); + if (track_edit) { + break; + } + } + } + + if (animation->track_get_type(i) == Animation::TYPE_ANIMATION) { + NodePath path = animation->track_get_path(i); + + Node *node = NULL; + if (root && root->has_node(path)) { + node = root->get_node(path); + } + + if (node && Object::cast_to<AnimationPlayer>(node)) { + for (int j = 0; j < track_edit_plugins.size(); j++) { + track_edit = track_edit_plugins[j]->create_animation_track_edit(node); + if (track_edit) { + break; + } + } + } + } + + if (track_edit == NULL) { + //no valid plugin_found + track_edit = memnew(AnimationTrackEdit); + } + + track_edits.push_back(track_edit); + + if (use_grouping) { + String base_path = animation->track_get_path(i); + base_path = base_path.get_slice(":", 0); // remove subpath + + if (!group_sort.has(base_path)) { + AnimationTrackEditGroup *g = memnew(AnimationTrackEditGroup); + Ref<Texture> icon = get_icon("Node", "EditorIcons"); + String name = base_path; + String tooltip; + if (root) { + Node *n = root->get_node(base_path); + if (n) { + if (has_icon(n->get_class(), "EditorIcons")) { + icon = get_icon(n->get_class(), "EditorIcons"); + } + name = n->get_name(); + tooltip = root->get_path_to(n); + } + } + + g->set_type_and_name(icon, name, animation->track_get_path(i)); + g->set_root(root); + g->set_tooltip(tooltip); + g->set_timeline(timeline); + groups.push_back(g); + VBoxContainer *vb = memnew(VBoxContainer); + vb->add_constant_override("separation", 0); + vb->add_child(g); + track_vbox->add_child(vb); + group_sort[base_path] = vb; + } + + track_edit->set_in_group(true); + group_sort[base_path]->add_child(track_edit); + + } else { + track_edit->set_in_group(false); + track_vbox->add_child(track_edit); + } + + track_edit->set_undo_redo(undo_redo); + track_edit->set_timeline(timeline); + track_edit->set_block_animation_update_ptr(&block_animation_update); + track_edit->set_root(root); + track_edit->set_animation_and_track(animation, i); + track_edit->set_play_position(timeline->get_play_position()); + track_edit->set_editor(this); + + if (selected == i) { + track_edit->grab_focus(); + } + + track_edit->connect("timeline_changed", this, "_timeline_changed"); + track_edit->connect("remove_request", this, "_track_remove_request", varray(), CONNECT_DEFERRED); + track_edit->connect("dropped", this, "_dropped_track", varray(), CONNECT_DEFERRED); + track_edit->connect("insert_key", this, "_insert_key_from_track", varray(i), CONNECT_DEFERRED); + track_edit->connect("select_key", this, "_key_selected", varray(i), CONNECT_DEFERRED); + track_edit->connect("deselect_key", this, "_key_deselected", varray(i), CONNECT_DEFERRED); + track_edit->connect("bezier_edit", this, "_bezier_edit", varray(i), CONNECT_DEFERRED); + track_edit->connect("clear_selection", this, "_clear_selection"); + track_edit->connect("move_selection_begin", this, "_move_selection_begin"); + track_edit->connect("move_selection", this, "_move_selection"); + track_edit->connect("move_selection_commit", this, "_move_selection_commit"); + track_edit->connect("move_selection_cancel", this, "_move_selection_cancel"); + + track_edit->connect("duplicate_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_SELECTION), CONNECT_DEFERRED); + track_edit->connect("duplicate_transpose_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_TRANSPOSED), CONNECT_DEFERRED); + track_edit->connect("delete_request", this, "_edit_menu_pressed", varray(EDIT_DELETE_SELECTION), CONNECT_DEFERRED); + } +} + +void AnimationTrackEditor::_animation_changed() { + + timeline->update(); + timeline->update_values(); + if (block_animation_update) { + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + for (int i = 0; i < groups.size(); i++) { + groups[i]->update(); + } + } else { + _update_tracks(); + } + + bezier_edit->update(); + + step->set_block_signals(true); + step->set_value(animation->get_step()); + step->set_block_signals(false); +} + +MenuButton *AnimationTrackEditor::get_edit_menu() { + return edit; +} + +void AnimationTrackEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) { + + zoom_icon->set_texture(get_icon("Zoom", "EditorIcons")); + snap->set_icon(get_icon("Snap", "EditorIcons")); + view_group->set_icon(get_icon(view_group->is_pressed() ? "AnimationTrackList" : "AnimationTrackGroup", "EditorIcons")); + selected_filter->set_icon(get_icon("AnimationFilter", "EditorIcons")); + main_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + } + + if (p_what == NOTIFICATION_READY) { + EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", this, "_selection_changed"); + } + + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + + update_keying(); + EditorNode::get_singleton()->update_keying(); + emit_signal("keying_changed"); + } +} + +void AnimationTrackEditor::_update_scroll(double) { + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + for (int i = 0; i < groups.size(); i++) { + groups[i]->update(); + } +} + +void AnimationTrackEditor::_update_step(double p_new_step) { + + undo_redo->create_action("Change animation step"); + undo_redo->add_do_method(animation.ptr(), "set_step", p_new_step); + undo_redo->add_undo_method(animation.ptr(), "set_step", animation->get_step()); + step->set_block_signals(true); + undo_redo->commit_action(); + step->set_block_signals(false); + emit_signal("animation_step_changed", p_new_step); +} + +void AnimationTrackEditor::_update_length(double p_new_len) { + + emit_signal("animation_len_changed", p_new_len); +} + +void AnimationTrackEditor::_dropped_track(int p_from_track, int p_to_track) { + if (p_to_track >= track_edits.size()) { + p_to_track = track_edits.size() - 1; + } + + if (p_from_track == p_to_track) + return; + + _clear_selection(); + undo_redo->create_action("Rearrange tracks"); + undo_redo->add_do_method(animation.ptr(), "track_swap", p_from_track, p_to_track); + undo_redo->add_undo_method(animation.ptr(), "track_swap", p_to_track, p_from_track); + undo_redo->commit_action(); +} + +void AnimationTrackEditor::_new_track_node_selected(NodePath p_path) { + + ERR_FAIL_COND(!root); + Node *node = get_node(p_path); + ERR_FAIL_COND(!node); + NodePath path_to = root->get_path_to(node); + + if (adding_track_type == Animation::TYPE_TRANSFORM && !node->is_class("Spatial")) { + EditorNode::get_singleton()->show_warning(TTR("Transform tracks only apply to Spatial-based nodes.")); + return; + } + + switch (adding_track_type) { + case Animation::TYPE_VALUE: { + adding_track_path = path_to; + prop_selector->set_type_filter(Vector<Variant::Type>()); + prop_selector->select_property_from_instance(node); + } break; + case Animation::TYPE_TRANSFORM: + case Animation::TYPE_METHOD: { + + undo_redo->create_action("Add Track"); + undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), path_to); + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); + undo_redo->commit_action(); + + } break; + case Animation::TYPE_BEZIER: { + + Vector<Variant::Type> filter; + filter.push_back(Variant::INT); + filter.push_back(Variant::REAL); + filter.push_back(Variant::VECTOR2); + filter.push_back(Variant::VECTOR3); + filter.push_back(Variant::QUAT); + filter.push_back(Variant::PLANE); + filter.push_back(Variant::COLOR); + + adding_track_path = path_to; + prop_selector->set_type_filter(filter); + prop_selector->select_property_from_instance(node); + } break; + case Animation::TYPE_AUDIO: { + + if (!node->is_class("AudioStreamPlayer") && !node->is_class("AudioStreamPlayer2D") && !node->is_class("AudioStreamPlayer3D")) { + EditorNode::get_singleton()->show_warning(TTR("Audio tracks can only point to nodes of type:\n-AudioStreamPlayer\n-AudioStreamPlayer2D\n-AudioStreamPlayer3D")); + return; + } + + undo_redo->create_action("Add Track"); + undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), path_to); + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); + undo_redo->commit_action(); + + } break; + case Animation::TYPE_ANIMATION: { + + if (!node->is_class("AnimationPlayer")) { + EditorNode::get_singleton()->show_warning(TTR("Animation tracks can only point to AnimationPlayer nodes.")); + return; + } + + if (node == AnimationPlayerEditor::singleton->get_player()) { + EditorNode::get_singleton()->show_warning(TTR("An animation player can't animate itself, only other players.")); + return; + } + + undo_redo->create_action("Add Track"); + undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), path_to); + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); + undo_redo->commit_action(); + + } break; + } +} + +void AnimationTrackEditor::_add_track(int p_type) { + if (!root) { + EditorNode::get_singleton()->show_warning(TTR("Not possible to add a new track without a root")); + return; + } + adding_track_type = p_type; + pick_track->popup_centered_ratio(); +} + +void AnimationTrackEditor::_new_track_property_selected(String p_name) { + + String full_path = String(adding_track_path) + ":" + p_name; + + if (adding_track_type == Animation::TYPE_VALUE) { + + Animation::UpdateMode update_mode = Animation::UPDATE_DISCRETE; + { + //hack + NodePath np; + animation->add_track(Animation::TYPE_VALUE); + animation->track_set_path(animation->get_track_count() - 1, full_path); + PropertyInfo h = _find_hint_for_track(animation->get_track_count() - 1, np); + animation->remove_track(animation->get_track_count() - 1); //hack + if (h.type == Variant::REAL || + h.type == Variant::VECTOR2 || + h.type == Variant::RECT2 || + h.type == Variant::VECTOR3 || + h.type == Variant::AABB || + h.type == Variant::QUAT || + h.type == Variant::COLOR || + h.type == Variant::PLANE || + h.type == Variant::TRANSFORM2D || + h.type == Variant::TRANSFORM) { + + update_mode = Animation::UPDATE_CONTINUOUS; + } + + if (h.usage & PROPERTY_USAGE_ANIMATE_AS_TRIGGER) { + update_mode = Animation::UPDATE_TRIGGER; + } + } + + undo_redo->create_action("Add Track"); + undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", animation->get_track_count(), full_path); + undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", animation->get_track_count(), update_mode); + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); + undo_redo->commit_action(); + } else { + Vector<String> subindices; + { + //hack + NodePath np; + animation->add_track(Animation::TYPE_VALUE); + animation->track_set_path(animation->get_track_count() - 1, full_path); + PropertyInfo h = _find_hint_for_track(animation->get_track_count() - 1, np); + animation->remove_track(animation->get_track_count() - 1); //hack + bool valid; + subindices = _get_bezier_subindices_for_type(h.type, &valid); + if (!valid) { + EditorNode::get_singleton()->show_warning("Invalid track for Bezier (no suitable sub-properties)"); + return; + } + } + + undo_redo->create_action("Add Bezier Track"); + int base_track = animation->get_track_count(); + for (int i = 0; i < subindices.size(); i++) { + undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); + undo_redo->add_do_method(animation.ptr(), "track_set_path", base_track + i, full_path + subindices[i]); + undo_redo->add_undo_method(animation.ptr(), "remove_track", base_track + i); + } + undo_redo->commit_action(); + } +} + +void AnimationTrackEditor::_timeline_value_changed(double) { + + timeline->update_play_position(); + + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + track_edits[i]->update_play_position(); + } + + for (int i = 0; i < groups.size(); i++) { + groups[i]->update(); + } + + bezier_edit->update(); + bezier_edit->update_play_position(); +} + +int AnimationTrackEditor::_get_track_selected() { + + for (int i = 0; i < track_edits.size(); i++) { + if (track_edits[i]->has_focus()) + return i; + } + + return -1; +} + +void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { + + ERR_FAIL_INDEX(p_track, animation->get_track_count()); + + if (snap->is_pressed() && step->get_value() != 0) { + p_ofs = Math::stepify(p_ofs, step->get_value()); + } + while (animation->track_find_key(p_track, p_ofs, true) != -1) { //make sure insertion point is valid + p_ofs += 0.001; + } + + switch (animation->track_get_type(p_track)) { + case Animation::TYPE_TRANSFORM: { + if (!root->has_node(animation->track_get_path(p_track))) { + EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a key.")); + return; + } + Spatial *base = Object::cast_to<Spatial>(root->get_node(animation->track_get_path(p_track))); + + if (!base) { + EditorNode::get_singleton()->show_warning(TTR("Track is not of type Spatial, can't insert key")); + return; + } + + Transform xf = base->get_transform(); + + Vector3 loc = xf.get_origin(); + Vector3 scale = xf.basis.get_scale_local(); + Quat rot = xf.basis; + + undo_redo->create_action("Add Transform Track Key"); + undo_redo->add_do_method(animation.ptr(), "transform_track_insert_key", p_track, p_ofs, loc, rot, scale); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); + undo_redo->commit_action(); + + } break; + case Animation::TYPE_VALUE: { + + NodePath bp; + Variant value; + _find_hint_for_track(p_track, bp, &value); + + undo_redo->create_action("Add Track Key"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, value); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); + undo_redo->commit_action(); + + } break; + case Animation::TYPE_METHOD: { + if (!root->has_node(animation->track_get_path(p_track))) { + EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a method key.")); + return; + } + Node *base = root->get_node(animation->track_get_path(p_track)); + + method_selector->select_method_from_instance(base); + + insert_key_from_track_call_ofs = p_ofs; + insert_key_from_track_call_track = p_track; + + } break; + case Animation::TYPE_BEZIER: { + + NodePath bp; + Variant value; + _find_hint_for_track(p_track, bp, &value); + Array arr; + arr.resize(5); + arr[0] = value; + arr[1] = -0.25; + arr[2] = 0; + arr[3] = 0.25; + arr[4] = 0; + + undo_redo->create_action("Add Track Key"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, arr); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); + undo_redo->commit_action(); + + } break; + case Animation::TYPE_AUDIO: { + + Dictionary ak; + ak["stream"] = RES(); + ak["start_offset"] = 0; + ak["end_offset"] = 0; + + undo_redo->create_action("Add Track Key"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, ak); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); + undo_redo->commit_action(); + } break; + case Animation::TYPE_ANIMATION: { + + StringName anim = "[stop]"; + + undo_redo->create_action("Add Track Key"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, anim); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); + undo_redo->commit_action(); + } break; + } +} + +void AnimationTrackEditor::_add_method_key(const String &p_method) { + + if (!root->has_node(animation->track_get_path(insert_key_from_track_call_track))) { + EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a method key.")); + return; + } + Node *base = root->get_node(animation->track_get_path(insert_key_from_track_call_track)); + + List<MethodInfo> minfo; + base->get_method_list(&minfo); + + for (List<MethodInfo>::Element *E = minfo.front(); E; E = E->next()) { + if (E->get().name == p_method) { + + Dictionary d; + d["method"] = p_method; + Array params; + int first_defarg = E->get().arguments.size() - E->get().default_arguments.size(); + + for (int i = 0; i < E->get().arguments.size(); i++) { + + if (i >= first_defarg) { + Variant arg = E->get().default_arguments[i - first_defarg]; + params.push_back(arg); + } else { + Variant::CallError ce; + Variant arg = Variant::construct(E->get().arguments[i].type, NULL, 0, ce); + params.push_back(arg); + } + } + d["args"] = params; + + undo_redo->create_action("Add Method Track Key"); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", insert_key_from_track_call_track, insert_key_from_track_call_ofs, d); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", insert_key_from_track_call_track, insert_key_from_track_call_ofs); + undo_redo->commit_action(); + + return; + } + } + + EditorNode::get_singleton()->show_warning(TTR("Method not found in object: ") + p_method); +} + +void AnimationTrackEditor::_key_selected(int p_key, bool p_single, int p_track) { + + ERR_FAIL_INDEX(p_track, animation->get_track_count()); + ERR_FAIL_INDEX(p_key, animation->track_get_key_count(p_track)); + + SelectedKey sk; + sk.key = p_key; + sk.track = p_track; + + if (p_single) { + _clear_selection(); + } + + KeyInfo ki; + ki.pos = animation->track_get_key_time(p_track, p_key); + selection[sk] = ki; + + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + + _update_key_edit(); +} + +void AnimationTrackEditor::_key_deselected(int p_key, int p_track) { + + ERR_FAIL_INDEX(p_track, animation->get_track_count()); + ERR_FAIL_INDEX(p_key, animation->track_get_key_count(p_track)); + + SelectedKey sk; + sk.key = p_key; + sk.track = p_track; + + selection.erase(sk); + + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + + _update_key_edit(); +} + +void AnimationTrackEditor::_move_selection_begin() { + moving_selection = true; + moving_selection_offset = 0; +} + +void AnimationTrackEditor::_move_selection(float p_offset) { + moving_selection_offset = p_offset; + if (snap->is_pressed() && step->get_value() != 0) { + moving_selection_offset = Math::stepify(moving_selection_offset, step->get_value()); + } + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } +} + +struct _AnimMoveRestore { + + int track; + float time; + Variant key; + float transition; +}; +//used for undo/redo + +void AnimationTrackEditor::_clear_key_edit() { + if (key_edit) { + +#if 0 + // going back seems like the most comfortable thing to do, but it results + // in weird behaviors and crashes, because going back to animation editor + // triggers the editor setting up again itself + + bool go_back = false; + if (EditorNode::get_singleton()->get_inspector()->get_edited_object() == key_edit) { + EditorNode::get_singleton()->push_item(NULL); + go_back = true; + } + + memdelete(key_edit); + key_edit = NULL; + + if (go_back) { + EditorNode::get_singleton()->get_inspector_dock()->go_back(); + } +#else + //if key edit is the object being inspected, remove it first + if (EditorNode::get_singleton()->get_inspector()->get_edited_object() == key_edit) { + EditorNode::get_singleton()->push_item(NULL); + } + //then actually delete it + memdelete(key_edit); + key_edit = NULL; +#endif + } +} + +void AnimationTrackEditor::_clear_selection() { + selection.clear(); + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + _clear_key_edit(); +} + +void AnimationTrackEditor::_update_key_edit() { + + _clear_key_edit(); + if (!animation.is_valid()) + return; + if (selection.size() != 1) { + return; + } + + key_edit = memnew(AnimationTrackKeyEdit); + key_edit->animation = animation; + key_edit->track = selection.front()->key().track; + + float ofs = animation->track_get_key_time(key_edit->track, selection.front()->key().key); + key_edit->key_ofs = ofs; + key_edit->root_path = root; + + NodePath np; + key_edit->hint = _find_hint_for_track(key_edit->track, np); + key_edit->undo_redo = undo_redo; + key_edit->base = np; + + EditorNode::get_singleton()->push_item(key_edit); +} + +void AnimationTrackEditor::_clear_selection_for_anim(const Ref<Animation> &p_anim) { + + if (!(animation == p_anim)) + return; + //selection.clear(); + _clear_selection(); +} + +void AnimationTrackEditor::_select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos) { + + if (!(animation == p_anim)) + return; + + int idx = animation->track_find_key(p_track, p_pos, true); + ERR_FAIL_COND(idx < 0); + + SelectedKey sk; + sk.track = p_track; + sk.key = idx; + KeyInfo ki; + ki.pos = p_pos; + + selection.insert(sk, ki); +} + +void AnimationTrackEditor::_move_selection_commit() { + + undo_redo->create_action(TTR("Anim Move Keys")); + + List<_AnimMoveRestore> to_restore; + + float motion = moving_selection_offset; + // 1-remove the keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); + } + // 2- remove overlapped keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newtime = E->get().pos + motion; + int idx = animation->track_find_key(E->key().track, newtime, true); + if (idx == -1) + continue; + SelectedKey sk; + sk.key = idx; + sk.track = E->key().track; + if (selection.has(sk)) + continue; //already in selection, don't save + + undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); + _AnimMoveRestore amr; + + amr.key = animation->track_get_key_value(E->key().track, idx); + amr.track = E->key().track; + amr.time = newtime; + amr.transition = animation->track_get_key_transition(E->key().track, idx); + + to_restore.push_back(amr); + } + + // 3-move the keys (re insert them) + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = E->get().pos + motion; + /* + if (newpos<0) + continue; //no add at the beginning + */ + undo_redo->add_do_method(animation.ptr(), "track_insert_key", E->key().track, newpos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + } + + // 4-(undo) remove inserted keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = E->get().pos + motion; + /* + if (newpos<0) + continue; //no remove what no inserted + */ + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); + } + + // 5-(undo) reinsert keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + } + + // 6-(undo) reinsert overlapped keys + for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + _AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); + } + + // 6-(undo) reinsert overlapped keys + for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + _AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); + } + + undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + + // 7-reselect + + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float oldpos = E->get().pos; + float newpos = oldpos + motion; + //if (newpos>=0) + undo_redo->add_do_method(this, "_select_at_anim", animation, E->key().track, newpos); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, oldpos); + } + + undo_redo->commit_action(); + + moving_selection = false; + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } +} +void AnimationTrackEditor::_move_selection_cancel() { + + moving_selection = false; + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } +} + +bool AnimationTrackEditor::is_moving_selection() const { + return moving_selection; +} +float AnimationTrackEditor::get_moving_selection_offset() const { + return moving_selection_offset; +} + +void AnimationTrackEditor::_box_selection_draw() { + + Color color = get_color("accent_color", "Editor"); + color.a = 0.2; + Rect2 rect = Rect2(Point2(), box_selection->get_size()); + box_selection->draw_rect(rect, color); +} + +void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventMouseButton> mb = p_event; + + if (mb.is_valid() && mb->is_pressed() && mb->get_command() && mb->get_button_index() == BUTTON_WHEEL_DOWN) { + + timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05); + scroll->accept_event(); + } + + if (mb.is_valid() && mb->is_pressed() && mb->get_command() && mb->get_button_index() == BUTTON_WHEEL_UP) { + + timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05); + scroll->accept_event(); + } + + if (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT) { + if (mb->is_pressed()) { + box_selecting = true; + box_selecting_from = scroll->get_global_transform().xform(mb->get_position()); + box_select_rect = Rect2(); + } else if (box_selecting) { + + if (box_selection->is_visible_in_tree()) { + //only if moved + for (int i = 0; i < track_edits.size(); i++) { + + Rect2 local_rect = box_select_rect; + local_rect.position -= track_edits[i]->get_global_position(); + track_edits[i]->append_to_selection(local_rect); + } + + if (_get_track_selected() == -1 && track_edits.size() > 0) { //minimal hack to make shortcuts work + track_edits[track_edits.size() - 1]->grab_focus(); + } + } else { + _clear_selection(); //clear it + } + + box_selection->hide(); + box_selecting = false; + } + } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_MIDDLE) { + + timeline->set_value(timeline->get_value() - mm->get_relative().x / timeline->get_zoom_scale()); + } + + if (mm.is_valid() && box_selecting) { + + if (!(mm->get_button_mask() & BUTTON_MASK_LEFT)) { + //no longer + box_selection->hide(); + box_selecting = false; + return; + } + + if (!box_selection->is_visible_in_tree()) { + if (!mm->get_shift()) { + _clear_selection(); //only append if shift is pressed + } + box_selection->show(); + } + + Vector2 from = box_selecting_from; + Vector2 to = scroll->get_global_transform().xform(mm->get_position()); + + if (from.x > to.x) { + SWAP(from.x, to.x); + } + + if (from.y > to.y) { + SWAP(from.y, to.y); + } + + Rect2 rect(from, to - from); + Rect2 scroll_rect = Rect2(scroll->get_global_position(), scroll->get_size()); + rect = scroll_rect.clip(rect); + box_selection->set_position(rect.position); + box_selection->set_size(rect.size); + + box_select_rect = rect; + + if (get_local_mouse_position().y < 0) { + //avoid box selection from going up and lose focus to viewport + warp_mouse(Vector2(mm->get_position().x, 0)); + } + } +} + +void AnimationTrackEditor::_cancel_bezier_edit() { + bezier_edit->hide(); + scroll->show(); +} + +void AnimationTrackEditor::_bezier_edit(int p_for_track) { + + _clear_selection(); //bezier probably wants to use a separate selection mode + bezier_edit->set_root(root); + bezier_edit->set_animation_and_track(animation, p_for_track); + scroll->hide(); + bezier_edit->show(); + //search everything within the track and curve- edit it +} + +void AnimationTrackEditor::_anim_duplicate_keys(bool transpose) { + //duplicait! + if (selection.size() && animation.is_valid() && (!transpose || (_get_track_selected() >= 0 && _get_track_selected() < animation->get_track_count()))) { + + int top_track = 0x7FFFFFFF; + float top_time = 1e10; + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + const SelectedKey &sk = E->key(); + + float t = animation->track_get_key_time(sk.track, sk.key); + if (t < top_time) + top_time = t; + if (sk.track < top_track) + top_track = sk.track; + } + ERR_FAIL_COND(top_track == 0x7FFFFFFF || top_time == 1e10); + + // + + int start_track = transpose ? _get_track_selected() : top_track; + + undo_redo->create_action(TTR("Anim Duplicate Keys")); + + List<Pair<int, float> > new_selection_values; + + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + const SelectedKey &sk = E->key(); + + float t = animation->track_get_key_time(sk.track, sk.key); + + float dst_time = t + (timeline->get_play_position() - top_time); + int dst_track = sk.track + (start_track - top_track); + + if (dst_track < 0 || dst_track >= animation->get_track_count()) + continue; + + if (animation->track_get_type(dst_track) != animation->track_get_type(sk.track)) + continue; + + int existing_idx = animation->track_find_key(dst_track, dst_time, true); + + undo_redo->add_do_method(animation.ptr(), "track_insert_key", dst_track, dst_time, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", dst_track, dst_time); + + Pair<int, float> p; + p.first = dst_track; + p.second = dst_time; + new_selection_values.push_back(p); + + if (existing_idx != -1) { + + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", dst_track, dst_time, animation->track_get_key_value(dst_track, existing_idx), animation->track_get_key_transition(dst_track, existing_idx)); + } + } + + undo_redo->commit_action(); + + //reselect duplicated + + Map<SelectedKey, KeyInfo> new_selection; + for (List<Pair<int, float> >::Element *E = new_selection_values.front(); E; E = E->next()) { + + int track = E->get().first; + float time = E->get().second; + + int existing_idx = animation->track_find_key(track, time, true); + + if (existing_idx == -1) + continue; + SelectedKey sk2; + sk2.track = track; + sk2.key = existing_idx; + + KeyInfo ki; + ki.pos = time; + + new_selection[sk2] = ki; + } + + selection = new_selection; + _update_tracks(); + _update_key_edit(); + } +} +void AnimationTrackEditor::_edit_menu_pressed(int p_option) { + + last_menu_track_opt = p_option; + switch (p_option) { + case EDIT_COPY_TRACKS: { + track_copy_select->clear(); + TreeItem *troot = track_copy_select->create_item(); + + for (int i = 0; i < animation->get_track_count(); i++) { + + NodePath path = animation->track_get_path(i); + Node *node = NULL; + + if (root && root->has_node(path)) { + node = root->get_node(path); + } + + String text; + Ref<Texture> icon = get_icon("Node", "EditorIcons"); + if (node) { + if (has_icon(node->get_class(), "EditorIcons")) { + icon = get_icon(node->get_class(), "EditorIcons"); + } + + text = node->get_name(); + Vector<StringName> sn = path.get_subnames(); + for (int i = 0; i < sn.size(); i++) { + text += "."; + text += sn[i]; + } + + path = NodePath(node->get_path().get_names(), path.get_subnames(), true); //store full path instead for copying + } else { + text = path; + int sep = text.find(":"); + if (sep != -1) { + text = text.substr(sep + 1, text.length()); + } + } + + switch (animation->track_get_type(i)) { + case Animation::TYPE_TRANSFORM: text += " (Transform)"; break; + case Animation::TYPE_METHOD: text += " (Methods)"; break; + case Animation::TYPE_BEZIER: text += " (Bezier)"; break; + case Animation::TYPE_AUDIO: text += " (Audio)"; break; + default: {}; + } + + TreeItem *it = track_copy_select->create_item(troot); + it->set_editable(0, true); + it->set_selectable(0, true); + it->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); + it->set_icon(0, icon); + it->set_text(0, text); + Dictionary md; + md["track_idx"] = i; + md["path"] = path; + it->set_metadata(0, md); + } + + track_copy_dialog->popup_centered_minsize(Size2(300, 500) * EDSCALE); + } break; + case EDIT_COPY_TRACKS_CONFIRM: { + + track_clipboard.clear(); + TreeItem *root = track_copy_select->get_root(); + if (root) { + + TreeItem *it = root->get_children(); + while (it) { + Dictionary md = it->get_metadata(0); + int idx = md["track_idx"]; + if (it->is_checked(0) && idx >= 0 && idx < animation->get_track_count()) { + TrackClipboard tc; + tc.base_path = animation->track_get_path(idx); + tc.full_path = md["path"]; + tc.track_type = animation->track_get_type(idx); + tc.interp_type = animation->track_get_interpolation_type(idx); + if (tc.track_type == Animation::TYPE_VALUE) { + tc.update_mode = animation->value_track_get_update_mode(idx); + } + tc.loop_wrap = animation->track_get_interpolation_loop_wrap(idx); + tc.enabled = animation->track_is_enabled(idx); + for (int i = 0; i < animation->track_get_key_count(idx); i++) { + TrackClipboard::Key k; + k.time = animation->track_get_key_time(idx, i); + k.value = animation->track_get_key_value(idx, i); + k.transition = animation->track_get_key_transition(idx, i); + tc.keys.push_back(k); + } + track_clipboard.push_back(tc); + } + it = it->get_next(); + } + } + } break; + case EDIT_PASTE_TRACKS: { + + if (track_clipboard.size() == 0) { + EditorNode::get_singleton()->show_warning(TTR("Clipboard is empty")); + break; + } + + int base_track = animation->get_track_count(); + undo_redo->create_action("Paste Tracks"); + for (int i = 0; i < track_clipboard.size(); i++) { + undo_redo->add_do_method(animation.ptr(), "add_track", track_clipboard[i].track_type); + Node *exists = NULL; + NodePath path = track_clipboard[i].base_path; + + if (root) { + NodePath np = track_clipboard[i].full_path; + exists = root->get_node(np); + if (exists) { + path = NodePath(root->get_path_to(exists).get_names(), track_clipboard[i].full_path.get_subnames(), false); + } + } + + undo_redo->add_do_method(animation.ptr(), "track_set_path", base_track, path); + undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_type", base_track, track_clipboard[i].interp_type); + undo_redo->add_do_method(animation.ptr(), "track_set_interpolation_loop_wrap", base_track, track_clipboard[i].loop_wrap); + undo_redo->add_do_method(animation.ptr(), "track_set_enabled", base_track, track_clipboard[i].enabled); + if (track_clipboard[i].track_type == Animation::TYPE_VALUE) { + undo_redo->add_do_method(animation.ptr(), "value_track_set_update_mode", base_track, track_clipboard[i].update_mode); + } + + for (int j = 0; j < track_clipboard[i].keys.size(); j++) { + undo_redo->add_do_method(animation.ptr(), "track_insert_key", base_track, track_clipboard[i].keys[j].time, track_clipboard[i].keys[j].value, track_clipboard[i].keys[j].transition); + } + + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); + + base_track++; + } + + undo_redo->commit_action(); + } break; + + case EDIT_SCALE_SELECTION: + case EDIT_SCALE_FROM_CURSOR: { + scale_dialog->popup_centered(Size2(200, 100) * EDSCALE); + } break; + case EDIT_SCALE_CONFIRM: { + if (selection.empty()) + return; + + float from_t = 1e20; + float to_t = -1e20; + float len = -1e20; + float pivot = 0; + + for (Map<SelectedKey, KeyInfo>::Element *E = selection.front(); E; E = E->next()) { + float t = animation->track_get_key_time(E->key().track, E->key().key); + if (t < from_t) + from_t = t; + if (t > to_t) + to_t = t; + } + + len = to_t - from_t; + if (last_menu_track_opt == EDIT_SCALE_FROM_CURSOR) { + pivot = timeline->get_play_position(); + + } else { + + pivot = from_t; + } + + float s = scale->get_value(); + if (s == 0) { + ERR_PRINT("Can't scale to 0"); + } + + undo_redo->create_action(TTR("Anim Scale Keys")); + + List<_AnimMoveRestore> to_restore; + + // 1-remove the keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); + } + // 2- remove overlapped keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newtime = (E->get().pos - from_t) * s + from_t; + int idx = animation->track_find_key(E->key().track, newtime, true); + if (idx == -1) + continue; + SelectedKey sk; + sk.key = idx; + sk.track = E->key().track; + if (selection.has(sk)) + continue; //already in selection, don't save + + undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); + _AnimMoveRestore amr; + + amr.key = animation->track_get_key_value(E->key().track, idx); + amr.track = E->key().track; + amr.time = newtime; + amr.transition = animation->track_get_key_transition(E->key().track, idx); + + to_restore.push_back(amr); + } + +#define _NEW_POS(m_ofs) (((s > 0) ? m_ofs : from_t + (len - (m_ofs - from_t))) - pivot) * ABS(s) + from_t + // 3-move the keys (re insert them) + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = _NEW_POS(E->get().pos); + undo_redo->add_do_method(animation.ptr(), "track_insert_key", E->key().track, newpos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + } + + // 4-(undo) remove inserted keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float newpos = _NEW_POS(E->get().pos); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); + } + + // 5-(undo) reinsert keys + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + } + + // 6-(undo) reinsert overlapped keys + for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + _AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); + } + + // 6-(undo) reinsert overlapped keys + for (List<_AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { + + _AnimMoveRestore &amr = E->get(); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, amr.transition); + } + + undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + + // 7-reselect + + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + float oldpos = E->get().pos; + float newpos = _NEW_POS(oldpos); + if (newpos >= 0) + undo_redo->add_do_method(this, "_select_at_anim", animation, E->key().track, newpos); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, oldpos); + } +#undef _NEW_POS + undo_redo->commit_action(); + } break; + case EDIT_DUPLICATE_SELECTION: { + + if (bezier_edit->is_visible()) { + bezier_edit->duplicate_selection(); + break; + } + _anim_duplicate_keys(false); + } break; + case EDIT_DUPLICATE_TRANSPOSED: { + if (bezier_edit->is_visible()) { + EditorNode::get_singleton()->show_warning(TTR("This option does not work for Bezier editing, as it's only a single track.")); + break; + } + _anim_duplicate_keys(true); + } break; + case EDIT_DELETE_SELECTION: { + + if (bezier_edit->is_visible()) { + bezier_edit->delete_selection(); + break; + } + + if (selection.size()) { + undo_redo->create_action(TTR("Anim Delete Keys")); + + for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { + + undo_redo->add_do_method(animation.ptr(), "track_remove_key", E->key().track, E->key().key); + undo_redo->add_undo_method(animation.ptr(), "track_insert_key", E->key().track, E->get().pos, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); + } + undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + undo_redo->commit_action(); + //selection.clear(); + _update_key_edit(); + } + } break; + case EDIT_GOTO_NEXT_STEP: { + + if (animation.is_null()) + break; + float step = animation->get_step(); + if (step == 0) + step = 1; + + float pos = timeline->get_play_position(); + + pos = Math::stepify(pos + step, step); + if (pos > animation->get_length()) + pos = animation->get_length(); + set_anim_pos(pos); + + emit_signal("timeline_changed", pos, true); + + } break; + case EDIT_GOTO_PREV_STEP: { + if (animation.is_null()) + break; + float step = animation->get_step(); + if (step == 0) + step = 1; + + float pos = timeline->get_play_position(); + pos = Math::stepify(pos - step, step); + if (pos < 0) + pos = 0; + set_anim_pos(pos); + emit_signal("timeline_changed", pos, true); + + } break; + case EDIT_OPTIMIZE_ANIMATION: { + optimize_dialog->popup_centered(Size2(250, 180) * EDSCALE); + + } break; + case EDIT_OPTIMIZE_ANIMATION_CONFIRM: { + animation->optimize(optimize_linear_error->get_value(), optimize_angular_error->get_value(), optimize_max_angle->get_value()); + _update_tracks(); + undo_redo->clear_history(); + + } break; + case EDIT_CLEAN_UP_ANIMATION: { + cleanup_dialog->popup_centered_minsize(Size2(300, 0) * EDSCALE); + + } break; + case EDIT_CLEAN_UP_ANIMATION_CONFIRM: { + if (cleanup_all->is_pressed()) { + List<StringName> names; + AnimationPlayerEditor::singleton->get_player()->get_animation_list(&names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + _cleanup_animation(AnimationPlayerEditor::singleton->get_player()->get_animation(E->get())); + } + } else { + _cleanup_animation(animation); + } + + } break; + } +} + +void AnimationTrackEditor::_cleanup_animation(Ref<Animation> p_animation) { + + for (int i = 0; i < p_animation->get_track_count(); i++) { + + bool prop_exists = false; + Variant::Type valid_type = Variant::NIL; + Object *obj = NULL; + + RES res; + Vector<StringName> leftover_path; + + Node *node = root->get_node_and_resource(p_animation->track_get_path(i), res, leftover_path); + + if (res.is_valid()) { + obj = res.ptr(); + } else if (node) { + obj = node; + } + + if (obj && p_animation->track_get_type(i) == Animation::TYPE_VALUE) { + valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists); + } + + if (!obj && cleanup_tracks->is_pressed()) { + + p_animation->remove_track(i); + i--; + continue; + } + + if (!prop_exists || p_animation->track_get_type(i) != Animation::TYPE_VALUE || cleanup_keys->is_pressed() == false) + continue; + + for (int j = 0; j < p_animation->track_get_key_count(i); j++) { + + Variant v = p_animation->track_get_key_value(i, j); + + if (!Variant::can_convert(v.get_type(), valid_type)) { + p_animation->track_remove_key(i, j); + j--; + } + } + + if (p_animation->track_get_key_count(i) == 0 && cleanup_tracks->is_pressed()) { + p_animation->remove_track(i); + i--; + } + } + + undo_redo->clear_history(); + _update_tracks(); +} + +void AnimationTrackEditor::_view_group_toggle() { + _update_tracks(); + view_group->set_icon(get_icon(view_group->is_pressed() ? "AnimationTrackList" : "AnimationTrackGroup", "EditorIcons")); +} + +void AnimationTrackEditor::_selection_changed() { + + if (selected_filter->is_pressed()) { + _update_tracks(); //needs updatin + } else { + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } + + for (int i = 0; i < groups.size(); i++) { + groups[i]->update(); + } + } +} + +float AnimationTrackEditor::snap_time(float p_value) { + + if (snap->is_pressed()) { + p_value = Math::stepify(p_value, step->get_value()); + } + + return p_value; +} + +void AnimationTrackEditor::_bind_methods() { + + ClassDB::bind_method("_animation_changed", &AnimationTrackEditor::_animation_changed); + ClassDB::bind_method("_timeline_changed", &AnimationTrackEditor::_timeline_changed); + ClassDB::bind_method("_track_remove_request", &AnimationTrackEditor::_track_remove_request); + ClassDB::bind_method("_name_limit_changed", &AnimationTrackEditor::_name_limit_changed); + ClassDB::bind_method("_update_scroll", &AnimationTrackEditor::_update_scroll); + ClassDB::bind_method("_update_step", &AnimationTrackEditor::_update_step); + ClassDB::bind_method("_update_length", &AnimationTrackEditor::_update_length); + ClassDB::bind_method("_dropped_track", &AnimationTrackEditor::_dropped_track); + ClassDB::bind_method("_add_track", &AnimationTrackEditor::_add_track); + ClassDB::bind_method("_new_track_node_selected", &AnimationTrackEditor::_new_track_node_selected); + ClassDB::bind_method("_new_track_property_selected", &AnimationTrackEditor::_new_track_property_selected); + ClassDB::bind_method("_root_removed", &AnimationTrackEditor::_root_removed); + ClassDB::bind_method("_confirm_insert_list", &AnimationTrackEditor::_confirm_insert_list); + ClassDB::bind_method("_insert_delay", &AnimationTrackEditor::_insert_delay); + ClassDB::bind_method("_timeline_value_changed", &AnimationTrackEditor::_timeline_value_changed); + ClassDB::bind_method("_insert_key_from_track", &AnimationTrackEditor::_insert_key_from_track); + ClassDB::bind_method("_add_method_key", &AnimationTrackEditor::_add_method_key); + ClassDB::bind_method("_key_selected", &AnimationTrackEditor::_key_selected); + ClassDB::bind_method("_key_deselected", &AnimationTrackEditor::_key_deselected); + ClassDB::bind_method("_clear_selection", &AnimationTrackEditor::_clear_selection); + ClassDB::bind_method("_move_selection_begin", &AnimationTrackEditor::_move_selection_begin); + ClassDB::bind_method("_move_selection", &AnimationTrackEditor::_move_selection); + ClassDB::bind_method("_move_selection_commit", &AnimationTrackEditor::_move_selection_commit); + ClassDB::bind_method("_move_selection_cancel", &AnimationTrackEditor::_move_selection_cancel); + ClassDB::bind_method("_clear_selection_for_anim", &AnimationTrackEditor::_clear_selection_for_anim); + ClassDB::bind_method("_select_at_anim", &AnimationTrackEditor::_select_at_anim); + ClassDB::bind_method("_scroll_input", &AnimationTrackEditor::_scroll_input); + ClassDB::bind_method("_box_selection_draw", &AnimationTrackEditor::_box_selection_draw); + ClassDB::bind_method("_bezier_edit", &AnimationTrackEditor::_bezier_edit); + ClassDB::bind_method("_cancel_bezier_edit", &AnimationTrackEditor::_cancel_bezier_edit); + ClassDB::bind_method("_edit_menu_pressed", &AnimationTrackEditor::_edit_menu_pressed); + ClassDB::bind_method("_view_group_toggle", &AnimationTrackEditor::_view_group_toggle); + ClassDB::bind_method("_selection_changed", &AnimationTrackEditor::_selection_changed); + + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("keying_changed")); + ADD_SIGNAL(MethodInfo("animation_len_changed", PropertyInfo(Variant::REAL, "len"))); + ADD_SIGNAL(MethodInfo("animation_step_changed", PropertyInfo(Variant::REAL, "step"))); +} + +AnimationTrackEditor::AnimationTrackEditor() { + root = NULL; + block_animation_update = false; + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + main_panel = memnew(PanelContainer); + add_child(main_panel); + main_panel->set_v_size_flags(SIZE_EXPAND_FILL); + HBoxContainer *timeline_scroll = memnew(HBoxContainer); + main_panel->add_child(timeline_scroll); + timeline_scroll->set_v_size_flags(SIZE_EXPAND_FILL); + + VBoxContainer *timeline_vbox = memnew(VBoxContainer); + timeline_scroll->add_child(timeline_vbox); + timeline_vbox->set_v_size_flags(SIZE_EXPAND_FILL); + timeline_vbox->set_h_size_flags(SIZE_EXPAND_FILL); + timeline_vbox->add_constant_override("separation", 0); + + timeline = memnew(AnimationTimelineEdit); + timeline->set_block_animation_update_ptr(&block_animation_update); + timeline->set_undo_redo(undo_redo); + timeline_vbox->add_child(timeline); + timeline->connect("timeline_changed", this, "_timeline_changed"); + timeline->connect("name_limit_changed", this, "_name_limit_changed"); + timeline->connect("track_added", this, "_add_track"); + timeline->connect("value_changed", this, "_timeline_value_changed"); + timeline->connect("length_changed", this, "_update_length"); + + scroll = memnew(ScrollContainer); + timeline_vbox->add_child(scroll); + scroll->set_v_size_flags(SIZE_EXPAND_FILL); + VScrollBar *sb = scroll->get_v_scrollbar(); + scroll->remove_child(sb); + timeline_scroll->add_child(sb); //move here so timeline and tracks are always aligned + scroll->connect("gui_input", this, "_scroll_input"); + + bezier_edit = memnew(AnimationBezierTrackEdit); + timeline_vbox->add_child(bezier_edit); + bezier_edit->set_block_animation_update_ptr(&block_animation_update); + bezier_edit->set_undo_redo(undo_redo); + bezier_edit->set_editor(this); + bezier_edit->set_timeline(timeline); + bezier_edit->hide(); + bezier_edit->set_v_size_flags(SIZE_EXPAND_FILL); + bezier_edit->connect("close_request", this, "_cancel_bezier_edit"); + + timeline_vbox->set_custom_minimum_size(Size2(0, 150) * EDSCALE); + + hscroll = memnew(HScrollBar); + timeline_vbox->add_child(hscroll); + hscroll->share(timeline); + hscroll->connect("value_changed", this, "_update_scroll"); + timeline->set_hscroll(hscroll); + + track_vbox = memnew(VBoxContainer); + scroll->add_child(track_vbox); + track_vbox->set_h_size_flags(SIZE_EXPAND_FILL); + scroll->set_enable_h_scroll(false); + scroll->set_enable_v_scroll(true); + track_vbox->add_constant_override("separation", 0); + + //timeline_vbox->add_child(memnew(HSeparator)); + HBoxContainer *bottom_hb = memnew(HBoxContainer); + add_child(bottom_hb); + bottom_hb->add_spacer(); + + selected_filter = memnew(ToolButton); + selected_filter->connect("pressed", this, "_view_group_toggle"); //same function works the same + selected_filter->set_toggle_mode(true); + selected_filter->set_tooltip(TTR("Only show tracks from nodes selected in tree.")); + + bottom_hb->add_child(selected_filter); + + view_group = memnew(ToolButton); + view_group->connect("pressed", this, "_view_group_toggle"); + view_group->set_toggle_mode(true); + view_group->set_tooltip(TTR("Group tracks by node or display them as plain list.")); + + bottom_hb->add_child(view_group); + bottom_hb->add_child(memnew(VSeparator)); + + snap = memnew(ToolButton); + snap->set_text(TTR("Snap (s): ")); + bottom_hb->add_child(snap); + snap->set_disabled(true); + snap->set_toggle_mode(true); + snap->set_pressed(true); + + step = memnew(EditorSpinSlider); + step->set_min(0); + step->set_max(1000); + step->set_step(0.01); + step->set_hide_slider(true); + step->set_custom_minimum_size(Size2(100, 0) * EDSCALE); + bottom_hb->add_child(step); + step->connect("value_changed", this, "_update_step"); + step->set_read_only(true); + + bottom_hb->add_child(memnew(VSeparator)); + + zoom_icon = memnew(TextureRect); + zoom_icon->set_v_size_flags(SIZE_SHRINK_CENTER); + bottom_hb->add_child(zoom_icon); + zoom = memnew(HSlider); + zoom->set_step(0.01); + zoom->set_min(0.0); + zoom->set_max(2.0); + zoom->set_value(1.0); + zoom->set_custom_minimum_size(Size2(200, 0) * EDSCALE); + zoom->set_v_size_flags(SIZE_SHRINK_CENTER); + bottom_hb->add_child(zoom); + timeline->set_zoom(zoom); + + edit = memnew(MenuButton); + edit->set_text(TTR("Edit")); + edit->set_flat(false); + edit->get_popup()->add_item(TTR("Copy Tracks"), EDIT_COPY_TRACKS); + edit->get_popup()->add_item(TTR("Paste Tracks"), EDIT_PASTE_TRACKS); + edit->get_popup()->add_separator(); + edit->get_popup()->add_item(TTR("Scale Selection"), EDIT_SCALE_SELECTION); + edit->get_popup()->add_item(TTR("Scale From Cursor"), EDIT_SCALE_FROM_CURSOR); + edit->get_popup()->add_separator(); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_SELECTION); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection_transposed", TTR("Duplicate Transposed"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_TRANSPOSED); + edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_SELECTION), true); + edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_TRANSPOSED), true); + edit->get_popup()->add_separator(); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/delete_selection", TTR("Delete Selection"), KEY_DELETE), EDIT_DELETE_SELECTION); + edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DELETE_SELECTION), true); + //this shortcut will be checked from the track itself. so no need to enable it here (will conflict with scenetree dock) + + edit->get_popup()->add_separator(); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_next_step", TTR("Goto Next Step"), KEY_MASK_CMD | KEY_RIGHT), EDIT_GOTO_NEXT_STEP); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_prev_step", TTR("Goto Prev Step"), KEY_MASK_CMD | KEY_LEFT), EDIT_GOTO_PREV_STEP); + edit->get_popup()->add_separator(); + edit->get_popup()->add_item(TTR("Optimize Animation"), EDIT_OPTIMIZE_ANIMATION); + edit->get_popup()->add_item(TTR("Clean-Up Animation"), EDIT_CLEAN_UP_ANIMATION); + + edit->get_popup()->connect("id_pressed", this, "_edit_menu_pressed"); + + pick_track = memnew(SceneTreeDialog); + add_child(pick_track); + pick_track->set_title(TTR("Pick the node that will be animated:")); + pick_track->connect("selected", this, "_new_track_node_selected"); + prop_selector = memnew(PropertySelector); + add_child(prop_selector); + prop_selector->connect("selected", this, "_new_track_property_selected"); + + method_selector = memnew(PropertySelector); + add_child(method_selector); + method_selector->connect("selected", this, "_add_method_key"); + + inserting = false; + insert_query = false; + insert_frame = 0; + insert_queue = false; + + insert_confirm = memnew(ConfirmationDialog); + add_child(insert_confirm); + insert_confirm->connect("confirmed", this, "_confirm_insert_list"); + VBoxContainer *icvb = memnew(VBoxContainer); + insert_confirm->add_child(icvb); + insert_confirm_text = memnew(Label); + icvb->add_child(insert_confirm_text); + insert_confirm_bezier = memnew(CheckBox); + insert_confirm_bezier->set_text(TTR("Use Bezier Curves")); + icvb->add_child(insert_confirm_bezier); + keying = false; + moving_selection = 0; + key_edit = NULL; + + box_selection = memnew(Control); + add_child(box_selection); + box_selection->set_as_toplevel(true); + box_selection->set_mouse_filter(MOUSE_FILTER_IGNORE); + box_selection->hide(); + box_selection->connect("draw", this, "_box_selection_draw"); + box_selecting = false; + + //default plugins + + Ref<AnimationTrackEditDefaultPlugin> def_plugin; + def_plugin.instance(); + add_track_edit_plugin(def_plugin); + + //dialogs + + optimize_dialog = memnew(ConfirmationDialog); + add_child(optimize_dialog); + optimize_dialog->set_title(TTR("Anim. Optimizer")); + VBoxContainer *optimize_vb = memnew(VBoxContainer); + optimize_dialog->add_child(optimize_vb); + + optimize_linear_error = memnew(SpinBox); + optimize_linear_error->set_max(1.0); + optimize_linear_error->set_min(0.001); + optimize_linear_error->set_step(0.001); + optimize_linear_error->set_value(0.05); + optimize_vb->add_margin_child(TTR("Max. Linear Error:"), optimize_linear_error); + optimize_angular_error = memnew(SpinBox); + optimize_angular_error->set_max(1.0); + optimize_angular_error->set_min(0.001); + optimize_angular_error->set_step(0.001); + optimize_angular_error->set_value(0.01); + + optimize_vb->add_margin_child(TTR("Max. Angular Error:"), optimize_angular_error); + optimize_max_angle = memnew(SpinBox); + optimize_vb->add_margin_child(TTR("Max Optimizable Angle:"), optimize_max_angle); + optimize_max_angle->set_max(360.0); + optimize_max_angle->set_min(0.0); + optimize_max_angle->set_step(0.1); + optimize_max_angle->set_value(22); + + optimize_dialog->get_ok()->set_text(TTR("Optimize")); + optimize_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); + + // + + cleanup_dialog = memnew(ConfirmationDialog); + add_child(cleanup_dialog); + VBoxContainer *cleanup_vb = memnew(VBoxContainer); + cleanup_dialog->add_child(cleanup_vb); + + cleanup_keys = memnew(CheckButton); + cleanup_keys->set_text(TTR("Remove invalid keys")); + cleanup_keys->set_pressed(true); + cleanup_vb->add_child(cleanup_keys); + + cleanup_tracks = memnew(CheckButton); + cleanup_tracks->set_text(TTR("Remove unresolved and empty tracks")); + cleanup_tracks->set_pressed(true); + cleanup_vb->add_child(cleanup_tracks); + + cleanup_all = memnew(CheckButton); + cleanup_all->set_text(TTR("Clean-up all animations")); + cleanup_vb->add_child(cleanup_all); + + cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); + cleanup_dialog->get_ok()->set_text(TTR("Clean-Up")); + + cleanup_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); + + // + scale_dialog = memnew(ConfirmationDialog); + VBoxContainer *vbc = memnew(VBoxContainer); + scale_dialog->add_child(vbc); + + scale = memnew(SpinBox); + scale->set_min(-99999); + scale->set_max(99999); + scale->set_step(0.001); + vbc->add_margin_child(TTR("Scale Ratio:"), scale); + scale_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_SCALE_CONFIRM)); + add_child(scale_dialog); + + track_copy_dialog = memnew(ConfirmationDialog); + add_child(track_copy_dialog); + track_copy_dialog->set_title(TTR("Select tracks to copy:")); + track_copy_dialog->get_ok()->set_text(TTR("Copy")); + + track_copy_select = memnew(Tree); + track_copy_select->set_hide_root(true); + track_copy_dialog->add_child(track_copy_select); + track_copy_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_COPY_TRACKS_CONFIRM)); +} + +AnimationTrackEditor::~AnimationTrackEditor() { + if (key_edit) { + memdelete(key_edit); + } +} diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h new file mode 100644 index 0000000000..0692c88bea --- /dev/null +++ b/editor/animation_track_editor.h @@ -0,0 +1,484 @@ +#ifndef ANIMATION_TRACK_EDITOR_H +#define ANIMATION_TRACK_EDITOR_H + +#include "scene/gui/control.h" +#include "scene/gui/file_dialog.h" +#include "scene/gui/menu_button.h" +#include "scene/gui/scroll_bar.h" +#include "scene/gui/slider.h" +#include "scene/gui/spin_box.h" +#include "scene/gui/tab_container.h" +#include "scene/gui/texture_rect.h" +#include "scene/gui/tool_button.h" + +#include "editor/property_selector.h" +#include "editor_data.h" +#include "editor_spin_slider.h" +#include "property_editor.h" +#include "scene/animation/animation_cache.h" +#include "scene/resources/animation.h" +#include "scene_tree_editor.h" + +class AnimationTimelineEdit : public Range { + GDCLASS(AnimationTimelineEdit, Range) + + Ref<Animation> animation; + int name_limit; + Range *zoom; + Range *h_scroll; + float play_position_pos; + + HBoxContainer *len_hb; + EditorSpinSlider *length; + ToolButton *loop; + TextureRect *time_icon; + + MenuButton *add_track; + Control *play_position; //separate control used to draw so updates for only position changed are much faster + HScrollBar *hscroll; + + void _zoom_changed(double); + void _anim_length_changed(double p_new_len); + void _anim_loop_pressed(); + + void _play_position_draw(); + UndoRedo *undo_redo; + Rect2 hsize_rect; + + bool editing; + bool *block_animation_update_ptr; //used to block all tracks re-gen (speed up) + + bool panning_timeline; + float panning_timeline_from; + float panning_timeline_at; + bool dragging_timeline; + bool dragging_hsize; + float dragging_hsize_from; + float dragging_hsize_at; + + void _gui_input(const Ref<InputEvent> &p_event); + void _track_added(int p_track); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + int get_name_limit() const; + int get_buttons_width() const; + + float get_zoom_scale() const; + + virtual Size2 get_minimum_size() const; + void set_animation(const Ref<Animation> &p_animation); + void set_zoom(Range *p_zoom); + Range *get_zoom() const { return zoom; } + void set_undo_redo(UndoRedo *p_undo_redo); + void set_block_animation_update_ptr(bool *p_block_ptr); + + void set_play_position(float p_pos); + float get_play_position() const; + void update_play_position(); + + void update_values(); + + void set_hscroll(HScrollBar *p_hscroll); + + AnimationTimelineEdit(); +}; + +class AnimationTrackEditor; + +class AnimationTrackEdit : public Control { + + GDCLASS(AnimationTrackEdit, Control) + + enum { + MENU_CALL_MODE_CONTINUOUS, + MENU_CALL_MODE_DISCRETE, + MENU_CALL_MODE_TRIGGER, + MENU_CALL_MODE_CAPTURE, + MENU_INTERPOLATION_NEAREST, + MENU_INTERPOLATION_LINEAR, + MENU_INTERPOLATION_CUBIC, + MENU_LOOP_WRAP, + MENU_LOOP_CLAMP, + MENU_KEY_INSERT, + MENU_KEY_DUPLICATE, + MENU_KEY_DELETE + }; + AnimationTimelineEdit *timeline; + UndoRedo *undo_redo; + LineEdit *path; + Node *root; + Control *play_position; //separate control used to draw so updates for only position changed are much faster + float play_position_pos; + + Ref<Animation> animation; + int track; + + Rect2 check_rect; + Rect2 path_rect; + + Rect2 update_mode_rect; + Rect2 interp_mode_rect; + Rect2 loop_mode_rect; + Rect2 remove_rect; + Rect2 bezier_edit_rect; + + Ref<Texture> type_icon; + Ref<Texture> selected_icon; + + PopupMenu *menu; + + bool clicking_on_name; + + void _zoom_changed(); + + Ref<Texture> icon_cache; + String path_cache; + + void _menu_selected(int p_index); + + bool *block_animation_update_ptr; //used to block all tracks re-gen (speed up) + + void _path_entered(const String &p_text); + void _play_position_draw(); + mutable int dropping_at; + + float insert_at_pos; + bool moving_selection_attempt; + int select_single_attempt; + bool moving_selection; + float moving_selection_from_ofs; + + bool in_group; + AnimationTrackEditor *editor; + +protected: + static void _bind_methods(); + void _notification(int p_what); + + virtual void _gui_input(const Ref<InputEvent> &p_event); + +public: + virtual Variant get_drag_data(const Point2 &p_point); + virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const; + virtual void drop_data(const Point2 &p_point, const Variant &p_data); + + virtual String get_tooltip(const Point2 &p_pos) const; + + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right); + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + virtual void draw_bg(int p_clip_left, int p_clip_right); + virtual void draw_fg(int p_clip_left, int p_clip_right); + + //helper + void draw_texture_clipped(const Ref<Texture> &p_texture, const Vector2 &p_pos); + void draw_texture_region_clipped(const Ref<Texture> &p_texture, const Rect2 &p_rect, const Rect2 &p_region); + void draw_rect_clipped(const Rect2 &p_rect, const Color &p_color, bool p_filled = true); + + int get_track() const; + Ref<Animation> get_animation() const; + AnimationTimelineEdit *get_timeline() const { return timeline; } + AnimationTrackEditor *get_editor() const { return editor; } + UndoRedo *get_undo_redo() const { return undo_redo; } + bool *get_block_animation_update_ptr() { return block_animation_update_ptr; } + + void set_animation_and_track(const Ref<Animation> &p_animation, int p_track); + virtual Size2 get_minimum_size() const; + + void set_undo_redo(UndoRedo *p_undo_redo); + void set_timeline(AnimationTimelineEdit *p_timeline); + void set_editor(AnimationTrackEditor *p_editor); + void set_root(Node *p_root); + + void set_block_animation_update_ptr(bool *p_block_ptr); + + void set_play_position(float p_pos); + void update_play_position(); + void cancel_drop(); + + void set_in_group(bool p_enable); + void append_to_selection(const Rect2 &p_box); + + AnimationTrackEdit(); +}; + +class AnimationTrackEditPlugin : public Reference { + GDCLASS(AnimationTrackEditPlugin, Reference) +public: + virtual AnimationTrackEdit *create_value_track_edit(Object *p_object, Variant::Type p_type, const String &p_property, PropertyHint p_hint, const String &p_hint_string, int p_usage); + virtual AnimationTrackEdit *create_audio_track_edit(); + virtual AnimationTrackEdit *create_animation_track_edit(Object *p_object); +}; + +class AnimationTrackKeyEdit; +class AnimationBezierTrackEdit; + +class AnimationTrackEditGroup : public Control { + GDCLASS(AnimationTrackEditGroup, Control) + Ref<Texture> icon; + String node_name; + NodePath node; + Node *root; + AnimationTimelineEdit *timeline; + + void _zoom_changed(); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + void set_type_and_name(const Ref<Texture> &p_type, const String &p_name, const NodePath &p_node); + virtual Size2 get_minimum_size() const; + void set_timeline(AnimationTimelineEdit *p_timeline); + void set_root(Node *p_root); + + AnimationTrackEditGroup(); +}; + +class AnimationTrackEditor : public VBoxContainer { + GDCLASS(AnimationTrackEditor, VBoxContainer) + + enum { + EDIT_COPY_TRACKS, + EDIT_COPY_TRACKS_CONFIRM, + EDIT_PASTE_TRACKS, + EDIT_SCALE_SELECTION, + EDIT_SCALE_FROM_CURSOR, + EDIT_SCALE_CONFIRM, + EDIT_DUPLICATE_SELECTION, + EDIT_DUPLICATE_TRANSPOSED, + EDIT_DELETE_SELECTION, + EDIT_GOTO_NEXT_STEP, + EDIT_GOTO_PREV_STEP, + EDIT_OPTIMIZE_ANIMATION, + EDIT_OPTIMIZE_ANIMATION_CONFIRM, + EDIT_CLEAN_UP_ANIMATION, + EDIT_CLEAN_UP_ANIMATION_CONFIRM + }; + + Ref<Animation> animation; + Node *root; + + MenuButton *edit; + + PanelContainer *main_panel; + HScrollBar *hscroll; + ScrollContainer *scroll; + VBoxContainer *track_vbox; + AnimationBezierTrackEdit *bezier_edit; + + AnimationTimelineEdit *timeline; + HSlider *zoom; + EditorSpinSlider *step; + TextureRect *zoom_icon; + ToolButton *snap; + + Vector<AnimationTrackEdit *> track_edits; + Vector<AnimationTrackEditGroup *> groups; + + bool block_animation_update; + + int _get_track_selected(); + void _animation_changed(); + void _update_tracks(); + + void _name_limit_changed(); + void _timeline_changed(float p_new_pos, bool p_drag); + void _track_remove_request(int p_track); + + UndoRedo *undo_redo; + + void _update_scroll(double); + void _update_step(double p_new_step); + void _update_length(double p_new_step); + void _dropped_track(int p_from_track, int p_to_track); + + void _add_track(int p_type); + void _new_track_node_selected(NodePath p_path); + void _new_track_property_selected(String p_name); + + PropertySelector *prop_selector; + PropertySelector *method_selector; + SceneTreeDialog *pick_track; + int adding_track_type; + NodePath adding_track_path; + + bool keying; + + struct InsertData { + + Animation::TrackType type; + NodePath path; + int track_idx; + Variant value; + String query; + bool advance; + }; /* insert_data;*/ + + Label *insert_confirm_text; + CheckBox *insert_confirm_bezier; + ConfirmationDialog *insert_confirm; + bool insert_queue; + bool inserting; + bool insert_query; + List<InsertData> insert_data; + uint64_t insert_frame; + + void _query_insert(const InsertData &p_id); + void _confirm_insert_list(); + int _confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers = false); + void _insert_delay(); + + void _root_removed(Node *p_root); + + PropertyInfo _find_hint_for_track(int p_idx, NodePath &r_base_path, Variant *r_current_val = NULL); + + void _timeline_value_changed(double); + + float insert_key_from_track_call_ofs; + int insert_key_from_track_call_track; + void _insert_key_from_track(float p_ofs, int p_track); + void _add_method_key(const String &p_method); + + void _clear_selection(); + void _clear_selection_for_anim(const Ref<Animation> &p_anim); + void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos); + + //selection + + struct SelectedKey { + + int track; + int key; + bool operator<(const SelectedKey &p_key) const { return track == p_key.track ? key < p_key.key : track < p_key.track; }; + }; + + struct KeyInfo { + + float pos; + }; + + Map<SelectedKey, KeyInfo> selection; + + void _key_selected(int p_key, bool p_single, int p_track); + void _key_deselected(int p_key, int p_track); + + bool moving_selection; + float moving_selection_offset; + void _move_selection_begin(); + void _move_selection(float p_offset); + void _move_selection_commit(); + void _move_selection_cancel(); + + AnimationTrackKeyEdit *key_edit; + void _update_key_edit(); + + void _clear_key_edit(); + + Control *box_selection; + void _box_selection_draw(); + bool box_selecting; + Vector2 box_selecting_from; + Rect2 box_select_rect; + void _scroll_input(const Ref<InputEvent> &p_event); + + Vector<Ref<AnimationTrackEditPlugin> > track_edit_plugins; + + void _cancel_bezier_edit(); + void _bezier_edit(int p_for_track); + + ////////////// edit menu stuff + + ConfirmationDialog *optimize_dialog; + SpinBox *optimize_linear_error; + SpinBox *optimize_angular_error; + SpinBox *optimize_max_angle; + + ConfirmationDialog *cleanup_dialog; + CheckButton *cleanup_keys; + CheckButton *cleanup_tracks; + CheckButton *cleanup_all; + + ConfirmationDialog *scale_dialog; + SpinBox *scale; + + void _edit_menu_pressed(int p_option); + int last_menu_track_opt; + + void _cleanup_animation(Ref<Animation> p_animation); + + void _anim_duplicate_keys(bool transpose); + + void _view_group_toggle(); + ToolButton *view_group; + ToolButton *selected_filter; + + void _selection_changed(); + + ConfirmationDialog *track_copy_dialog; + Tree *track_copy_select; + struct TrackClipboard { + NodePath full_path; + NodePath base_path; + Animation::TrackType track_type; + Animation::InterpolationType interp_type; + Animation::UpdateMode update_mode; + bool loop_wrap; + bool enabled; + + struct Key { + float time; + float transition; + Variant value; + }; + Vector<Key> keys; + }; + + Vector<TrackClipboard> track_clipboard; + + void _insert_animation_key(NodePath p_path, const Variant &p_value); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + void add_track_edit_plugin(const Ref<AnimationTrackEditPlugin> &p_plugin); + void remove_track_edit_plugin(const Ref<AnimationTrackEditPlugin> &p_plugin); + + void set_animation(const Ref<Animation> &p_anim); + Ref<Animation> get_current_animation() const; + void set_root(Node *p_root); + Node *get_root() const; + void update_keying(); + bool has_keying() const; + + void cleanup(); + + void set_anim_pos(float p_pos); + void insert_node_value_key(Node *p_node, const String &p_property, const Variant &p_value, bool p_only_if_exists = false); + void insert_value_key(const String &p_property, const Variant &p_value, bool p_advance); + void insert_transform_key(Spatial *p_node, const String &p_sub, const Transform &p_xform); + + void show_select_node_warning(bool p_show); + + bool is_key_selected(int p_track, int p_key) const; + bool is_selection_active() const; + bool is_moving_selection() const; + float get_moving_selection_offset() const; + bool is_snap_enabled(); + float snap_time(float p_value); + + MenuButton *get_edit_menu(); + AnimationTrackEditor(); + ~AnimationTrackEditor(); +}; + +#endif // ANIMATION_TRACK_EDITOR_H diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp new file mode 100644 index 0000000000..d0c91f10d9 --- /dev/null +++ b/editor/animation_track_editor_plugins.cpp @@ -0,0 +1,1317 @@ +#include "animation_track_editor_plugins.h" +#include "editor/audio_stream_preview.h" +#include "editor_resource_preview.h" +#include "editor_scale.h" +#include "scene/2d/animated_sprite.h" +#include "scene/2d/sprite.h" +#include "scene/3d/sprite_3d.h" +#include "scene/animation/animation_player.h" +#include "servers/audio/audio_stream.h" +/// BOOL /// +int AnimationTrackEditBool::get_key_height() const { + + Ref<Texture> checked = get_icon("checked", "CheckBox"); + return checked->get_height(); +} +Rect2 AnimationTrackEditBool::get_key_rect(int p_index, float p_pixels_sec) { + + Ref<Texture> checked = get_icon("checked", "CheckBox"); + return Rect2(0, 0, checked->get_width(), get_size().height); +} + +bool AnimationTrackEditBool::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Ref<Texture> icon; + bool checked = get_animation()->track_get_key_value(get_track(), p_index); + + if (checked) + icon = get_icon("checked", "CheckBox"); + else + icon = get_icon("unchecked", "CheckBox"); + + Vector2 ofs(p_x, int(get_size().height - icon->get_height()) / 2); + + draw_texture_clipped(icon, ofs); + + if (p_selected) { + Color color = get_color("accent_color", "Editor"); + draw_rect_clipped(Rect2(ofs, icon->get_size()), color, false); + } +} + +/// COLOR /// + +int AnimationTrackEditColor::get_key_height() const { + + Ref<Font> font = get_font("font", "Label"); + return font->get_height() * 0.8; +} +Rect2 AnimationTrackEditColor::get_key_rect(int p_index, float p_pixels_sec) { + + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + return Rect2(0, 0, fh, get_size().height); +} + +bool AnimationTrackEditColor::is_key_selectable_by_distance() const { + + return false; +} + +void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { + + int x_from = p_x; + int x_to = p_next_x; + + Ref<Font> font = get_font("font", "Label"); + int fh = (font->get_height() * 0.8); + + x_from += fh - 1; + x_to += 1; + fh /= 3; + + if (x_from > p_clip_right) + return; + + if (x_to < p_clip_left) + return; + + Color color = get_animation()->track_get_key_value(get_track(), p_index); + Color color_next = get_animation()->track_get_key_value(get_track(), p_index + 1); + + if (x_from < p_clip_left) { + float c = float(p_clip_left - x_from) / (x_to - x_from); + color = color.linear_interpolate(color_next, c); + x_from = p_clip_left; + } + + if (x_to > p_clip_right) { + float c = float(p_clip_right - x_from) / (x_to - x_from); + color_next = color.linear_interpolate(color_next, c); + x_to = p_clip_right; + } + + int y_from = (get_size().height - fh) / 2; + + Vector<Vector2> points; + Vector<Color> colors; + + points.push_back(Vector2(x_from, y_from)); + colors.push_back(color); + + points.push_back(Vector2(x_to, y_from)); + colors.push_back(color_next); + + points.push_back(Vector2(x_to, y_from + fh)); + colors.push_back(color_next); + + points.push_back(Vector2(x_from, y_from + fh)); + colors.push_back(color); + + draw_primitive(points, colors, Vector<Vector2>()); +} + +void AnimationTrackEditColor::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Color color = get_animation()->track_get_key_value(get_track(), p_index); + + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + + Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); + + draw_rect_clipped(Rect2(rect.position, rect.size / 2), Color(0.4, 0.4, 0.4)); + draw_rect_clipped(Rect2(rect.position + rect.size / 2, rect.size / 2), Color(0.4, 0.4, 0.4)); + draw_rect_clipped(Rect2(rect.position + Vector2(rect.size.x / 2, 0), rect.size / 2), Color(0.6, 0.6, 0.6)); + draw_rect_clipped(Rect2(rect.position + Vector2(0, rect.size.y / 2), rect.size / 2), Color(0.6, 0.6, 0.6)); + draw_rect_clipped(rect, color); + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect_clipped(rect, accent, false); + } +} + +/// AUDIO /// + +void AnimationTrackEditAudio::_preview_changed(ObjectID p_which) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) + return; + + Ref<AudioStream> stream = object->call("get_stream"); + + if (stream.is_valid() && stream->get_instance_id() == p_which) { + update(); + } +} + +int AnimationTrackEditAudio::get_key_height() const { + + if (!ObjectDB::get_instance(id)) { + return AnimationTrackEdit::get_key_height(); + } + + Ref<Font> font = get_font("font", "Label"); + return int(font->get_height() * 1.5); +} +Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + Ref<AudioStream> stream = object->call("get_stream"); + + if (!stream.is_valid()) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + bool play = get_animation()->track_get_key_value(get_track(), p_index); + if (play) { + float len = stream->get_length(); + + if (len == 0) { + + Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); + len = preview->get_length(); + } + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + return Rect2(0, 0, len * p_pixels_sec, get_size().height); + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + return Rect2(0, 0, fh, get_size().height); + } +} + +bool AnimationTrackEditAudio::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + Ref<AudioStream> stream = object->call("get_stream"); + + if (!stream.is_valid()) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + Ref<Font> font = get_font("font", "Label"); + float fh = int(font->get_height() * 1.5); + + bool play = get_animation()->track_get_key_value(get_track(), p_index); + if (play) { + float len = stream->get_length(); + + Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); + + float preview_len = preview->get_length(); + + if (len == 0) { + len = preview_len; + } + + int pixel_len = len * p_pixels_sec; + + int pixel_begin = p_x; + int pixel_end = p_x + pixel_len; + + if (pixel_end < p_clip_left) + return; + + if (pixel_begin > p_clip_right) + return; + + int from_x = MAX(pixel_begin, p_clip_left); + int to_x = MIN(pixel_end, p_clip_right); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + float limit = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + int limit_x = pixel_begin + limit * p_pixels_sec; + to_x = MIN(limit_x, to_x); + } + + if (to_x <= from_x) + return; + + int h = get_size().height; + Rect2 rect = Rect2(from_x, (h - fh) / 2, to_x - from_x, fh); + draw_rect(rect, Color(0.25, 0.25, 0.25)); + + Vector<Vector2> lines; + lines.resize((to_x - from_x + 1) * 2); + preview_len = preview->get_length(); + + for (int i = from_x; i < to_x; i++) { + + float ofs = (i - pixel_begin) * preview_len / pixel_len; + float ofs_n = ((i + 1) - pixel_begin) * preview_len / pixel_len; + float max = preview->get_max(ofs, ofs_n) * 0.5 + 0.5; + float min = preview->get_min(ofs, ofs_n) * 0.5 + 0.5; + + int idx = i - from_x; + lines[idx * 2 + 0] = Vector2(i, rect.position.y + min * rect.size.y); + lines[idx * 2 + 1] = Vector2(i, rect.position.y + max * rect.size.y); + } + + Vector<Color> color; + color.push_back(Color(0.75, 0.75, 0.75)); + + VS::get_singleton()->canvas_item_add_multiline(get_canvas_item(), lines, color); + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); + + Color color = get_color("font_color", "Label"); + draw_rect(rect, color); + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } +} + +void AnimationTrackEditAudio::set_node(Object *p_object) { + + id = p_object->get_instance_id(); +} + +void AnimationTrackEditAudio::_bind_methods() { + ClassDB::bind_method("_preview_changed", &AnimationTrackEditAudio::_preview_changed); +} + +AnimationTrackEditAudio::AnimationTrackEditAudio() { + AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); +} + +/// SPRITE FRAME /// + +int AnimationTrackEditSpriteFrame::get_key_height() const { + + if (!ObjectDB::get_instance(id)) { + return AnimationTrackEdit::get_key_height(); + } + + Ref<Font> font = get_font("font", "Label"); + return int(font->get_height() * 2); +} +Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_sec) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + Size2 size; + + if (Object::cast_to<Sprite>(object) || Object::cast_to<Sprite3D>(object)) { + + Ref<Texture> texture = object->call("get_texture"); + if (!texture.is_valid()) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + size = texture->get_size(); + + if (bool(object->call("is_region"))) { + size = Rect2(object->call("get_region_rect")).size; + } + + int hframes = object->call("get_hframes"); + int vframes = object->call("get_vframes"); + + if (hframes > 1) { + size.x /= hframes; + } + if (vframes > 1) { + size.y /= vframes; + } + } else if (Object::cast_to<AnimatedSprite>(object) || Object::cast_to<AnimatedSprite3D>(object)) { + + Ref<SpriteFrames> sf = object->call("get_sprite_frames"); + if (sf.is_null()) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + List<StringName> animations; + sf->get_animation_list(&animations); + + int frame = get_animation()->track_get_key_value(get_track(), p_index); + String animation; + if (animations.size() == 1) { + animation = animations.front()->get(); + } else { + // Go through other track to find if animation is set + String animation_path = get_animation()->track_get_path(get_track()); + animation_path = animation_path.replace(":frame", ":animation"); + int animation_track = get_animation()->find_track(animation_path); + float track_time = get_animation()->track_get_key_time(get_track(), p_index); + int animaiton_index = get_animation()->track_find_key(animation_track, track_time); + animation = get_animation()->track_get_key_value(animation_track, animaiton_index); + } + + Ref<Texture> texture = sf->get_frame(animation, frame); + if (!texture.is_valid()) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + size = texture->get_size(); + } + + size = size.floor(); + + Ref<Font> font = get_font("font", "Label"); + int height = int(font->get_height() * 2); + int width = height * size.width / size.height; + + return Rect2(0, 0, width, get_size().height); +} + +bool AnimationTrackEditSpriteFrame::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + int frame = get_animation()->track_get_key_value(get_track(), p_index); + + Ref<Texture> texture; + Rect2 region; + + if (Object::cast_to<Sprite>(object) || Object::cast_to<Sprite3D>(object)) { + + texture = object->call("get_texture"); + if (!texture.is_valid()) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + region.size = texture->get_size(); + + if (bool(object->call("is_region"))) { + + region = Rect2(object->call("get_region_rect")); + } + + int hframes = object->call("get_hframes"); + int vframes = object->call("get_vframes"); + + if (hframes > 1) { + region.size.x /= hframes; + } + if (vframes > 1) { + region.size.y /= vframes; + } + + region.position.x += region.size.x * (frame % hframes); + region.position.y += region.size.y * (frame / hframes); + + } else if (Object::cast_to<AnimatedSprite>(object) || Object::cast_to<AnimatedSprite3D>(object)) { + + Ref<SpriteFrames> sf = object->call("get_sprite_frames"); + if (sf.is_null()) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + List<StringName> animations; + sf->get_animation_list(&animations); + + int frame = get_animation()->track_get_key_value(get_track(), p_index); + String animation; + if (animations.size() == 1) { + animation = animations.front()->get(); + } else { + // Go through other track to find if animation is set + String animation_path = get_animation()->track_get_path(get_track()); + animation_path = animation_path.replace(":frame", ":animation"); + int animation_track = get_animation()->find_track(animation_path); + float track_time = get_animation()->track_get_key_time(get_track(), p_index); + int animaiton_index = get_animation()->track_find_key(animation_track, track_time); + animation = get_animation()->track_get_key_value(animation_track, animaiton_index); + } + + texture = sf->get_frame(animation, frame); + if (!texture.is_valid()) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + region.size = texture->get_size(); + } + + Ref<Font> font = get_font("font", "Label"); + int height = int(font->get_height() * 2); + + int width = height * region.size.width / region.size.height; + + Rect2 rect(p_x, int(get_size().height - height) / 2, width, height); + + if (rect.position.x + rect.size.x < p_clip_left) + return; + + if (rect.position.x > p_clip_right) + return; + + Color accent = get_color("accent_color", "Editor"); + Color bg = accent; + bg.a = 0.15; + + draw_rect_clipped(rect, bg); + + draw_texture_region_clipped(texture, rect, region); + + if (p_selected) { + draw_rect_clipped(rect, accent, false); + } +} + +void AnimationTrackEditSpriteFrame::set_node(Object *p_object) { + + id = p_object->get_instance_id(); +} + +/// SUB ANIMATION /// + +int AnimationTrackEditSubAnim::get_key_height() const { + + if (!ObjectDB::get_instance(id)) { + return AnimationTrackEdit::get_key_height(); + } + + Ref<Font> font = get_font("font", "Label"); + return int(font->get_height() * 1.5); +} +Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(object); + + if (!ap) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + String anim = get_animation()->track_get_key_value(get_track(), p_index); + + if (anim != "[stop]" && ap->has_animation(anim)) { + + float len = ap->get_animation(anim)->get_length(); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + return Rect2(0, 0, len * p_pixels_sec, get_size().height); + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + return Rect2(0, 0, fh, get_size().height); + } +} + +bool AnimationTrackEditSubAnim::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(object); + + if (!ap) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + String anim = get_animation()->track_get_key_value(get_track(), p_index); + + if (anim != "[stop]" && ap->has_animation(anim)) { + + float len = ap->get_animation(anim)->get_length(); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + int pixel_len = len * p_pixels_sec; + + int pixel_begin = p_x; + int pixel_end = p_x + pixel_len; + + if (pixel_end < p_clip_left) + return; + + if (pixel_begin > p_clip_right) + return; + + int from_x = MAX(pixel_begin, p_clip_left); + int to_x = MIN(pixel_end, p_clip_right); + + if (to_x <= from_x) + return; + + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 1.5; + + Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); + + Color color = get_color("font_color", "Label"); + Color bg = color; + bg.r = 1 - color.r; + bg.g = 1 - color.g; + bg.b = 1 - color.b; + draw_rect(rect, bg); + + Vector<Vector2> lines; + Vector<Color> colorv; + { + Ref<Animation> animation = ap->get_animation(anim); + + for (int i = 0; i < animation->get_track_count(); i++) { + + float h = (rect.size.height - 2) / animation->get_track_count(); + + int y = 2 + h * i + h / 2; + + for (int j = 0; j < animation->track_get_key_count(i); j++) { + + float ofs = animation->track_get_key_time(i, j); + int x = p_x + ofs * p_pixels_sec + 2; + + if (x < from_x || x >= (to_x - 4)) + continue; + + lines.push_back(Point2(x, y)); + lines.push_back(Point2(x + 1, y)); + } + } + + colorv.push_back(color); + } + + if (lines.size() > 2) { + VS::get_singleton()->canvas_item_add_multiline(get_canvas_item(), lines, colorv); + } + + int limit = to_x - from_x - 4; + if (limit > 0) { + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + } + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); + + Color color = get_color("font_color", "Label"); + draw_rect(rect, color); + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } +} + +void AnimationTrackEditSubAnim::set_node(Object *p_object) { + + id = p_object->get_instance_id(); +} + +//// VOLUME DB //// + +int AnimationTrackEditVolumeDB::get_key_height() const { + + Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + return volume_texture->get_height() * 1.2; +} + +void AnimationTrackEditVolumeDB::draw_bg(int p_clip_left, int p_clip_right) { + + Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + int tex_h = volume_texture->get_height(); + + int y_from = (get_size().height - tex_h) / 2; + int y_size = tex_h; + + Color color(1, 1, 1, 0.3); + draw_texture_rect(volume_texture, Rect2(p_clip_left, y_from, p_clip_right - p_clip_left, y_from + y_size), false, color); +} + +void AnimationTrackEditVolumeDB::draw_fg(int p_clip_left, int p_clip_right) { + + Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + int tex_h = volume_texture->get_height(); + int y_from = (get_size().height - tex_h) / 2; + int db0 = y_from + (24 / 80.0) * tex_h; + + draw_line(Vector2(p_clip_left, db0), Vector2(p_clip_right, db0), Color(1, 1, 1, 0.3)); +} + +void AnimationTrackEditVolumeDB::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { + + if (p_x > p_clip_right || p_next_x < p_clip_left) + return; + + float db = get_animation()->track_get_key_value(get_track(), p_index); + float db_n = get_animation()->track_get_key_value(get_track(), p_index + 1); + + db = CLAMP(db, -60, 24); + db_n = CLAMP(db_n, -60, 24); + + float h = 1.0 - ((db + 60) / 84.0); + float h_n = 1.0 - ((db_n + 60) / 84.0); + + int from_x = p_x; + int to_x = p_next_x; + + if (from_x < p_clip_left) { + h = Math::lerp(h, h_n, float(p_clip_left - from_x) / float(to_x - from_x)); + from_x = p_clip_left; + } + + if (to_x > p_clip_right) { + h_n = Math::lerp(h, h_n, float(p_clip_right - from_x) / float(to_x - from_x)); + to_x = p_clip_right; + } + + Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + int tex_h = volume_texture->get_height(); + + int y_from = (get_size().height - tex_h) / 2; + + Color color = get_color("font_color", "Label"); + color.a *= 0.7; + + draw_line(Point2(from_x, y_from + h * tex_h), Point2(to_x, y_from + h_n * tex_h), color, 2); +} + +//////////////////////// + +/// AUDIO /// + +void AnimationTrackEditTypeAudio::_preview_changed(ObjectID p_which) { + + for (int i = 0; i < get_animation()->track_get_key_count(get_track()); i++) { + Ref<AudioStream> stream = get_animation()->audio_track_get_key_stream(get_track(), i); + if (stream.is_valid() && stream->get_instance_id() == p_which) { + update(); + return; + } + } +} + +int AnimationTrackEditTypeAudio::get_key_height() const { + + Ref<Font> font = get_font("font", "Label"); + return int(font->get_height() * 1.5); +} +Rect2 AnimationTrackEditTypeAudio::get_key_rect(int p_index, float p_pixels_sec) { + + Ref<AudioStream> stream = get_animation()->audio_track_get_key_stream(get_track(), p_index); + + if (!stream.is_valid()) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + float start_ofs = get_animation()->audio_track_get_key_start_offset(get_track(), p_index); + float end_ofs = get_animation()->audio_track_get_key_end_offset(get_track(), p_index); + + float len = stream->get_length(); + + if (len == 0) { + + Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); + len = preview->get_length(); + } + + len -= end_ofs; + len -= start_ofs; + if (len <= 0.001) { + len = 0.001; + } + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + return Rect2(0, 0, len * p_pixels_sec, get_size().height); +} + +bool AnimationTrackEditTypeAudio::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Ref<AudioStream> stream = get_animation()->audio_track_get_key_stream(get_track(), p_index); + + if (!stream.is_valid()) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + float start_ofs = get_animation()->audio_track_get_key_start_offset(get_track(), p_index); + float end_ofs = get_animation()->audio_track_get_key_end_offset(get_track(), p_index); + + if (len_resizing && p_index == len_resizing_index) { + float ofs_local = -len_resizing_rel / get_timeline()->get_zoom_scale(); + if (len_resizing_start) { + start_ofs += ofs_local; + if (start_ofs < 0) + start_ofs = 0; + } else { + end_ofs += ofs_local; + if (end_ofs < 0) + end_ofs = 0; + } + } + + Ref<Font> font = get_font("font", "Label"); + float fh = int(font->get_height() * 1.5); + + float len = stream->get_length(); + + Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); + + float preview_len = preview->get_length(); + + if (len == 0) { + len = preview_len; + } + + int pixel_total_len = len * p_pixels_sec; + + len -= end_ofs; + len -= start_ofs; + + if (len <= 0.001) { + len = 0.001; + } + + int pixel_len = len * p_pixels_sec; + + int pixel_begin = p_x; + int pixel_end = p_x + pixel_len; + + if (pixel_end < p_clip_left) + return; + + if (pixel_begin > p_clip_right) + return; + + int from_x = MAX(pixel_begin, p_clip_left); + int to_x = MIN(pixel_end, p_clip_right); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + float limit = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + int limit_x = pixel_begin + limit * p_pixels_sec; + to_x = MIN(limit_x, to_x); + } + + if (to_x <= from_x) { + to_x = from_x + 1; + } + + int h = get_size().height; + Rect2 rect = Rect2(from_x, (h - fh) / 2, to_x - from_x, fh); + draw_rect(rect, Color(0.25, 0.25, 0.25)); + + Vector<Vector2> lines; + lines.resize((to_x - from_x + 1) * 2); + preview_len = preview->get_length(); + + for (int i = from_x; i < to_x; i++) { + + float ofs = (i - pixel_begin) * preview_len / pixel_total_len; + float ofs_n = ((i + 1) - pixel_begin) * preview_len / pixel_total_len; + ofs += start_ofs; + ofs_n += start_ofs; + + float max = preview->get_max(ofs, ofs_n) * 0.5 + 0.5; + float min = preview->get_min(ofs, ofs_n) * 0.5 + 0.5; + + int idx = i - from_x; + lines[idx * 2 + 0] = Vector2(i, rect.position.y + min * rect.size.y); + lines[idx * 2 + 1] = Vector2(i, rect.position.y + max * rect.size.y); + } + + Vector<Color> color; + color.push_back(Color(0.75, 0.75, 0.75)); + + VS::get_singleton()->canvas_item_add_multiline(get_canvas_item(), lines, color); + + Color cut_color = get_color("accent_color", "Editor"); + cut_color.a = 0.7; + if (start_ofs > 0 && pixel_begin > p_clip_left) { + draw_rect(Rect2(pixel_begin, rect.position.y, 1, rect.size.y), cut_color); + } + if (end_ofs > 0 && pixel_end < p_clip_right) { + draw_rect(Rect2(pixel_end, rect.position.y, 1, rect.size.y), cut_color); + } + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } +} + +void AnimationTrackEditTypeAudio::_bind_methods() { + ClassDB::bind_method("_preview_changed", &AnimationTrackEditTypeAudio::_preview_changed); +} + +AnimationTrackEditTypeAudio::AnimationTrackEditTypeAudio() { + AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); + len_resizing = false; +} + +bool AnimationTrackEditTypeAudio::can_drop_data(const Point2 &p_point, const Variant &p_data) const { + + if (p_point.x > get_timeline()->get_name_limit() && p_point.x < get_size().width - get_timeline()->get_buttons_width()) { + + Dictionary drag_data = p_data; + if (drag_data.has("type") && String(drag_data["type"]) == "resource") { + Ref<AudioStream> res = drag_data["resource"]; + if (res.is_valid()) { + return true; + } + } + + if (drag_data.has("type") && String(drag_data["type"]) == "files") { + + Vector<String> files = drag_data["files"]; + + if (files.size() == 1) { + String file = files[0]; + Ref<AudioStream> res = ResourceLoader::load(file); + if (res.is_valid()) { + return true; + } + } + } + } + + return AnimationTrackEdit::can_drop_data(p_point, p_data); +} +void AnimationTrackEditTypeAudio::drop_data(const Point2 &p_point, const Variant &p_data) { + + if (p_point.x > get_timeline()->get_name_limit() && p_point.x < get_size().width - get_timeline()->get_buttons_width()) { + + Ref<AudioStream> stream; + Dictionary drag_data = p_data; + if (drag_data.has("type") && String(drag_data["type"]) == "resource") { + stream = drag_data["resource"]; + } else if (drag_data.has("type") && String(drag_data["type"]) == "files") { + + Vector<String> files = drag_data["files"]; + + if (files.size() == 1) { + String file = files[0]; + stream = ResourceLoader::load(file); + } + } + + if (stream.is_valid()) { + + int x = p_point.x - get_timeline()->get_name_limit(); + float ofs = x / get_timeline()->get_zoom_scale(); + ofs += get_timeline()->get_value(); + + ofs = get_editor()->snap_time(ofs); + + while (get_animation()->track_find_key(get_track(), ofs, true) != -1) { //make sure insertion point is valid + ofs += 0.001; + } + + print_line("inserting"); + + *get_block_animation_update_ptr() = true; + get_undo_redo()->create_action("Add Audio Track Clip"); + get_undo_redo()->add_do_method(get_animation().ptr(), "audio_track_insert_key", get_track(), ofs, stream); + get_undo_redo()->add_undo_method(get_animation().ptr(), "track_remove_key_at_position", get_track(), ofs); + get_undo_redo()->commit_action(); + *get_block_animation_update_ptr() = false; + + update(); + return; + } + } + + return AnimationTrackEdit::drop_data(p_point, p_data); +} + +void AnimationTrackEditTypeAudio::_gui_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventMouseMotion> mm = p_event; + if (!len_resizing && mm.is_valid()) { + bool use_hsize_cursor = false; + for (int i = 0; i < get_animation()->track_get_key_count(get_track()); i++) { + + Ref<AudioStream> stream = get_animation()->audio_track_get_key_stream(get_track(), i); + + if (!stream.is_valid()) { + continue; + } + + float start_ofs = get_animation()->audio_track_get_key_start_offset(get_track(), i); + float end_ofs = get_animation()->audio_track_get_key_end_offset(get_track(), i); + float len = stream->get_length(); + + if (len == 0) { + Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); + float preview_len = preview->get_length(); + len = preview_len; + } + + len -= end_ofs; + len -= start_ofs; + if (len <= 0.001) { + len = 0.001; + } + + if (get_animation()->track_get_key_count(get_track()) > i + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), i + 1) - get_animation()->track_get_key_time(get_track(), i)); + } + + float ofs = get_animation()->track_get_key_time(get_track(), i); + + ofs -= get_timeline()->get_value(); + ofs *= get_timeline()->get_zoom_scale(); + ofs += get_timeline()->get_name_limit(); + + int end = ofs + len * get_timeline()->get_zoom_scale(); + + if (end >= get_timeline()->get_name_limit() && end <= get_size().width - get_timeline()->get_buttons_width() && ABS(mm->get_position().x - end) < 5 * EDSCALE) { + use_hsize_cursor = true; + len_resizing_index = i; + } + } + + if (use_hsize_cursor) { + set_default_cursor_shape(CURSOR_HSIZE); + } else { + set_default_cursor_shape(CURSOR_ARROW); + } + } + + if (len_resizing && mm.is_valid()) { + len_resizing_rel += mm->get_relative().x; + len_resizing_start = mm->get_shift(); + update(); + accept_event(); + return; + } + + Ref<InputEventMouseButton> mb = p_event; + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && get_default_cursor_shape() == CURSOR_HSIZE) { + + len_resizing = true; + len_resizing_start = mb->get_shift(); + len_resizing_from_px = mb->get_position().x; + len_resizing_rel = 0; + update(); + accept_event(); + return; + } + + if (len_resizing && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + float ofs_local = -len_resizing_rel / get_timeline()->get_zoom_scale(); + if (len_resizing_start) { + float prev_ofs = get_animation()->audio_track_get_key_start_offset(get_track(), len_resizing_index); + *get_block_animation_update_ptr() = true; + get_undo_redo()->create_action("Change Audio Track Clip Start Offset"); + get_undo_redo()->add_do_method(get_animation().ptr(), "audio_track_set_key_start_offset", get_track(), len_resizing_index, prev_ofs + ofs_local); + get_undo_redo()->add_undo_method(get_animation().ptr(), "audio_track_set_key_start_offset", get_track(), len_resizing_index, prev_ofs); + get_undo_redo()->commit_action(); + *get_block_animation_update_ptr() = false; + + } else { + float prev_ofs = get_animation()->audio_track_get_key_end_offset(get_track(), len_resizing_index); + *get_block_animation_update_ptr() = true; + get_undo_redo()->create_action("Change Audio Track Clip End Offset"); + get_undo_redo()->add_do_method(get_animation().ptr(), "audio_track_set_key_end_offset", get_track(), len_resizing_index, prev_ofs + ofs_local); + get_undo_redo()->add_undo_method(get_animation().ptr(), "audio_track_set_key_end_offset", get_track(), len_resizing_index, prev_ofs); + get_undo_redo()->commit_action(); + *get_block_animation_update_ptr() = false; + } + + len_resizing = false; + len_resizing_index = -1; + update(); + accept_event(); + return; + } + + AnimationTrackEdit::_gui_input(p_event); +} + +//////////////////// +/// SUB ANIMATION /// + +int AnimationTrackEditTypeAnimation::get_key_height() const { + + if (!ObjectDB::get_instance(id)) { + return AnimationTrackEdit::get_key_height(); + } + + Ref<Font> font = get_font("font", "Label"); + return int(font->get_height() * 1.5); +} +Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_sec) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(object); + + if (!ap) { + return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); + } + + String anim = get_animation()->animation_track_get_key_animation(get_track(), p_index); + print_line("anim " + anim + " has " + itos(ap->has_animation(anim))); + + if (anim != "[stop]" && ap->has_animation(anim)) { + + float len = ap->get_animation(anim)->get_length(); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + return Rect2(0, 0, len * p_pixels_sec, get_size().height); + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + return Rect2(0, 0, fh, get_size().height); + } +} + +bool AnimationTrackEditTypeAnimation::is_key_selectable_by_distance() const { + + return false; +} +void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { + + Object *object = ObjectDB::get_instance(id); + + if (!object) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(object); + + if (!ap) { + AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); + return; + } + + String anim = get_animation()->animation_track_get_key_animation(get_track(), p_index); + + if (anim != "[stop]" && ap->has_animation(anim)) { + + float len = ap->get_animation(anim)->get_length(); + + if (get_animation()->track_get_key_count(get_track()) > p_index + 1) { + len = MIN(len, get_animation()->track_get_key_time(get_track(), p_index + 1) - get_animation()->track_get_key_time(get_track(), p_index)); + } + + int pixel_len = len * p_pixels_sec; + + int pixel_begin = p_x; + int pixel_end = p_x + pixel_len; + + if (pixel_end < p_clip_left) + return; + + if (pixel_begin > p_clip_right) + return; + + int from_x = MAX(pixel_begin, p_clip_left); + int to_x = MIN(pixel_end, p_clip_right); + + if (to_x <= from_x) + return; + + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 1.5; + + Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); + + Color color = get_color("font_color", "Label"); + Color bg = color; + bg.r = 1 - color.r; + bg.g = 1 - color.g; + bg.b = 1 - color.b; + draw_rect(rect, bg); + + Vector<Vector2> lines; + Vector<Color> colorv; + { + Ref<Animation> animation = ap->get_animation(anim); + + for (int i = 0; i < animation->get_track_count(); i++) { + + float h = (rect.size.height - 2) / animation->get_track_count(); + + int y = 2 + h * i + h / 2; + + for (int j = 0; j < animation->track_get_key_count(i); j++) { + + float ofs = animation->track_get_key_time(i, j); + int x = p_x + ofs * p_pixels_sec + 2; + + if (x < from_x || x >= (to_x - 4)) + continue; + + lines.push_back(Point2(x, y)); + lines.push_back(Point2(x + 1, y)); + } + } + + colorv.push_back(color); + } + + if (lines.size() > 2) { + VS::get_singleton()->canvas_item_add_multiline(get_canvas_item(), lines, colorv); + } + + int limit = to_x - from_x - 4; + if (limit > 0) { + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + } + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } else { + Ref<Font> font = get_font("font", "Label"); + int fh = font->get_height() * 0.8; + Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); + + Color color = get_color("font_color", "Label"); + draw_rect(rect, color); + + if (p_selected) { + Color accent = get_color("accent_color", "Editor"); + draw_rect(rect, accent, false); + } + } +} + +void AnimationTrackEditTypeAnimation::set_node(Object *p_object) { + + id = p_object->get_instance_id(); +} + +AnimationTrackEditTypeAnimation::AnimationTrackEditTypeAnimation() { +} + +///////// +AnimationTrackEdit *AnimationTrackEditDefaultPlugin::create_value_track_edit(Object *p_object, Variant::Type p_type, const String &p_property, PropertyHint p_hint, const String &p_hint_string, int p_usage) { + + if (p_property == "playing" && (p_object->is_class("AudioStreamPlayer") || p_object->is_class("AudioStreamPlayer2D") || p_object->is_class("AudioStreamPlayer3D"))) { + + AnimationTrackEditAudio *audio = memnew(AnimationTrackEditAudio); + audio->set_node(p_object); + return audio; + } + + if (p_property == "frame" && (p_object->is_class("Sprite") || p_object->is_class("Sprite3D") || p_object->is_class("AnimatedSprite") || p_object->is_class("AnimatedSprite3D"))) { + + AnimationTrackEditSpriteFrame *sprite = memnew(AnimationTrackEditSpriteFrame); + sprite->set_node(p_object); + return sprite; + } + + if (p_property == "current_animation" && (p_object->is_class("AnimationPlayer"))) { + + AnimationTrackEditSubAnim *player = memnew(AnimationTrackEditSubAnim); + player->set_node(p_object); + return player; + } + + if (p_property == "volume_db") { + + AnimationTrackEditVolumeDB *vu = memnew(AnimationTrackEditVolumeDB); + return vu; + } + + if (p_type == Variant::BOOL) { + return memnew(AnimationTrackEditBool); + } + if (p_type == Variant::COLOR) { + return memnew(AnimationTrackEditColor); + } + + return NULL; +} + +AnimationTrackEdit *AnimationTrackEditDefaultPlugin::create_audio_track_edit() { + + return memnew(AnimationTrackEditTypeAudio); +} + +AnimationTrackEdit *AnimationTrackEditDefaultPlugin::create_animation_track_edit(Object *p_object) { + + AnimationTrackEditTypeAnimation *an = memnew(AnimationTrackEditTypeAnimation); + an->set_node(p_object); + return an; +} diff --git a/editor/animation_track_editor_plugins.h b/editor/animation_track_editor_plugins.h new file mode 100644 index 0000000000..59604412d9 --- /dev/null +++ b/editor/animation_track_editor_plugins.h @@ -0,0 +1,139 @@ +#ifndef ANIMATION_TRACK_EDITOR_PLUGINS_H +#define ANIMATION_TRACK_EDITOR_PLUGINS_H + +#include "editor/animation_track_editor.h" + +class AnimationTrackEditBool : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditBool, AnimationTrackEdit) + Ref<Texture> icon_checked; + Ref<Texture> icon_unchecked; + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); +}; + +class AnimationTrackEditColor : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditColor, AnimationTrackEdit) + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + virtual void draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right); +}; + +class AnimationTrackEditAudio : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditAudio, AnimationTrackEdit) + + ObjectID id; + + void _preview_changed(ObjectID p_which); + +protected: + static void _bind_methods(); + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + + void set_node(Object *p_object); + + AnimationTrackEditAudio(); +}; + +class AnimationTrackEditSpriteFrame : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditSpriteFrame, AnimationTrackEdit) + + ObjectID id; + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + + void set_node(Object *p_object); +}; + +class AnimationTrackEditSubAnim : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditSubAnim, AnimationTrackEdit) + + ObjectID id; + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + + void set_node(Object *p_object); +}; + +class AnimationTrackEditTypeAudio : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditTypeAudio, AnimationTrackEdit) + + void _preview_changed(ObjectID p_which); + + bool len_resizing; + bool len_resizing_start; + int len_resizing_index; + float len_resizing_from_px; + float len_resizing_rel; + +protected: + static void _bind_methods(); + +public: + virtual void _gui_input(const Ref<InputEvent> &p_event); + + virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const; + virtual void drop_data(const Point2 &p_point, const Variant &p_data); + + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + + AnimationTrackEditTypeAudio(); +}; + +class AnimationTrackEditTypeAnimation : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditTypeAnimation, AnimationTrackEdit) + + ObjectID id; + +public: + virtual int get_key_height() const; + virtual Rect2 get_key_rect(int p_index, float p_pixels_sec); + virtual bool is_key_selectable_by_distance() const; + virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); + + void set_node(Object *p_object); + AnimationTrackEditTypeAnimation(); +}; + +class AnimationTrackEditVolumeDB : public AnimationTrackEdit { + GDCLASS(AnimationTrackEditVolumeDB, AnimationTrackEdit) + +public: + virtual void draw_bg(int p_clip_left, int p_clip_right); + virtual void draw_fg(int p_clip_left, int p_clip_right); + virtual int get_key_height() const; + virtual void draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right); +}; + +class AnimationTrackEditDefaultPlugin : public AnimationTrackEditPlugin { + GDCLASS(AnimationTrackEditDefaultPlugin, AnimationTrackEditPlugin) +public: + virtual AnimationTrackEdit *create_value_track_edit(Object *p_object, Variant::Type p_type, const String &p_property, PropertyHint p_hint, const String &p_hint_string, int p_usage); + virtual AnimationTrackEdit *create_audio_track_edit(); + virtual AnimationTrackEdit *create_animation_track_edit(Object *p_object); +}; + +#endif // ANIMATION_TRACK_EDITOR_PLUGINS_H diff --git a/editor/audio_stream_preview.cpp b/editor/audio_stream_preview.cpp new file mode 100644 index 0000000000..6ee4d7f4b0 --- /dev/null +++ b/editor/audio_stream_preview.cpp @@ -0,0 +1,211 @@ +#include "audio_stream_preview.h" + +///////////////////// + +float AudioStreamPreview::get_length() const { + return length; +} +float AudioStreamPreview::get_max(float p_time, float p_time_next) const { + + if (length == 0) + return 0; + + int max = preview.size() / 2; + int time_from = p_time / length * max; + int time_to = p_time_next / length * max; + time_from = CLAMP(time_from, 0, max - 1); + time_to = CLAMP(time_to, 0, max - 1); + + if (time_to <= time_from) { + time_to = time_from + 1; + } + + uint8_t vmax; + + for (int i = time_from; i < time_to; i++) { + + uint8_t v = preview[i * 2 + 1]; + if (i == 0 || v > vmax) { + vmax = v; + } + } + + return (vmax / 255.0) * 2.0 - 1.0; +} +float AudioStreamPreview::get_min(float p_time, float p_time_next) const { + + if (length == 0) + return 0; + + int max = preview.size() / 2; + int time_from = p_time / length * max; + int time_to = p_time_next / length * max; + time_from = CLAMP(time_from, 0, max - 1); + time_to = CLAMP(time_to, 0, max - 1); + + if (time_to <= time_from) { + time_to = time_from + 1; + } + + uint8_t vmin; + + for (int i = time_from; i < time_to; i++) { + + uint8_t v = preview[i * 2]; + if (i == 0 || v < vmin) { + vmin = v; + } + } + + return (vmin / 255.0) * 2.0 - 1.0; +} + +AudioStreamPreview::AudioStreamPreview() { + length = 0; +} + +//// + +void AudioStreamPreviewGenerator::_update_emit(ObjectID p_id) { + emit_signal("preview_updated", p_id); +} + +void AudioStreamPreviewGenerator::_preview_thread(void *p_preview) { + + Preview *preview = (Preview *)p_preview; + + float muxbuff_chunk_s = 0.25; + + int mixbuff_chunk_frames = AudioServer::get_singleton()->get_mix_rate() * muxbuff_chunk_s; + + Vector<AudioFrame> mix_chunk; + mix_chunk.resize(mixbuff_chunk_frames); + + int frames_total = AudioServer::get_singleton()->get_mix_rate() * preview->preview->length; + int frames_todo = frames_total; + + preview->playback->start(); + + while (frames_todo) { + + int ofs_write = uint64_t(frames_total - frames_todo) * uint64_t(preview->preview->preview.size() / 2) / uint64_t(frames_total); + int to_read = MIN(frames_todo, mixbuff_chunk_frames); + int to_write = uint64_t(to_read) * uint64_t(preview->preview->preview.size() / 2) / uint64_t(frames_total); + to_write = MIN(to_write, (preview->preview->preview.size() / 2) - ofs_write); + + preview->playback->mix(mix_chunk.ptrw(), 1.0, to_read); + + for (int i = 0; i < to_write; i++) { + float max = -1000; + float min = 1000; + int from = uint64_t(i) * to_read / to_write; + int to = uint64_t(i + 1) * to_read / to_write; + to = MIN(to, to_read); + from = MIN(from, to_read - 1); + if (to == from) { + to = from + 1; + } + + for (int j = from; j < to; j++) { + + max = MAX(max, mix_chunk[j].l); + max = MAX(max, mix_chunk[j].r); + + min = MIN(min, mix_chunk[j].l); + min = MIN(min, mix_chunk[j].r); + } + + uint8_t pfrom = CLAMP((min * 0.5 + 0.5) * 255, 0, 255); + uint8_t pto = CLAMP((max * 0.5 + 0.5) * 255, 0, 255); + + preview->preview->preview[(ofs_write + i) * 2 + 0] = pfrom; + preview->preview->preview[(ofs_write + i) * 2 + 1] = pto; + } + + frames_todo -= to_read; + singleton->call_deferred("_update_emit", preview->id); + } + + preview->playback->stop(); + + preview->generating = false; +} + +Ref<AudioStreamPreview> AudioStreamPreviewGenerator::generate_preview(const Ref<AudioStream> &p_stream) { + ERR_FAIL_COND_V(p_stream.is_null(), Ref<AudioStreamPreview>()); + + if (previews.has(p_stream->get_instance_id())) { + return previews[p_stream->get_instance_id()].preview; + } + + //no preview exists + + previews[p_stream->get_instance_id()] = Preview(); + + Preview *preview = &previews[p_stream->get_instance_id()]; + preview->base_stream = p_stream; + preview->playback = preview->base_stream->instance_playback(); + preview->generating = true; + preview->id = p_stream->get_instance_id(); + + float len_s = preview->base_stream->get_length(); + if (len_s == 0) { + len_s = 60 * 5; //five minutes + } + + int frames = AudioServer::get_singleton()->get_mix_rate() * len_s; + + Vector<uint8_t> maxmin; + int pw = frames / 20; + maxmin.resize(pw * 2); + { + uint8_t *ptr = maxmin.ptrw(); + for (int i = 0; i < pw * 2; i++) { + ptr[i] = 127; + } + } + + preview->preview.instance(); + preview->preview->preview = maxmin; + preview->preview->length = len_s; + + preview->thread = Thread::create(_preview_thread, preview); + + return preview->preview; +} + +void AudioStreamPreviewGenerator::_bind_methods() { + ClassDB::bind_method("_update_emit", &AudioStreamPreviewGenerator::_update_emit); + ClassDB::bind_method(D_METHOD("generate_preview", "stream"), &AudioStreamPreviewGenerator::generate_preview); + + ADD_SIGNAL(MethodInfo("preview_updated", PropertyInfo(Variant::INT, "obj_id"))); +} + +AudioStreamPreviewGenerator *AudioStreamPreviewGenerator::singleton = NULL; + +void AudioStreamPreviewGenerator::_notification(int p_what) { + if (p_what == NOTIFICATION_PROCESS) { + List<ObjectID> to_erase; + for (Map<ObjectID, Preview>::Element *E = previews.front(); E; E = E->next()) { + if (!E->get().generating) { + if (E->get().thread) { + Thread::wait_to_finish(E->get().thread); + E->get().thread = NULL; + } + if (!ObjectDB::get_instance(E->key())) { //no longer in use, get rid of preview + to_erase.push_back(E->key()); + } + } + } + + while (to_erase.front()) { + previews.erase(to_erase.front()->get()); + to_erase.pop_front(); + } + } +} + +AudioStreamPreviewGenerator::AudioStreamPreviewGenerator() { + singleton = this; + set_process(true); +} diff --git a/editor/audio_stream_preview.h b/editor/audio_stream_preview.h new file mode 100644 index 0000000000..cfe1667e9d --- /dev/null +++ b/editor/audio_stream_preview.h @@ -0,0 +1,56 @@ +#ifndef AUDIO_STREAM_PREVIEW_H +#define AUDIO_STREAM_PREVIEW_H + +#include "os/thread.h" +#include "scene/main/node.h" +#include "servers/audio/audio_stream.h" + +class AudioStreamPreview : public Reference { + GDCLASS(AudioStreamPreview, Reference) + friend class AudioStream; + Vector<uint8_t> preview; + float length; + + friend class AudioStreamPreviewGenerator; + +public: + float get_length() const; + float get_max(float p_time, float p_time_next) const; + float get_min(float p_time, float p_time_next) const; + + AudioStreamPreview(); +}; + +class AudioStreamPreviewGenerator : public Node { + GDCLASS(AudioStreamPreviewGenerator, Node) + + static AudioStreamPreviewGenerator *singleton; + + struct Preview { + Ref<AudioStreamPreview> preview; + Ref<AudioStream> base_stream; + Ref<AudioStreamPlayback> playback; + volatile bool generating; + ObjectID id; + Thread *thread; + }; + + Map<ObjectID, Preview> previews; + + static void _preview_thread(void *p_preview); + + void _update_emit(ObjectID p_id); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static AudioStreamPreviewGenerator *get_singleton() { return singleton; } + + Ref<AudioStreamPreview> generate_preview(const Ref<AudioStream> &p_preview); + + AudioStreamPreviewGenerator(); +}; + +#endif // AUDIO_STREAM_PREVIEW_H diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index c992ac5f16..542dca74e0 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -233,7 +233,12 @@ void DocData::generate(bool p_basic_types) { c.category = ClassDB::get_category(name); List<PropertyInfo> properties; - ClassDB::get_property_list(name, &properties, true); + if (name == "ProjectSettings") { + //special case for project settings, so settings can be documented + ProjectSettings::get_singleton()->get_property_list(&properties); + } else { + ClassDB::get_property_list(name, &properties, true); + } for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { if (E->get().usage & PROPERTY_USAGE_GROUP || E->get().usage & PROPERTY_USAGE_CATEGORY || E->get().usage & PROPERTY_USAGE_INTERNAL) @@ -810,9 +815,24 @@ Error DocData::_load(Ref<XMLParser> parser) { if (parser->get_node_type() == XMLParser::NODE_TEXT) c.description = parser->get_node_data(); } else if (name == "tutorials") { - parser->read(); - if (parser->get_node_type() == XMLParser::NODE_TEXT) - c.tutorials = parser->get_node_data(); + while (parser->read() == OK) { + + if (parser->get_node_type() == XMLParser::NODE_ELEMENT) { + + String name = parser->get_node_name(); + + if (name == "link") { + + parser->read(); + if (parser->get_node_type() == XMLParser::NODE_TEXT) + c.tutorials.push_back(parser->get_node_data().strip_edges()); + } else { + ERR_EXPLAIN("Invalid tag in doc file: " + name); + ERR_FAIL_V(ERR_FILE_CORRUPT); + } + } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "tutorials") + break; //end of <tutorials> + } } else if (name == "demos") { parser->read(); if (parser->get_node_type() == XMLParser::NODE_TEXT) @@ -987,7 +1007,9 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 2, c.description.strip_edges().xml_escape()); _write_string(f, 1, "</description>"); _write_string(f, 1, "<tutorials>"); - _write_string(f, 2, c.tutorials.strip_edges().xml_escape()); + for (int i = 0; i < c.tutorials.size(); i++) { + _write_string(f, 2, "<link>" + c.tutorials.get(i).xml_escape() + "</link>"); + } _write_string(f, 1, "</tutorials>"); _write_string(f, 1, "<demos>"); _write_string(f, 2, c.demos.strip_edges().xml_escape()); diff --git a/editor/doc/doc_data.h b/editor/doc/doc_data.h index 0461133f9f..c7b70b5fb9 100644 --- a/editor/doc/doc_data.h +++ b/editor/doc/doc_data.h @@ -85,7 +85,7 @@ public: String category; String brief_description; String description; - String tutorials; + Vector<String> tutorials; String demos; Vector<MethodDoc> methods; Vector<MethodDoc> signals; diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index 360ed620f6..4b09db0a9e 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -31,11 +31,11 @@ #include "editor_about.h" #include "editor_node.h" -#include "authors.gen.h" -#include "donors.gen.h" -#include "license.gen.h" -#include "version.h" -#include "version_hash.gen.h" +#include "core/authors.gen.h" +#include "core/donors.gen.h" +#include "core/license.gen.h" +#include "core/version.h" +#include "core/version_hash.gen.h" void EditorAbout::_notification(int p_what) { @@ -69,7 +69,7 @@ TextureRect *EditorAbout::get_logo() const { return _logo; } -ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[], const int p_flag_single_column) { +ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<String> &p_sections, const char *const *const p_src[], const int p_flag_single_column) { ScrollContainer *sc = memnew(ScrollContainer); sc->set_name(p_name); @@ -82,7 +82,7 @@ ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<St for (int i = 0; i < p_sections.size(); i++) { bool single_column = p_flag_single_column & 1 << i; - const char **names_ptr = p_src[i]; + const char *const *names_ptr = p_src[i]; if (*names_ptr) { Label *lbl = memnew(Label); @@ -151,7 +151,8 @@ EditorAbout::EditorAbout() { dev_sections.push_back(TTR("Lead Developer")); dev_sections.push_back(TTR("Project Manager ")); // " " appended to distinguish between 'project supervisor' and 'project list' dev_sections.push_back(TTR("Developers")); - const char **dev_src[] = { dev_founders, dev_lead, dev_manager, dev_names }; + const char *const *dev_src[] = { AUTHORS_FOUNDERS, AUTHORS_LEAD_DEVELOPERS, + AUTHORS_PROJECT_MANAGERS, AUTHORS_DEVELOPERS }; tc->add_child(_populate_list(TTR("Authors"), dev_sections, dev_src, 1)); // Donors @@ -163,7 +164,8 @@ EditorAbout::EditorAbout() { donor_sections.push_back(TTR("Gold Donors")); donor_sections.push_back(TTR("Silver Donors")); donor_sections.push_back(TTR("Bronze Donors")); - const char **donor_src[] = { donor_s_plat, donor_s_gold, donor_s_mini, donor_gold, donor_silver, donor_bronze }; + const char *const *donor_src[] = { DONORS_SPONSOR_PLAT, DONORS_SPONSOR_GOLD, + DONORS_SPONSOR_MINI, DONORS_GOLD, DONORS_SILVER, DONORS_BRONZE }; tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src, 3)); // License @@ -172,7 +174,7 @@ EditorAbout::EditorAbout() { _license_text->set_name(TTR("License")); _license_text->set_h_size_flags(Control::SIZE_EXPAND_FILL); _license_text->set_v_size_flags(Control::SIZE_EXPAND_FILL); - _license_text->set_text(String::utf8(about_license)); + _license_text->set_text(String::utf8(GODOT_LICENSE_TEXT)); tc->add_child(_license_text); // Thirdparty License @@ -186,6 +188,7 @@ EditorAbout::EditorAbout() { tpl_label->set_h_size_flags(Control::SIZE_EXPAND_FILL); tpl_label->set_autowrap(true); tpl_label->set_text(TTR("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.")); + tpl_label->set_size(Size2(630, 1) * EDSCALE); license_thirdparty->add_child(tpl_label); HSplitContainer *tpl_hbc = memnew(HSplitContainer); @@ -207,20 +210,27 @@ EditorAbout::EditorAbout() { tpl_ti_lc->set_selectable(0, false); int read_idx = 0; String long_text = ""; - for (int i = 0; i < THIRDPARTY_COUNT; i++) { + for (int component_index = 0; component_index < COPYRIGHT_INFO_COUNT; component_index++) { + const ComponentCopyright &component = COPYRIGHT_INFO[component_index]; TreeItem *ti = _tpl_tree->create_item(tpl_ti_tp); - String thirdparty = String(about_thirdparty[i]); - ti->set_text(0, thirdparty); - String text = thirdparty + "\n"; - long_text += "- " + thirdparty + "\n\n"; - for (int j = 0; j < about_tp_copyright_count[i]; j++) { - - text += "\n Files:\n " + String(about_tp_file[read_idx]).replace("\n", "\n ") + "\n"; - String copyright = String::utf8(" \xc2\xa9 ") + String::utf8(about_tp_copyright[read_idx]).replace("\n", String::utf8("\n \xc2\xa9 ")); + String component_name = component.name; + ti->set_text(0, component_name); + String text = component_name + "\n"; + long_text += "- " + component_name + "\n"; + for (int part_index = 0; part_index < component.part_count; part_index++) { + const ComponentCopyrightPart &part = component.parts[part_index]; + text += "\n Files:"; + for (int file_num = 0; file_num < part.file_count; file_num++) { + text += "\n " + String(part.files[file_num]); + } + String copyright; + for (int copyright_index = 0; copyright_index < part.copyright_count; copyright_index++) { + copyright += String::utf8("\n \xc2\xa9 ") + String::utf8(part.copyright_statements[copyright_index]); + } text += copyright; long_text += copyright; - String license = "\n License: " + String(about_tp_license[read_idx]) + "\n"; + String license = "\n License: " + String(part.license) + "\n"; text += license; long_text += license + "\n"; read_idx++; @@ -230,10 +240,10 @@ EditorAbout::EditorAbout() { for (int i = 0; i < LICENSE_COUNT; i++) { TreeItem *ti = _tpl_tree->create_item(tpl_ti_lc); - String licensename = String(about_license_name[i]); + String licensename = String(LICENSE_NAMES[i]); ti->set_text(0, licensename); long_text += "- " + licensename + "\n\n"; - String licensebody = String(about_license_body[i]); + String licensebody = String(LICENSE_BODIES[i]); ti->set_metadata(0, licensebody); long_text += " " + licensebody.replace("\n", "\n ") + "\n\n"; } diff --git a/editor/editor_about.h b/editor/editor_about.h index b32fdf6567..71d1c95188 100644 --- a/editor/editor_about.h +++ b/editor/editor_about.h @@ -53,7 +53,7 @@ class EditorAbout : public AcceptDialog { private: void _license_tree_selected(); - ScrollContainer *_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[], const int p_flag_single_column = 0); + ScrollContainer *_populate_list(const String &p_name, const List<String> &p_sections, const char *const *const p_src[], const int p_flag_single_column = 0); Tree *_tpl_tree; RichTextLabel *_license_text; diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index de9203232c..2f0982e5d9 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -610,8 +610,8 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & i = 0; for (List<AutoLoadInfo>::Element *E = autoload_cache.front(); E; E = E->next()) { - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", E->get().name, orders[i++]); - undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", E->get().name, E->get().order); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", "autoload/" + E->get().name, orders[i++]); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", "autoload/" + E->get().name, E->get().order); } orders.clear(); @@ -742,7 +742,21 @@ EditorAutoloadSettings::EditorAutoloadSettings() { info.name = name; info.path = path; info.order = ProjectSettings::get_singleton()->get_order(pi.name); - info.node = _create_autoload(path); + + if (info.is_singleton) { + // Make sure name references work before parsing scripts + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptServer::get_language(i)->add_named_global_constant(info.name, Variant()); + } + } + + autoload_cache.push_back(info); + } + + for (List<AutoLoadInfo>::Element *E = autoload_cache.front(); E; E = E->next()) { + AutoLoadInfo &info = E->get(); + + info.node = _create_autoload(info.path); if (info.node) { Ref<Script> scr = info.node->get_script(); @@ -760,8 +774,6 @@ EditorAutoloadSettings::EditorAutoloadSettings() { memdelete(info.node); info.node = NULL; } - - autoload_cache.push_back(info); } autoload_changed = "autoload_changed"; diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 4ac3e33cb9..4dde893c6d 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -78,7 +78,7 @@ void EditorHistory::cleanup_history() { current = history.size() - 1; } -void EditorHistory::_add_object(ObjectID p_object, const String &p_property, int p_level_change) { +void EditorHistory::_add_object(ObjectID p_object, const String &p_property, int p_level_change, bool p_inspector_only) { Object *obj = ObjectDB::get_instance(p_object); ERR_FAIL_COND(!obj); @@ -88,6 +88,7 @@ void EditorHistory::_add_object(ObjectID p_object, const String &p_property, int o.ref = REF(r); o.object = p_object; o.property = p_property; + o.inspector_only = p_inspector_only; History h; @@ -120,6 +121,11 @@ void EditorHistory::_add_object(ObjectID p_object, const String &p_property, int current++; } +void EditorHistory::add_object_inspector_only(ObjectID p_object) { + + _add_object(p_object, "", -1, true); +} + void EditorHistory::add_object(ObjectID p_object) { _add_object(p_object, "", -1); @@ -142,6 +148,13 @@ int EditorHistory::get_history_pos() { return current; } +bool EditorHistory::is_history_obj_inspector_only(int p_obj) const { + + ERR_FAIL_INDEX_V(p_obj, history.size(), false); + ERR_FAIL_INDEX_V(history[p_obj].level, history[p_obj].path.size(), false); + return history[p_obj].path[history[p_obj].level].inspector_only; +} + ObjectID EditorHistory::get_history_obj(int p_obj) const { ERR_FAIL_INDEX_V(p_obj, history.size(), 0); ERR_FAIL_INDEX_V(history[p_obj].level, history[p_obj].path.size(), 0); @@ -180,6 +193,14 @@ bool EditorHistory::previous() { return true; } +bool EditorHistory::is_current_inspector_only() const { + + if (current < 0 || current >= history.size()) + return false; + + const History &h = history[current]; + return h.path[h.level].inspector_only; +} ObjectID EditorHistory::get_current() { if (current < 0 || current >= history.size()) @@ -420,6 +441,18 @@ void EditorData::paste_object_params(Object *p_object) { } } +bool EditorData::call_build() { + + bool result = true; + + for (int i = 0; i < editor_plugins.size() && result; i++) { + + result &= editor_plugins[i]->build(); + } + + return result; +} + UndoRedo &EditorData::get_undo_redo() { return undo_redo; diff --git a/editor/editor_data.h b/editor/editor_data.h index f020d07ea7..0ecef8ae31 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -50,6 +50,7 @@ class EditorHistory { REF ref; ObjectID object; String property; + bool inspector_only; }; struct History { @@ -70,7 +71,7 @@ class EditorHistory { Variant value; }; - void _add_object(ObjectID p_object, const String &p_property, int p_level_change); + void _add_object(ObjectID p_object, const String &p_property, int p_level_change, bool p_inspector_only = false); public: void cleanup_history(); @@ -78,6 +79,7 @@ public: bool is_at_beginning() const; bool is_at_end() const; + void add_object_inspector_only(ObjectID p_object); void add_object(ObjectID p_object); void add_object(ObjectID p_object, const String &p_subprop); void add_object(ObjectID p_object, int p_relevel); @@ -85,10 +87,12 @@ public: int get_history_len(); int get_history_pos(); ObjectID get_history_obj(int p_obj) const; + bool is_history_obj_inspector_only(int p_obj) const; bool next(); bool previous(); ObjectID get_current(); + bool is_current_inspector_only() const; int get_path_size() const; ObjectID get_path_object(int p_index) const; @@ -197,6 +201,7 @@ public: NodePath get_edited_scene_live_edit_root(); bool check_and_update_scene(int p_idx); void move_edited_scene_to_index(int p_idx); + bool call_build(); void set_plugin_window_layout(Ref<ConfigFile> p_layout); void get_plugin_window_layout(Ref<ConfigFile> p_layout); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index f9b104cdae..65e50560bc 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -1280,11 +1280,10 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->add_newline(); // class_desc->add_newline(); - Vector<String> tutorials = cd.tutorials.split_spaces(); - if (tutorials.size() != 0) { + if (cd.tutorials.size() != 0) { - for (int i = 0; i < tutorials.size(); i++) { - String link = tutorials[i]; + for (int i = 0; i < cd.tutorials.size(); i++) { + String link = cd.tutorials[i]; String linktxt = link; int seppos = linktxt.find("//"); if (seppos != -1) { @@ -1978,8 +1977,27 @@ FindBar::FindBar() { } void FindBar::popup_search() { + show(); - search_text->grab_focus(); + bool grabbed_focus = false; + if (!search_text->has_focus()) { + search_text->grab_focus(); + grabbed_focus = true; + } + + if (!search_text->get_text().empty()) { + search_text->select_all(); + search_text->set_cursor_position(search_text->get_text().length()); + if (grabbed_focus) { + _search(); + } + } + + call_deferred("_update_size"); +} + +void FindBar::_update_size() { + container->set_custom_minimum_size(Size2(0, hbc->get_size().height)); } @@ -2016,6 +2034,7 @@ void FindBar::_bind_methods() { ClassDB::bind_method("_search_next", &FindBar::search_next); ClassDB::bind_method("_search_prev", &FindBar::search_prev); ClassDB::bind_method("_hide_pressed", &FindBar::_hide_bar); + ClassDB::bind_method("_update_size", &FindBar::_update_size); ADD_SIGNAL(MethodInfo("search")); } diff --git a/editor/editor_help.h b/editor/editor_help.h index 35d98d274c..514169dc19 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -148,6 +148,8 @@ class FindBar : public HBoxContainer { void _search_text_changed(const String &p_text); void _search_text_entered(const String &p_text); + void _update_size(); + protected: void _notification(int p_what); void _unhandled_input(const Ref<InputEvent> &p_event); diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index f94b7cd6ee..79746dcb5a 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -842,9 +842,11 @@ void EditorInspectorPlugin::_bind_methods() { MethodInfo vm; vm.name = "can_handle"; + vm.return_val.type = Variant::BOOL; vm.arguments.push_back(PropertyInfo(Variant::OBJECT, "object")); BIND_VMETHOD(vm); vm.name = "parse_begin"; + vm.return_val.type = Variant::NIL; BIND_VMETHOD(vm); vm.name = "parse_category"; vm.arguments.push_back(PropertyInfo(Variant::STRING, "category")); @@ -859,8 +861,8 @@ void EditorInspectorPlugin::_bind_methods() { vm.arguments.push_back(PropertyInfo(Variant::INT, "usage")); BIND_VMETHOD(vm); vm.arguments.clear(); - vm.return_val.type = Variant::NIL; vm.name = "parse_end"; + vm.return_val.type = Variant::NIL; BIND_VMETHOD(vm); } @@ -1329,8 +1331,9 @@ void EditorInspector::update_tree() { } else if (!(p.usage & PROPERTY_USAGE_EDITOR)) continue; - if (hide_script && p.name == "script") + if (p.name == "script" && (hide_script || bool(object->call("_hide_script_from_inspector")))) { continue; + } String basename = p.name; if (group != "") { @@ -1461,7 +1464,8 @@ void EditorInspector::update_tree() { #endif for (List<Ref<EditorInspectorPlugin> >::Element *E = valid_plugins.front(); E; E = E->next()) { Ref<EditorInspectorPlugin> ped = E->get(); - ped->parse_property(object, p.type, p.name, p.hint, p.hint_string, p.usage); + bool exclusive = ped->parse_property(object, p.type, p.name, p.hint, p.hint_string, p.usage); + List<EditorInspectorPlugin::AddedEditor> editors = ped->added_editors; //make a copy, since plugins may be used again in a sub-inspector ped->added_editors.clear(); @@ -1474,6 +1478,9 @@ void EditorInspector::update_tree() { ep->object = object; ep->connect("property_changed", this, "_property_changed"); + if (p.usage & PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED) { + ep->connect("property_changed", this, "_property_changed_update_all", varray(), CONNECT_DEFERRED); + } ep->connect("property_keyed", this, "_property_keyed"); ep->connect("property_keyed_with_value", this, "_property_keyed_with_value"); ep->connect("property_checked", this, "_property_checked"); @@ -1526,6 +1533,10 @@ void EditorInspector::update_tree() { } } } + + if (exclusive) { + break; + } } } @@ -1636,6 +1647,7 @@ void EditorInspector::register_text_enter(Node *p_line_edit) { void EditorInspector::_filter_changed(const String &p_text) { + _clear(); update_tree(); } @@ -1650,6 +1662,10 @@ void EditorInspector::set_use_folding(bool p_enable) { update_tree(); } +bool EditorInspector::is_using_folding() { + return use_folding; +} + void EditorInspector::collapse_all_folding() { for (List<EditorInspectorSection *>::Element *E = sections.front(); E; E = E->next()) { @@ -1774,6 +1790,10 @@ void EditorInspector::_property_changed(const String &p_path, const Variant &p_v _edit_set(p_path, p_value, false, ""); } +void EditorInspector::_property_changed_update_all(const String &p_path, const Variant &p_value) { + update_tree(); +} + void EditorInspector::_multiple_properties_changed(Vector<String> p_paths, Array p_values) { ERR_FAIL_COND(p_paths.size() == 0 || p_values.size() == 0); @@ -1943,6 +1963,8 @@ void EditorInspector::_bind_methods() { ClassDB::bind_method("_multiple_properties_changed", &EditorInspector::_multiple_properties_changed); ClassDB::bind_method("_property_changed", &EditorInspector::_property_changed); + ClassDB::bind_method("_property_changed_update_all", &EditorInspector::_property_changed_update_all); + ClassDB::bind_method("_edit_request_change", &EditorInspector::_edit_request_change); ClassDB::bind_method("_node_removed", &EditorInspector::_node_removed); ClassDB::bind_method("_filter_changed", &EditorInspector::_filter_changed); diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index a6b183799f..2a88be656a 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -257,6 +257,7 @@ class EditorInspector : public ScrollContainer { void _edit_set(const String &p_name, const Variant &p_value, bool p_refresh_all, const String &p_changed_field); void _property_changed(const String &p_path, const Variant &p_value); + void _property_changed_update_all(const String &p_path, const Variant &p_value); void _multiple_properties_changed(Vector<String> p_paths, Array p_values); void _property_keyed(const String &p_path); void _property_keyed_with_value(const String &p_path, const Variant &p_value); @@ -314,6 +315,7 @@ public: void set_property_selectable(bool p_selectable); void set_use_folding(bool p_enable); + bool is_using_folding(); void collapse_all_folding(); void expand_all_folding(); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index dd3b6c2c4c..6084332dfb 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -51,7 +51,6 @@ #include "scene/resources/packed_scene.h" #include "servers/physics_2d_server.h" -#include "editor/animation_editor.h" #include "editor/editor_audio_buses.h" #include "editor/editor_file_system.h" #include "editor/editor_help.h" @@ -67,7 +66,11 @@ #include "editor/import/resource_importer_scene.h" #include "editor/import/resource_importer_texture.h" #include "editor/import/resource_importer_wav.h" +#include "editor/plugins/animation_blend_space_1d_editor.h" +#include "editor/plugins/animation_blend_space_2d_editor.h" +#include "editor/plugins/animation_blend_tree_editor_plugin.h" #include "editor/plugins/animation_player_editor_plugin.h" +#include "editor/plugins/animation_state_machine_editor.h" #include "editor/plugins/animation_tree_editor_plugin.h" #include "editor/plugins/asset_library_editor_plugin.h" #include "editor/plugins/baked_lightmap_editor_plugin.h" @@ -88,7 +91,6 @@ #include "editor/plugins/mesh_editor_plugin.h" #include "editor/plugins/mesh_instance_editor_plugin.h" #include "editor/plugins/multimesh_editor_plugin.h" -#include "editor/plugins/navigation_mesh_editor_plugin.h" #include "editor/plugins/navigation_polygon_editor_plugin.h" #include "editor/plugins/particles_2d_editor_plugin.h" #include "editor/plugins/particles_editor_plugin.h" @@ -97,6 +99,7 @@ #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/root_motion_editor_plugin.h" #include "editor/plugins/script_editor_plugin.h" #include "editor/plugins/script_text_editor.h" #include "editor/plugins/shader_editor_plugin.h" @@ -584,7 +587,6 @@ void EditorNode::edit_node(Node *p_node) { 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; @@ -593,9 +595,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(); + show_accept(TTR("Error saving resource!"), TTR("I see...")); return; } @@ -681,26 +681,21 @@ 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...")); - switch (p_error) { case ERR_FILE_CANT_WRITE: { - accept->set_text(TTR("Can't open file for writing:") + " " + p_file.get_extension()); + show_accept(TTR("Can't open file for writing:") + " " + p_file.get_extension(), TTR("I see...")); } break; case ERR_FILE_UNRECOGNIZED: { - accept->set_text(TTR("Requested file format unknown:") + " " + p_file.get_extension()); + show_accept(TTR("Requested file format unknown:") + " " + p_file.get_extension(), TTR("I see...")); } break; default: { - accept->set_text(TTR("Error while saving.")); + show_accept(TTR("Error while saving."), TTR("I see...")); } break; } - - accept->popup_centered_minsize(); } } @@ -708,34 +703,29 @@ 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...")); - switch (p_error) { case ERR_CANT_OPEN: { - accept->set_text(vformat(TTR("Can't open '%s'. The file could have been moved or deleted."), p_file.get_file())); + show_accept(vformat(TTR("Can't open '%s'. The file could have been moved or deleted."), p_file.get_file()), TTR("I see...")); } break; case ERR_PARSE_ERROR: { - accept->set_text(vformat(TTR("Error while parsing '%s'."), p_file.get_file())); + show_accept(vformat(TTR("Error while parsing '%s'."), p_file.get_file()), TTR("I see...")); } break; case ERR_FILE_CORRUPT: { - accept->set_text(vformat(TTR("Unexpected end of file '%s'."), p_file.get_file())); + show_accept(vformat(TTR("Unexpected end of file '%s'."), p_file.get_file()), TTR("I see...")); } break; case ERR_FILE_NOT_FOUND: { - accept->set_text(vformat(TTR("Missing '%s' or its dependencies."), p_file.get_file())); + show_accept(vformat(TTR("Missing '%s' or its dependencies."), p_file.get_file()), TTR("I see...")); } break; default: { - accept->set_text(vformat(TTR("Error while loading '%s'."), p_file.get_file())); + show_accept(vformat(TTR("Error while loading '%s'."), p_file.get_file()), TTR("I see...")); } break; } - - accept->popup_centered_minsize(); } } @@ -996,10 +986,7 @@ void EditorNode::_save_scene(String p_file, int idx) { if (!scene) { - current_option = -1; - 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(); + show_accept(TTR("This operation can't be done without a tree root."), TTR("I see...")); return; } @@ -1027,10 +1014,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->set_text(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied.")); - accept->popup_centered_minsize(); + show_accept(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied."), TTR("I see...")); return; } @@ -1038,10 +1022,7 @@ void EditorNode::_save_scene(String p_file, int idx) { // (hacky but needed for the tree to update properly) 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->set_text(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied.")); - accept->popup_centered_minsize(); + show_accept(TTR("Couldn't save scene. Likely dependencies (instances or inheritance) couldn't be satisfied."), TTR("I see...")); return; } memdelete(dummy_scene); @@ -1052,8 +1033,23 @@ void EditorNode::_save_scene(String p_file, int idx) { flg |= ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS; err = ResourceSaver::save(p_file, sdata, flg); - Map<RES, bool> processed; - _save_edited_subresources(scene, processed, flg); + //Map<RES, bool> processed; + //this method is slow and not always works, deprecating + //_save_edited_subresources(scene, processed, flg); + { //instead, just find globally unsaved subresources and save them + + List<Ref<Resource> > cached; + ResourceCache::get_cached_resources(&cached); + for (List<Ref<Resource> >::Element *E = cached.front(); E; E = E->next()) { + + Ref<Resource> res = E->get(); + if (res->is_edited() && res->get_path().is_resource_file()) { + ResourceSaver::save(res->get_path(), res, flg); + res->set_edited(false); + } + } + } + editor_data.save_editor_external_data(); if (err == OK) { scene->set_filename(ProjectSettings::get_singleton()->localize_path(p_file)); @@ -1071,8 +1067,7 @@ void EditorNode::_save_scene(String p_file, int idx) { void EditorNode::_save_all_scenes() { - int i = _next_unsaved_scene(true, 0); - while (i != -1) { + for (int i = 0; i < editor_data.get_edited_scene_count(); i++) { Node *scene = editor_data.get_edited_scene_root(i); if (scene && scene->get_filename() != "") { if (i != editor_data.get_edited_scene()) @@ -1080,7 +1075,6 @@ 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(); @@ -1164,10 +1158,7 @@ void EditorNode::_dialog_action(String p_file) { ml = ResourceLoader::load(p_file, "MeshLibrary"); if (ml.is_null()) { - current_option = -1; - accept->get_ok()->set_text(TTR("I see...")); - accept->set_text(TTR("Can't load MeshLibrary for merging!")); - accept->popup_centered_minsize(); + show_accept(TTR("Can't load MeshLibrary for merging!"), TTR("I see...")); return; } } @@ -1180,11 +1171,7 @@ void EditorNode::_dialog_action(String p_file) { Error err = ResourceSaver::save(p_file, ml); if (err) { - - current_option = -1; - accept->get_ok()->set_text(TTR("I see...")); - accept->set_text(TTR("Error saving MeshLibrary!")); - accept->popup_centered_minsize(); + show_accept(TTR("Error saving MeshLibrary!"), TTR("I see...")); return; } @@ -1196,10 +1183,7 @@ void EditorNode::_dialog_action(String p_file) { tileset = ResourceLoader::load(p_file, "TileSet"); 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(); + show_accept(TTR("Can't load TileSet for merging!"), TTR("I see...")); return; } @@ -1212,10 +1196,7 @@ void EditorNode::_dialog_action(String p_file) { Error err = ResourceSaver::save(p_file, tileset); if (err) { - current_option = -1; - accept->get_ok()->set_text(TTR("I see...")); - accept->set_text(TTR("Error saving TileSet!")); - accept->popup_centered_minsize(); + show_accept("Error saving TileSet!", "I see..."); return; } } break; @@ -1302,7 +1283,31 @@ void EditorNode::_dialog_action(String p_file) { } } -void EditorNode::push_item(Object *p_object, const String &p_property) { +bool EditorNode::item_has_editor(Object *p_object) { + + return editor_data.get_subeditors(p_object).size() > 0; +} + +void EditorNode::edit_item(Object *p_object) { + + Vector<EditorPlugin *> sub_plugins; + + if (p_object) { + sub_plugins = editor_data.get_subeditors(p_object); + } + + if (!sub_plugins.empty()) { + _display_top_editors(false); + + _set_top_editors(sub_plugins); + _set_editing_top_editors(p_object); + _display_top_editors(true); + } else { + _hide_top_editors(); + } +} + +void EditorNode::push_item(Object *p_object, const String &p_property, bool p_inspector_only) { if (!p_object) { get_inspector()->edit(NULL); @@ -1314,7 +1319,9 @@ void EditorNode::push_item(Object *p_object, const String &p_property) { uint32_t id = p_object->get_instance_id(); if (id != editor_history.get_current()) { - if (p_property == "") + if (p_inspector_only) { + editor_history.add_object_inspector_only(id); + } else if (p_property == "") editor_history.add_object(id); else editor_history.add_object(id, p_property); @@ -1330,8 +1337,7 @@ 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); - if (fallback->get_last_modified_time() != fallback->get_import_last_modified_time()) - save_resource_in_path(fallback, fallback->get_path()); + save_resource_in_path(fallback, fallback->get_path()); } } @@ -1368,6 +1374,7 @@ void EditorNode::_edit_current() { uint32_t current = editor_history.get_current(); Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + bool inspector_only = editor_history.is_current_inspector_only(); this->current = current_obj; @@ -1383,7 +1390,8 @@ void EditorNode::_edit_current() { return; } - bool capitalize = bool(EDITOR_DEF("interface/editor/capitalize_properties", true)); + bool capitalize = bool(EDITOR_GET("interface/inspector/capitalize_properties")); + bool disable_folding = bool(EDITOR_GET("interface/inspector/disable_folding")); bool is_resource = current_obj->is_class("Resource"); bool is_node = current_obj->is_class("Node"); @@ -1439,6 +1447,7 @@ void EditorNode::_edit_current() { if (current_obj->is_class("ScriptEditorDebuggerInspectedObject")) { editable_warning = TTR("This is a remote object so changes to it will not be kept.\nPlease read the documentation relevant to debugging to better understand this workflow."); capitalize = false; + disable_folding = true; } get_inspector()->edit(current_obj); @@ -1451,59 +1460,66 @@ void EditorNode::_edit_current() { get_inspector()->set_enable_capitalize_paths(capitalize); } + if (get_inspector()->is_using_folding() == disable_folding) { + get_inspector()->set_use_folding(!disable_folding); + } + /* Take care of PLUGIN EDITOR */ - EditorPlugin *main_plugin = editor_data.get_editor(current_obj); + if (!inspector_only) { - if (main_plugin) { + EditorPlugin *main_plugin = editor_data.get_editor(current_obj); - // 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))) { - if (!changing_scene) - main_plugin->edit(current_obj); - } + if (main_plugin) { - else if (main_plugin != editor_plugin_screen && (!ScriptEditor::get_singleton() || !ScriptEditor::get_singleton()->is_visible_in_tree() || ScriptEditor::get_singleton()->can_take_away_focus())) { - // update screen main_plugin + // 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))) { + if (!changing_scene) + main_plugin->edit(current_obj); + } - if (!changing_scene) { + else if (main_plugin != editor_plugin_screen && (!ScriptEditor::get_singleton() || !ScriptEditor::get_singleton()->is_visible_in_tree() || ScriptEditor::get_singleton()->can_take_away_focus())) { + // update screen main_plugin - if (editor_plugin_screen) - editor_plugin_screen->make_visible(false); - editor_plugin_screen = main_plugin; - editor_plugin_screen->edit(current_obj); + if (!changing_scene) { - editor_plugin_screen->make_visible(true); + if (editor_plugin_screen) + editor_plugin_screen->make_visible(false); + editor_plugin_screen = main_plugin; + editor_plugin_screen->edit(current_obj); - int plugin_count = editor_data.get_editor_plugin_count(); - for (int i = 0; i < plugin_count; i++) { - editor_data.get_editor_plugin(i)->notify_main_screen_changed(editor_plugin_screen->get_name()); - } + editor_plugin_screen->make_visible(true); - for (int i = 0; i < editor_table.size(); i++) { + int plugin_count = editor_data.get_editor_plugin_count(); + for (int i = 0; i < plugin_count; i++) { + editor_data.get_editor_plugin(i)->notify_main_screen_changed(editor_plugin_screen->get_name()); + } - main_editor_buttons[i]->set_pressed(editor_table[i] == main_plugin); + for (int i = 0; i < editor_table.size(); i++) { + + main_editor_buttons[i]->set_pressed(editor_table[i] == main_plugin); + } } - } - } else { + } else { - editor_plugin_screen->edit(current_obj); + editor_plugin_screen->edit(current_obj); + } } - } - Vector<EditorPlugin *> sub_plugins = editor_data.get_subeditors(current_obj); + Vector<EditorPlugin *> sub_plugins = editor_data.get_subeditors(current_obj); - if (!sub_plugins.empty()) { - _display_top_editors(false); + if (!sub_plugins.empty()) { + _display_top_editors(false); - _set_top_editors(sub_plugins); - _set_editing_top_editors(current_obj); - _display_top_editors(true); + _set_top_editors(sub_plugins); + _set_editing_top_editors(current_obj); + _display_top_editors(true); - } else if (!editor_plugins_over->get_plugins_list().empty()) { + } else if (!editor_plugins_over->get_plugins_list().empty()) { - _hide_top_editors(); + _hide_top_editors(); + } } inspector_dock->update(current_obj); @@ -1534,10 +1550,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { Node *scene = editor_data.get_edited_scene_root(); if (!scene) { - current_option = -1; - accept->get_ok()->set_text(TTR("I see...")); - accept->set_text(TTR("There is no defined scene to run.")); - accept->popup_centered_minsize(); + show_accept(TTR("There is no defined scene to run."), TTR("I see...")); return; } @@ -1591,10 +1604,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->set_text(TTR("Current scene was never saved, please save it prior to running.")); - accept->popup_centered_minsize(); + show_accept(TTR("Current scene was never saved, please save it prior to running."), TTR("I see...")); return; } @@ -1625,10 +1635,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->set_text(TTR("Could not start subprocess!")); - accept->popup_centered_minsize(); + show_accept(TTR("Could not start subprocess!"), TTR("I see...")); return; } @@ -1746,10 +1753,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (!scene) { - current_option = -1; - 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(); + show_accept(TTR("This operation can't be done without a tree root."), TTR("I see...")); break; } @@ -1812,10 +1816,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (!editor_data.get_edited_scene_root()) { - current_option = -1; - 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(); + show_accept(TTR("This operation can't be done without a scene."), TTR("I see...")); break; } @@ -1835,10 +1836,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->set_text(TTR("This operation can't be done without a root node.")); - accept->popup_centered_minsize(); + show_accept(TTR("This operation can't be done without a root node."), TTR("I see...")); break; } @@ -1863,10 +1861,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (!editor_data.get_edited_scene_root()) { - current_option = -1; - 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(); + show_accept(TTR("This operation can't be done without a selected node."), TTR("I see...")); break; } @@ -1896,25 +1891,29 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case EDIT_UNDO: { if (Input::get_singleton()->get_mouse_button_mask() & 0x7) { - break; // can't undo while mouse buttons are pressed - } - - String action = editor_data.get_undo_redo().get_current_action_name(); - if (action != "") - log->add_message("UNDO: " + action); + log->add_message("Can't UNDO while mouse buttons are pressed."); + } else { + String action = editor_data.get_undo_redo().get_current_action_name(); - editor_data.get_undo_redo().undo(); + if (!editor_data.get_undo_redo().undo()) { + log->add_message("There is nothing to UNDO."); + } else if (action != "") { + log->add_message("UNDO: " + action); + } + } } break; case EDIT_REDO: { - if (Input::get_singleton()->get_mouse_button_mask() & 0x7) - break; // can't redo while mouse buttons are pressed - - editor_data.get_undo_redo().redo(); - String action = editor_data.get_undo_redo().get_current_action_name(); - if (action != "") - log->add_message("REDO: " + action); - + if (Input::get_singleton()->get_mouse_button_mask() & 0x7) { + log->add_message("Can't REDO while mouse buttons are pressed."); + } else { + if (!editor_data.get_undo_redo().redo()) { + log->add_message("There is nothing to REDO."); + } else { + String action = editor_data.get_undo_redo().get_current_action_name(); + log->add_message("REDO: " + action); + } + } } break; case EDIT_REVERT: { @@ -2135,10 +2134,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { OS::get_singleton()->set_low_processor_usage_mode(false); EditorSettings::get_singleton()->set_project_metadata("editor_options", "update_always", true); - current_option = -1; - 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(); + show_accept(TTR("This option is deprecated. Situations where refresh must be forced are now considered a bug. Please report."), TTR("I see...")); } break; case SETTINGS_UPDATE_CHANGES: { @@ -2163,7 +2159,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { export_template_manager->popup_manager(); } break; - case SETTINGS_TOGGLE_FULLSCREN: { + case SETTINGS_TOGGLE_FULLSCREEN: { OS::get_singleton()->set_window_fullscreen(!OS::get_singleton()->is_window_fullscreen()); @@ -2737,10 +2733,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b if (!lpath.begins_with("res://")) { - current_option = -1; - accept->get_ok()->set_text(TTR("Ugh")); - accept->set_text(TTR("Error loading scene, it must be inside the project path. Use 'Import' to open the scene, then save it inside the project path.")); - accept->popup_centered_minsize(); + show_accept(TTR("Error loading scene, it must be inside the project path. Use 'Import' to open the scene, then save it inside the project path."), TTR("Ugh")); opening_prev = false; return ERR_FILE_NOT_FOUND; } @@ -3039,6 +3032,7 @@ void EditorNode::register_editor_types() { ClassDB::register_class<EditorInspector>(); ClassDB::register_class<EditorInspectorPlugin>(); ClassDB::register_class<EditorProperty>(); + ClassDB::register_class<AnimationTrackEditPlugin>(); // FIXME: Is this stuff obsolete, or should it be ported to new APIs? ClassDB::register_class<EditorScenePostImport>(); @@ -3153,6 +3147,13 @@ Error EditorNode::export_preset(const String &p_preset, const String &p_path, bo return OK; } +void EditorNode::show_accept(const String &p_text, const String &p_title) { + current_option = -1; + accept->get_ok()->set_text(p_title); + accept->set_text(p_text); + accept->popup_centered_minsize(); +} + void EditorNode::show_warning(const String &p_text, const String &p_title) { warning->set_text(p_text); @@ -4271,12 +4272,21 @@ EditorBuildCallback EditorNode::build_callbacks[EditorNode::MAX_BUILD_CALLBACKS] bool EditorNode::call_build() { - for (int i = 0; i < build_callback_count; i++) { - if (!build_callbacks[i]()) - return false; + bool builds_successful = true; + + for (int i = 0; i < build_callback_count && builds_successful; i++) { + if (!build_callbacks[i]()) { + ERR_PRINT("A Godot Engine build callback failed."); + builds_successful = false; + } } - return true; + if (builds_successful && !editor_data.call_build()) { + ERR_PRINT("An EditorPlugin build callback failed."); + builds_successful = false; + } + + return builds_successful; } void EditorNode::_inherit_imported(const String &p_action) { @@ -4587,6 +4597,10 @@ EditorNode::EditorNode() { Ref<EditorInspectorDefaultPlugin> eidp; eidp.instance(); EditorInspector::add_inspector_plugin(eidp); + + Ref<EditorInspectorRootMotionPlugin> rmp; + rmp.instance(); + EditorInspector::add_inspector_plugin(rmp); } _pvrtc_register_compressors(); @@ -4612,9 +4626,7 @@ EditorNode::EditorNode() { GLOBAL_DEF("editor/main_run_args", ""); - ClassDB::set_class_enabled("CollisionShape", true); - ClassDB::set_class_enabled("CollisionShape2D", true); - ClassDB::set_class_enabled("CollisionPolygon2D", true); + ClassDB::set_class_enabled("RootMotionView", true); //defs here, use EDITOR_GET in logic EDITOR_DEF("interface/scene_tabs/always_show_close_button", false); @@ -4629,6 +4641,7 @@ EditorNode::EditorNode() { EDITOR_DEF("interface/scene_tabs/restore_scenes_on_load", false); EDITOR_DEF("interface/scene_tabs/show_thumbnail_on_hover", true); EDITOR_DEF("interface/inspector/capitalize_properties", true); + EDITOR_DEF("interface/inspector/disable_folding", false); EDITOR_DEF("interface/inspector/open_resources_in_new_inspector", false); EDITOR_DEF("run/auto_save/save_before_running", true); @@ -4826,7 +4839,11 @@ EditorNode::EditorNode() { srt->add_child(tabbar_container); tabbar_container->add_child(scene_tabs); distraction_free = memnew(ToolButton); +#ifdef OSX_ENABLED + distraction_free->set_shortcut(ED_SHORTCUT("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D)); +#else distraction_free->set_shortcut(ED_SHORTCUT("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11)); +#endif distraction_free->set_tooltip(TTR("Toggle distraction-free mode.")); distraction_free->connect("pressed", this, "_toggle_distraction_free_mode"); distraction_free->set_icon(gui_base->get_icon("DistractionFree", "EditorIcons")); @@ -4933,7 +4950,7 @@ EditorNode::EditorNode() { 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_shortcut(ED_SHORTCUT("editor/close_scene", TTR("Close Scene"), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_W), FILE_CLOSE); p->add_separator(); p->add_submenu_item(TTR("Open Recent"), "RecentScenes", FILE_OPEN_RECENT); p->add_separator(); @@ -4986,7 +5003,7 @@ EditorNode::EditorNode() { #ifdef OSX_ENABLED p->add_item(TTR("Quit to Project List"), RUN_PROJECT_MANAGER, KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q); #else - p->add_item(TTR("Quit to Project List"), RUN_PROJECT_MANAGER, KEY_MASK_SHIFT + KEY_MASK_CTRL + KEY_Q); + p->add_item(TTR("Quit to Project List"), RUN_PROJECT_MANAGER, KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_Q); #endif PanelContainer *editor_region = memnew(PanelContainer); @@ -5035,7 +5052,11 @@ EditorNode::EditorNode() { p->add_child(editor_layouts); editor_layouts->connect("id_pressed", this, "_layout_menu_option"); p->add_submenu_item(TTR("Editor Layout"), "Layouts"); - p->add_shortcut(ED_SHORTCUT("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREN); +#ifdef OSX_ENABLED + p->add_shortcut(ED_SHORTCUT("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F), SETTINGS_TOGGLE_FULLSCREEN); +#else + p->add_shortcut(ED_SHORTCUT("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREEN); +#endif p->add_separator(); p->add_item(TTR("Manage Export Templates"), SETTINGS_MANAGE_EXPORT_TEMPLATES); @@ -5075,7 +5096,11 @@ EditorNode::EditorNode() { play_button->set_focus_mode(Control::FOCUS_NONE); play_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY)); play_button->set_tooltip(TTR("Play the project.")); +#ifdef OSX_ENABLED + play_button->set_shortcut(ED_SHORTCUT("editor/play", TTR("Play"), KEY_MASK_CMD | KEY_B)); +#else play_button->set_shortcut(ED_SHORTCUT("editor/play", TTR("Play"), KEY_F5)); +#endif pause_button = memnew(ToolButton); pause_button->set_toggle_mode(true); @@ -5084,7 +5109,11 @@ EditorNode::EditorNode() { pause_button->set_tooltip(TTR("Pause the scene")); pause_button->set_disabled(true); play_hb->add_child(pause_button); +#ifdef OSX_ENABLED + pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y)); +#else pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7)); +#endif stop_button = memnew(ToolButton); play_hb->add_child(stop_button); @@ -5093,7 +5122,11 @@ EditorNode::EditorNode() { stop_button->connect("pressed", this, "_menu_option", make_binds(RUN_STOP)); stop_button->set_tooltip(TTR("Stop the scene.")); stop_button->set_disabled(true); +#ifdef OSX_ENABLED + stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_MASK_CMD | KEY_PERIOD)); +#else stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8)); +#endif run_native = memnew(EditorRunNative); play_hb->add_child(run_native); @@ -5111,7 +5144,11 @@ EditorNode::EditorNode() { play_scene_button->set_icon(gui_base->get_icon("PlayScene", "EditorIcons")); play_scene_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY_SCENE)); play_scene_button->set_tooltip(TTR("Play the edited scene.")); +#ifdef OSX_ENABLED + play_scene_button->set_shortcut(ED_SHORTCUT("editor/play_scene", TTR("Play Scene"), KEY_MASK_CMD | KEY_R)); +#else play_scene_button->set_shortcut(ED_SHORTCUT("editor/play_scene", TTR("Play Scene"), KEY_F6)); +#endif play_custom_scene_button = memnew(ToolButton); play_hb->add_child(play_custom_scene_button); @@ -5120,7 +5157,11 @@ EditorNode::EditorNode() { play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom", "EditorIcons")); play_custom_scene_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY_CUSTOM_SCENE)); play_custom_scene_button->set_tooltip(TTR("Play custom scene")); +#ifdef OSX_ENABLED + play_custom_scene_button->set_shortcut(ED_SHORTCUT("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R)); +#else play_custom_scene_button->set_shortcut(ED_SHORTCUT("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5)); +#endif progress_hb = memnew(BackgroundProgress); @@ -5292,6 +5333,8 @@ EditorNode::EditorNode() { file->connect("file_selected", this, "_dialog_action"); file_templates->connect("file_selected", this, "_dialog_action"); + preview_gen = memnew(AudioStreamPreviewGenerator); + add_child(preview_gen); //plugin stuff file_server = memnew(EditorFileServer); @@ -5322,6 +5365,10 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(ShaderEditorPlugin(this))); // FIXME: Disabled for Godot 3.0 as made incompatible, it needs to be ported to the new API. //add_editor_plugin(memnew(ShaderGraphEditorPlugin(this))); + add_editor_plugin(memnew(AnimationNodeBlendTreeEditorPlugin(this))); + add_editor_plugin(memnew(AnimationNodeBlendSpace1DEditorPlugin(this))); + add_editor_plugin(memnew(AnimationNodeBlendSpace2DEditorPlugin(this))); + add_editor_plugin(memnew(AnimationNodeStateMachineEditorPlugin(this))); add_editor_plugin(memnew(CameraEditorPlugin(this))); add_editor_plugin(memnew(ThemeEditorPlugin(this))); @@ -5356,7 +5403,6 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(TextureEditorPlugin(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))); @@ -5375,10 +5421,10 @@ EditorNode::EditorNode() { resource_preview->add_preview_generator(Ref<EditorPackedScenePreviewPlugin>(memnew(EditorPackedScenePreviewPlugin))); resource_preview->add_preview_generator(Ref<EditorMaterialPreviewPlugin>(memnew(EditorMaterialPreviewPlugin))); resource_preview->add_preview_generator(Ref<EditorScriptPreviewPlugin>(memnew(EditorScriptPreviewPlugin))); - // FIXME: Needs to be rewritten for AudioStream in Godot 3.0+ - //resource_preview->add_preview_generator( Ref<EditorSamplePreviewPlugin>( memnew(EditorSamplePreviewPlugin ))); + resource_preview->add_preview_generator(Ref<EditorAudioStreamPreviewPlugin>(memnew(EditorAudioStreamPreviewPlugin))); resource_preview->add_preview_generator(Ref<EditorMeshPreviewPlugin>(memnew(EditorMeshPreviewPlugin))); resource_preview->add_preview_generator(Ref<EditorBitmapPreviewPlugin>(memnew(EditorBitmapPreviewPlugin))); + resource_preview->add_preview_generator(Ref<EditorFontPreviewPlugin>(memnew(EditorFontPreviewPlugin))); { Ref<SpatialMaterialConversionPlugin> spatial_mat_convert; @@ -5502,10 +5548,17 @@ EditorNode::EditorNode() { print_handler.userdata = this; add_print_handler(&print_handler); +#ifdef OSX_ENABLED + ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1); + ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2); + ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3); + ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE); +#else ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_F1); ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_F2); ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_F3); //hack neded for script editor F3 search to work :) Assign like this or don't use F3 ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_F4); +#endif ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library")); ED_SHORTCUT("editor/editor_next", TTR("Open the next Editor")); ED_SHORTCUT("editor/editor_prev", TTR("Open the previous Editor")); diff --git a/editor/editor_node.h b/editor/editor_node.h index bef5bc816c..4241520b30 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -32,6 +32,7 @@ #define EDITOR_NODE_H #include "core/print_string.h" +#include "editor/audio_stream_preview.h" #include "editor/connections_dialog.h" #include "editor/create_dialog.h" #include "editor/editor_about.h" @@ -81,6 +82,7 @@ #include "scene/gui/tool_button.h" #include "scene/gui/tree.h" #include "scene/gui/viewport_container.h" + /** @author Juan Linietsky <reduzio@gmail.com> */ @@ -169,7 +171,7 @@ private: SETTINGS_LAYOUT_DEFAULT, SETTINGS_MANAGE_EXPORT_TEMPLATES, SETTINGS_PICK_MAIN_SCENE, - SETTINGS_TOGGLE_FULLSCREN, + SETTINGS_TOGGLE_FULLSCREEN, SETTINGS_HELP, SCENE_TAB_CLOSE, @@ -298,6 +300,7 @@ private: Vector<ToolButton *> main_editor_buttons; Vector<EditorPlugin *> editor_table; + AudioStreamPreviewGenerator *preview_gen; ProgressDialog *progress_dialog; BackgroundProgress *progress_hb; @@ -631,7 +634,9 @@ public: static HBoxContainer *get_menu_hb() { return singleton->menu_hb; } - void push_item(Object *p_object, const String &p_property = ""); + void push_item(Object *p_object, const String &p_property = "", bool p_inspector_only = false); + void edit_item(Object *p_object); + bool item_has_editor(Object *p_object); void open_request(const String &p_path); @@ -680,6 +685,7 @@ public: Ref<Theme> get_editor_theme() const { return theme; } + void show_accept(const String &p_text, const String &p_title); void show_warning(const String &p_text, const String &p_title = "Warning!"); Error export_preset(const String &p_preset, const String &p_path, bool p_debug, const String &p_password, bool p_quit_after = false); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index 24d0592ee7..cc44938c25 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -689,6 +689,15 @@ void EditorPlugin::get_window_layout(Ref<ConfigFile> p_layout) { } } +bool EditorPlugin::build() { + + if (get_script_instance() && get_script_instance()->has_method("build")) { + return get_script_instance()->call("build"); + } + + return true; +} + void EditorPlugin::queue_save_layout() const { EditorNode::get_singleton()->save_layout(); @@ -767,6 +776,7 @@ void EditorPlugin::_bind_methods() { ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::POOL_STRING_ARRAY, "get_breakpoints")); ClassDB::add_virtual_method(get_class_static(), MethodInfo("set_window_layout", PropertyInfo(Variant::OBJECT, "layout", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo("get_window_layout", PropertyInfo(Variant::OBJECT, "layout", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"))); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "build")); ADD_SIGNAL(MethodInfo("scene_changed", PropertyInfo(Variant::OBJECT, "scene_root", PROPERTY_HINT_RESOURCE_TYPE, "Node"))); ADD_SIGNAL(MethodInfo("scene_closed", PropertyInfo(Variant::STRING, "filepath"))); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 8af7f83771..fcc74cb1e9 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -192,6 +192,7 @@ public: virtual void set_window_layout(Ref<ConfigFile> p_layout); virtual void get_window_layout(Ref<ConfigFile> p_layout); virtual void edited_scene_changed() {} // if changes are pending in editor, apply them + virtual bool build(); // builds with external tools. Returns true if safe to continue running scene. EditorInterface *get_editor_interface(); diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp index 34c9ca6630..d4a97b7095 100644 --- a/editor/editor_profiler.cpp +++ b/editor/editor_profiler.cpp @@ -68,13 +68,13 @@ void EditorProfiler::add_frame_metric(const Metric &p_metric, bool p_final) { } updating_frame = false; - if (!frame_delay->is_processing()) { + if (frame_delay->is_stopped()) { frame_delay->set_wait_time(p_final ? 0.1 : 1); frame_delay->start(); } - if (!plot_delay->is_processing()) { + if (plot_delay->is_stopped()) { plot_delay->set_wait_time(0.1); plot_delay->start(); } @@ -424,20 +424,25 @@ void EditorProfiler::_update_frame() { void EditorProfiler::_activate_pressed() { if (activate->is_pressed()) { - clear(); activate->set_icon(get_icon("Stop", "EditorIcons")); - activate->set_text(TTR("Stop Profiling")); + activate->set_text(TTR("Stop")); } else { activate->set_icon(get_icon("Play", "EditorIcons")); - activate->set_text(TTR("Start Profiling")); + activate->set_text(TTR("Start")); } emit_signal("enable_profiling", activate->is_pressed()); } +void EditorProfiler::_clear_pressed() { + + clear(); +} + void EditorProfiler::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { activate->set_icon(get_icon("Play", "EditorIcons")); + clear_button->set_icon(get_icon("Clear", "EditorIcons")); } } @@ -599,6 +604,7 @@ void EditorProfiler::_bind_methods() { ClassDB::bind_method(D_METHOD("_update_frame"), &EditorProfiler::_update_frame); ClassDB::bind_method(D_METHOD("_update_plot"), &EditorProfiler::_update_plot); ClassDB::bind_method(D_METHOD("_activate_pressed"), &EditorProfiler::_activate_pressed); + ClassDB::bind_method(D_METHOD("_clear_pressed"), &EditorProfiler::_clear_pressed); ClassDB::bind_method(D_METHOD("_graph_tex_draw"), &EditorProfiler::_graph_tex_draw); ClassDB::bind_method(D_METHOD("_graph_tex_input"), &EditorProfiler::_graph_tex_input); ClassDB::bind_method(D_METHOD("_graph_tex_mouse_exit"), &EditorProfiler::_graph_tex_mouse_exit); @@ -625,10 +631,15 @@ EditorProfiler::EditorProfiler() { add_child(hb); activate = memnew(Button); activate->set_toggle_mode(true); - activate->set_text(TTR("Start Profiling")); + activate->set_text(TTR("Start")); activate->connect("pressed", this, "_activate_pressed"); hb->add_child(activate); + clear_button = memnew(Button); + clear_button->set_text(TTR("Clear")); + clear_button->connect("pressed", this, "_clear_pressed"); + hb->add_child(clear_button); + hb->add_child(memnew(Label(TTR("Measure:")))); display_mode = memnew(OptionButton); diff --git a/editor/editor_profiler.h b/editor/editor_profiler.h index d902a97c5d..cb451475e7 100644 --- a/editor/editor_profiler.h +++ b/editor/editor_profiler.h @@ -100,6 +100,7 @@ public: private: Button *activate; + Button *clear_button; TextureRect *graph; Ref<ImageTexture> graph_texture; PoolVector<uint8_t> graph_image; @@ -133,6 +134,7 @@ private: void _update_frame(); void _activate_pressed(); + void _clear_pressed(); String _get_time_as_text(Metric &m, float p_time, int p_calls); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index d1968468f8..9902d8d3e7 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -500,7 +500,7 @@ public: virtual String get_tooltip(const Point2 &p_pos) const { for (int i = 0; i < flag_rects.size(); i++) { - if (flag_rects[i].has_point(p_pos) && i < names.size()) { + if (i < names.size() && flag_rects[i].has_point(p_pos)) { return names[i]; } } @@ -1023,8 +1023,8 @@ void EditorPropertyRect2::_value_changed(double val) { Rect2 r2; r2.position.x = spin[0]->get_value(); - r2.position.x = spin[1]->get_value(); - r2.size.y = spin[2]->get_value(); + r2.position.y = spin[1]->get_value(); + r2.size.x = spin[2]->get_value(); r2.size.y = spin[3]->get_value(); emit_signal("property_changed", get_edited_property(), r2); } @@ -1530,6 +1530,8 @@ void EditorPropertyNodePath::_node_selected(const NodePath &p_path) { void EditorPropertyNodePath::_node_assign() { if (!scene_tree) { scene_tree = memnew(SceneTreeDialog); + scene_tree->get_scene_tree()->set_show_enabled_subscene(true); + scene_tree->get_scene_tree()->set_valid_types(valid_types); add_child(scene_tree); scene_tree->connect("selected", this, "_node_selected"); } @@ -1584,9 +1586,10 @@ void EditorPropertyNodePath::update_property() { assign->set_icon(icon); } -void EditorPropertyNodePath::setup(const NodePath &p_base_hint) { +void EditorPropertyNodePath::setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types) { base_hint = p_base_hint; + valid_types = p_valid_types; } void EditorPropertyNodePath::_notification(int p_what) { @@ -1779,6 +1782,7 @@ void EditorPropertyResource::_menu_option(int p_which) { if (!scene_tree) { scene_tree = memnew(SceneTreeDialog); + scene_tree->get_scene_tree()->set_show_enabled_subscene(true); add_child(scene_tree); scene_tree->connect("selected", this, "_viewport_selected"); scene_tree->set_title(TTR("Pick a Viewport")); @@ -1986,6 +1990,13 @@ void EditorPropertyResource::_sub_inspector_object_id_selected(int p_id) { emit_signal("object_id_selected", get_edited_property(), p_id); } +void EditorPropertyResource::_open_editor_pressed() { + RES res = get_edited_object()->get(get_edited_property()); + if (res.is_valid()) { + EditorNode::get_singleton()->edit_item(res.ptr()); + } +} + void EditorPropertyResource::update_property() { RES res = get_edited_object()->get(get_edited_property()); @@ -2009,9 +2020,29 @@ void EditorPropertyResource::update_property() { sub_inspector->set_read_only(is_read_only()); sub_inspector->set_use_folding(is_using_folding()); - add_child(sub_inspector); - set_bottom_editor(sub_inspector); + sub_inspector_vbox = memnew(VBoxContainer); + add_child(sub_inspector_vbox); + set_bottom_editor(sub_inspector_vbox); + + sub_inspector_vbox->add_child(sub_inspector); assign->set_pressed(true); + + bool use_editor = false; + for (int i = 0; i < EditorNode::get_singleton()->get_editor_data().get_editor_plugin_count(); i++) { + EditorPlugin *ep = EditorNode::get_singleton()->get_editor_data().get_editor_plugin(i); + if (ep->handles(res.ptr())) { + use_editor = true; + } + } + + if (use_editor) { + Button *open_in_editor = memnew(Button); + open_in_editor->set_text(TTR("Open Editor")); + open_in_editor->set_icon(get_icon("Edit", "EditorIcons")); + sub_inspector_vbox->add_child(open_in_editor); + open_in_editor->connect("pressed", this, "_open_editor_pressed"); + open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER); + } } if (res.ptr() != sub_inspector->get_edited_object()) { @@ -2021,8 +2052,9 @@ void EditorPropertyResource::update_property() { } else { if (sub_inspector) { set_bottom_editor(NULL); - memdelete(sub_inspector); + memdelete(sub_inspector_vbox); sub_inspector = NULL; + sub_inspector_vbox = NULL; } } #endif @@ -2242,11 +2274,13 @@ void EditorPropertyResource::_bind_methods() { ClassDB::bind_method(D_METHOD("can_drop_data_fw"), &EditorPropertyResource::can_drop_data_fw); ClassDB::bind_method(D_METHOD("drop_data_fw"), &EditorPropertyResource::drop_data_fw); ClassDB::bind_method(D_METHOD("_button_draw"), &EditorPropertyResource::_button_draw); + ClassDB::bind_method(D_METHOD("_open_editor_pressed"), &EditorPropertyResource::_open_editor_pressed); } EditorPropertyResource::EditorPropertyResource() { sub_inspector = NULL; + sub_inspector_vbox = NULL; use_sub_inspector = !bool(EDITOR_GET("interface/inspector/open_resources_in_new_inspector")); HBoxContainer *hbc = memnew(HBoxContainer); add_child(hbc); @@ -2635,7 +2669,12 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ EditorPropertyNodePath *editor = memnew(EditorPropertyNodePath); if (p_hint == PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE && p_hint_text != String()) { - editor->setup(p_hint_text); + editor->setup(p_hint_text, Vector<StringName>()); + } + if (p_hint == PROPERTY_HINT_NODE_PATH_VALID_TYPES && p_hint_text != String()) { + Vector<String> types = p_hint_text.split(",", false); + Vector<StringName> sn = Variant(types); //convert via variant + editor->setup(NodePath(), sn); } add_property_editor(p_path, editor); @@ -2654,34 +2693,42 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ } break; case Variant::ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::ARRAY); add_property_editor(p_path, editor); } break; case Variant::POOL_BYTE_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_BYTE_ARRAY); add_property_editor(p_path, editor); } break; // 20 case Variant::POOL_INT_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_INT_ARRAY); add_property_editor(p_path, editor); } break; case Variant::POOL_REAL_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_REAL_ARRAY); add_property_editor(p_path, editor); } break; case Variant::POOL_STRING_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_STRING_ARRAY); add_property_editor(p_path, editor); } break; case Variant::POOL_VECTOR2_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_VECTOR2_ARRAY); add_property_editor(p_path, editor); } break; case Variant::POOL_VECTOR3_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_VECTOR3_ARRAY); add_property_editor(p_path, editor); } break; // 25 case Variant::POOL_COLOR_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_COLOR_ARRAY); add_property_editor(p_path, editor); } break; default: {} diff --git a/editor/editor_properties.h b/editor/editor_properties.h index 03e72b4ec2..c67eccb60e 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -453,6 +453,7 @@ class EditorPropertyNodePath : public EditorProperty { SceneTreeDialog *scene_tree; NodePath base_hint; + Vector<StringName> valid_types; void _node_selected(const NodePath &p_path); void _node_assign(); void _node_clear(); @@ -463,7 +464,7 @@ protected: public: virtual void update_property(); - void setup(const NodePath &p_base_hint); + void setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types); EditorPropertyNodePath(); }; @@ -491,6 +492,7 @@ class EditorPropertyResource : public EditorProperty { EditorFileDialog *file; Vector<String> inheritors_array; EditorInspector *sub_inspector; + VBoxContainer *sub_inspector_vbox; bool use_sub_inspector; bool dropping; @@ -516,6 +518,8 @@ class EditorPropertyResource : public EditorProperty { bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); + void _open_editor_pressed(); + protected: static void _bind_methods(); void _notification(int p_what); diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 90f8d0e157..2bd28170e7 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -172,28 +172,9 @@ void EditorPropertyArray::update_property() { Variant array = get_edited_object()->get(get_edited_property()); - if ((!array.is_array()) != edit->is_disabled()) { - - if (array.is_array()) { - edit->set_disabled(false); - edit->set_pressed(false); - - } else { - edit->set_disabled(true); - if (vbox) { - memdelete(vbox); - } - } - } - - if (!array.is_array()) { - return; - } - - String arrtype; - switch (array.get_type()) { + String arrtype = ""; + switch (array_type) { case Variant::ARRAY: { - arrtype = "Array"; } break; @@ -229,6 +210,15 @@ void EditorPropertyArray::update_property() { default: {} } + if (!array.is_array()) { + edit->set_text(arrtype + "[" + Variant::get_type_name(array.get_type()) + "]"); + edit->set_pressed(false); + if (vbox) { + memdelete(vbox); + } + return; + } + edit->set_text(arrtype + "[" + itos(array.call("size")) + "]"); #ifdef TOOLS_ENABLED @@ -419,40 +409,55 @@ void EditorPropertyArray::update_property() { prop = memnew(EditorPropertyDictionary); } break; - case Variant::ARRAY: { - prop = memnew(EditorPropertyArray); + // arrays + case Variant::ARRAY: { + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::ARRAY); + prop = editor; } break; - - // arrays case Variant::POOL_BYTE_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_BYTE_ARRAY); + prop = editor; } break; case Variant::POOL_INT_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_INT_ARRAY); + prop = editor; } break; case Variant::POOL_REAL_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_REAL_ARRAY); + prop = editor; } break; case Variant::POOL_STRING_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_STRING_ARRAY); + prop = editor; } break; case Variant::POOL_VECTOR2_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_VECTOR2_ARRAY); + prop = editor; } break; case Variant::POOL_VECTOR3_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_VECTOR3_ARRAY); + prop = editor; } break; case Variant::POOL_COLOR_ARRAY: { - prop = memnew(EditorPropertyArray); + EditorPropertyArray *editor = memnew(EditorPropertyArray); + editor->setup(Variant::POOL_COLOR_ARRAY); + prop = editor; } break; default: {} } @@ -496,6 +501,14 @@ void EditorPropertyArray::_notification(int p_what) { } void EditorPropertyArray::_edit_pressed() { + Variant array = get_edited_object()->get(get_edited_property()); + if (!array.is_array()) { + Variant::CallError ce; + array = Variant::construct(array_type, NULL, 0, ce); + + get_edited_object()->set(get_edited_property(), array); + } + get_edited_object()->editor_set_section_unfold(get_edited_property(), edit->is_pressed()); update_property(); } @@ -522,6 +535,11 @@ void EditorPropertyArray::_length_changed(double p_page) { update_property(); } +void EditorPropertyArray::setup(Variant::Type p_array_type) { + + array_type = p_array_type; +} + void EditorPropertyArray::_bind_methods() { ClassDB::bind_method("_edit_pressed", &EditorPropertyArray::_edit_pressed); ClassDB::bind_method("_page_changed", &EditorPropertyArray::_page_changed); diff --git a/editor/editor_properties_array_dict.h b/editor/editor_properties_array_dict.h index 7f6203ee88..75c67d280d 100644 --- a/editor/editor_properties_array_dict.h +++ b/editor/editor_properties_array_dict.h @@ -62,6 +62,7 @@ class EditorPropertyArray : public EditorProperty { EditorSpinSlider *length; EditorSpinSlider *page; HBoxContainer *page_hb; + Variant::Type array_type; void _page_changed(double p_page); void _length_changed(double p_page); @@ -75,6 +76,7 @@ protected: void _notification(int p_what); public: + void setup(Variant::Type p_array_type); virtual void update_property(); EditorPropertyArray(); }; diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index a47605be15..4045d6c3d3 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -313,8 +313,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("interface/editor/save_each_scene_on_quit", true); // Regression _initial_set("interface/editor/quit_confirmation", true); - _initial_set("interface/theme/preset", 0); - hints["interface/theme/preset"] = PropertyInfo(Variant::INT, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Grey,Godot 2,Arc,Light,Alien,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/theme/preset", "Default"); + hints["interface/theme/preset"] = PropertyInfo(Variant::STRING, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Alien,Arc,Godot 2,Grey,Light,Solarized (Dark),Solarized (Light),Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/theme/icon_and_font_color", 0); hints["interface/theme/icon_and_font_color"] = PropertyInfo(Variant::INT, "interface/theme/icon_and_font_color", PROPERTY_HINT_ENUM, "Auto,Dark,Light", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/theme/base_color", Color::html("#323b4f")); @@ -568,79 +568,55 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { } void EditorSettings::_load_default_text_editor_theme() { - _initial_set("text_editor/highlighting/background_color", Color::html("3b000000")); + + bool dark_theme = is_dark_theme(); + + _initial_set("text_editor/highlighting/symbol_color", Color::html("badfff")); + _initial_set("text_editor/highlighting/keyword_color", Color::html("ffffb3")); + _initial_set("text_editor/highlighting/base_type_color", Color::html("a4ffd4")); + _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff")); + _initial_set("text_editor/highlighting/comment_color", Color::html("676767")); + _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe")); + _initial_set("text_editor/highlighting/background_color", dark_theme ? Color::html("3b000000") : Color::html("#323b4f")); _initial_set("text_editor/highlighting/completion_background_color", Color::html("2C2A32")); _initial_set("text_editor/highlighting/completion_selected_color", Color::html("434244")); _initial_set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf")); _initial_set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff")); _initial_set("text_editor/highlighting/completion_font_color", Color::html("aaaaaa")); + _initial_set("text_editor/highlighting/text_color", Color::html("aaaaaa")); + _initial_set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa")); _initial_set("text_editor/highlighting/caret_color", Color::html("aaaaaa")); _initial_set("text_editor/highlighting/caret_background_color", Color::html("000000")); - _initial_set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa")); - _initial_set("text_editor/highlighting/text_color", Color::html("aaaaaa")); _initial_set("text_editor/highlighting/text_selected_color", Color::html("000000")); - _initial_set("text_editor/highlighting/keyword_color", Color::html("ffffb3")); - _initial_set("text_editor/highlighting/base_type_color", Color::html("a4ffd4")); - _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff")); - _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce")); - _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59")); - _initial_set("text_editor/highlighting/comment_color", Color::html("676767")); - _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe")); - _initial_set("text_editor/highlighting/number_color", Color::html("EB9532")); - _initial_set("text_editor/highlighting/symbol_color", Color::html("badfff")); _initial_set("text_editor/highlighting/selection_color", Color::html("6ca9c2")); _initial_set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2)); _initial_set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15)); _initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1)); + _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15)); + _initial_set("text_editor/highlighting/number_color", Color::html("EB9532")); + _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce")); + _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59")); _initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4)); _initial_set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2)); _initial_set("text_editor/highlighting/code_folding_color", Color(0.8, 0.8, 0.8, 0.8)); - _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15)); _initial_set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1)); _initial_set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1)); - - // GDScript highlighter - _initial_set("text_editor/highlighting/gdscript/function_definition_color", Color::html("#01e1ff")); - _initial_set("text_editor/highlighting/gdscript/node_path_color", Color::html("#64c15a")); } bool EditorSettings::_save_text_editor_theme(String p_file) { String theme_section = "color_theme"; Ref<ConfigFile> cf = memnew(ConfigFile); // hex is better? - cf->set_value(theme_section, "background_color", ((Color)get("text_editor/highlighting/background_color")).to_html()); - cf->set_value(theme_section, "completion_background_color", ((Color)get("text_editor/highlighting/completion_background_color")).to_html()); - cf->set_value(theme_section, "completion_selected_color", ((Color)get("text_editor/highlighting/completion_selected_color")).to_html()); - cf->set_value(theme_section, "completion_existing_color", ((Color)get("text_editor/highlighting/completion_existing_color")).to_html()); - cf->set_value(theme_section, "completion_scroll_color", ((Color)get("text_editor/highlighting/completion_scroll_color")).to_html()); - cf->set_value(theme_section, "completion_font_color", ((Color)get("text_editor/highlighting/completion_font_color")).to_html()); - cf->set_value(theme_section, "caret_color", ((Color)get("text_editor/highlighting/caret_color")).to_html()); - cf->set_value(theme_section, "caret_background_color", ((Color)get("text_editor/highlighting/caret_background_color")).to_html()); - cf->set_value(theme_section, "line_number_color", ((Color)get("text_editor/highlighting/line_number_color")).to_html()); - cf->set_value(theme_section, "text_color", ((Color)get("text_editor/highlighting/text_color")).to_html()); - cf->set_value(theme_section, "text_selected_color", ((Color)get("text_editor/highlighting/text_selected_color")).to_html()); - cf->set_value(theme_section, "keyword_color", ((Color)get("text_editor/highlighting/keyword_color")).to_html()); - cf->set_value(theme_section, "base_type_color", ((Color)get("text_editor/highlighting/base_type_color")).to_html()); - cf->set_value(theme_section, "engine_type_color", ((Color)get("text_editor/highlighting/engine_type_color")).to_html()); - cf->set_value(theme_section, "function_color", ((Color)get("text_editor/highlighting/function_color")).to_html()); - cf->set_value(theme_section, "member_variable_color", ((Color)get("text_editor/highlighting/member_variable_color")).to_html()); - cf->set_value(theme_section, "comment_color", ((Color)get("text_editor/highlighting/comment_color")).to_html()); - cf->set_value(theme_section, "string_color", ((Color)get("text_editor/highlighting/string_color")).to_html()); - cf->set_value(theme_section, "number_color", ((Color)get("text_editor/highlighting/number_color")).to_html()); - cf->set_value(theme_section, "symbol_color", ((Color)get("text_editor/highlighting/symbol_color")).to_html()); - cf->set_value(theme_section, "selection_color", ((Color)get("text_editor/highlighting/selection_color")).to_html()); - cf->set_value(theme_section, "brace_mismatch_color", ((Color)get("text_editor/highlighting/brace_mismatch_color")).to_html()); - cf->set_value(theme_section, "current_line_color", ((Color)get("text_editor/highlighting/current_line_color")).to_html()); - cf->set_value(theme_section, "line_length_guideline_color", ((Color)get("text_editor/highlighting/line_length_guideline_color")).to_html()); - cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/highlighting/mark_color")).to_html()); - cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/highlighting/breakpoint_color")).to_html()); - cf->set_value(theme_section, "code_folding_color", ((Color)get("text_editor/highlighting/code_folding_color")).to_html()); - cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/highlighting/word_highlighted_color")).to_html()); - cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/highlighting/search_result_color")).to_html()); - cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/highlighting/search_result_border_color")).to_html()); - - //GDScript highlighter - cf->set_value(theme_section, "gdscript/function_definition_color", ((Color)get("text_editor/highlighting/gdscript/function_definition_color")).to_html()); - cf->set_value(theme_section, "gdscript/node_path_color", ((Color)get("text_editor/highlighting/gdscript/node_path_color")).to_html()); + + List<String> keys; + props.get_key_list(&keys); + keys.sort(); + + for (const List<String>::Element *E = keys.front(); E; E = E->next()) { + String key = E->get(); + if (key.begins_with("text_editor/highlighting/") && key.find("color") >= 0) { + cf->set_value(theme_section, key.replace("text_editor/highlighting/", ""), ((Color)props[key].variant).to_html()); + } + } Error err = cf->save(p_file); @@ -1216,6 +1192,14 @@ void EditorSettings::load_favorites() { } } +bool EditorSettings::is_dark_theme() { + int AUTO_COLOR = 0; + int LIGHT_COLOR = 2; + Color base_color = get("interface/theme/base_color"); + int icon_font_color_setting = get("interface/theme/icon_and_font_color"); + return (icon_font_color_setting == AUTO_COLOR && ((base_color.r + base_color.g + base_color.b) / 3.0) < 0.5) || icon_font_color_setting == LIGHT_COLOR; +} + void EditorSettings::list_text_editor_themes() { String themes = "Adaptive,Default,Custom"; DirAccess *d = DirAccess::open(get_text_editor_themes_dir()); @@ -1402,33 +1386,9 @@ struct ShortCutMapping { Ref<ShortCut> ED_SHORTCUT(const String &p_path, const String &p_name, uint32_t p_keycode) { #ifdef OSX_ENABLED - static const ShortCutMapping macos_mappings[] = { - { "editor/play", KEY_MASK_CMD | KEY_B }, - { "editor/play_scene", KEY_MASK_CMD | KEY_R }, - { "editor/pause_scene", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y }, - { "editor/stop", KEY_MASK_CMD | KEY_PERIOD }, - { "editor/play_custom_scene", KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_R }, - { "editor/editor_2d", KEY_MASK_ALT | KEY_1 }, - { "editor/editor_3d", KEY_MASK_ALT | KEY_2 }, - { "editor/editor_script", KEY_MASK_ALT | KEY_3 }, - { "editor/editor_help", KEY_MASK_ALT | KEY_SPACE }, - { "editor/fullscreen_mode", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F }, - { "editor/distraction_free_mode", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D }, - { "script_text_editor/contextual_help", KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE }, - { "script_text_editor/find_next", KEY_MASK_CMD | KEY_G }, - { "script_text_editor/find_previous", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G }, - { "script_text_editor/toggle_breakpoint", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B } - }; - + // Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS if (p_keycode == KEY_DELETE) { p_keycode = KEY_MASK_CMD | KEY_BACKSPACE; - } else { - for (int i = 0; i < sizeof(macos_mappings) / sizeof(ShortCutMapping); i++) { - if (p_path == macos_mappings[i].path) { - p_keycode = macos_mappings[i].keycode; - break; - } - } } #endif diff --git a/editor/editor_settings.h b/editor/editor_settings.h index b48aac89c7..420e067cad 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -175,6 +175,8 @@ public: Vector<String> get_recent_dirs() const; void load_favorites(); + bool is_dark_theme(); + void list_text_editor_themes(); void load_text_editor_theme(); bool import_text_editor_theme(String p_file); diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 087dcd649f..0852a42794 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -37,6 +37,9 @@ String EditorSpinSlider::get_text_value() const { } void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { + if (read_only) + return; + Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT) { @@ -301,10 +304,23 @@ void EditorSpinSlider::_grabber_mouse_exited() { update(); } +void EditorSpinSlider::set_read_only(bool p_enable) { + + read_only = p_enable; + update(); +} + +bool EditorSpinSlider::is_read_only() const { + return read_only; +} + void EditorSpinSlider::_bind_methods() { ClassDB::bind_method(D_METHOD("set_label", "label"), &EditorSpinSlider::set_label); ClassDB::bind_method(D_METHOD("get_label"), &EditorSpinSlider::get_label); + ClassDB::bind_method(D_METHOD("set_read_only", "read_only"), &EditorSpinSlider::set_read_only); + ClassDB::bind_method(D_METHOD("is_read_only"), &EditorSpinSlider::is_read_only); + ClassDB::bind_method(D_METHOD("_gui_input"), &EditorSpinSlider::_gui_input); ClassDB::bind_method(D_METHOD("_grabber_mouse_entered"), &EditorSpinSlider::_grabber_mouse_entered); ClassDB::bind_method(D_METHOD("_grabber_mouse_exited"), &EditorSpinSlider::_grabber_mouse_exited); @@ -313,6 +329,7 @@ void EditorSpinSlider::_bind_methods() { ClassDB::bind_method(D_METHOD("_value_input_entered"), &EditorSpinSlider::_value_input_entered); ADD_PROPERTY(PropertyInfo(Variant::STRING, "label"), "set_label", "get_label"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "read_only"), "set_read_only", "is_read_only"); } EditorSpinSlider::EditorSpinSlider() { @@ -342,4 +359,5 @@ EditorSpinSlider::EditorSpinSlider() { value_input->connect("modal_closed", this, "_value_input_closed"); value_input->connect("text_entered", this, "_value_input_entered"); hide_slider = false; + read_only = false; } diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index 4956990dc2..37d8a5f128 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -55,6 +55,8 @@ class EditorSpinSlider : public Range { bool grabbing_spinner_attempt; bool grabbing_spinner; + + bool read_only; Vector2 grabbing_spinner_mouse_pos; LineEdit *value_input; @@ -80,6 +82,9 @@ public: void set_hide_slider(bool p_hide); bool is_hiding_slider() const; + void set_read_only(bool p_enable); + bool is_read_only() const; + virtual Size2 get_minimum_size() const; EditorSpinSlider(); }; diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index d0b842f231..98402d8df5 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -254,7 +254,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Color base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#323b4f")); float contrast = EDITOR_DEF("interface/theme/contrast", default_contrast); - int preset = EDITOR_DEF("interface/theme/preset", 0); + String preset = EDITOR_DEF("interface/theme/preset", "Default"); + int icon_font_color_setting = EDITOR_DEF("interface/theme/icon_and_font_color", 0); bool highlight_tabs = EDITOR_DEF("interface/theme/highlight_tabs", false); int border_size = EDITOR_DEF("interface/theme/border_size", 1); @@ -266,45 +267,52 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Color preset_accent_color; Color preset_base_color; float preset_contrast; - switch (preset) { - case 0: { // Default - preset_accent_color = Color::html("#699ce8"); - preset_base_color = Color::html("#323b4f"); - preset_contrast = default_contrast; - } break; - case 1: { // Grey - preset_accent_color = Color::html("#b8e4ff"); - preset_base_color = Color::html("#3d3d3d"); - preset_contrast = 0.2; - } break; - case 2: { // Godot 2 - preset_accent_color = Color::html("#86ace2"); - preset_base_color = Color::html("#3C3A44"); - preset_contrast = 0.25; - } break; - case 3: { // Arc - preset_accent_color = Color::html("#5294e2"); - preset_base_color = Color::html("#383c4a"); - preset_contrast = 0.25; - } break; - case 4: { // Light - preset_accent_color = Color::html("#2070ff"); - preset_base_color = Color::html("#ffffff"); - preset_contrast = 0.08; - } break; - case 5: { // Alien - preset_accent_color = Color::html("#1bfe99"); - preset_base_color = Color::html("#2f373f"); - preset_contrast = 0.25; - } - default: { // Custom - accent_color = EDITOR_DEF("interface/theme/accent_color", Color::html("#699ce8")); - base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#323b4f")); - contrast = EDITOR_DEF("interface/theme/contrast", default_contrast); - } + + // Please, use alphabet order if you've added new theme here(After "Default" and "Custom") + + if (preset == "Default") { + preset_accent_color = Color::html("#699ce8"); + preset_base_color = Color::html("#323b4f"); + preset_contrast = default_contrast; + } else if (preset == "Custom") { + accent_color = EDITOR_DEF("interface/theme/accent_color", Color::html("#699ce8")); + base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#323b4f")); + contrast = EDITOR_DEF("interface/theme/contrast", default_contrast); + } else if (preset == "Alien") { + preset_accent_color = Color::html("#1bfe99"); + preset_base_color = Color::html("#2f373f"); + preset_contrast = 0.25; + } else if (preset == "Arc") { + preset_accent_color = Color::html("#5294e2"); + preset_base_color = Color::html("#383c4a"); + preset_contrast = 0.25; + } else if (preset == "Godot 2") { + preset_accent_color = Color::html("#86ace2"); + preset_base_color = Color::html("#3C3A44"); + preset_contrast = 0.25; + } else if (preset == "Grey") { + preset_accent_color = Color::html("#b8e4ff"); + preset_base_color = Color::html("#3d3d3d"); + preset_contrast = 0.2; + } else if (preset == "Light") { + preset_accent_color = Color::html("#2070ff"); + preset_base_color = Color::html("#ffffff"); + preset_contrast = 0.08; + } else if (preset == "Solarized (Dark)") { + preset_accent_color = Color::html("#268bd2"); + preset_base_color = Color::html("#073642"); + preset_contrast = 0.15; + } else if (preset == "Solarized (Light)") { + preset_accent_color = Color::html("#268bd2"); + preset_base_color = Color::html("#fdf6e3"); + preset_contrast = 0.06; + } else { // Default + preset_accent_color = Color::html("#699ce8"); + preset_base_color = Color::html("#323b4f"); + preset_contrast = default_contrast; } - if (preset != 6) { + if (preset != "Custom") { accent_color = preset_accent_color; base_color = preset_base_color; contrast = preset_contrast; @@ -318,9 +326,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { EditorSettings::get_singleton()->set_manually("interface/theme/contrast", contrast); //Colors - int AUTO_COLOR = 0; - int LIGHT_COLOR = 2; - bool dark_theme = (icon_font_color_setting == AUTO_COLOR && ((base_color.r + base_color.g + base_color.b) / 3.0) < 0.5) || icon_font_color_setting == LIGHT_COLOR; + bool dark_theme = EditorSettings::get_singleton()->is_dark_theme(); const Color dark_color_1 = base_color.linear_interpolate(Color(0, 0, 0, 1), contrast); const Color dark_color_2 = base_color.linear_interpolate(Color(0, 0, 0, 1), contrast * 1.5); @@ -940,6 +946,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("bg", "GraphEdit", style_tree_bg); theme->set_color("grid_major", "GraphEdit", grid_major_color); theme->set_color("grid_minor", "GraphEdit", grid_minor_color); + theme->set_color("activity", "GraphEdit", accent_color); theme->set_icon("minus", "GraphEdit", theme->get_icon("ZoomLess", "EditorIcons")); theme->set_icon("more", "GraphEdit", theme->get_icon("ZoomMore", "EditorIcons")); theme->set_icon("reset", "GraphEdit", theme->get_icon("ZoomReset", "EditorIcons")); @@ -1047,11 +1054,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color comment_color = dim_color; const Color string_color = Color::html(dark_theme ? "#ffd942" : "#ffd118").linear_interpolate(mono_color, dark_theme ? 0.5 : 0.3); - const Color function_definition_color = Color::html(dark_theme ? "#01e1ff" : "#00a5ba"); - const Color node_path_color = Color::html(dark_theme ? "64c15a" : "#518b4b"); - - const Color te_background_color = Color(0, 0, 0, 0); - const Color completion_background_color = base_color; + const Color te_background_color = dark_theme ? background_color : base_color; + const Color completion_background_color = dark_theme ? base_color : background_color; const Color completion_selected_color = alpha1; const Color completion_existing_color = alpha2; const Color completion_scroll_color = alpha1; @@ -1064,7 +1068,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color selection_color = alpha2; const Color brace_mismatch_color = error_color; const Color current_line_color = alpha1; - const Color line_length_guideline_color = warning_color; + const Color line_length_guideline_color = dark_theme ? base_color : background_color; const Color word_highlighted_color = alpha1; const Color number_color = basetype_color.linear_interpolate(mono_color, dark_theme ? 0.5 : 0.3); const Color function_color = main_color; @@ -1084,7 +1088,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { setting->set_initial_value("text_editor/highlighting/engine_type_color", type_color, true); setting->set_initial_value("text_editor/highlighting/comment_color", comment_color, true); setting->set_initial_value("text_editor/highlighting/string_color", string_color, true); - setting->set_initial_value("text_editor/highlighting/background_color", background_color, true); + setting->set_initial_value("text_editor/highlighting/background_color", te_background_color, true); setting->set_initial_value("text_editor/highlighting/completion_background_color", completion_background_color, true); setting->set_initial_value("text_editor/highlighting/completion_selected_color", completion_selected_color, true); setting->set_initial_value("text_editor/highlighting/completion_existing_color", completion_existing_color, true); @@ -1108,43 +1112,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { setting->set_initial_value("text_editor/highlighting/code_folding_color", code_folding_color, true); setting->set_initial_value("text_editor/highlighting/search_result_color", search_result_color, true); setting->set_initial_value("text_editor/highlighting/search_result_border_color", search_result_border_color, true); - - setting->set_initial_value("text_editor/highlighting/gdscript/function_definition_color", function_definition_color, true); - setting->set_initial_value("text_editor/highlighting/gdscript/node_path_color", node_path_color, true); } else if (text_editor_color_theme == "Default") { - setting->set_initial_value("text_editor/highlighting/symbol_color", Color::html("badfff"), true); - setting->set_initial_value("text_editor/highlighting/keyword_color", Color::html("ffffb3"), true); - setting->set_initial_value("text_editor/highlighting/base_type_color", Color::html("a4ffd4"), true); - setting->set_initial_value("text_editor/highlighting/engine_type_color", Color::html("83d3ff"), true); - setting->set_initial_value("text_editor/highlighting/comment_color", Color::html("676767"), true); - setting->set_initial_value("text_editor/highlighting/string_color", Color::html("ef6ebe"), true); - setting->set_initial_value("text_editor/highlighting/background_color", Color::html("3b000000"), true); - setting->set_initial_value("text_editor/highlighting/completion_background_color", Color::html("2C2A32"), true); - setting->set_initial_value("text_editor/highlighting/completion_selected_color", Color::html("434244"), true); - setting->set_initial_value("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf"), true); - setting->set_initial_value("text_editor/highlighting/completion_scroll_color", Color::html("ffffff"), true); - setting->set_initial_value("text_editor/highlighting/completion_font_color", Color::html("aaaaaa"), true); - setting->set_initial_value("text_editor/highlighting/text_color", Color::html("aaaaaa"), true); - setting->set_initial_value("text_editor/highlighting/line_number_color", Color::html("66aaaaaa"), true); - setting->set_initial_value("text_editor/highlighting/caret_color", Color::html("aaaaaa"), true); - setting->set_initial_value("text_editor/highlighting/caret_background_color", Color::html("000000"), true); - setting->set_initial_value("text_editor/highlighting/text_selected_color", Color::html("000000"), true); - setting->set_initial_value("text_editor/highlighting/selection_color", Color::html("6ca9c2"), true); - setting->set_initial_value("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2), true); - setting->set_initial_value("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15), true); - setting->set_initial_value("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1), true); - setting->set_initial_value("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15), true); - setting->set_initial_value("text_editor/highlighting/number_color", Color::html("EB9532"), true); - setting->set_initial_value("text_editor/highlighting/function_color", Color::html("66a2ce"), true); - setting->set_initial_value("text_editor/highlighting/member_variable_color", Color::html("e64e59"), true); - setting->set_initial_value("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4), true); - setting->set_initial_value("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2), true); - setting->set_initial_value("text_editor/highlighting/code_folding_color", Color(0.8, 0.8, 0.8, 0.8), true); - setting->set_initial_value("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1), true); - setting->set_initial_value("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1), true); - - setting->set_initial_value("text_editor/highlighting/gdscript/function_definition_color", Color::html("#01e1ff"), true); - setting->set_initial_value("text_editor/highlighting/gdscript/node_path_color", Color::html("#64c15a"), true); + setting->load_text_editor_theme(); } return theme; diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 297373d299..e15c876893 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -1048,18 +1048,24 @@ void FileSystemDock::_move_operation_confirm(const String &p_to_path) { Map<String, String> file_renames; Map<String, String> folder_renames; + bool is_moved = false; 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, file_renames, folder_renames); + if (old_path != new_path) { + _try_move_item(to_move[i], new_path, file_renames, folder_renames); + is_moved = true; + } } - _update_dependencies_after_move(file_renames); - _update_resource_paths_after_move(file_renames); - _update_favorite_dirs_list_after_move(folder_renames); + if (is_moved) { + _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(); + print_line("call rescan!"); + _rescan(); + } } void FileSystemDock::_file_option(int p_option) { diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index ddf619866d..004a49e2b4 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -109,6 +109,7 @@ void FindInFiles::start() { _current_dir = ""; PoolStringArray init_folder; init_folder.append(_root_dir); + _folders_stack.clear(); _folders_stack.push_back(init_folder); _initial_files_count = 0; @@ -127,11 +128,12 @@ 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(); + float time_before = os.get_ticks_msec(); + while (is_processing()) { _iterate(); - duration += (os.get_ticks_msec() - time_before); + float elapsed = (os.get_ticks_msec() - time_before); + if (elapsed > 1000.0 / 120.0) + break; } } diff --git a/editor/icons/README.md b/editor/icons/README.md index f3aaa23666..3a2aba5b07 100644 --- a/editor/icons/README.md +++ b/editor/icons/README.md @@ -2,11 +2,11 @@ The icons here are optimized SVGs, because the editor renders the svgs at runtim to be small in size, so they can be efficiently parsed. The original icons can be found at: -https://github.com/djrm/godot-design/tree/master/assets/icons +https://github.com/godotengine/godot-design/tree/master/engine/icons There you can find the optimizer script. If you add a new icon, please make a pull request to this repo: -https://github.com/djrm/godot-design/ +https://github.com/godotengine/godot-design/ and store the the optimized SVG version here. diff --git a/editor/icons/icon_animation_filter.svg b/editor/icons/icon_animation_filter.svg new file mode 100644 index 0000000000..4f8e881ea8 --- /dev/null +++ b/editor/icons/icon_animation_filter.svg @@ -0,0 +1,63 @@ +<?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_animation_filter.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 /> + </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="1089" + inkscape:window-height="480" + id="namedview8" + showgrid="false" + inkscape:zoom="10.429825" + inkscape:cx="-5.6414698" + inkscape:cy="10.961343" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g10" /> + <g + transform="matrix(0.02719109,0,0,0.02719109,1.3153462,1.0022864)" + id="g12"> + <g + id="g10"> + <path + inkscape:connector-curvature="0" + d="M 495.289,20.143 H 16.709 c -14.938,0 -22.344,18.205 -11.666,28.636 l 169.7,165.778 v 260.587 c 0,14.041 16.259,21.739 27.131,13.031 L 331.017,384.743 c 3.956,-3.169 6.258,-7.962 6.258,-13.031 V 214.556 L 506.955,48.779 c 10.688,-10.44 3.259,-28.636 -11.666,-28.636 z" + id="path8" + style="fill:#e0e0e0;fill-opacity:1" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_animation_track_group.svg b/editor/icons/icon_animation_track_group.svg new file mode 100644 index 0000000000..9c4748a528 --- /dev/null +++ b/editor/icons/icon_animation_track_group.svg @@ -0,0 +1,63 @@ +<?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_animation_track_group.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="1089" + inkscape:window-height="480" + id="namedview8" + showgrid="false" + inkscape:zoom="10.429825" + inkscape:cx="6.2135985" + inkscape:cy="6.5622523" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + style="fill:#e0e0e0" + inkscape:connector-curvature="0" + id="path2" + d="M 5.0508475,2 V 4 H 14 V 2 Z m -3.322034,-0.016949 v 2 h 2 v -2 z M 8.9830508,7 V 9 H 14 V 7 Z m -3.5254237,5 v 2 h 2 v -2 z m 3.5254237,0 v 2 H 14 v -2 z" + sodipodi:nodetypes="ccccccccccccccccccccccccc" /> + <path + style="fill:#e0e0e0" + inkscape:connector-curvature="0" + id="path2-3" + d="m 5.4915255,6.9322039 v 1.999999 h 2 v -1.999999 z" + sodipodi:nodetypes="ccccc" /> +</svg> diff --git a/editor/icons/icon_animation_track_list.svg b/editor/icons/icon_animation_track_list.svg new file mode 100644 index 0000000000..40e8414598 --- /dev/null +++ b/editor/icons/icon_animation_track_list.svg @@ -0,0 +1,60 @@ +<?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_animation_track_list.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="1089" + 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"> + <path + transform="translate(0 1036.4)" + d="m2 2v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8z" + fill="#e0e0e0" + id="path2" /> + </g> +</svg> diff --git a/editor/icons/icon_animation_tree.svg b/editor/icons/icon_animation_tree.svg new file mode 100644 index 0000000000..046506fa37 --- /dev/null +++ b/editor/icons/icon_animation_tree.svg @@ -0,0 +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="m1 1v14h1.166v-2h1.834v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.834v-2h-1.166zm4 3h2v1 1h1 3v2h-2v1 1h1 1v2h-1-2a1.0001 1.0001 0 0 1 -1 -1v-1-2h-1a1.0001 1.0001 0 0 1 -1 -1v-1-1-1zm-2.834 1h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2zm-9.834 4h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2z" fill="#cea4f1"/> +</g> +</svg> diff --git a/editor/icons/icon_auto_end.svg b/editor/icons/icon_auto_end.svg new file mode 100644 index 0000000000..9e779c69f4 --- /dev/null +++ b/editor/icons/icon_auto_end.svg @@ -0,0 +1,68 @@ +<?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_auto_end.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="1273" + inkscape:window-height="766" + id="namedview8" + showgrid="false" + inkscape:zoom="41.7193" + inkscape:cx="12.08616" + inkscape:cy="6.9898672" + inkscape:window-x="539" + inkscape:window-y="208" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + inkscape:connector-curvature="0" + id="path2" + style="color:#000000;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + d="m 13.999798,14 c 0.552262,-5.5e-5 0.999945,-0.447738 1,-1 V 3 c -5.5e-5,-0.5522619 -0.447738,-0.9999448 -1,-1 H 5.9997976 C 5.6959349,1.9998247 5.4084731,2.1378063 5.2185476,2.375 l -4,5 c -0.29139692,0.3649711 -0.29139692,0.8830289 0,1.248 l 4,5 c 0.189538,0.237924 0.4770584,0.376652 0.78125,0.37695 h 8.0000004 z m -1,-2 H 6.4802976 l -3.1992,-4 3.1992,-4 H 12.999798 Z M 6.9997976,10 V 6 l -2,2 z" + sodipodi:nodetypes="cccccccccccccccccccccc" /> + <g + aria-label="E" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#e0e0e0;fill-opacity:1;stroke:none" + id="text829" + transform="matrix(0.20475474,0,0,0.20475474,4.7903856,12.365563)"> + <path + d="M 15.129502,-36.414393 H 35.422471 V -30.7308 H 22.649034 v 5.429688 h 12.011718 v 5.683594 H 22.649034 v 6.679687 h 13.203125 v 5.6835938 H 15.129502 Z" + style="fill:#e0e0e0;fill-opacity:1" + id="path831" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/editor/icons/icon_auto_triangle.svg b/editor/icons/icon_auto_triangle.svg new file mode 100644 index 0000000000..631f259452 --- /dev/null +++ b/editor/icons/icon_auto_triangle.svg @@ -0,0 +1,64 @@ +<?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="svg8" + sodipodi:docname="icon_auto_triangle.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1853" + inkscape:window-height="1016" + id="namedview10" + showgrid="false" + inkscape:zoom="29.5" + inkscape:cx="17.168167" + inkscape:cy="5.5708575" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1036.4)" + id="g6"> + <g + transform="translate(-26.001 -9.8683)" + id="g4"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.87616086;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.2324219 0.67773438 L 0.64453125 15.289062 L 15.355469 15.289062 L 8.2324219 0.67773438 z M 6.9414062 5.4433594 L 9.2109375 5.4433594 C 9.5561128 6.0670927 9.8954447 6.7088542 10.230469 7.3671875 C 10.565492 8.0167875 10.901304 8.703974 11.236328 9.4316406 C 11.581503 10.159241 11.931781 10.934946 12.287109 11.757812 C 12.642437 12.580746 13.018126 13.477066 13.414062 14.447266 L 10.871094 14.447266 C 10.75942 14.135399 10.632366 13.815528 10.490234 13.486328 C 10.358255 13.157195 10.225729 12.827247 10.09375 12.498047 L 5.9824219 12.498047 C 5.8504432 12.827247 5.7143976 13.157195 5.5722656 13.486328 C 5.440287 13.815528 5.3167521 14.135399 5.2050781 14.447266 L 2.7382812 14.447266 C 3.1342186 13.477066 3.5099064 12.580746 3.8652344 11.757812 C 4.2205624 10.934946 4.5673204 10.159241 4.9023438 9.4316406 C 5.2475197 8.703974 5.5813793 8.0167875 5.90625 7.3671875 C 6.2412733 6.7088542 6.5860782 6.0670927 6.9414062 5.4433594 z M 8.0234375 7.4824219 C 7.9726708 7.6123552 7.8964385 7.790425 7.7949219 8.015625 C 7.6933999 8.240825 7.5772912 8.5003885 7.4453125 8.7949219 C 7.3133332 9.0894552 7.1643891 9.4143979 7.0019531 9.7695312 C 6.8496698 10.124665 6.6936847 10.496919 6.53125 10.886719 L 9.53125 10.886719 C 9.368814 10.496919 9.2108764 10.124665 9.0585938 9.7695312 C 8.9063104 9.4143979 8.7593188 9.0894552 8.6171875 8.7949219 C 8.4852082 8.5003885 8.3691001 8.240825 8.2675781 8.015625 C 8.1660555 7.790425 8.0843508 7.6123552 8.0234375 7.4824219 z " + transform="translate(26.001,1046.2683)" + id="path821" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_bezier_handles_balanced.svg b/editor/icons/icon_bezier_handles_balanced.svg new file mode 100644 index 0000000000..8ab99d79bb --- /dev/null +++ b/editor/icons/icon_bezier_handles_balanced.svg @@ -0,0 +1,98 @@ +<?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_bezier_handles_balanced.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="1417" + inkscape:window-height="685" + id="namedview8" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="4.2910315" + inkscape:cy="11.857644" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" + id="path4526" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846" + cx="1.8983043" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3" + cx="14.237288" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.61799997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 7.4559186,5.1473018 2.7203863,6.7014816" + id="path5878" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.61489719;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 10.790357,4.2063094 8.2893822,5.149623" + id="path5878-7" + inkscape:connector-curvature="0" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3-6" + cx="8.2711868" + cy="4.7796612" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="M 1.7157324,5.8754878 A 1.2675855,1.1997888 0 0 0 0.44815434,7.0747066 1.2675855,1.1997888 0 0 0 1.7157324,8.2739253 1.2675855,1.1997888 0 0 0 2.9833105,7.0747066 1.2675855,1.1997888 0 0 0 1.7157324,5.8754878 Z m 0.00195,0.4238282 A 0.84677333,0.80148375 0 0 1 2.5653417,7.1000972 0.84677333,0.80148375 0 0 1 1.7176855,7.9008784 0.84677333,0.80148375 0 0 1 0.87002934,7.1000972 0.84677333,0.80148375 0 0 1 1.7176855,6.299316 Z" + id="path5846-5" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.7567277;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="M 11.909414,2.4642073 A 1.2836218,1.231838 0 0 0 10.6258,3.6954601 1.2836218,1.231838 0 0 0 11.909414,4.9267128 1.2836218,1.231838 0 0 0 13.193028,3.6954601 1.2836218,1.231838 0 0 0 11.909414,2.4642073 Z m 0.002,0.4351497 a 0.85748593,0.82289328 0 0 1 0.858383,0.8221719 0.85748593,0.82289328 0 0 1 -0.85838,0.822172 0.85748593,0.82289328 0 0 1 -0.858379,-0.822172 0.85748593,0.82289328 0 0 1 0.858379,-0.8221719 z" + id="path5846-5-6" /> +</svg> diff --git a/editor/icons/icon_bezier_handles_free.svg b/editor/icons/icon_bezier_handles_free.svg new file mode 100644 index 0000000000..e5dfb8d0fc --- /dev/null +++ b/editor/icons/icon_bezier_handles_free.svg @@ -0,0 +1,98 @@ +<?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_bezier_handles_separate.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="1417" + inkscape:window-height="685" + id="namedview8" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="4.2910315" + inkscape:cy="11.857644" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" + id="path4526" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846" + cx="1.8983043" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3" + cx="14.237288" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.80513805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 7.6850253,4.7560401 3.9088983,5.4168" + id="path5878" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.73079807;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 11.695505,2.3941651 8.696384,4.6876729" + id="path5878-7" + inkscape:connector-curvature="0" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3-6" + cx="8.2711868" + cy="4.7796612" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="M 2.4961199,4.3976698 A 1.1997888,1.2675855 80.074672 0 0 1.4542161,5.7974257 1.1997888,1.2675855 80.074672 0 0 2.9095255,6.7602105 1.1997888,1.2675855 80.074672 0 0 3.9514292,5.3604547 1.1997888,1.2675855 80.074672 0 0 2.4961199,4.3976698 Z m 0.074974,0.4171488 A 0.80148375,0.84677333 80.074672 0 1 3.5440925,5.4575082 0.80148375,0.84677333 80.074672 0 1 2.8471493,6.3924102 0.80148375,0.84677333 80.074672 0 1 1.8741535,5.74972 0.80148375,0.84677333 80.074672 0 1 2.5710967,4.814818 Z" + id="path5846-5" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.7567277;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 11.838896,0.64428913 a 1.231838,1.2836218 52.593897 0 0 -0.271701,1.75779027 1.231838,1.2836218 52.593897 0 0 1.767576,0.1983008 1.231838,1.2836218 52.593897 0 0 0.271701,-1.75779027 1.231838,1.2836218 52.593897 0 0 -1.767576,-0.1983008 z m 0.265925,0.3444462 A 0.82289328,0.85748593 52.593897 0 1 13.286115,1.1203938 0.82289328,0.85748593 52.593897 0 1 13.103698,2.2949179 0.82289328,0.85748593 52.593897 0 1 11.922407,2.163257 0.82289328,0.85748593 52.593897 0 1 12.104824,0.98873353 Z" + id="path5846-5-6" /> +</svg> diff --git a/editor/icons/icon_bezier_handles_mirror.svg b/editor/icons/icon_bezier_handles_mirror.svg new file mode 100644 index 0000000000..682c898368 --- /dev/null +++ b/editor/icons/icon_bezier_handles_mirror.svg @@ -0,0 +1,98 @@ +<?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_bezier_handles_mirror.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="1417" + inkscape:window-height="685" + id="namedview8" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="4.2910315" + inkscape:cy="11.857644" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" + id="path4526" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846" + cx="1.8983043" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3" + cx="14.237288" + cy="13.491526" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.80513805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.2033896,4.6779662 H 4.3698875" + id="path5878" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#84c2ff;stroke-width:0.71670938;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 11.931789,4.6440679 H 8.2033896" + id="path5878-7" + inkscape:connector-curvature="0" /> + <ellipse + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3-6" + cx="8.2711868" + cy="4.7796612" + rx="1.2675855" + ry="1.1997888" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="M 3.1539157,3.4305762 A 1.2675855,1.1997888 0 0 0 1.8863376,4.629795 1.2675855,1.1997888 0 0 0 3.1539157,5.8290137 1.2675855,1.1997888 0 0 0 4.4214938,4.629795 1.2675855,1.1997888 0 0 0 3.1539157,3.4305762 Z m 0.00195,0.4238282 A 0.84677333,0.80148375 0 0 1 4.003525,4.6551856 0.84677333,0.80148375 0 0 1 3.1558688,5.4559668 0.84677333,0.80148375 0 0 1 2.3082126,4.6551856 0.84677333,0.80148375 0 0 1 3.1558688,3.8544044 Z" + id="path5846-5" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 13.093969,3.3750567 a 1.2675855,1.1997888 0 0 0 -1.267578,1.1992188 1.2675855,1.1997888 0 0 0 1.267578,1.1992187 1.2675855,1.1997888 0 0 0 1.267578,-1.1992187 1.2675855,1.1997888 0 0 0 -1.267578,-1.1992188 z m 0.002,0.4238282 a 0.84677333,0.80148375 0 0 1 0.847659,0.8007812 0.84677333,0.80148375 0 0 1 -0.847656,0.8007812 0.84677333,0.80148375 0 0 1 -0.847656,-0.8007812 0.84677333,0.80148375 0 0 1 0.847656,-0.8007812 z" + id="path5846-5-6" /> +</svg> diff --git a/editor/icons/icon_color_track_vu.svg b/editor/icons/icon_color_track_vu.svg new file mode 100644 index 0000000000..cad76d0234 --- /dev/null +++ b/editor/icons/icon_color_track_vu.svg @@ -0,0 +1,115 @@ +<?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:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="24" + version="1.1" + viewBox="0 0 16 24" + id="svg6" + sodipodi:docname="icon_color_track_vu.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 /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs10"> + <linearGradient + id="linearGradient4583" + inkscape:collect="always"> + <stop + id="stop4579" + offset="0" + style="stop-color:#f70000;stop-opacity:1" /> + <stop + id="stop4581" + offset="1" + style="stop-color:#eec315;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4549"> + <stop + style="stop-color:#288027;stop-opacity:1" + offset="0" + id="stop4545" /> + <stop + style="stop-color:#dbee15;stop-opacity:1" + offset="1" + id="stop4547" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4549" + id="linearGradient4551" + x1="7.7288136" + y1="16.474577" + x2="7.7288136" + y2="3.8644071" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0931873,0,0,1.4762899,-0.98021429,0.08553021)" /> + <linearGradient + gradientTransform="matrix(1.1036585,0,0,0.47778193,-16.507235,-7.9018165)" + inkscape:collect="always" + xlink:href="#linearGradient4583" + id="linearGradient4551-7" + x1="7.7288136" + y1="16.474577" + x2="7.7288136" + y2="3.8644071" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1170" + inkscape:window-height="712" + id="namedview8" + showgrid="false" + showguides="false" + inkscape:zoom="14.75" + inkscape:cx="5.3261277" + inkscape:cy="13.681053" + inkscape:window-x="397" + inkscape:window-y="233" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <rect + style="fill:url(#linearGradient4551);fill-opacity:1;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;paint-order:fill markers stroke" + id="rect822" + width="18.232145" + height="18.416088" + x="-1.3507863" + y="5.9906898" + ry="0.84580106" /> + <rect + style="fill:url(#linearGradient4551-7);fill-opacity:1;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;paint-order:fill markers stroke" + id="rect822-5" + width="18.406782" + height="5.9601259" + x="-16.881357" + y="-5.9906898" + ry="0.27373245" + transform="scale(-1)" /> +</svg> diff --git a/editor/icons/icon_edit_bezier.svg b/editor/icons/icon_edit_bezier.svg new file mode 100644 index 0000000000..542ff52aac --- /dev/null +++ b/editor/icons/icon_edit_bezier.svg @@ -0,0 +1,73 @@ +<?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_edit_bezier.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 /> + </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="1039" + inkscape:window-height="585" + id="namedview8" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="11.65471" + inkscape:cy="9.0988062" + inkscape:window-x="277" + inkscape:window-y="113" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1036.4)" + id="g4"> + <path + style="fill:none;stroke:#84c2ff;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + d="m 1.4758015,1050.3064 c 11.6492855,0.7191 3.1098343,-11.4976 12.2331255,-11.3475" + id="path4526" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" + id="path5846-3" + cy="1038.7133" + cx="13.470984" + r="1.8230016" /> + <circle + r="1.8230016" + cx="2.4449117" + cy="1050.1708" + id="circle1374" + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" /> + </g> +</svg> diff --git a/editor/icons/icon_key_animation.svg b/editor/icons/icon_key_animation.svg new file mode 100644 index 0000000000..a09567498f --- /dev/null +++ b/editor/icons/icon_key_animation.svg @@ -0,0 +1,65 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_animation.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 /> + </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="1852" + inkscape:window-height="781" + id="namedview8" + showgrid="false" + inkscape:zoom="29.5" + inkscape:cx="-10.271186" + inkscape:cy="3.4149032" + inkscape:window-x="68" + inkscape:window-y="117" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#ea686c" + id="rect2" + style="fill:#b76ef0;fill-opacity:1" /> + </g> +</svg> diff --git a/editor/icons/icon_key_audio.svg b/editor/icons/icon_key_audio.svg new file mode 100644 index 0000000000..7c728bfd01 --- /dev/null +++ b/editor/icons/icon_key_audio.svg @@ -0,0 +1,65 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_audio.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="1053" + inkscape:window-height="591" + id="namedview8" + showgrid="false" + inkscape:zoom="29.5" + inkscape:cx="4" + inkscape:cy="4" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#ea686c" + id="rect2" + style="fill:#eae668;fill-opacity:1" /> + </g> +</svg> diff --git a/editor/icons/icon_key_bezier.svg b/editor/icons/icon_key_bezier.svg new file mode 100644 index 0000000000..62af6fdb34 --- /dev/null +++ b/editor/icons/icon_key_bezier.svg @@ -0,0 +1,65 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_bezier.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 /> + </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="1852" + inkscape:window-height="781" + id="namedview8" + showgrid="false" + inkscape:zoom="29.5" + inkscape:cx="-17.152542" + inkscape:cy="3.4149032" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#ea686c" + id="rect2" + style="fill:#5792f6;fill-opacity:1" /> + </g> +</svg> diff --git a/editor/icons/icon_key_bezier_handle.svg b/editor/icons/icon_key_bezier_handle.svg new file mode 100644 index 0000000000..d7b22d0905 --- /dev/null +++ b/editor/icons/icon_key_bezier_handle.svg @@ -0,0 +1,60 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_bezier_handle.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 /> + </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="1853" + inkscape:window-height="1016" + id="namedview8" + showgrid="false" + inkscape:zoom="59" + inkscape:cx="2.0952442" + inkscape:cy="4.6061633" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <path + style="fill:#e0e0e0;fill-opacity:1" + d="M 3.9960938 -0.037109375 C 3.8010931 -0.037109375 3.6064535 0.038077731 3.4570312 0.1875 L 0.22070312 3.4238281 C -0.078134343 3.7226656 -0.078141414 4.2050617 0.22070312 4.5039062 L 3.4570312 7.7402344 C 3.7558687 8.0390718 4.2382719 8.0390718 4.5371094 7.7402344 L 7.7734375 4.5039062 C 8.072282 4.2050617 8.072275 3.7226656 7.7734375 3.4238281 L 4.5371094 0.1875 C 4.3876871 0.038077731 4.1910944 -0.037109375 3.9960938 -0.037109375 z M 4.0253906 0.81445312 C 4.1770098 0.81445312 4.3291322 0.87241756 4.4453125 0.98828125 L 6.9609375 3.4960938 C 7.193298 3.7278211 7.193298 4.102257 6.9609375 4.3339844 L 4.4453125 6.84375 C 4.212952 7.0754774 3.8378293 7.0754774 3.6054688 6.84375 L 1.0898438 4.3339844 C 0.85748323 4.102257 0.85748323 3.7278211 1.0898438 3.4960938 L 3.6054688 0.98828125 C 3.721649 0.87241756 3.8737714 0.81445312 4.0253906 0.81445312 z " + transform="translate(0,1044.4)" + id="rect2" /> + </g> +</svg> diff --git a/editor/icons/icon_key_bezier_point.svg b/editor/icons/icon_key_bezier_point.svg new file mode 100644 index 0000000000..aa33063c95 --- /dev/null +++ b/editor/icons/icon_key_bezier_point.svg @@ -0,0 +1,64 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_bezier_point.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="29.5" + inkscape:cx="4" + inkscape:cy="4" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#e0e0e0" + id="rect2" /> + </g> +</svg> diff --git a/editor/icons/icon_key_bezier_selected.svg b/editor/icons/icon_key_bezier_selected.svg new file mode 100644 index 0000000000..e3f967707a --- /dev/null +++ b/editor/icons/icon_key_bezier_selected.svg @@ -0,0 +1,64 @@ +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_bezier_selected.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="29.5" + inkscape:cx="4" + inkscape:cy="4" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#84c2ff" + id="rect2" /> + </g> +</svg> diff --git a/editor/icons/icon_key_call.svg b/editor/icons/icon_key_call.svg index 7fcc65801a..e702898288 100644 --- a/editor/icons/icon_key_call.svg +++ b/editor/icons/icon_key_call.svg @@ -1,5 +1,64 @@ -<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="#adf18f"/> -</g> +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_call.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" /> + </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="29.5" + inkscape:cx="4" + inkscape:cy="4" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#adf18f" + id="rect2" + style="fill:#66f376;fill-opacity:1" /> + </g> </svg> diff --git a/editor/icons/icon_key_selected.svg b/editor/icons/icon_key_selected.svg index c73d31981d..2842fd93eb 100644 --- a/editor/icons/icon_key_selected.svg +++ b/editor/icons/icon_key_selected.svg @@ -1,5 +1,76 @@ -<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="#84c2ff"/> -</g> +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_selected.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" /> + </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="1568" + inkscape:window-height="767" + id="namedview8" + showgrid="false" + inkscape:zoom="41.7193" + inkscape:cx="-0.48848775" + inkscape:cy="3.5639274" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4-3" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#84c2ff" + id="rect2" /> + </g> + <g + transform="translate(0,-1044.4)" + id="g4-3"> + <rect + style="fill:#003e7a;fill-opacity:1;stroke-width:0.56281364" + transform="matrix(0.71728847,-0.69677633,0.71728847,0.69677633,0,0)" + x="-751.20953" + y="753.42743" + width="3.4346831" + height="3.4346831" + ry="0.42934799" + id="rect2-6" /> + </g> </svg> diff --git a/editor/icons/icon_key_xform.svg b/editor/icons/icon_key_xform.svg index 7b73715771..fd22b67f52 100644 --- a/editor/icons/icon_key_xform.svg +++ b/editor/icons/icon_key_xform.svg @@ -1,5 +1,64 @@ -<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="#ea686c"/> -</g> +<?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="8" + height="8" + version="1.1" + viewBox="0 0 8 8" + id="svg6" + sodipodi:docname="icon_key_xform.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" /> + </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="29.5" + inkscape:cx="4" + inkscape:cy="4" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1044.4)" + id="g4"> + <rect + transform="rotate(-45)" + x="-741.53" + y="741.08" + width="6.1027" + height="6.1027" + ry=".76286" + fill="#ea686c" + id="rect2" + style="fill:#ea9568;fill-opacity:1" /> + </g> </svg> diff --git a/editor/icons/icon_oriented_path_follow.svg b/editor/icons/icon_oriented_path_follow.svg new file mode 100644 index 0000000000..bd3f585e54 --- /dev/null +++ b/editor/icons/icon_oriented_path_follow.svg @@ -0,0 +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="m13 0l-3 4h1.9473c-0.1385 1.3203-0.5583 1.9074-1.084 2.2754-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c1.0528-0.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#fc9c9c" fill-opacity=".99608"/> +</g> +</svg> diff --git a/editor/icons/icon_play_travel.svg b/editor/icons/icon_play_travel.svg new file mode 100644 index 0000000000..5cd3e07e20 --- /dev/null +++ b/editor/icons/icon_play_travel.svg @@ -0,0 +1,85 @@ +<?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="svg8" + sodipodi:docname="icon_play_travel.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1446" + inkscape:window-height="646" + id="namedview10" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8.2818541" + inkscape:cy="5.7694884" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="matrix(0.59321602,0,0,0.59321602,-1.2203136,-611.14809)" + id="g6"> + <g + id="g4"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + transform="matrix(0.59321602,0,0,0.59321602,7.5254716,-610.94451)" + id="g6-3"> + <g + id="g4-6"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2-7" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#e0e0e0;fill-opacity:1" + id="rect842" + width="9.5593224" + height="0.54237264" + x="3.0058463" + y="8.1280737" + ry="0.27118632" /> +</svg> diff --git a/editor/icons/icon_time.svg b/editor/icons/icon_time.svg new file mode 100644 index 0000000000..d50c9570b3 --- /dev/null +++ b/editor/icons/icon_time.svg @@ -0,0 +1,74 @@ +<?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_time.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="7.375" + inkscape:cx="4.4999435" + inkscape:cy="13.04848" + inkscape:window-x="744" + inkscape:window-y="280" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1036.4)" + id="g4"> + <g + id="g8" + style="fill:#e0e0e0;fill-opacity:1" + transform="matrix(0.0279396,0,0,0.02755726,0.91401567,1037.1343)"> + <g + id="g6" + style="fill:#e0e0e0;fill-opacity:1"> + <path + d="M 276.193,58.507 V 40.389 h 14.578 c 11.153,0 20.194,-9.042 20.194,-20.194 C 310.965,9.043 301.923,0 290.771,0 h -69.544 c -11.153,0 -20.194,9.042 -20.194,20.194 0,11.152 9.042,20.194 20.194,20.194 h 14.578 V 58.506 C 119.952,68.76 28.799,166.327 28.799,284.799 28.799,410.078 130.721,512 256,512 381.279,512 483.201,410.078 483.201,284.799 483.2,166.327 392.046,68.76 276.193,58.507 Z m 0,412.009 v -20.124 c 0,-11.153 -9.042,-20.194 -20.194,-20.194 -11.153,0 -20.194,9.042 -20.194,20.194 v 20.124 C 148.895,461.131 79.668,391.902 70.283,304.994 h 20.124 c 11.153,0 20.194,-9.042 20.194,-20.194 0,-11.152 -9.042,-20.194 -20.194,-20.194 H 70.282 c 9.385,-86.91 78.614,-156.137 165.522,-165.523 v 20.124 c 0,11.153 9.042,20.194 20.194,20.194 11.153,0 20.194,-9.042 20.194,-20.194 V 99.081 c 86.91,9.385 156.137,78.614 165.522,165.523 H 421.59 c -11.153,0 -20.194,9.042 -20.194,20.194 0,11.152 9.042,20.194 20.194,20.194 h 20.126 c -9.385,86.911 -78.613,156.14 -165.523,165.524 z" + id="path2" + style="fill:#e0e0e0;fill-opacity:1" + inkscape:connector-curvature="0" /> + <path + d="m 317.248,194.99 -58.179,58.18 c -1.011,-0.097 -2.034,-0.151 -3.071,-0.151 -17.552,0 -31.779,14.229 -31.779,31.779 0,17.552 14.228,31.779 31.779,31.779 17.551,0 31.779,-14.229 31.779,-31.779 0,-1.037 -0.054,-2.06 -0.151,-3.07 l 58.178,-58.18 c 7.887,-7.885 7.887,-20.672 0,-28.559 -7.882,-7.886 -20.669,-7.886 -28.556,0.001 z" + id="path4" + style="fill:#e0e0e0;fill-opacity:1" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> +</svg> diff --git a/editor/icons/icon_tool_add_node.svg b/editor/icons/icon_tool_add_node.svg new file mode 100644 index 0000000000..a4ff4d08a0 --- /dev/null +++ b/editor/icons/icon_tool_add_node.svg @@ -0,0 +1,80 @@ +<?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="svg8" + sodipodi:docname="icon_tool_add_node.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1516" + inkscape:window-height="747" + id="namedview10" + 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="g4" /> + <g + transform="translate(0 -1036.4)" + id="g6"> + <g + transform="translate(-26.001 -9.8683)" + id="g4"> + <path + style="fill:#e0e0e0;fill-opacity:1" + d="m 27.917081,1047.5557 c -0.422624,0 -0.763672,0.3411 -0.763672,0.7637 v 11.8301 c 0,0.4226 0.341048,0.7637 0.763672,0.7637 h 12.507813 c 0.422624,0 0.761719,-0.3411 0.761719,-0.7637 v -11.8301 c 0,-0.4226 -0.339095,-0.7637 -0.761719,-0.7637 z m 1.898438,1.6954 h 8.642578 c 0.422624,0 0.763672,0.341 0.763672,0.7636 v 8.5078 c 0,0.4227 -0.341048,0.7618 -0.763672,0.7618 h -8.642578 c -0.422625,0 -0.763672,-0.3391 -0.763672,-0.7618 v -8.5078 c 0,-0.4226 0.341047,-0.7636 0.763672,-0.7636 z" + id="rect821" + inkscape:connector-curvature="0" /> + <rect + style="fill:#e0e0e0;fill-opacity:1" + id="rect826" + width="7.7966104" + height="2.3728814" + x="30.20439" + y="1052.9802" + ry="0.76286" /> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.88253576" + id="rect828" + width="2.3728814" + height="7.5254235" + x="32.916256" + y="1050.3361" + ry="0.72997814" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_tool_connect.svg b/editor/icons/icon_tool_connect.svg new file mode 100644 index 0000000000..91d5893163 --- /dev/null +++ b/editor/icons/icon_tool_connect.svg @@ -0,0 +1,72 @@ +<?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="svg8" + sodipodi:docname="icon_tool_connect.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1516" + inkscape:window-height="747" + id="namedview10" + showgrid="false" + inkscape:zoom="3.6875" + inkscape:cx="8.5909556" + inkscape:cy="7.8012075" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1036.4)" + id="g6"> + <g + transform="translate(-26.001 -9.8683)" + id="g4"> + <rect + style="fill:#e0e0e0;fill-opacity:1" + id="rect849" + width="14.305085" + height="2.1694915" + x="26.766621" + y="1053.1389" + ry="0.76286" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.16725671px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 30.596131,1046.927 v 14.8861 l 8.228847,-7.5722 z" + id="path853" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_tool_triangle.svg b/editor/icons/icon_tool_triangle.svg new file mode 100644 index 0000000000..5696008767 --- /dev/null +++ b/editor/icons/icon_tool_triangle.svg @@ -0,0 +1,82 @@ +<?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="svg8" + sodipodi:docname="icon_tool_triangle.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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 /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1204" + inkscape:window-height="703" + id="namedview10" + showgrid="false" + inkscape:zoom="29.5" + inkscape:cx="8.0650451" + inkscape:cy="7.0341257" + inkscape:window-x="542" + inkscape:window-y="205" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(0 -1036.4)" + id="g6"> + <g + transform="translate(-26.001 -9.8683)" + id="g4"> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 27.695915,1056.3022 c 0,0 7.457627,-8.0678 7.118644,-7.8644 -0.338983,0.2034 5.830509,11.7288 5.830509,11.7288 z" + id="path821" + inkscape:connector-curvature="0" /> + <circle + style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path825" + cx="34.662014" + cy="1048.5903" + r="1.607564" /> + <circle + style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path825-3" + cx="39.933205" + cy="1059.6581" + r="1.607564" /> + <circle + style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path825-3-6" + cx="28.17049" + cy="1056.2683" + r="1.607564" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_track_capture.svg b/editor/icons/icon_track_capture.svg new file mode 100644 index 0000000000..da6a662746 --- /dev/null +++ b/editor/icons/icon_track_capture.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="8" + version="1.1" + viewBox="0 0 16 8" + id="svg6" + sodipodi:docname="icon_track_capture.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 /> + </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="1350" + inkscape:window-height="593" + id="namedview8" + showgrid="false" + inkscape:zoom="27.577164" + inkscape:cx="8.347146" + inkscape:cy="4.4012076" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg6" /> + <path + style="fill:#e0e0e0;fill-opacity:1" + d="m 2.1665128,0.99764963 c -0.422625,0 -0.763672,0.34104737 -0.763672,0.76367187 v 4.5742187 c 0,0.4226242 0.341047,0.7617192 0.763672,0.7617192 h 4.472656 c 0.422625,0 0.763672,-0.339095 0.763672,-0.7617192 V 5.347259 h -3.300781 c -0.1662,0 -0.298828,-0.3390943 -0.298828,-0.7617188 V 3.3609308 c 0,-0.4226244 0.132628,-0.7636718 0.298828,-0.7636718 h 3.300781 V 1.7613215 c 0,-0.4226245 -0.341047,-0.76367187 -0.763672,-0.76367187 z" + id="rect1389" + inkscape:connector-curvature="0" /> + <path + style="fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.80299997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 9.1827441,4.7953408 C 9.6993662,3.7537783 10.278269,2.5835979 10.469195,2.1949398 l 0.347137,-0.7066511 0.679654,0.00665 0.679654,0.00665 0.956945,2.3125 c 0.526319,1.271875 1.007254,2.4334375 1.068744,2.5812497 l 0.1118,0.26875 H 13.715914 13.1187 L 12.785851,6.0203387 12.453002,5.3765887 H 11.319176 10.185351 L 9.8066761,6.032702 9.4280014,6.6888154 l -0.5922856,1.37e-4 -0.592285,1.36e-4 z m 3.1779349,-0.369483 c 0.0042,-0.00346 -0.233487,-0.4884588 -0.528245,-1.0777779 l -0.535922,-1.0714891 -0.03691,0.0875 c -0.0203,0.048125 -0.183516,0.425 -0.362699,0.8375 -0.179182,0.4125 -0.355738,0.85125 -0.392346,0.975 -0.03661,0.12375 -0.07127,0.2390723 -0.07703,0.2562715 -0.0083,0.024853 0.188215,0.027989 0.957503,0.015278 0.532385,-0.0088 0.971429,-0.018823 0.975651,-0.022283 z" + id="path1424" + inkscape:connector-curvature="0" /> +</svg> diff --git a/editor/icons/icon_transition_end.svg b/editor/icons/icon_transition_end.svg new file mode 100644 index 0000000000..8a1937670a --- /dev/null +++ b/editor/icons/icon_transition_end.svg @@ -0,0 +1,72 @@ +<?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="svg8" + sodipodi:docname="icon_transition_end.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="10.204146" + inkscape:cy="5.3391396" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="translate(-2,-1036.4)" + id="g6"> + <g + id="g4"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#e0e0e0;fill-opacity:1" + id="rect862" + width="3.0681243" + height="10.067283" + x="11.16989" + y="3.0084109" + ry="0.76286" /> +</svg> diff --git a/editor/icons/icon_transition_end_auto.svg b/editor/icons/icon_transition_end_auto.svg new file mode 100644 index 0000000000..18927bc4ef --- /dev/null +++ b/editor/icons/icon_transition_end_auto.svg @@ -0,0 +1,74 @@ +<?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="svg8" + sodipodi:docname="icon_transition_automatic.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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 /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="0.56831798" + inkscape:cy="5.1473818" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="translate(-2,-1036.4)" + id="g6" + style="fill:#77ce57;fill-opacity:1"> + <g + id="g4" + style="fill:#77ce57;fill-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#77ce57;fill-opacity:1" + id="rect862" + width="3.0681243" + height="10.067283" + x="11.16989" + y="3.0084109" + ry="0.76286" /> +</svg> diff --git a/editor/icons/icon_transition_end_auto_big.svg b/editor/icons/icon_transition_end_auto_big.svg new file mode 100644 index 0000000000..aaedafaf04 --- /dev/null +++ b/editor/icons/icon_transition_end_auto_big.svg @@ -0,0 +1,74 @@ +<?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="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_automatic_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="0.3064671" + inkscape:cy="14.348448" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="matrix(1.4099529,0,0,1.4099529,-4.1975887,-1462.5094)" + id="g6" + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> + <g + id="g4" + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-width:1.409953;stroke-opacity:1" + id="rect862" + width="4.3259106" + height="14.194397" + x="14.371336" + y="3.0076122" + ry="1.0755967" /> +</svg> diff --git a/editor/icons/icon_transition_end_big.svg b/editor/icons/icon_transition_end_big.svg new file mode 100644 index 0000000000..46d42e95e3 --- /dev/null +++ b/editor/icons/icon_transition_end_big.svg @@ -0,0 +1,74 @@ +<?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="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_end_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="-1.1122019" + inkscape:cy="10.839132" + inkscape:window-x="517" + inkscape:window-y="261" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="matrix(1.4203458,0,0,1.4203458,-4.29479,-1473.1325)" + id="g6" + style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + <g + id="g4" + style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:#424242;stroke-width:1.42026603;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect862" + width="4.3577976" + height="14.299023" + x="14.411009" + y="3.1868868" + ry="1.0835251" /> +</svg> diff --git a/editor/icons/icon_transition_immediate.svg b/editor/icons/icon_transition_immediate.svg new file mode 100644 index 0000000000..ba16a33c91 --- /dev/null +++ b/editor/icons/icon_transition_immediate.svg @@ -0,0 +1,64 @@ +<?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="svg8" + sodipodi:docname="icon_transition_immediate.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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 /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="4.0199579" + inkscape:cy="5.3391396" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(-2,-1036.4)" + id="g6"> + <g + id="g4"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_transition_immediate_auto.svg b/editor/icons/icon_transition_immediate_auto.svg new file mode 100644 index 0000000000..c127560145 --- /dev/null +++ b/editor/icons/icon_transition_immediate_auto.svg @@ -0,0 +1,64 @@ +<?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="svg8" + sodipodi:docname="icon_transition_immediate_auto.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="-9.2592678" + inkscape:cy="5.3391396" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="translate(-2,-1036.4)" + id="g6"> + <g + id="g4"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_transition_immediate_auto_big.svg b/editor/icons/icon_transition_immediate_auto_big.svg new file mode 100644 index 0000000000..80d35a36f3 --- /dev/null +++ b/editor/icons/icon_transition_immediate_auto_big.svg @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_immediate_auto_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="11.321237" + inkscape:cy="3.5752171" + inkscape:window-x="517" + inkscape:window-y="261" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="matrix(1.571031,0,0,1.571031,-2.7257681,-1630.6239)" + id="g6" + style="stroke:#404040;stroke-opacity:1"> + <g + id="g4" + style="stroke:#404040;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_transition_immediate_big.svg b/editor/icons/icon_transition_immediate_big.svg new file mode 100644 index 0000000000..108dcdd500 --- /dev/null +++ b/editor/icons/icon_transition_immediate_big.svg @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_immediate_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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 /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="0.19928629" + inkscape:cy="4.534006" + inkscape:window-x="517" + inkscape:window-y="261" + inkscape:window-maximized="0" + inkscape:current-layer="g4" /> + <g + transform="matrix(1.571031,0,0,1.571031,-2.7257681,-1630.6239)" + id="g6" + style="stroke:#404040;stroke-opacity:1"> + <g + id="g4" + style="stroke:#404040;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#404040;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/editor/icons/icon_transition_sync.svg b/editor/icons/icon_transition_sync.svg new file mode 100644 index 0000000000..267d806615 --- /dev/null +++ b/editor/icons/icon_transition_sync.svg @@ -0,0 +1,72 @@ +<?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="svg8" + sodipodi:docname="icon_transition_sync.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="10.204146" + inkscape:cy="5.3391396" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="translate(2.5542471,-1036.4)" + id="g6"> + <g + id="g4"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#e0e0e0;fill-opacity:1" + id="rect862" + width="3.0681243" + height="10.067283" + x="1.9655174" + y="3.0084109" + ry="0.76286" /> +</svg> diff --git a/editor/icons/icon_transition_sync_auto.svg b/editor/icons/icon_transition_sync_auto.svg new file mode 100644 index 0000000000..5ce61e3a6a --- /dev/null +++ b/editor/icons/icon_transition_sync_auto.svg @@ -0,0 +1,74 @@ +<?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="svg8" + sodipodi:docname="icon_transition_sync_auto.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="20.85965" + inkscape:cx="0.56831798" + inkscape:cy="5.1473818" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="translate(3.0815809,-1036.4)" + id="g6" + style="fill:#77ce57;fill-opacity:1"> + <g + id="g4" + style="fill:#77ce57;fill-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#77ce57;fill-opacity:1" + id="rect862" + width="3.0681243" + height="10.067283" + x="1.9655174" + y="3.0084109" + ry="0.76286" /> +</svg> diff --git a/editor/icons/icon_transition_sync_auto_big.svg b/editor/icons/icon_transition_sync_auto_big.svg new file mode 100644 index 0000000000..3e84d76398 --- /dev/null +++ b/editor/icons/icon_transition_sync_auto_big.svg @@ -0,0 +1,74 @@ +<?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="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_sync_auto_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="0.3064671" + inkscape:cy="14.348448" + inkscape:window-x="67" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="matrix(1.4099529,0,0,1.4099529,2.1752927,-1462.5094)" + id="g6" + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> + <g + id="g4" + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-width:1.409953;stroke-opacity:1" + id="rect862" + width="4.3259106" + height="14.194397" + x="1.6255733" + y="3.0076122" + ry="1.0755967" /> +</svg> diff --git a/editor/icons/icon_transition_sync_big.svg b/editor/icons/icon_transition_sync_big.svg new file mode 100644 index 0000000000..e7cf63e0b3 --- /dev/null +++ b/editor/icons/icon_transition_sync_big.svg @@ -0,0 +1,74 @@ +<?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="20" + height="20" + version="1.1" + viewBox="0 0 20 20" + id="svg8" + sodipodi:docname="icon_transition_sync_big.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata14"> + <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="defs12" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1403" + inkscape:window-height="782" + id="namedview10" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="19.226781" + inkscape:cy="9.27981" + inkscape:window-x="302" + inkscape:window-y="226" + inkscape:window-maximized="0" + inkscape:current-layer="svg8" /> + <g + transform="matrix(1.4203458,0,0,1.4203458,1.8747015,-1473.1325)" + id="g6" + style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + <g + id="g4" + style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + <path + d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" + dominant-baseline="auto" + style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" + id="path2" + inkscape:connector-curvature="0" /> + </g> + </g> + <rect + style="fill:#e0e0e0;fill-opacity:1;stroke:#424242;stroke-width:1.42026603;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect862" + width="4.3577976" + height="14.299023" + x="1.4618562" + y="3.1868868" + ry="1.0835251" /> +</svg> diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 2fb3bf7b1e..a13f741ee7 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -1785,8 +1785,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones } } - Quat q = xform.basis; - q.normalize(); + Quat q = xform.basis.get_rotation_quat(); Vector3 s = xform.basis.get_scale(); Vector3 l = xform.origin; @@ -1838,8 +1837,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones xform = sk->get_bone_rest(nm.bone).affine_inverse() * xform; - Quat q = xform.basis; - q.normalize(); + Quat q = xform.basis.get_rotation_quat(); Vector3 s = xform.basis.get_scale(); Vector3 l = xform.origin; diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index f4be6e8d59..eb0bc0f782 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -863,6 +863,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { ERR_FAIL_COND_V(!d.has("primitives"), ERR_PARSE_ERROR); Array primitives = d["primitives"]; + Dictionary extras = d.has("extras") ? (Dictionary)d["extras"] : Dictionary(); for (int j = 0; j < primitives.size(); j++) { @@ -1000,8 +1001,10 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { Array targets = p["targets"]; if (j == 0) { + Array target_names = extras.has("targetNames") ? (Array)extras["targetNames"] : Array(); for (int k = 0; k < targets.size(); k++) { - mesh.mesh->add_blend_shape(String("morph_") + itos(k)); + String name = k < target_names.size() ? (String)target_names[k] : String("morph_") + itos(k); + mesh.mesh->add_blend_shape(name); } } @@ -1253,12 +1256,15 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } if (mr.has("metallicFactor")) { - material->set_metallic(mr["metallicFactor"]); + } else { + material->set_metallic(1.0); } - if (mr.has("roughnessFactor")) { + if (mr.has("roughnessFactor")) { material->set_roughness(mr["roughnessFactor"]); + } else { + material->set_roughness(1.0); } if (mr.has("metallicRoughnessTexture")) { @@ -1983,8 +1989,7 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye int bone = node->joints[i].godot_bone_index; xform = skeleton->get_bone_rest(bone).affine_inverse() * xform; - rot = xform.basis; - rot.normalize(); + rot = xform.basis.get_rotation_quat(); scale = xform.basis.get_scale(); pos = xform.origin; } diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 21803a2184..b8dd4a87b7 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, Vector3 p_scale_mesh, 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, bool p_optimize, Vector3 p_scale_mesh, List<String> *r_missing_deps) { FileAccessRef f = FileAccess::open(p_path, FileAccess::READ); @@ -200,6 +200,8 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p bool generate_tangents = p_generate_tangents; Vector3 scale_mesh = p_scale_mesh; bool flip_faces = false; + int mesh_flags = p_optimize ? Mesh::ARRAY_COMPRESS_DEFAULT : 0; + //bool flip_faces = p_options["force/flip_faces"]; //bool force_smooth = p_options["force/smooth_shading"]; //bool weld_vertices = p_options["force/weld_vertices"]; @@ -331,7 +333,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p surf_tool->set_material(material_map[current_material_library][current_material]); } - mesh = surf_tool->commit(mesh); + mesh = surf_tool->commit(mesh, mesh_flags); if (current_material != String()) { mesh->surface_set_name(mesh->get_surface_count() - 1, current_material.get_basename()); @@ -402,7 +404,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, Vector3(1, 1, 1), r_missing_deps); + Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, p_flags & IMPORT_USE_COMPRESSION, Vector3(1, 1, 1), r_missing_deps); if (err != OK) { if (r_err) { @@ -470,6 +472,7 @@ void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int 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))); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "optimize_mesh"), true)); } bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { @@ -480,7 +483,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"], p_options["scale_mesh"], NULL); + Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], p_options["optimize_mesh"], 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 fdbf66f656..91644492c3 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -224,24 +224,42 @@ String ResourceImporterScene::get_preset_name(int p_idx) const { static bool _teststr(const String &p_what, const String &p_str) { - if (p_what.findn("$" + p_str) != -1) //blender and other stuff + String what = p_what; + + //remove trailing spaces and numbers, some apps like blender add ".number" to duplicates so also compensate for this + while (what.length() && ((what[what.length() - 1] >= '0' && what[what.length() - 1] <= '9') || what[what.length() - 1] <= 32 || what[what.length() - 1] == '.')) { + + what = what.substr(0, what.length() - 1); + } + + if (what.findn("$" + p_str) != -1) //blender and other stuff return true; - if (p_what.to_lower().ends_with("-" + p_str)) //collada only supports "_" and "-" besides letters + if (what.to_lower().ends_with("-" + p_str)) //collada only supports "_" and "-" besides letters return true; - if (p_what.to_lower().ends_with("_" + p_str)) //collada only supports "_" and "-" besides letters + if (what.to_lower().ends_with("_" + p_str)) //collada only supports "_" and "-" besides letters return true; return false; } static String _fixstr(const String &p_what, const String &p_str) { - if (p_what.findn("$" + p_str) != -1) //blender and other stuff - return p_what.replace("$" + p_str, ""); - if (p_what.to_lower().ends_with("-" + p_str)) //collada only supports "_" and "-" besides letters - return p_what.substr(0, p_what.length() - (p_str.length() + 1)); - if (p_what.to_lower().ends_with("_" + p_str)) //collada only supports "_" and "-" besides letters - return p_what.substr(0, p_what.length() - (p_str.length() + 1)); - return p_what; + String what = p_what; + + //remove trailing spaces and numbers, some apps like blender add ".number" to duplicates so also compensate for this + while (what.length() && ((what[what.length() - 1] >= '0' && what[what.length() - 1] <= '9') || what[what.length() - 1] <= 32 || what[what.length() - 1] == '.')) { + + what = what.substr(0, what.length() - 1); + } + + String end = p_what.substr(what.length(), p_what.length() - what.length()); + + if (what.findn("$" + p_str) != -1) //blender and other stuff + return what.replace("$" + p_str, "") + end; + if (what.to_lower().ends_with("-" + p_str)) //collada only supports "_" and "-" besides letters + return what.substr(0, what.length() - (p_str.length() + 1)) + end; + if (what.to_lower().ends_with("_" + p_str)) //collada only supports "_" and "-" besides letters + return what.substr(0, what.length() - (p_str.length() + 1)) + end; + return what; } Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<ArrayMesh>, Ref<Shape> > &collision_map, LightBakeMode p_light_bake_mode) { @@ -437,13 +455,19 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Array Node *col; if (_teststr(name, "col")) { - mi->set_name(_fixstr(name, "col")); + String new_name = _fixstr(name, "col"); + if (mi->get_parent() && !mi->get_parent()->has_node(new_name)) { + mi->set_name(new_name); + } col = mi->create_trimesh_collision_node(); ERR_FAIL_COND_V(!col, NULL); col->set_name("col"); } else { - mi->set_name(_fixstr(name, "convcol")); + String new_name = _fixstr(name, "convcol"); + if (mi->get_parent() && !mi->get_parent()->has_node(new_name)) { + mi->set_name(new_name); + } col = mi->create_convex_collision_node(); ERR_FAIL_COND_V(!col, NULL); @@ -893,7 +917,6 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String } String ext_name = p_base_path.plus_file(_make_extname(E->get()) + ".anim"); - if (FileAccess::exists(ext_name) && p_keep_animations) { //try to keep custom animation tracks Ref<Animation> old_anim = ResourceLoader::load(ext_name, "Animation", true); @@ -907,6 +930,7 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String } } + anim->set_path(ext_name, true); //if not set, then its never saved externally ResourceSaver::save(ext_name, anim, ResourceSaver::FLAG_CHANGE_PATH); p_animations[anim] = anim; } diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index beaa8d9600..17a9394b51 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -395,6 +395,10 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC); } + + if (normal) { + image->normalize(); + } } if (fix_alpha_border) { diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index 4159a3658e..0d0b12c911 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -292,14 +292,14 @@ void InspectorDock::_menu_expandall() { } void InspectorDock::_property_keyed(const String &p_keyed, const Variant &p_value, bool p_advance) { - AnimationPlayerEditor::singleton->get_key_editor()->insert_value_key(p_keyed, p_value, p_advance); + AnimationPlayerEditor::singleton->get_track_editor()->insert_value_key(p_keyed, p_value, p_advance); } void InspectorDock::_transform_keyed(Object *sp, const String &p_sub, const Transform &p_key) { Spatial *s = Object::cast_to<Spatial>(sp); if (!s) return; - AnimationPlayerEditor::singleton->get_key_editor()->insert_transform_key(s, p_sub, p_key); + AnimationPlayerEditor::singleton->get_track_editor()->insert_transform_key(s, p_sub, p_key); } void InspectorDock::_warning_pressed() { @@ -435,10 +435,14 @@ void InspectorDock::update(Object *p_object) { } } +void InspectorDock::go_back() { + _edit_back(); +} + void InspectorDock::update_keying() { bool valid = false; - if (AnimationPlayerEditor::singleton->get_key_editor()->has_keying()) { + if (AnimationPlayerEditor::singleton->get_track_editor()->has_keying()) { EditorHistory *editor_history = EditorNode::get_singleton()->get_editor_history(); if (editor_history->get_path_size() >= 1) { @@ -549,8 +553,8 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL); inspector->set_use_doc_hints(true); inspector->set_hide_script(false); - inspector->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/editor/capitalize_properties", true))); - inspector->set_use_folding(!bool(EDITOR_DEF("interface/editor/disable_inspector_folding", false))); + inspector->set_enable_capitalize_paths(bool(EDITOR_GET("interface/inspector/capitalize_properties"))); + inspector->set_use_folding(!bool(EDITOR_GET("interface/inspector/disable_folding"))); inspector->register_text_enter(search); inspector->set_undo_redo(&editor_data->get_undo_redo()); diff --git a/editor/inspector_dock.h b/editor/inspector_dock.h index 688c8beed7..f347056158 100644 --- a/editor/inspector_dock.h +++ b/editor/inspector_dock.h @@ -31,7 +31,7 @@ #ifndef INSPECTOR_DOCK_H #define INSPECTOR_DOCK_H -#include "editor/animation_editor.h" +#include "editor/animation_track_editor.h" #include "editor/connections_dialog.h" #include "editor/create_dialog.h" #include "editor/editor_data.h" @@ -121,6 +121,7 @@ protected: static void _bind_methods(); public: + void go_back(); void update_keying(); void edit_resource(const Ref<Resource> &p_resource); void open_resource(const String &p_type); diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp new file mode 100644 index 0000000000..2e128db883 --- /dev/null +++ b/editor/plugins/animation_blend_space_1d_editor.cpp @@ -0,0 +1,741 @@ +#include "animation_blend_space_1d_editor.h" + +#include "os/keyboard.h" +#include "scene/animation/animation_blend_tree.h" + +void AnimationNodeBlendSpace1DEditorPlugin::edit(Object *p_object) { + anim_tree_editor->edit(Object::cast_to<AnimationNodeBlendSpace1D>(p_object)); +} + +bool AnimationNodeBlendSpace1DEditorPlugin::handles(Object *p_object) const { + return p_object->is_class("AnimationNodeBlendSpace1D"); +} + +void AnimationNodeBlendSpace1DEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + button->show(); + editor->make_bottom_panel_item_visible(anim_tree_editor); + anim_tree_editor->set_process(true); + } else { + if (anim_tree_editor->is_visible_in_tree()) { + editor->hide_bottom_panel(); + } + + button->hide(); + anim_tree_editor->set_process(false); + } +} + +AnimationNodeBlendSpace1DEditorPlugin::AnimationNodeBlendSpace1DEditorPlugin(EditorNode *p_node) { + editor = p_node; + anim_tree_editor = memnew(AnimationNodeBlendSpace1DEditor); + anim_tree_editor->set_custom_minimum_size(Size2(0, 150 * EDSCALE)); + + button = editor->add_bottom_panel_item(TTR("BlendSpace1D"), anim_tree_editor); + button->hide(); +} + +AnimationNodeBlendSpace1DEditorPlugin::~AnimationNodeBlendSpace1DEditorPlugin() { +} + +void AnimationNodeBlendSpace1DEditor::_blend_space_gui_input(const Ref<InputEvent> &p_event) { + Ref<InputEventKey> k = p_event; + + if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_DELETE && !k->is_echo()) { + if (selected_point != -1) { + _erase_selected(); + accept_event(); + } + } + + Ref<InputEventMouseButton> mb = p_event; + + if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) || (mb->get_button_index() == BUTTON_LEFT && tool_create->is_pressed()))) { + menu->clear(); + animations_menu->clear(); + animations_to_add.clear(); + + List<StringName> classes; + ClassDB::get_inheriters_from_class("AnimationRootNode", &classes); + classes.sort_custom<StringName::AlphCompare>(); + + menu->add_submenu_item(TTR("Add Animation"), "animations"); + + AnimationTree *gp = blend_space->get_tree(); + ERR_FAIL_COND(!gp); + + if (gp->has_node(gp->get_animation_player())) { + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(gp->get_node(gp->get_animation_player())); + + if (ap) { + List<StringName> names; + ap->get_animation_list(&names); + + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + animations_menu->add_icon_item(get_icon("Animation", "Editoricons"), E->get()); + animations_to_add.push_back(E->get()); + } + } + } + + for (List<StringName>::Element *E = classes.front(); E; E = E->next()) { + String name = String(E->get()).replace_first("AnimationNode", ""); + if (name == "Animation") + continue; + + int idx = menu->get_item_count(); + menu->add_item(vformat("Add %s", name)); + menu->set_item_metadata(idx, E->get()); + } + + menu->set_global_position(blend_space_draw->get_global_transform().xform(mb->get_position())); + menu->popup(); + + add_point_pos = (mb->get_position() / blend_space_draw->get_size()).x; + add_point_pos *= (blend_space->get_max_space() - blend_space->get_min_space()); + add_point_pos += blend_space->get_min_space(); + + if (snap->is_pressed()) { + add_point_pos = Math::stepify(add_point_pos, blend_space->get_snap()); + } + } + + if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + blend_space_draw->update(); // why not + + // try to see if a point can be selected + selected_point = -1; + _update_tool_erase(); + + for (int i = 0; i < points.size(); i++) { + + if (Math::abs(float(points[i] - mb->get_position().x)) < 10 * EDSCALE) { + selected_point = i; + + Ref<AnimationNode> node = blend_space->get_blend_point_node(i); + EditorNode::get_singleton()->push_item(node.ptr(), "", true); + dragging_selected_attempt = true; + drag_from = mb->get_position(); + _update_tool_erase(); + _update_edited_point_pos(); + return; + } + } + } + + if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == BUTTON_LEFT) { + if (dragging_selected) { + // move + float point = blend_space->get_blend_point_position(selected_point); + point += drag_ofs.x; + + if (snap->is_pressed()) { + point = Math::stepify(point, blend_space->get_snap()); + } + + updating = true; + undo_redo->create_action("Move Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "set_blend_point_position", selected_point, point); + undo_redo->add_undo_method(blend_space.ptr(), "set_blend_point_position", selected_point, blend_space->get_blend_point_position(selected_point)); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->add_do_method(this, "_update_edited_point_pos"); + undo_redo->add_undo_method(this, "_update_edited_point_pos"); + undo_redo->commit_action(); + updating = false; + _update_edited_point_pos(); + } + + dragging_selected_attempt = false; + dragging_selected = false; + blend_space_draw->update(); + } + + // *set* the blend + if (mb.is_valid() && !mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + float blend_pos = mb->get_position().x / blend_space_draw->get_size().x; + blend_pos *= blend_space->get_max_space() - blend_space->get_min_space(); + blend_pos += blend_space->get_min_space(); + + blend_space->set_blend_pos(blend_pos); + blend_space_draw->update(); + } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid() && !blend_space_draw->has_focus()) { + blend_space_draw->grab_focus(); + blend_space_draw->update(); + } + + if (mm.is_valid() && dragging_selected_attempt) { + dragging_selected = true; + drag_ofs = ((mm->get_position() - drag_from) / blend_space_draw->get_size()) * ((blend_space->get_max_space() - blend_space->get_min_space()) * Vector2(1, 0)); + blend_space_draw->update(); + _update_edited_point_pos(); + } + + if (mm.is_valid() && tool_blend->is_pressed() && mm->get_button_mask() & BUTTON_MASK_LEFT) { + float blend_pos = mm->get_position().x / blend_space_draw->get_size().x; + blend_pos *= blend_space->get_max_space() - blend_space->get_min_space(); + blend_pos += blend_space->get_min_space(); + + blend_space->set_blend_pos(blend_pos); + blend_space_draw->update(); + } +} + +void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { + + Color linecolor = get_color("font_color", "Label"); + Color linecolor_soft = linecolor; + linecolor_soft.a *= 0.5; + + Ref<Font> font = get_font("font", "Label"); + Ref<Texture> icon = get_icon("KeyValue", "EditorIcons"); + Ref<Texture> icon_selected = get_icon("KeySelected", "EditorIcons"); + + Size2 s = blend_space_draw->get_size(); + + if (blend_space_draw->has_focus()) { + Color color = get_color("accent_color", "Editor"); + blend_space_draw->draw_rect(Rect2(Point2(), s), color, false); + } + + blend_space_draw->draw_line(Point2(1, s.height - 1), Point2(s.width - 1, s.height - 1), linecolor); + + if (blend_space->get_min_space() < 0) { + float point = 0.0; + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s.width; + + float x = point; + + blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); + } + + if (snap->is_pressed()) { + + linecolor_soft.a = linecolor.a * 0.1; + + if (blend_space->get_snap() > 0) { + int prev_idx = -1; + + for (int i = 0; i < s.x; i++) { + float v = blend_space->get_min_space() + i * (blend_space->get_max_space() - blend_space->get_min_space()) / s.x; + int idx = int(v / blend_space->get_snap()); + + if (i > 0 && prev_idx != idx) { + blend_space_draw->draw_line(Point2(i, 0), Point2(i, s.height), linecolor_soft); + } + + prev_idx = idx; + } + } + } + + points.clear(); + + for (int i = 0; i < blend_space->get_blend_point_count(); i++) { + float point = blend_space->get_blend_point_position(i); + + if (dragging_selected && selected_point == i) { + point += drag_ofs.x; + if (snap->is_pressed()) { + point = Math::stepify(point, blend_space->get_snap()); + } + } + + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s.width; + + points.push_back(point); + + Vector2 gui_point = Vector2(point, s.height / 2.0); + + gui_point -= (icon->get_size() / 2.0); + + gui_point = gui_point.floor(); + + if (i == selected_point) { + blend_space_draw->draw_texture(icon_selected, gui_point); + } else { + blend_space_draw->draw_texture(icon, gui_point); + } + } + + // blend position + { + Color color; + if (tool_blend->is_pressed()) { + color = get_color("accent_color", "Editor"); + } else { + color = linecolor; + color.a *= 0.5; + } + + float point = blend_space->get_blend_pos(); + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s.width; + + Vector2 gui_point = Vector2(point, s.height / 2.0); + + float mind = 5 * EDSCALE; + float maxd = 15 * EDSCALE; + blend_space_draw->draw_line(gui_point + Vector2(mind, 0), gui_point + Vector2(maxd, 0), color, 2); + blend_space_draw->draw_line(gui_point + Vector2(-mind, 0), gui_point + Vector2(-maxd, 0), color, 2); + blend_space_draw->draw_line(gui_point + Vector2(0, mind), gui_point + Vector2(0, maxd), color, 2); + blend_space_draw->draw_line(gui_point + Vector2(0, -mind), gui_point + Vector2(0, -maxd), color, 2); + } +} + +void AnimationNodeBlendSpace1DEditor::_update_space() { + + if (updating) + return; + + updating = true; + + if (blend_space->get_parent().is_valid()) { + goto_parent_hb->show(); + } else { + goto_parent_hb->hide(); + } + + max_value->set_value(blend_space->get_max_space()); + min_value->set_value(blend_space->get_min_space()); + + label_value->set_text(blend_space->get_value_label()); + + snap_value->set_value(blend_space->get_snap()); + + blend_space_draw->update(); + + updating = false; +} + +void AnimationNodeBlendSpace1DEditor::_config_changed(double) { + if (updating) + return; + + updating = true; + undo_redo->create_action("Change BlendSpace1D Limits"); + undo_redo->add_do_method(blend_space.ptr(), "set_max_space", max_value->get_value()); + undo_redo->add_undo_method(blend_space.ptr(), "set_max_space", blend_space->get_max_space()); + undo_redo->add_do_method(blend_space.ptr(), "set_min_space", min_value->get_value()); + undo_redo->add_undo_method(blend_space.ptr(), "set_min_space", blend_space->get_min_space()); + undo_redo->add_do_method(blend_space.ptr(), "set_snap", snap_value->get_value()); + undo_redo->add_undo_method(blend_space.ptr(), "set_snap", blend_space->get_snap()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_labels_changed(String) { + if (updating) + return; + + updating = true; + undo_redo->create_action("Change BlendSpace1D Labels", UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(blend_space.ptr(), "set_value_label", label_value->get_text()); + undo_redo->add_undo_method(blend_space.ptr(), "set_value_label", blend_space->get_value_label()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; +} + +void AnimationNodeBlendSpace1DEditor::_snap_toggled() { + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_add_menu_type(int p_index) { + String type = menu->get_item_metadata(p_index); + + Object *obj = ClassDB::instance(type); + ERR_FAIL_COND(!obj); + AnimationNode *an = Object::cast_to<AnimationNode>(obj); + ERR_FAIL_COND(!an); + + Ref<AnimationNode> node(an); + + updating = true; + undo_redo->create_action("Add Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "add_blend_point", node, add_point_pos); + undo_redo->add_undo_method(blend_space.ptr(), "remove_blend_point", blend_space->get_blend_point_count()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_add_animation_type(int p_index) { + Ref<AnimationNodeAnimation> anim; + anim.instance(); + + anim->set_animation(animations_to_add[p_index]); + + updating = true; + undo_redo->create_action("Add Animation Point"); + undo_redo->add_do_method(blend_space.ptr(), "add_blend_point", anim, add_point_pos); + undo_redo->add_undo_method(blend_space.ptr(), "remove_blend_point", blend_space->get_blend_point_count()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_tool_switch(int p_tool) { + + if (p_tool == 0) { + tool_erase->show(); + tool_erase_sep->show(); + } else { + tool_erase->hide(); + tool_erase_sep->hide(); + } + + _update_tool_erase(); + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_update_edited_point_pos() { + if (updating) + return; + + if (selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) { + float pos = blend_space->get_blend_point_position(selected_point); + + if (dragging_selected) { + pos += drag_ofs.x; + + if (snap->is_pressed()) { + pos = Math::stepify(pos, blend_space->get_snap()); + } + } + + updating = true; + edit_value->set_value(pos); + updating = false; + } +} + +void AnimationNodeBlendSpace1DEditor::_update_tool_erase() { + + bool point_valid = selected_point >= 0 && selected_point < blend_space->get_blend_point_count(); + tool_erase->set_disabled(!point_valid); + + if (point_valid) { + Ref<AnimationNode> an = blend_space->get_blend_point_node(selected_point); + + if (EditorNode::get_singleton()->item_has_editor(an.ptr())) { + open_editor->show(); + } else { + open_editor->hide(); + } + + edit_hb->show(); + } else { + edit_hb->hide(); + } +} + +void AnimationNodeBlendSpace1DEditor::_erase_selected() { + if (selected_point != -1) { + updating = true; + + undo_redo->create_action("Remove BlendSpace1D Point"); + undo_redo->add_do_method(blend_space.ptr(), "remove_blend_point", selected_point); + undo_redo->add_undo_method(blend_space.ptr(), "add_blend_point", blend_space->get_blend_point_node(selected_point), blend_space->get_blend_point_position(selected_point), selected_point); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + + updating = false; + + blend_space_draw->update(); + } +} + +void AnimationNodeBlendSpace1DEditor::_edit_point_pos(double) { + if (updating) + return; + + updating = true; + undo_redo->create_action("Move BlendSpace1D Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "set_blend_point_position", selected_point, edit_value->get_value()); + undo_redo->add_undo_method(blend_space.ptr(), "set_blend_point_position", selected_point, blend_space->get_blend_point_position(selected_point)); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->add_do_method(this, "_update_edited_point_pos"); + undo_redo->add_undo_method(this, "_update_edited_point_pos"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace1DEditor::_open_editor() { + + if (selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) { + Ref<AnimationNode> an = blend_space->get_blend_point_node(selected_point); + ERR_FAIL_COND(an.is_null()); + EditorNode::get_singleton()->edit_item(an.ptr()); + } +} + +void AnimationNodeBlendSpace1DEditor::_goto_parent() { + EditorNode::get_singleton()->edit_item(blend_space->get_parent().ptr()); +} + +void AnimationNodeBlendSpace1DEditor::_removed_from_graph() { + EditorNode::get_singleton()->edit_item(NULL); +} + +void AnimationNodeBlendSpace1DEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + error_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + error_label->add_color_override("font_color", get_color("error_color", "Editor")); + panel->add_style_override("panel", get_stylebox("bg", "Tree")); + tool_blend->set_icon(get_icon("EditPivot", "EditorIcons")); + tool_select->set_icon(get_icon("ToolSelect", "EditorIcons")); + tool_create->set_icon(get_icon("EditKey", "EditorIcons")); + tool_erase->set_icon(get_icon("Remove", "EditorIcons")); + snap->set_icon(get_icon("SnapGrid", "EditorIcons")); + open_editor->set_icon(get_icon("Edit", "EditorIcons")); + goto_parent->set_icon(get_icon("MoveUp", "EditorIcons")); + } + + if (p_what == NOTIFICATION_PROCESS) { + String error; + + if (!blend_space->get_tree()) { + error = TTR("BlendSpace1D does not belong to an AnimationTree node."); + } else if (!blend_space->get_tree()->is_active()) { + error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails."); + } else if (blend_space->get_tree()->is_state_invalid()) { + error = blend_space->get_tree()->get_invalid_state_reason(); + } + + if (error != error_label->get_text()) { + error_label->set_text(error); + if (error != String()) { + error_panel->show(); + } else { + error_panel->hide(); + } + } + } +} + +void AnimationNodeBlendSpace1DEditor::_bind_methods() { + ClassDB::bind_method("_blend_space_gui_input", &AnimationNodeBlendSpace1DEditor::_blend_space_gui_input); + ClassDB::bind_method("_blend_space_draw", &AnimationNodeBlendSpace1DEditor::_blend_space_draw); + ClassDB::bind_method("_config_changed", &AnimationNodeBlendSpace1DEditor::_config_changed); + ClassDB::bind_method("_labels_changed", &AnimationNodeBlendSpace1DEditor::_labels_changed); + ClassDB::bind_method("_update_space", &AnimationNodeBlendSpace1DEditor::_update_space); + ClassDB::bind_method("_snap_toggled", &AnimationNodeBlendSpace1DEditor::_snap_toggled); + ClassDB::bind_method("_tool_switch", &AnimationNodeBlendSpace1DEditor::_tool_switch); + ClassDB::bind_method("_erase_selected", &AnimationNodeBlendSpace1DEditor::_erase_selected); + ClassDB::bind_method("_update_tool_erase", &AnimationNodeBlendSpace1DEditor::_update_tool_erase); + ClassDB::bind_method("_edit_point_pos", &AnimationNodeBlendSpace1DEditor::_edit_point_pos); + + ClassDB::bind_method("_add_menu_type", &AnimationNodeBlendSpace1DEditor::_add_menu_type); + ClassDB::bind_method("_add_animation_type", &AnimationNodeBlendSpace1DEditor::_add_animation_type); + + ClassDB::bind_method("_update_edited_point_pos", &AnimationNodeBlendSpace1DEditor::_update_edited_point_pos); + + ClassDB::bind_method("_open_editor", &AnimationNodeBlendSpace1DEditor::_open_editor); + ClassDB::bind_method("_goto_parent", &AnimationNodeBlendSpace1DEditor::_goto_parent); + + ClassDB::bind_method("_removed_from_graph", &AnimationNodeBlendSpace1DEditor::_removed_from_graph); +} + +void AnimationNodeBlendSpace1DEditor::edit(AnimationNodeBlendSpace1D *p_blend_space) { + + if (blend_space.is_valid()) { + blend_space->disconnect("removed_from_graph", this, "_removed_from_graph"); + } + + if (p_blend_space) { + blend_space = Ref<AnimationNodeBlendSpace1D>(p_blend_space); + } else { + blend_space.unref(); + } + + if (blend_space.is_null()) { + hide(); + } else { + blend_space->connect("removed_from_graph", this, "_removed_from_graph"); + + _update_space(); + } +} + +AnimationNodeBlendSpace1DEditor *AnimationNodeBlendSpace1DEditor::singleton = NULL; + +AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { + singleton = this; + updating = false; + + HBoxContainer *top_hb = memnew(HBoxContainer); + add_child(top_hb); + + Ref<ButtonGroup> bg; + bg.instance(); + + goto_parent_hb = memnew(HBoxContainer); + top_hb->add_child(goto_parent_hb); + + goto_parent = memnew(ToolButton); + goto_parent->connect("pressed", this, "_goto_parent", varray(), CONNECT_DEFERRED); + goto_parent_hb->add_child(goto_parent); + goto_parent_hb->add_child(memnew(VSeparator)); + goto_parent_hb->hide(); + + tool_blend = memnew(ToolButton); + tool_blend->set_toggle_mode(true); + tool_blend->set_button_group(bg); + top_hb->add_child(tool_blend); + tool_blend->set_pressed(true); + tool_blend->set_tooltip(TTR("Set the blending position within the space")); + tool_blend->connect("pressed", this, "_tool_switch", varray(3)); + + tool_select = memnew(ToolButton); + tool_select->set_toggle_mode(true); + tool_select->set_button_group(bg); + top_hb->add_child(tool_select); + tool_select->set_tooltip(TTR("Select and move points, create points with RMB.")); + tool_select->connect("pressed", this, "_tool_switch", varray(0)); + + tool_create = memnew(ToolButton); + tool_create->set_toggle_mode(true); + tool_create->set_button_group(bg); + top_hb->add_child(tool_create); + tool_create->set_tooltip(TTR("Create points.")); + tool_create->connect("pressed", this, "_tool_switch", varray(1)); + + tool_erase_sep = memnew(VSeparator); + top_hb->add_child(tool_erase_sep); + tool_erase = memnew(ToolButton); + top_hb->add_child(tool_erase); + tool_erase->set_tooltip(TTR("Erase points.")); + tool_erase->connect("pressed", this, "_erase_selected"); + + top_hb->add_child(memnew(VSeparator)); + + snap = memnew(ToolButton); + snap->set_toggle_mode(true); + top_hb->add_child(snap); + snap->set_pressed(true); + snap->connect("pressed", this, "_snap_toggled"); + + snap_value = memnew(SpinBox); + top_hb->add_child(snap_value); + snap_value->set_min(0.01); + snap_value->set_step(0.01); + snap_value->set_max(1000); + + edit_hb = memnew(HBoxContainer); + top_hb->add_child(edit_hb); + edit_hb->add_child(memnew(VSeparator)); + edit_hb->add_child(memnew(Label(TTR("Point")))); + + edit_value = memnew(SpinBox); + edit_hb->add_child(edit_value); + edit_value->set_min(-1000); + edit_value->set_max(1000); + edit_value->set_step(0.01); + edit_value->connect("value_changed", this, "_edit_point_pos"); + + open_editor = memnew(Button); + edit_hb->add_child(open_editor); + open_editor->set_text(TTR("Open Editor")); + open_editor->connect("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); + + edit_hb->hide(); + open_editor->hide(); + + VBoxContainer *main_vb = memnew(VBoxContainer); + add_child(main_vb); + main_vb->set_v_size_flags(SIZE_EXPAND_FILL); + + panel = memnew(PanelContainer); + panel->set_clip_contents(true); + main_vb->add_child(panel); + panel->set_h_size_flags(SIZE_EXPAND_FILL); + panel->set_v_size_flags(SIZE_EXPAND_FILL); + + blend_space_draw = memnew(Control); + blend_space_draw->connect("gui_input", this, "_blend_space_gui_input"); + blend_space_draw->connect("draw", this, "_blend_space_draw"); + blend_space_draw->set_focus_mode(FOCUS_ALL); + + panel->add_child(blend_space_draw); + + { + HBoxContainer *bottom_hb = memnew(HBoxContainer); + main_vb->add_child(bottom_hb); + bottom_hb->set_h_size_flags(SIZE_EXPAND_FILL); + + min_value = memnew(SpinBox); + min_value->set_max(0); + min_value->set_min(-10000); + min_value->set_step(0.01); + + max_value = memnew(SpinBox); + max_value->set_max(10000); + max_value->set_min(0.01); + max_value->set_step(0.01); + + label_value = memnew(LineEdit); + label_value->set_expand_to_text_length(true); + + // now add + + bottom_hb->add_child(min_value); + bottom_hb->add_spacer(); + bottom_hb->add_child(label_value); + bottom_hb->add_spacer(); + bottom_hb->add_child(max_value); + } + + snap_value->connect("value_changed", this, "_config_changed"); + min_value->connect("value_changed", this, "_config_changed"); + max_value->connect("value_changed", this, "_config_changed"); + label_value->connect("text_changed", this, "_labels_changed"); + + error_panel = memnew(PanelContainer); + add_child(error_panel); + + error_label = memnew(Label); + error_panel->add_child(error_label); + error_label->set_text("hmmm"); + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("index_pressed", this, "_add_menu_type"); + + animations_menu = memnew(PopupMenu); + menu->add_child(animations_menu); + animations_menu->set_name("animations"); + animations_menu->connect("index_pressed", this, "_add_animation_type"); + + selected_point = -1; + dragging_selected = false; + dragging_selected_attempt = false; + + set_custom_minimum_size(Size2(0, 150 * EDSCALE)); +} diff --git a/editor/plugins/animation_blend_space_1d_editor.h b/editor/plugins/animation_blend_space_1d_editor.h new file mode 100644 index 0000000000..52139626e6 --- /dev/null +++ b/editor/plugins/animation_blend_space_1d_editor.h @@ -0,0 +1,117 @@ +#ifndef ANIMATION_BLEND_SPACE_1D_EDITOR_H +#define ANIMATION_BLEND_SPACE_1D_EDITOR_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/property_editor.h" +#include "scene/animation/animation_blend_space_1d.h" +#include "scene/gui/button.h" +#include "scene/gui/graph_edit.h" +#include "scene/gui/popup.h" +#include "scene/gui/tree.h" + +class AnimationNodeBlendSpace1DEditor : public VBoxContainer { + + GDCLASS(AnimationNodeBlendSpace1DEditor, VBoxContainer) + + Ref<AnimationNodeBlendSpace1D> blend_space; + + HBoxContainer *goto_parent_hb; + ToolButton *goto_parent; + + PanelContainer *panel; + ToolButton *tool_blend; + ToolButton *tool_select; + ToolButton *tool_create; + VSeparator *tool_erase_sep; + ToolButton *tool_erase; + ToolButton *snap; + SpinBox *snap_value; + + LineEdit *label_value; + SpinBox *max_value; + SpinBox *min_value; + + HBoxContainer *edit_hb; + SpinBox *edit_value; + Button *open_editor; + + int selected_point; + + Control *blend_space_draw; + + PanelContainer *error_panel; + Label *error_label; + + bool updating; + + UndoRedo *undo_redo; + + static AnimationNodeBlendSpace1DEditor *singleton; + + void _blend_space_gui_input(const Ref<InputEvent> &p_event); + void _blend_space_draw(); + + void _update_space(); + + void _config_changed(double); + void _labels_changed(String); + void _snap_toggled(); + + PopupMenu *menu; + PopupMenu *animations_menu; + Vector<String> animations_to_add; + float add_point_pos; + Vector<float> points; + + bool dragging_selected_attempt; + bool dragging_selected; + Vector2 drag_from; + Vector2 drag_ofs; + + void _add_menu_type(int p_index); + void _add_animation_type(int p_index); + + void _tool_switch(int p_tool); + void _update_edited_point_pos(); + void _update_tool_erase(); + void _erase_selected(); + void _edit_point_pos(double); + void _open_editor(); + + void _goto_parent(); + + void _removed_from_graph(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static AnimationNodeBlendSpace1DEditor *get_singleton() { return singleton; } + void edit(AnimationNodeBlendSpace1D *p_blend_space); + AnimationNodeBlendSpace1DEditor(); +}; + +class AnimationNodeBlendSpace1DEditorPlugin : public EditorPlugin { + + GDCLASS(AnimationNodeBlendSpace1DEditorPlugin, EditorPlugin) + + AnimationNodeBlendSpace1DEditor *anim_tree_editor; + EditorNode *editor; + Button *button; + +public: + virtual String get_name() const { return "BlendSpace1D"; } + + 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); + + AnimationNodeBlendSpace1DEditorPlugin(EditorNode *p_node); + ~AnimationNodeBlendSpace1DEditorPlugin(); +}; + +#endif // ANIMATION_BLEND_SPACE_1D_EDITOR_H diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp new file mode 100644 index 0000000000..8d17062248 --- /dev/null +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -0,0 +1,1023 @@ +#include "animation_blend_space_2d_editor.h" + +#include "core/io/resource_loader.h" +#include "core/project_settings.h" +#include "math/delaunay.h" +#include "os/input.h" +#include "os/keyboard.h" +#include "scene/animation/animation_blend_tree.h" +#include "scene/animation/animation_player.h" +#include "scene/gui/menu_button.h" +#include "scene/gui/panel.h" +#include "scene/main/viewport.h" + +void AnimationNodeBlendSpace2DEditor::edit(AnimationNodeBlendSpace2D *p_blend_space) { + + if (blend_space.is_valid()) { + blend_space->disconnect("removed_from_graph", this, "_removed_from_graph"); + } + + if (p_blend_space) { + blend_space = Ref<AnimationNodeBlendSpace2D>(p_blend_space); + } else { + blend_space.unref(); + } + + if (blend_space.is_null()) { + hide(); + } else { + blend_space->connect("removed_from_graph", this, "_removed_from_graph"); + + _update_space(); + } +} + +void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventKey> k = p_event; + if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_DELETE && !k->is_echo()) { + if (selected_point != -1 || selected_triangle != -1) { + _erase_selected(); + accept_event(); + } + } + + Ref<InputEventMouseButton> mb = p_event; + + if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) || (mb->get_button_index() == BUTTON_LEFT && tool_create->is_pressed()))) { + menu->clear(); + animations_menu->clear(); + animations_to_add.clear(); + List<StringName> classes; + classes.sort_custom<StringName::AlphCompare>(); + + ClassDB::get_inheriters_from_class("AnimationRootNode", &classes); + menu->add_submenu_item(TTR("Add Animation"), "animations"); + + AnimationTree *gp = blend_space->get_tree(); + ERR_FAIL_COND(!gp); + if (gp && gp->has_node(gp->get_animation_player())) { + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(gp->get_node(gp->get_animation_player())); + if (ap) { + List<StringName> names; + ap->get_animation_list(&names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + animations_menu->add_icon_item(get_icon("Animation", "EditorIcons"), E->get()); + animations_to_add.push_back(E->get()); + } + } + } + + for (List<StringName>::Element *E = classes.front(); E; E = E->next()) { + + String name = String(E->get()).replace_first("AnimationNode", ""); + if (name == "Animation") + continue; // nope + int idx = menu->get_item_count(); + menu->add_item(vformat("Add %s", name)); + menu->set_item_metadata(idx, E->get()); + } + + menu->set_global_position(blend_space_draw->get_global_transform().xform(mb->get_position())); + menu->popup(); + add_point_pos = (mb->get_position() / blend_space_draw->get_size()); + add_point_pos.y = 1.0 - add_point_pos.y; + add_point_pos *= (blend_space->get_max_space() - blend_space->get_min_space()); + add_point_pos += blend_space->get_min_space(); + + if (snap->is_pressed()) { + add_point_pos.x = Math::stepify(add_point_pos.x, blend_space->get_snap().x); + add_point_pos.y = Math::stepify(add_point_pos.y, blend_space->get_snap().y); + } + } + + if (mb.is_valid() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + blend_space_draw->update(); //update anyway + //try to see if a point can be selected + selected_point = -1; + selected_triangle = -1; + _update_tool_erase(); + + for (int i = 0; i < points.size(); i++) { + + if (points[i].distance_to(mb->get_position()) < 10 * EDSCALE) { + selected_point = i; + Ref<AnimationNode> node = blend_space->get_blend_point_node(i); + EditorNode::get_singleton()->push_item(node.ptr(), "", true); + dragging_selected_attempt = true; + drag_from = mb->get_position(); + _update_tool_erase(); + _update_edited_point_pos(); + return; + } + } + + //then try to see if a triangle can be selected + if (!blend_space->get_auto_triangles()) { //if autotriangles use, disable this + for (int i = 0; i < blend_space->get_triangle_count(); i++) { + Vector<Vector2> triangle; + + for (int j = 0; j < 3; j++) { + int idx = blend_space->get_triangle_point(i, j); + ERR_FAIL_INDEX(idx, points.size()); + triangle.push_back(points[idx]); + } + + if (Geometry::is_point_in_triangle(mb->get_position(), triangle[0], triangle[1], triangle[2])) { + selected_triangle = i; + _update_tool_erase(); + return; + } + } + } + } + + if (mb.is_valid() && mb->is_pressed() && tool_triangle->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + blend_space_draw->update(); //update anyway + //try to see if a point can be selected + selected_point = -1; + + for (int i = 0; i < points.size(); i++) { + + if (making_triangle.find(i) != -1) + continue; + + if (points[i].distance_to(mb->get_position()) < 10 * EDSCALE) { + making_triangle.push_back(i); + if (making_triangle.size() == 3) { + //add triangle! + if (blend_space->has_triangle(making_triangle[0], making_triangle[1], making_triangle[2])) { + making_triangle.clear(); + EditorNode::get_singleton()->show_warning(TTR("Triangle already exists")); + return; + } + + updating = true; + undo_redo->create_action("Add Triangle"); + undo_redo->add_do_method(blend_space.ptr(), "add_triangle", making_triangle[0], making_triangle[1], making_triangle[2]); + undo_redo->add_undo_method(blend_space.ptr(), "remove_triangle", blend_space->get_triangle_count()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + making_triangle.clear(); + } + return; + } + } + } + + if (mb.is_valid() && !mb->is_pressed() && dragging_selected_attempt && mb->get_button_index() == BUTTON_LEFT) { + if (dragging_selected) { + //move + Vector2 point = blend_space->get_blend_point_position(selected_point); + point += drag_ofs; + if (snap->is_pressed()) { + point.x = Math::stepify(point.x, blend_space->get_snap().x); + point.y = Math::stepify(point.y, blend_space->get_snap().y); + } + + updating = true; + undo_redo->create_action("Move Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "set_blend_point_position", selected_point, point); + undo_redo->add_undo_method(blend_space.ptr(), "set_blend_point_position", selected_point, blend_space->get_blend_point_position(selected_point)); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->add_do_method(this, "_update_edited_point_pos"); + undo_redo->add_undo_method(this, "_update_edited_point_pos"); + undo_redo->commit_action(); + updating = false; + _update_edited_point_pos(); + } + dragging_selected_attempt = false; + dragging_selected = false; + blend_space_draw->update(); + } + + if (mb.is_valid() && mb->is_pressed() && tool_blend->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + Vector2 blend_pos = (mb->get_position() / blend_space_draw->get_size()); + blend_pos.y = 1.0 - blend_pos.y; + blend_pos *= (blend_space->get_max_space() - blend_space->get_min_space()); + blend_pos += blend_space->get_min_space(); + + blend_space->set_blend_position(blend_pos); + blend_space_draw->update(); + } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid() && !blend_space_draw->has_focus()) { + blend_space_draw->grab_focus(); + blend_space_draw->update(); + } + + if (mm.is_valid() && dragging_selected_attempt) { + dragging_selected = true; + drag_ofs = ((mm->get_position() - drag_from) / blend_space_draw->get_size()) * (blend_space->get_max_space() - blend_space->get_min_space()) * Vector2(1, -1); + blend_space_draw->update(); + _update_edited_point_pos(); + } + + if (mm.is_valid() && tool_triangle->is_pressed() && making_triangle.size()) { + blend_space_draw->update(); + } + + if (mm.is_valid() && !tool_triangle->is_pressed() && making_triangle.size()) { + making_triangle.clear(); + blend_space_draw->update(); + } + + if (mm.is_valid() && tool_blend->is_pressed() && mm->get_button_mask() & BUTTON_MASK_LEFT) { + + Vector2 blend_pos = (mm->get_position() / blend_space_draw->get_size()); + blend_pos.y = 1.0 - blend_pos.y; + blend_pos *= (blend_space->get_max_space() - blend_space->get_min_space()); + blend_pos += blend_space->get_min_space(); + + blend_space->set_blend_position(blend_pos); + blend_space_draw->update(); + } +} + +void AnimationNodeBlendSpace2DEditor::_add_menu_type(int p_index) { + + String type = menu->get_item_metadata(p_index); + + Object *obj = ClassDB::instance(type); + ERR_FAIL_COND(!obj); + AnimationNode *an = Object::cast_to<AnimationNode>(obj); + ERR_FAIL_COND(!an); + + Ref<AnimationNode> node(an); + + updating = true; + undo_redo->create_action("Add Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "add_blend_point", node, add_point_pos); + undo_redo->add_undo_method(blend_space.ptr(), "remove_blend_point", blend_space->get_blend_point_count()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_add_animation_type(int p_index) { + + Ref<AnimationNodeAnimation> anim; + anim.instance(); + + anim->set_animation(animations_to_add[p_index]); + + updating = true; + undo_redo->create_action("Add Animation Point"); + undo_redo->add_do_method(blend_space.ptr(), "add_blend_point", anim, add_point_pos); + undo_redo->add_undo_method(blend_space.ptr(), "remove_blend_point", blend_space->get_blend_point_count()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_update_tool_erase() { + tool_erase->set_disabled(!(selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) && !(selected_triangle >= 0 && selected_triangle < blend_space->get_triangle_count())); + if (selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) { + Ref<AnimationNode> an = blend_space->get_blend_point_node(selected_point); + if (EditorNode::get_singleton()->item_has_editor(an.ptr())) { + open_editor->show(); + } else { + open_editor->hide(); + } + edit_hb->show(); + } else { + edit_hb->hide(); + } +} + +void AnimationNodeBlendSpace2DEditor::_tool_switch(int p_tool) { + making_triangle.clear(); + + if (p_tool == 2) { + Vector<Vector2> points; + for (int i = 0; i < blend_space->get_blend_point_count(); i++) { + points.push_back(blend_space->get_blend_point_position(i)); + } + Vector<Delaunay2D::Triangle> tr = Delaunay2D::triangulate(points); + print_line("triangleS: " + itos(tr.size())); + for (int i = 0; i < tr.size(); i++) { + blend_space->add_triangle(tr[i].points[0], tr[i].points[1], tr[i].points[2]); + } + } + + if (p_tool == 0) { + tool_erase->show(); + tool_erase_sep->show(); + } else { + tool_erase->hide(); + tool_erase_sep->hide(); + } + _update_tool_erase(); + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { + + Color linecolor = get_color("font_color", "Label"); + Color linecolor_soft = linecolor; + linecolor_soft.a *= 0.5; + Ref<Font> font = get_font("font", "Label"); + Ref<Texture> icon = get_icon("KeyValue", "EditorIcons"); + Ref<Texture> icon_selected = get_icon("KeySelected", "EditorIcons"); + + Size2 s = blend_space_draw->get_size(); + + if (blend_space_draw->has_focus()) { + Color color = get_color("accent_color", "Editor"); + blend_space_draw->draw_rect(Rect2(Point2(), s), color, false); + } + blend_space_draw->draw_line(Point2(1, 0), Point2(1, s.height - 1), linecolor); + blend_space_draw->draw_line(Point2(1, s.height - 1), Point2(s.width - 1, s.height - 1), linecolor); + + blend_space_draw->draw_line(Point2(0, 0), Point2(5 * EDSCALE, 0), linecolor); + if (blend_space->get_min_space().y < 0) { + int y = (blend_space->get_max_space().y / (blend_space->get_max_space().y - blend_space->get_min_space().y)) * s.height; + blend_space_draw->draw_line(Point2(0, y), Point2(5 * EDSCALE, y), linecolor); + blend_space_draw->draw_string(font, Point2(2 * EDSCALE, y - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_line(Point2(5 * EDSCALE, y), Point2(s.width, y), linecolor_soft); + } + + if (blend_space->get_min_space().x < 0) { + int x = (-blend_space->get_min_space().x / (blend_space->get_max_space().x - blend_space->get_min_space().x)) * s.width; + blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); + } + + if (snap->is_pressed()) { + + linecolor_soft.a = linecolor.a * 0.1; + + if (blend_space->get_snap().x > 0) { + + int prev_idx; + for (int i = 0; i < s.x; i++) { + + float v = blend_space->get_min_space().x + i * (blend_space->get_max_space().x - blend_space->get_min_space().x) / s.x; + int idx = int(v / blend_space->get_snap().x); + + if (i > 0 && prev_idx != idx) { + blend_space_draw->draw_line(Point2(i, 0), Point2(i, s.height), linecolor_soft); + } + + prev_idx = idx; + } + } + + if (blend_space->get_snap().y > 0) { + + int prev_idx; + for (int i = 0; i < s.y; i++) { + + float v = blend_space->get_max_space().y - i * (blend_space->get_max_space().y - blend_space->get_min_space().y) / s.y; + int idx = int(v / blend_space->get_snap().y); + + if (i > 0 && prev_idx != idx) { + blend_space_draw->draw_line(Point2(0, i), Point2(s.width, i), linecolor_soft); + } + + prev_idx = idx; + } + } + } + + //triangles first + for (int i = 0; i < blend_space->get_triangle_count(); i++) { + + Vector<Vector2> points; + points.resize(3); + + for (int j = 0; j < 3; j++) { + int point_idx = blend_space->get_triangle_point(i, j); + Vector2 point = blend_space->get_blend_point_position(point_idx); + if (dragging_selected && selected_point == point_idx) { + point += drag_ofs; + if (snap->is_pressed()) { + point.x = Math::stepify(point.x, blend_space->get_snap().x); + point.y = Math::stepify(point.y, blend_space->get_snap().y); + } + } + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s; + point.y = s.height - point.y; + points[j] = point; + } + + for (int j = 0; j < 3; j++) { + blend_space_draw->draw_line(points[j], points[(j + 1) % 3], linecolor, 1, true); + } + + Color color; + if (i == selected_triangle) { + color = get_color("accent_color", "Editor"); + color.a *= 0.5; + } else { + color = linecolor; + color.a *= 0.2; + } + + Vector<Color> colors; + colors.push_back(color); + colors.push_back(color); + colors.push_back(color); + blend_space_draw->draw_primitive(points, colors, Vector<Vector2>()); + } + + points.clear(); + for (int i = 0; i < blend_space->get_blend_point_count(); i++) { + + Vector2 point = blend_space->get_blend_point_position(i); + if (dragging_selected && selected_point == i) { + point += drag_ofs; + if (snap->is_pressed()) { + point.x = Math::stepify(point.x, blend_space->get_snap().x); + point.y = Math::stepify(point.y, blend_space->get_snap().y); + } + } + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s; + point.y = s.height - point.y; + + points.push_back(point); + point -= (icon->get_size() / 2); + point = point.floor(); + + if (i == selected_point) { + blend_space_draw->draw_texture(icon_selected, point); + } else { + blend_space_draw->draw_texture(icon, point); + } + } + + if (making_triangle.size()) { + Vector<Vector2> points; + for (int i = 0; i < making_triangle.size(); i++) { + Vector2 point = blend_space->get_blend_point_position(making_triangle[i]); + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s; + point.y = s.height - point.y; + points.push_back(point); + } + + for (int i = 0; i < points.size() - 1; i++) { + blend_space_draw->draw_line(points[i], points[i + 1], linecolor, 2, true); + } + blend_space_draw->draw_line(points[points.size() - 1], blend_space_draw->get_local_mouse_position(), linecolor, 2, true); + } + + ///draw cursor position + + { + Color color; + if (tool_blend->is_pressed()) { + color = get_color("accent_color", "Editor"); + } else { + color = linecolor; + color.a *= 0.5; + } + + Vector2 point = blend_space->get_blend_position(); + point = (point - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + point *= s; + point.y = s.height - point.y; + + if (blend_space->get_triangle_count()) { + Vector2 closest = blend_space->get_closest_point(blend_space->get_blend_position()); + closest = (closest - blend_space->get_min_space()) / (blend_space->get_max_space() - blend_space->get_min_space()); + closest *= s; + closest.y = s.height - closest.y; + + Color lcol = color; + lcol.a *= 0.4; + blend_space_draw->draw_line(point, closest, lcol, 2); + } + + float mind = 5 * EDSCALE; + float maxd = 15 * EDSCALE; + blend_space_draw->draw_line(point + Vector2(mind, 0), point + Vector2(maxd, 0), color, 2); + blend_space_draw->draw_line(point + Vector2(-mind, 0), point + Vector2(-maxd, 0), color, 2); + blend_space_draw->draw_line(point + Vector2(0, mind), point + Vector2(0, maxd), color, 2); + blend_space_draw->draw_line(point + Vector2(0, -mind), point + Vector2(0, -maxd), color, 2); + } +} + +void AnimationNodeBlendSpace2DEditor::_snap_toggled() { + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_update_space() { + + if (updating) + return; + + updating = true; + + if (blend_space->get_parent().is_valid()) { + goto_parent_hb->show(); + } else { + goto_parent_hb->hide(); + } + + if (blend_space->get_auto_triangles()) { + tool_triangle->hide(); + } else { + tool_triangle->show(); + } + + auto_triangles->set_pressed(blend_space->get_auto_triangles()); + + max_x_value->set_value(blend_space->get_max_space().x); + max_y_value->set_value(blend_space->get_max_space().y); + + min_x_value->set_value(blend_space->get_min_space().x); + min_y_value->set_value(blend_space->get_min_space().y); + + label_x->set_text(blend_space->get_x_label()); + label_y->set_text(blend_space->get_y_label()); + + snap_x->set_value(blend_space->get_snap().x); + snap_y->set_value(blend_space->get_snap().y); + + blend_space_draw->update(); + + updating = false; +} + +void AnimationNodeBlendSpace2DEditor::_config_changed(double) { + if (updating) + return; + + updating = true; + undo_redo->create_action("Change BlendSpace2D Limits"); + undo_redo->add_do_method(blend_space.ptr(), "set_max_space", Vector2(max_x_value->get_value(), max_y_value->get_value())); + undo_redo->add_undo_method(blend_space.ptr(), "set_max_space", blend_space->get_max_space()); + undo_redo->add_do_method(blend_space.ptr(), "set_min_space", Vector2(min_x_value->get_value(), min_y_value->get_value())); + undo_redo->add_undo_method(blend_space.ptr(), "set_min_space", blend_space->get_min_space()); + undo_redo->add_do_method(blend_space.ptr(), "set_snap", Vector2(snap_x->get_value(), snap_y->get_value())); + undo_redo->add_undo_method(blend_space.ptr(), "set_snap", blend_space->get_snap()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_labels_changed(String) { + if (updating) + return; + + updating = true; + undo_redo->create_action("Change BlendSpace2D Labels", UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(blend_space.ptr(), "set_x_label", label_x->get_text()); + undo_redo->add_undo_method(blend_space.ptr(), "set_x_label", blend_space->get_x_label()); + undo_redo->add_do_method(blend_space.ptr(), "set_y_label", label_y->get_text()); + undo_redo->add_undo_method(blend_space.ptr(), "set_y_label", blend_space->get_y_label()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; +} + +void AnimationNodeBlendSpace2DEditor::_erase_selected() { + + if (selected_point != -1) { + + updating = true; + undo_redo->create_action("Remove BlendSpace2D Point"); + undo_redo->add_do_method(blend_space.ptr(), "remove_blend_point", selected_point); + undo_redo->add_undo_method(blend_space.ptr(), "add_blend_point", blend_space->get_blend_point_node(selected_point), blend_space->get_blend_point_position(selected_point), selected_point); + + //restore triangles using this point + for (int i = 0; i < blend_space->get_triangle_count(); i++) { + for (int j = 0; j < 3; j++) { + if (blend_space->get_triangle_point(i, j) == selected_point) { + undo_redo->add_undo_method(blend_space.ptr(), "add_triangle", blend_space->get_triangle_point(i, 0), blend_space->get_triangle_point(i, 1), blend_space->get_triangle_point(i, 2), i); + break; + } + } + } + + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); + } else if (selected_triangle != -1) { + + updating = true; + undo_redo->create_action("Remove BlendSpace2D Triangle"); + undo_redo->add_do_method(blend_space.ptr(), "remove_triangle", selected_triangle); + undo_redo->add_undo_method(blend_space.ptr(), "add_triangle", blend_space->get_triangle_point(selected_triangle, 0), blend_space->get_triangle_point(selected_triangle, 1), blend_space->get_triangle_point(selected_triangle, 2), selected_triangle); + + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); + } +} + +void AnimationNodeBlendSpace2DEditor::_update_edited_point_pos() { + if (updating) + return; + + if (selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) { + Vector2 pos = blend_space->get_blend_point_position(selected_point); + if (dragging_selected) { + pos += drag_ofs; + if (snap->is_pressed()) { + pos.x = Math::stepify(pos.x, blend_space->get_snap().x); + pos.y = Math::stepify(pos.y, blend_space->get_snap().y); + } + } + updating = true; + edit_x->set_value(pos.x); + edit_y->set_value(pos.y); + updating = false; + } +} + +void AnimationNodeBlendSpace2DEditor::_edit_point_pos(double) { + if (updating) + return; + updating = true; + undo_redo->create_action("Move Node Point"); + undo_redo->add_do_method(blend_space.ptr(), "set_blend_point_position", selected_point, Vector2(edit_x->get_value(), edit_y->get_value())); + undo_redo->add_undo_method(blend_space.ptr(), "set_blend_point_position", selected_point, blend_space->get_blend_point_position(selected_point)); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->add_do_method(this, "_update_edited_point_pos"); + undo_redo->add_undo_method(this, "_update_edited_point_pos"); + undo_redo->commit_action(); + updating = false; + + blend_space_draw->update(); +} + +void AnimationNodeBlendSpace2DEditor::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + error_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + error_label->add_color_override("font_color", get_color("error_color", "Editor")); + panel->add_style_override("panel", get_stylebox("bg", "Tree")); + tool_blend->set_icon(get_icon("EditPivot", "EditorIcons")); + tool_select->set_icon(get_icon("ToolSelect", "EditorIcons")); + tool_create->set_icon(get_icon("EditKey", "EditorIcons")); + tool_triangle->set_icon(get_icon("ToolTriangle", "EditorIcons")); + tool_erase->set_icon(get_icon("Remove", "EditorIcons")); + snap->set_icon(get_icon("SnapGrid", "EditorIcons")); + open_editor->set_icon(get_icon("Edit", "EditorIcons")); + goto_parent->set_icon(get_icon("MoveUp", "EditorIcons")); + auto_triangles->set_icon(get_icon("AutoTriangle", "EditorIcons")); + } + + if (p_what == NOTIFICATION_PROCESS) { + + String error; + + if (!blend_space->get_tree()) { + error = TTR("BlendSpace2D does not belong to an AnimationTree node."); + } else if (!blend_space->get_tree()->is_active()) { + error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails."); + } else if (blend_space->get_tree()->is_state_invalid()) { + error = blend_space->get_tree()->get_invalid_state_reason(); + } else if (blend_space->get_triangle_count() == 0) { + error = TTR("No triangles exist, so no blending can take place."); + } + + if (error != error_label->get_text()) { + error_label->set_text(error); + if (error != String()) { + error_panel->show(); + } else { + error_panel->hide(); + } + } + } +} + +void AnimationNodeBlendSpace2DEditor::_open_editor() { + + if (selected_point >= 0 && selected_point < blend_space->get_blend_point_count()) { + Ref<AnimationNode> an = blend_space->get_blend_point_node(selected_point); + ERR_FAIL_COND(!an.is_valid()); + EditorNode::get_singleton()->edit_item(an.ptr()); + } +} + +void AnimationNodeBlendSpace2DEditor::_goto_parent() { + + EditorNode::get_singleton()->edit_item(blend_space->get_parent().ptr()); +} + +void AnimationNodeBlendSpace2DEditor::_removed_from_graph() { + EditorNode::get_singleton()->edit_item(NULL); +} + +void AnimationNodeBlendSpace2DEditor::_auto_triangles_toggled() { + + undo_redo->create_action("Toggle Auto Triangles"); + undo_redo->add_do_method(blend_space.ptr(), "set_auto_triangles", auto_triangles->is_pressed()); + undo_redo->add_undo_method(blend_space.ptr(), "set_auto_triangles", blend_space->get_auto_triangles()); + undo_redo->add_do_method(this, "_update_space"); + undo_redo->add_undo_method(this, "_update_space"); + undo_redo->commit_action(); +} + +void AnimationNodeBlendSpace2DEditor::_bind_methods() { + + ClassDB::bind_method("_blend_space_gui_input", &AnimationNodeBlendSpace2DEditor::_blend_space_gui_input); + ClassDB::bind_method("_blend_space_draw", &AnimationNodeBlendSpace2DEditor::_blend_space_draw); + ClassDB::bind_method("_config_changed", &AnimationNodeBlendSpace2DEditor::_config_changed); + ClassDB::bind_method("_labels_changed", &AnimationNodeBlendSpace2DEditor::_labels_changed); + ClassDB::bind_method("_update_space", &AnimationNodeBlendSpace2DEditor::_update_space); + ClassDB::bind_method("_snap_toggled", &AnimationNodeBlendSpace2DEditor::_snap_toggled); + ClassDB::bind_method("_tool_switch", &AnimationNodeBlendSpace2DEditor::_tool_switch); + ClassDB::bind_method("_erase_selected", &AnimationNodeBlendSpace2DEditor::_erase_selected); + ClassDB::bind_method("_update_tool_erase", &AnimationNodeBlendSpace2DEditor::_update_tool_erase); + ClassDB::bind_method("_edit_point_pos", &AnimationNodeBlendSpace2DEditor::_edit_point_pos); + + ClassDB::bind_method("_add_menu_type", &AnimationNodeBlendSpace2DEditor::_add_menu_type); + ClassDB::bind_method("_add_animation_type", &AnimationNodeBlendSpace2DEditor::_add_animation_type); + + ClassDB::bind_method("_update_edited_point_pos", &AnimationNodeBlendSpace2DEditor::_update_edited_point_pos); + + ClassDB::bind_method("_open_editor", &AnimationNodeBlendSpace2DEditor::_open_editor); + ClassDB::bind_method("_goto_parent", &AnimationNodeBlendSpace2DEditor::_goto_parent); + + ClassDB::bind_method("_removed_from_graph", &AnimationNodeBlendSpace2DEditor::_removed_from_graph); + + ClassDB::bind_method("_auto_triangles_toggled", &AnimationNodeBlendSpace2DEditor::_auto_triangles_toggled); +} + +AnimationNodeBlendSpace2DEditor *AnimationNodeBlendSpace2DEditor::singleton = NULL; + +AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { + + singleton = this; + updating = false; + + HBoxContainer *top_hb = memnew(HBoxContainer); + add_child(top_hb); + + Ref<ButtonGroup> bg; + bg.instance(); + + goto_parent_hb = memnew(HBoxContainer); + top_hb->add_child(goto_parent_hb); + goto_parent = memnew(ToolButton); + goto_parent->connect("pressed", this, "_goto_parent", varray(), CONNECT_DEFERRED); + goto_parent_hb->add_child(goto_parent); + goto_parent_hb->add_child(memnew(VSeparator)); + goto_parent_hb->hide(); + + tool_blend = memnew(ToolButton); + tool_blend->set_toggle_mode(true); + tool_blend->set_button_group(bg); + top_hb->add_child(tool_blend); + tool_blend->set_pressed(true); + tool_blend->set_tooltip(TTR("Set the blending position within the space")); + tool_blend->connect("pressed", this, "_tool_switch", varray(3)); + + tool_select = memnew(ToolButton); + tool_select->set_toggle_mode(true); + tool_select->set_button_group(bg); + top_hb->add_child(tool_select); + tool_select->set_tooltip(TTR("Select and move points, create points with RMB.")); + tool_select->connect("pressed", this, "_tool_switch", varray(0)); + + tool_create = memnew(ToolButton); + tool_create->set_toggle_mode(true); + tool_create->set_button_group(bg); + top_hb->add_child(tool_create); + tool_create->set_tooltip(TTR("Create points.")); + tool_create->connect("pressed", this, "_tool_switch", varray(1)); + + tool_triangle = memnew(ToolButton); + tool_triangle->set_toggle_mode(true); + tool_triangle->set_button_group(bg); + top_hb->add_child(tool_triangle); + tool_triangle->set_tooltip(TTR("Create triangles by connecting points.")); + tool_triangle->connect("pressed", this, "_tool_switch", varray(2)); + + tool_erase_sep = memnew(VSeparator); + top_hb->add_child(tool_erase_sep); + tool_erase = memnew(ToolButton); + top_hb->add_child(tool_erase); + tool_erase->set_tooltip(TTR("Erase points and triangles.")); + tool_erase->connect("pressed", this, "_erase_selected"); + tool_erase->set_disabled(true); + + top_hb->add_child(memnew(VSeparator)); + + auto_triangles = memnew(ToolButton); + top_hb->add_child(auto_triangles); + auto_triangles->connect("pressed", this, "_auto_triangles_toggled"); + auto_triangles->set_toggle_mode(true); + auto_triangles->set_tooltip(TTR("Generate blend triangles automatically (instead of manually)")); + + top_hb->add_child(memnew(VSeparator)); + + snap = memnew(ToolButton); + snap->set_toggle_mode(true); + top_hb->add_child(snap); + //snap->set_text(TTR("Snap")); + snap->set_pressed(true); + snap->connect("pressed", this, "_snap_toggled"); + + snap_x = memnew(SpinBox); + top_hb->add_child(snap_x); + snap_x->set_prefix("x:"); + snap_x->set_min(0.01); + snap_x->set_step(0.01); + snap_x->set_max(1000); + + snap_y = memnew(SpinBox); + top_hb->add_child(snap_y); + snap_y->set_prefix("y:"); + snap_y->set_min(0.01); + snap_y->set_step(0.01); + snap_y->set_max(1000); + + edit_hb = memnew(HBoxContainer); + top_hb->add_child(edit_hb); + edit_hb->add_child(memnew(VSeparator)); + edit_hb->add_child(memnew(Label(TTR("Point")))); + edit_x = memnew(SpinBox); + edit_hb->add_child(edit_x); + edit_x->set_min(-1000); + edit_x->set_step(0.01); + edit_x->set_max(1000); + edit_x->connect("value_changed", this, "_edit_point_pos"); + edit_y = memnew(SpinBox); + edit_hb->add_child(edit_y); + edit_y->set_min(-1000); + edit_y->set_step(0.01); + edit_y->set_max(1000); + edit_y->connect("value_changed", this, "_edit_point_pos"); + open_editor = memnew(Button); + edit_hb->add_child(open_editor); + open_editor->set_text(TTR("Open Editor")); + open_editor->connect("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); + edit_hb->hide(); + open_editor->hide(); + + HBoxContainer *main_hb = memnew(HBoxContainer); + add_child(main_hb); + main_hb->set_v_size_flags(SIZE_EXPAND_FILL); + + GridContainer *main_grid = memnew(GridContainer); + main_grid->set_columns(2); + main_hb->add_child(main_grid); + main_grid->set_h_size_flags(SIZE_EXPAND_FILL); + { + VBoxContainer *left_vbox = memnew(VBoxContainer); + main_grid->add_child(left_vbox); + left_vbox->set_v_size_flags(SIZE_EXPAND_FILL); + max_y_value = memnew(SpinBox); + left_vbox->add_child(max_y_value); + left_vbox->add_spacer(); + label_y = memnew(LineEdit); + left_vbox->add_child(label_y); + label_y->set_expand_to_text_length(true); + left_vbox->add_spacer(); + min_y_value = memnew(SpinBox); + left_vbox->add_child(min_y_value); + + max_y_value->set_max(10000); + max_y_value->set_min(0.01); + max_y_value->set_step(0.01); + + min_y_value->set_min(-10000); + min_y_value->set_max(0); + min_y_value->set_step(0.01); + } + + panel = memnew(PanelContainer); + panel->set_clip_contents(true); + main_grid->add_child(panel); + panel->set_h_size_flags(SIZE_EXPAND_FILL); + + blend_space_draw = memnew(Control); + blend_space_draw->connect("gui_input", this, "_blend_space_gui_input"); + blend_space_draw->connect("draw", this, "_blend_space_draw"); + blend_space_draw->set_focus_mode(FOCUS_ALL); + + panel->add_child(blend_space_draw); + main_grid->add_child(memnew(Control)); //empty bottom left + + { + HBoxContainer *bottom_vbox = memnew(HBoxContainer); + main_grid->add_child(bottom_vbox); + bottom_vbox->set_h_size_flags(SIZE_EXPAND_FILL); + min_x_value = memnew(SpinBox); + bottom_vbox->add_child(min_x_value); + bottom_vbox->add_spacer(); + label_x = memnew(LineEdit); + bottom_vbox->add_child(label_x); + label_x->set_expand_to_text_length(true); + bottom_vbox->add_spacer(); + max_x_value = memnew(SpinBox); + bottom_vbox->add_child(max_x_value); + + max_x_value->set_max(10000); + max_x_value->set_min(0.01); + max_x_value->set_step(0.01); + + min_x_value->set_min(-10000); + min_x_value->set_max(0); + min_x_value->set_step(0.01); + } + + snap_x->connect("value_changed", this, "_config_changed"); + snap_y->connect("value_changed", this, "_config_changed"); + max_x_value->connect("value_changed", this, "_config_changed"); + min_x_value->connect("value_changed", this, "_config_changed"); + max_y_value->connect("value_changed", this, "_config_changed"); + min_y_value->connect("value_changed", this, "_config_changed"); + label_x->connect("text_changed", this, "_labels_changed"); + label_y->connect("text_changed", this, "_labels_changed"); + + error_panel = memnew(PanelContainer); + add_child(error_panel); + error_label = memnew(Label); + error_panel->add_child(error_label); + error_label->set_text("eh"); + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + set_custom_minimum_size(Size2(0, 300 * EDSCALE)); + + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("index_pressed", this, "_add_menu_type"); + + animations_menu = memnew(PopupMenu); + menu->add_child(animations_menu); + animations_menu->set_name("animations"); + animations_menu->connect("index_pressed", this, "_add_animation_type"); + + selected_point = -1; + selected_triangle = -1; + + dragging_selected = false; + dragging_selected_attempt = false; +} + +void AnimationNodeBlendSpace2DEditorPlugin::edit(Object *p_object) { + + anim_tree_editor->edit(Object::cast_to<AnimationNodeBlendSpace2D>(p_object)); +} + +bool AnimationNodeBlendSpace2DEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class("AnimationNodeBlendSpace2D"); +} + +void AnimationNodeBlendSpace2DEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + //editor->hide_animation_player_editors(); + //editor->animation_panel_make_visible(true); + button->show(); + editor->make_bottom_panel_item_visible(anim_tree_editor); + anim_tree_editor->set_process(true); + } else { + + if (anim_tree_editor->is_visible_in_tree()) + editor->hide_bottom_panel(); + button->hide(); + anim_tree_editor->set_process(false); + } +} + +AnimationNodeBlendSpace2DEditorPlugin::AnimationNodeBlendSpace2DEditorPlugin(EditorNode *p_node) { + + editor = p_node; + anim_tree_editor = memnew(AnimationNodeBlendSpace2DEditor); + anim_tree_editor->set_custom_minimum_size(Size2(0, 300)); + + button = editor->add_bottom_panel_item(TTR("BlendSpace2D"), anim_tree_editor); + button->hide(); +} + +AnimationNodeBlendSpace2DEditorPlugin::~AnimationNodeBlendSpace2DEditorPlugin() { +} diff --git a/editor/plugins/animation_blend_space_2d_editor.h b/editor/plugins/animation_blend_space_2d_editor.h new file mode 100644 index 0000000000..a0e497804e --- /dev/null +++ b/editor/plugins/animation_blend_space_2d_editor.h @@ -0,0 +1,130 @@ +#ifndef ANIMATION_BLEND_SPACE_2D_EDITOR_H +#define ANIMATION_BLEND_SPACE_2D_EDITOR_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/property_editor.h" +#include "scene/animation/animation_blend_space_2d.h" +#include "scene/gui/button.h" +#include "scene/gui/graph_edit.h" +#include "scene/gui/popup.h" +#include "scene/gui/tree.h" +/** + @author Juan Linietsky <reduzio@gmail.com> +*/ + +class AnimationNodeBlendSpace2DEditor : public VBoxContainer { + + GDCLASS(AnimationNodeBlendSpace2DEditor, VBoxContainer); + + Ref<AnimationNodeBlendSpace2D> blend_space; + + HBoxContainer *goto_parent_hb; + ToolButton *goto_parent; + + PanelContainer *panel; + ToolButton *tool_blend; + ToolButton *tool_select; + ToolButton *tool_create; + ToolButton *tool_triangle; + VSeparator *tool_erase_sep; + ToolButton *tool_erase; + ToolButton *snap; + SpinBox *snap_x; + SpinBox *snap_y; + + ToolButton *auto_triangles; + + LineEdit *label_x; + LineEdit *label_y; + SpinBox *max_x_value; + SpinBox *min_x_value; + SpinBox *max_y_value; + SpinBox *min_y_value; + + HBoxContainer *edit_hb; + SpinBox *edit_x; + SpinBox *edit_y; + Button *open_editor; + + int selected_point; + int selected_triangle; + + Control *blend_space_draw; + + PanelContainer *error_panel; + Label *error_label; + + bool updating; + + UndoRedo *undo_redo; + + static AnimationNodeBlendSpace2DEditor *singleton; + + void _blend_space_gui_input(const Ref<InputEvent> &p_event); + void _blend_space_draw(); + + void _update_space(); + + void _config_changed(double); + void _labels_changed(String); + void _snap_toggled(); + + PopupMenu *menu; + PopupMenu *animations_menu; + Vector<String> animations_to_add; + Vector2 add_point_pos; + Vector<Vector2> points; + + bool dragging_selected_attempt; + bool dragging_selected; + Vector2 drag_from; + Vector2 drag_ofs; + + Vector<int> making_triangle; + + void _add_menu_type(int p_index); + void _add_animation_type(int p_index); + + void _tool_switch(int p_tool); + void _update_edited_point_pos(); + void _update_tool_erase(); + void _erase_selected(); + void _edit_point_pos(double); + void _open_editor(); + + void _goto_parent(); + + void _removed_from_graph(); + + void _auto_triangles_toggled(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static AnimationNodeBlendSpace2DEditor *get_singleton() { return singleton; } + void edit(AnimationNodeBlendSpace2D *p_blend_space); + AnimationNodeBlendSpace2DEditor(); +}; + +class AnimationNodeBlendSpace2DEditorPlugin : public EditorPlugin { + + GDCLASS(AnimationNodeBlendSpace2DEditorPlugin, EditorPlugin); + + AnimationNodeBlendSpace2DEditor *anim_tree_editor; + EditorNode *editor; + Button *button; + +public: + virtual String get_name() const { return "BlendSpace2D"; } + 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); + + AnimationNodeBlendSpace2DEditorPlugin(EditorNode *p_node); + ~AnimationNodeBlendSpace2DEditorPlugin(); +}; +#endif // ANIMATION_BLEND_SPACE_2D_EDITOR_H diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp new file mode 100644 index 0000000000..3efb2736b5 --- /dev/null +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -0,0 +1,848 @@ +#include "animation_blend_tree_editor_plugin.h" + +#include "core/io/resource_loader.h" +#include "core/project_settings.h" +#include "os/input.h" +#include "os/keyboard.h" +#include "scene/animation/animation_player.h" +#include "scene/gui/menu_button.h" +#include "scene/gui/panel.h" +#include "scene/main/viewport.h" + +void AnimationNodeBlendTreeEditor::edit(AnimationNodeBlendTree *p_blend_tree) { + + if (blend_tree.is_valid()) { + blend_tree->disconnect("removed_from_graph", this, "_removed_from_graph"); + } + + if (p_blend_tree) { + blend_tree = Ref<AnimationNodeBlendTree>(p_blend_tree); + } else { + blend_tree.unref(); + } + + if (blend_tree.is_null()) { + hide(); + } else { + blend_tree->connect("removed_from_graph", this, "_removed_from_graph"); + + _update_graph(); + } +} + +void AnimationNodeBlendTreeEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script) { + + for (int i = 0; i < add_options.size(); i++) { + ERR_FAIL_COND(add_options[i].script == p_script); + } + + AddOption ao; + ao.name = p_name; + ao.script = p_script; + add_options.push_back(ao); + + _update_options_menu(); +} + +void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_script) { + + for (int i = 0; i < add_options.size(); i++) { + if (add_options[i].script == p_script) { + add_options.remove(i); + return; + } + } + + _update_options_menu(); +} + +void AnimationNodeBlendTreeEditor::_update_options_menu() { + + add_node->get_popup()->clear(); + for (int i = 0; i < add_options.size(); i++) { + add_node->get_popup()->add_item(add_options[i].name); + } +} + +Size2 AnimationNodeBlendTreeEditor::get_minimum_size() const { + + return Size2(10, 200); +} + +void AnimationNodeBlendTreeEditor::_update_graph() { + + if (updating) + return; + + graph->set_scroll_ofs(blend_tree->get_graph_offset() * EDSCALE); + + if (blend_tree->get_parent().is_valid()) { + goto_parent->show(); + } else { + goto_parent->hide(); + } + graph->clear_connections(); + //erase all nodes + for (int i = 0; i < graph->get_child_count(); i++) { + + if (Object::cast_to<GraphNode>(graph->get_child(i))) { + memdelete(graph->get_child(i)); + i--; + } + } + + animations.clear(); + + List<StringName> nodes; + blend_tree->get_node_list(&nodes); + + for (List<StringName>::Element *E = nodes.front(); E; E = E->next()) { + + GraphNode *node = memnew(GraphNode); + graph->add_child(node); + + Ref<AnimationNode> agnode = blend_tree->get_node(E->get()); + + if (!agnode->is_connected("changed", this, "_node_changed")) { + agnode->connect("changed", this, "_node_changed", varray(agnode->get_instance_id()), CONNECT_DEFERRED); + } + + node->set_offset(agnode->get_position() * EDSCALE); + + node->set_title(agnode->get_caption()); + node->set_name(E->get()); + + int base = 0; + if (String(E->get()) != "output") { + LineEdit *name = memnew(LineEdit); + name->set_text(E->get()); + name->set_expand_to_text_length(true); + node->add_child(name); + node->set_slot(0, false, 0, Color(), true, 0, get_color("font_color", "Label")); + name->connect("text_entered", this, "_node_renamed", varray(agnode)); + name->connect("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode)); + base = 1; + node->set_show_close_button(true); + node->connect("close_request", this, "_delete_request", varray(E->get()), CONNECT_DEFERRED); + } + + for (int i = 0; i < agnode->get_input_count(); i++) { + Label *in_name = memnew(Label); + node->add_child(in_name); + in_name->set_text(agnode->get_input_name(i)); + node->set_slot(base + i, true, 0, get_color("font_color", "Label"), false, 0, Color()); + } + + node->connect("dragged", this, "_node_dragged", varray(agnode)); + + if (EditorNode::get_singleton()->item_has_editor(agnode.ptr())) { + node->add_child(memnew(HSeparator)); + Button *open_in_editor = memnew(Button); + open_in_editor->set_text(TTR("Open Editor")); + open_in_editor->set_icon(get_icon("Edit", "EditorIcons")); + node->add_child(open_in_editor); + open_in_editor->connect("pressed", this, "_open_in_editor", varray(E->get()), CONNECT_DEFERRED); + open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER); + } + + if (agnode->has_filter()) { + + node->add_child(memnew(HSeparator)); + Button *edit_filters = memnew(Button); + edit_filters->set_text(TTR("Edit Filters")); + edit_filters->set_icon(get_icon("AnimationFilter", "EditorIcons")); + node->add_child(edit_filters); + edit_filters->connect("pressed", this, "_edit_filters", varray(E->get()), CONNECT_DEFERRED); + edit_filters->set_h_size_flags(SIZE_SHRINK_CENTER); + } + + Ref<AnimationNodeAnimation> anim = agnode; + if (anim.is_valid()) { + + MenuButton *mb = memnew(MenuButton); + mb->set_text(anim->get_animation()); + mb->set_icon(get_icon("Animation", "EditorIcons")); + Array options; + + node->add_child(memnew(HSeparator)); + node->add_child(mb); + + ProgressBar *pb = memnew(ProgressBar); + + AnimationTree *player = anim->get_tree(); + if (player->has_node(player->get_animation_player())) { + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(player->get_node(player->get_animation_player())); + if (ap) { + List<StringName> anims; + ap->get_animation_list(&anims); + + for (List<StringName>::Element *F = anims.front(); F; F = F->next()) { + mb->get_popup()->add_item(F->get()); + options.push_back(F->get()); + } + + if (ap->has_animation(anim->get_animation())) { + pb->set_max(ap->get_animation(anim->get_animation())->get_length()); + } + } + } + + pb->set_percent_visible(false); + animations[E->get()] = pb; + node->add_child(pb); + + mb->get_popup()->connect("index_pressed", this, "_anim_selected", varray(options, E->get()), CONNECT_DEFERRED); + } + + Ref<AnimationNodeOneShot> oneshot = agnode; + if (oneshot.is_valid()) { + + HBoxContainer *play_stop = memnew(HBoxContainer); + play_stop->add_spacer(); + Button *play = memnew(Button); + play->set_icon(get_icon("Play", "EditorIcons")); + play->connect("pressed", this, "_oneshot_start", varray(E->get()), CONNECT_DEFERRED); + play_stop->add_child(play); + Button *stop = memnew(Button); + stop->set_icon(get_icon("Stop", "EditorIcons")); + stop->connect("pressed", this, "_oneshot_stop", varray(E->get()), CONNECT_DEFERRED); + play_stop->add_child(stop); + play_stop->add_spacer(); + node->add_child(play_stop); + } + } + + List<AnimationNodeBlendTree::NodeConnection> connections; + blend_tree->get_node_connections(&connections); + + for (List<AnimationNodeBlendTree::NodeConnection>::Element *E = connections.front(); E; E = E->next()) { + + StringName from = E->get().output_node; + StringName to = E->get().input_node; + int to_idx = E->get().input_index; + + graph->connect_node(from, 0, to, to_idx); + } +} + +void AnimationNodeBlendTreeEditor::_add_node(int p_idx) { + + ERR_FAIL_INDEX(p_idx, add_options.size()); + + Ref<AnimationNode> anode; + + if (add_options[p_idx].type != String()) { + AnimationNode *an = Object::cast_to<AnimationNode>(ClassDB::instance(add_options[p_idx].type)); + ERR_FAIL_COND(!an); + anode = Ref<AnimationNode>(an); + } else { + ERR_FAIL_COND(add_options[p_idx].script.is_null()); + String base_type = add_options[p_idx].script->get_instance_base_type(); + AnimationNode *an = Object::cast_to<AnimationNode>(ClassDB::instance(base_type)); + ERR_FAIL_COND(!an); + anode = Ref<AnimationNode>(an); + anode->set_script(add_options[p_idx].script.get_ref_ptr()); + } + + Point2 instance_pos = graph->get_scroll_ofs() + graph->get_size() * 0.5; + + anode->set_position(instance_pos); + + String base_name = add_options[p_idx].name; + int base = 1; + String name = base_name; + while (blend_tree->has_node(name)) { + base++; + name = base_name + " " + itos(base); + } + + undo_redo->create_action("Add Node to BlendTree"); + undo_redo->add_do_method(blend_tree.ptr(), "add_node", name, anode); + undo_redo->add_undo_method(blend_tree.ptr(), "remove_node", name); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); +} + +void AnimationNodeBlendTreeEditor::_node_dragged(const Vector2 &p_from, const Vector2 &p_to, Ref<AnimationNode> p_node) { + + updating = true; + undo_redo->create_action("Node Moved"); + undo_redo->add_do_method(p_node.ptr(), "set_position", p_to / EDSCALE); + undo_redo->add_undo_method(p_node.ptr(), "set_position", p_from / EDSCALE); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; +} + +void AnimationNodeBlendTreeEditor::_connection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index) { + + AnimationNodeBlendTree::ConnectionError err = blend_tree->can_connect_node(p_to, p_to_index, p_from); + + if (err != AnimationNodeBlendTree::CONNECTION_OK) { + EditorNode::get_singleton()->show_warning(TTR("Unable to connect, port may be in use or connection may be invalid.")); + return; + } + + undo_redo->create_action("Nodes Connected"); + undo_redo->add_do_method(blend_tree.ptr(), "connect_node", p_to, p_to_index, p_from); + undo_redo->add_undo_method(blend_tree.ptr(), "disconnect_node", p_to, p_to_index, p_from); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); +} + +void AnimationNodeBlendTreeEditor::_disconnection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index) { + + graph->disconnect_node(p_from, p_from_index, p_to, p_to_index); + + updating = true; + undo_redo->create_action("Nodes Disconnected"); + undo_redo->add_do_method(blend_tree.ptr(), "disconnect_node", p_to, p_to_index); + undo_redo->add_undo_method(blend_tree.ptr(), "connect_node", p_to, p_to_index, p_from); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; +} + +void AnimationNodeBlendTreeEditor::_anim_selected(int p_index, Array p_options, const String &p_node) { + + String option = p_options[p_index]; + + Ref<AnimationNodeAnimation> anim = blend_tree->get_node(p_node); + ERR_FAIL_COND(!anim.is_valid()); + + undo_redo->create_action("Set Animation"); + undo_redo->add_do_method(anim.ptr(), "set_animation", option); + undo_redo->add_undo_method(anim.ptr(), "set_animation", anim->get_animation()); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); +} + +void AnimationNodeBlendTreeEditor::_delete_request(const String &p_which) { + + undo_redo->create_action("Delete Node"); + undo_redo->add_do_method(blend_tree.ptr(), "remove_node", p_which); + undo_redo->add_undo_method(blend_tree.ptr(), "add_node", p_which, blend_tree->get_node(p_which)); + + List<AnimationNodeBlendTree::NodeConnection> conns; + blend_tree->get_node_connections(&conns); + + for (List<AnimationNodeBlendTree::NodeConnection>::Element *E = conns.front(); E; E = E->next()) { + if (E->get().output_node == p_which || E->get().input_node == p_which) { + undo_redo->add_undo_method(blend_tree.ptr(), "connect_node", E->get().input_node, E->get().input_index, E->get().output_node); + } + } + + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); +} + +void AnimationNodeBlendTreeEditor::_oneshot_start(const StringName &p_name) { + + Ref<AnimationNodeOneShot> os = blend_tree->get_node(p_name); + ERR_FAIL_COND(!os.is_valid()); + os->start(); +} + +void AnimationNodeBlendTreeEditor::_oneshot_stop(const StringName &p_name) { + + Ref<AnimationNodeOneShot> os = blend_tree->get_node(p_name); + ERR_FAIL_COND(!os.is_valid()); + os->stop(); +} + +void AnimationNodeBlendTreeEditor::_node_selected(Object *p_node) { + + GraphNode *gn = Object::cast_to<GraphNode>(p_node); + ERR_FAIL_COND(!gn); + + String name = gn->get_name(); + + Ref<AnimationNode> anode = blend_tree->get_node(name); + ERR_FAIL_COND(!anode.is_valid()); + + EditorNode::get_singleton()->push_item(anode.ptr(), "", true); +} + +void AnimationNodeBlendTreeEditor::_open_in_editor(const String &p_which) { + + Ref<AnimationNode> an = blend_tree->get_node(p_which); + ERR_FAIL_COND(!an.is_valid()) + EditorNode::get_singleton()->edit_item(an.ptr()); +} + +void AnimationNodeBlendTreeEditor::_open_parent() { + if (blend_tree->get_parent().is_valid()) { + EditorNode::get_singleton()->edit_item(blend_tree->get_parent().ptr()); + } +} + +void AnimationNodeBlendTreeEditor::_filter_toggled() { + + updating = true; + undo_redo->create_action("Toggle filter on/off"); + undo_redo->add_do_method(_filter_edit.ptr(), "set_filter_enabled", filter_enabled->is_pressed()); + undo_redo->add_undo_method(_filter_edit.ptr(), "set_filter_enabled", _filter_edit->is_filter_enabled()); + undo_redo->add_do_method(this, "_update_filters", _filter_edit); + undo_redo->add_undo_method(this, "_update_filters", _filter_edit); + undo_redo->commit_action(); + updating = false; +} + +void AnimationNodeBlendTreeEditor::_filter_edited() { + + TreeItem *edited = filters->get_edited(); + ERR_FAIL_COND(!edited); + + NodePath edited_path = edited->get_metadata(0); + bool filtered = edited->is_checked(0); + + updating = true; + undo_redo->create_action("Change filter"); + undo_redo->add_do_method(_filter_edit.ptr(), "set_filter_path", edited_path, filtered); + undo_redo->add_undo_method(_filter_edit.ptr(), "set_filter_path", edited_path, _filter_edit->is_path_filtered(edited_path)); + undo_redo->add_do_method(this, "_update_filters", _filter_edit); + undo_redo->add_undo_method(this, "_update_filters", _filter_edit); + undo_redo->commit_action(); + updating = false; +} + +bool AnimationNodeBlendTreeEditor::_update_filters(const Ref<AnimationNode> &anode) { + + if (updating || _filter_edit != anode) + return false; + + NodePath player_path = anode->get_tree()->get_animation_player(); + + if (!anode->get_tree()->has_node(player_path)) { + EditorNode::get_singleton()->show_warning(TTR("No animation player set, so unable to retrieve track names.")); + return false; + } + + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(anode->get_tree()->get_node(player_path)); + if (!player) { + EditorNode::get_singleton()->show_warning(TTR("Player path set is invalid, so unable to retrieve track names.")); + return false; + } + + Node *base = player->get_node(player->get_root()); + + if (!base) { + EditorNode::get_singleton()->show_warning(TTR("Animation player has no valid root node path, so unable to retrieve track names.")); + return false; + } + + updating = true; + + Set<String> paths; + { + List<StringName> animations; + player->get_animation_list(&animations); + + for (List<StringName>::Element *E = animations.front(); E; E = E->next()) { + + Ref<Animation> anim = player->get_animation(E->get()); + for (int i = 0; i < anim->get_track_count(); i++) { + paths.insert(anim->track_get_path(i)); + } + } + } + + filter_enabled->set_pressed(anode->is_filter_enabled()); + filters->clear(); + TreeItem *root = filters->create_item(); + + Map<String, TreeItem *> parenthood; + + for (Set<String>::Element *E = paths.front(); E; E = E->next()) { + + NodePath path = E->get(); + TreeItem *ti = NULL; + String accum; + for (int i = 0; i < path.get_name_count(); i++) { + String name = path.get_name(i); + if (accum != String()) { + accum += "/"; + } + accum += name; + if (!parenthood.has(accum)) { + if (ti) { + ti = filters->create_item(ti); + } else { + ti = filters->create_item(root); + } + parenthood[accum] = ti; + ti->set_text(0, name); + ti->set_selectable(0, false); + ti->set_editable(0, false); + + if (base->has_node(accum)) { + Node *node = base->get_node(accum); + if (has_icon(node->get_class(), "EditorIcons")) { + ti->set_icon(0, get_icon(node->get_class(), "EditorIcons")); + } else { + ti->set_icon(0, get_icon("Node", "EditorIcons")); + } + } + + } else { + ti = parenthood[accum]; + } + } + + Node *node = NULL; + if (base->has_node(accum)) { + node = base->get_node(accum); + } + if (!node) + continue; //no node, cant edit + + if (path.get_subname_count()) { + + String concat = path.get_concatenated_subnames(); + + Skeleton *skeleton = Object::cast_to<Skeleton>(node); + if (skeleton && skeleton->find_bone(concat) != -1) { + //path in skeleton + String bone = concat; + int idx = skeleton->find_bone(bone); + List<String> bone_path; + while (idx != -1) { + bone_path.push_front(skeleton->get_bone_name(idx)); + idx = skeleton->get_bone_parent(idx); + } + + accum += ":"; + for (List<String>::Element *F = bone_path.front(); F; F = F->next()) { + if (F != bone_path.front()) { + accum += "/"; + } + + accum += F->get(); + if (!parenthood.has(accum)) { + ti = filters->create_item(ti); + parenthood[accum] = ti; + ti->set_text(0, F->get()); + ti->set_selectable(0, false); + ti->set_editable(0, false); + ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons")); + } else { + ti = parenthood[accum]; + } + } + + ti->set_editable(0, true); + ti->set_selectable(0, true); + ti->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); + ti->set_text(0, concat); + ti->set_checked(0, anode->is_path_filtered(path)); + ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons")); + ti->set_metadata(0, path); + + } else { + //just a property + ti = filters->create_item(ti); + ti->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); + ti->set_text(0, concat); + ti->set_editable(0, true); + ti->set_selectable(0, true); + ti->set_checked(0, anode->is_path_filtered(path)); + ti->set_metadata(0, path); + } + } else { + if (ti) { + //just a node, likely call or animation track + ti->set_editable(0, true); + ti->set_selectable(0, true); + ti->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); + ti->set_checked(0, anode->is_path_filtered(path)); + ti->set_metadata(0, path); + } + } + } + + updating = false; + + return true; +} + +void AnimationNodeBlendTreeEditor::_edit_filters(const String &p_which) { + + Ref<AnimationNode> anode = blend_tree->get_node(p_which); + ERR_FAIL_COND(!anode.is_valid()); + + _filter_edit = anode; + if (!_update_filters(anode)) + return; + + filter_dialog->popup_centered_minsize(Size2(500, 500) * EDSCALE); +} + +void AnimationNodeBlendTreeEditor::_removed_from_graph() { + if (is_visible()) { + EditorNode::get_singleton()->edit_item(NULL); + } +} + +void AnimationNodeBlendTreeEditor::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + + goto_parent->set_icon(get_icon("MoveUp", "EditorIcons")); + + error_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + error_label->add_color_override("font_color", get_color("error_color", "Editor")); + } + + if (p_what == NOTIFICATION_PROCESS) { + + String error; + + if (!blend_tree->get_tree()) { + error = TTR("BlendTree does not belong to an AnimationTree node."); + } else if (!blend_tree->get_tree()->is_active()) { + error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails."); + } else if (blend_tree->get_tree()->is_state_invalid()) { + error = blend_tree->get_tree()->get_invalid_state_reason(); + } + + if (error != error_label->get_text()) { + error_label->set_text(error); + if (error != String()) { + error_panel->show(); + } else { + error_panel->hide(); + } + } + + List<AnimationNodeBlendTree::NodeConnection> conns; + blend_tree->get_node_connections(&conns); + for (List<AnimationNodeBlendTree::NodeConnection>::Element *E = conns.front(); E; E = E->next()) { + float activity = 0; + if (blend_tree->get_tree() && !blend_tree->get_tree()->is_state_invalid()) { + activity = blend_tree->get_connection_activity(E->get().input_node, E->get().input_index); + } + graph->set_connection_activity(E->get().output_node, 0, E->get().input_node, E->get().input_index, activity); + } + + AnimationTree *graph_player = blend_tree->get_tree(); + AnimationPlayer *player = NULL; + if (graph_player->has_node(graph_player->get_animation_player())) { + player = Object::cast_to<AnimationPlayer>(graph_player->get_node(graph_player->get_animation_player())); + } + + if (player) { + for (Map<StringName, ProgressBar *>::Element *E = animations.front(); E; E = E->next()) { + Ref<AnimationNodeAnimation> an = blend_tree->get_node(E->key()); + if (an.is_valid()) { + if (player->has_animation(an->get_animation())) { + Ref<Animation> anim = player->get_animation(an->get_animation()); + if (anim.is_valid()) { + E->get()->set_max(anim->get_length()); + E->get()->set_value(an->get_playback_time()); + } + } + } + } + } + } +} + +void AnimationNodeBlendTreeEditor::_scroll_changed(const Vector2 &p_scroll) { + if (updating) + return; + updating = true; + blend_tree->set_graph_offset(p_scroll / EDSCALE); + updating = false; +} + +void AnimationNodeBlendTreeEditor::_node_changed(ObjectID p_node) { + + AnimationNode *an = Object::cast_to<AnimationNode>(ObjectDB::get_instance(p_node)); + if (an && an->get_parent() == blend_tree) { + _update_graph(); + } +} + +void AnimationNodeBlendTreeEditor::_bind_methods() { + + ClassDB::bind_method("_update_graph", &AnimationNodeBlendTreeEditor::_update_graph); + ClassDB::bind_method("_add_node", &AnimationNodeBlendTreeEditor::_add_node); + ClassDB::bind_method("_node_dragged", &AnimationNodeBlendTreeEditor::_node_dragged); + ClassDB::bind_method("_node_renamed", &AnimationNodeBlendTreeEditor::_node_renamed); + ClassDB::bind_method("_node_renamed_focus_out", &AnimationNodeBlendTreeEditor::_node_renamed_focus_out); + ClassDB::bind_method("_connection_request", &AnimationNodeBlendTreeEditor::_connection_request); + ClassDB::bind_method("_disconnection_request", &AnimationNodeBlendTreeEditor::_disconnection_request); + ClassDB::bind_method("_node_selected", &AnimationNodeBlendTreeEditor::_node_selected); + ClassDB::bind_method("_open_in_editor", &AnimationNodeBlendTreeEditor::_open_in_editor); + ClassDB::bind_method("_open_parent", &AnimationNodeBlendTreeEditor::_open_parent); + ClassDB::bind_method("_scroll_changed", &AnimationNodeBlendTreeEditor::_scroll_changed); + ClassDB::bind_method("_delete_request", &AnimationNodeBlendTreeEditor::_delete_request); + ClassDB::bind_method("_edit_filters", &AnimationNodeBlendTreeEditor::_edit_filters); + ClassDB::bind_method("_update_filters", &AnimationNodeBlendTreeEditor::_update_filters); + ClassDB::bind_method("_filter_edited", &AnimationNodeBlendTreeEditor::_filter_edited); + ClassDB::bind_method("_filter_toggled", &AnimationNodeBlendTreeEditor::_filter_toggled); + ClassDB::bind_method("_oneshot_start", &AnimationNodeBlendTreeEditor::_oneshot_start); + ClassDB::bind_method("_oneshot_stop", &AnimationNodeBlendTreeEditor::_oneshot_stop); + ClassDB::bind_method("_node_changed", &AnimationNodeBlendTreeEditor::_node_changed); + ClassDB::bind_method("_removed_from_graph", &AnimationNodeBlendTreeEditor::_removed_from_graph); + + ClassDB::bind_method("_anim_selected", &AnimationNodeBlendTreeEditor::_anim_selected); +} + +AnimationNodeBlendTreeEditor *AnimationNodeBlendTreeEditor::singleton = NULL; + +void AnimationNodeBlendTreeEditor::_node_renamed(const String &p_text, Ref<AnimationNode> p_node) { + + String prev_name = blend_tree->get_node_name(p_node); + ERR_FAIL_COND(prev_name == String()); + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_node(prev_name)); + ERR_FAIL_COND(!gn); + + String new_name = p_text; + + ERR_FAIL_COND(new_name == "" || new_name.find(".") != -1 || new_name.find("/") != -1) + + ERR_FAIL_COND(new_name == prev_name); + + String base_name = new_name; + int base = 1; + String name = base_name; + while (blend_tree->has_node(name)) { + base++; + name = base_name + " " + itos(base); + } + + updating = true; + undo_redo->create_action("Node Renamed"); + undo_redo->add_do_method(blend_tree.ptr(), "rename_node", prev_name, name); + undo_redo->add_undo_method(blend_tree.ptr(), "rename_node", name, prev_name); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + gn->set_name(new_name); + gn->set_size(gn->get_minimum_size()); +} + +void AnimationNodeBlendTreeEditor::_node_renamed_focus_out(Node *le, Ref<AnimationNode> p_node) { + _node_renamed(le->call("get_text"), p_node); +} + +AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { + + singleton = this; + updating = false; + + graph = memnew(GraphEdit); + add_child(graph); + graph->add_valid_right_disconnect_type(0); + graph->add_valid_left_disconnect_type(0); + graph->set_v_size_flags(SIZE_EXPAND_FILL); + graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); + graph->connect("disconnection_request", this, "_disconnection_request", varray(), CONNECT_DEFERRED); + graph->connect("node_selected", this, "_node_selected"); + graph->connect("scroll_offset_changed", this, "_scroll_changed"); + + VSeparator *vs = memnew(VSeparator); + graph->get_zoom_hbox()->add_child(vs); + graph->get_zoom_hbox()->move_child(vs, 0); + + add_node = memnew(MenuButton); + graph->get_zoom_hbox()->add_child(add_node); + add_node->set_text(TTR("Add Node..")); + graph->get_zoom_hbox()->move_child(add_node, 0); + add_node->get_popup()->connect("index_pressed", this, "_add_node"); + + goto_parent = memnew(Button); + graph->get_zoom_hbox()->add_child(goto_parent); + graph->get_zoom_hbox()->move_child(goto_parent, 0); + goto_parent->hide(); + goto_parent->connect("pressed", this, "_open_parent"); + + add_options.push_back(AddOption("Animation", "AnimationNodeAnimation")); + add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot")); + add_options.push_back(AddOption("Add2", "AnimationNodeAdd2")); + add_options.push_back(AddOption("Add3", "AnimationNodeAdd3")); + add_options.push_back(AddOption("Blend2", "AnimationNodeBlend2")); + add_options.push_back(AddOption("Blend3", "AnimationNodeBlend3")); + add_options.push_back(AddOption("Seek", "AnimationNodeTimeSeek")); + add_options.push_back(AddOption("TimeScale", "AnimationNodeTimeScale")); + add_options.push_back(AddOption("Transition", "AnimationNodeTransition")); + add_options.push_back(AddOption("BlendTree", "AnimationNodeBlendTree")); + add_options.push_back(AddOption("BlendSpace1D", "AnimationNodeBlendSpace1D")); + add_options.push_back(AddOption("BlendSpace2D", "AnimationNodeBlendSpace2D")); + add_options.push_back(AddOption("StateMachine", "AnimationNodeStateMachine")); + _update_options_menu(); + + error_panel = memnew(PanelContainer); + add_child(error_panel); + error_label = memnew(Label); + error_panel->add_child(error_label); + error_label->set_text("eh"); + + filter_dialog = memnew(AcceptDialog); + add_child(filter_dialog); + filter_dialog->set_title(TTR("Edit Filtered Tracks:")); + + VBoxContainer *filter_vbox = memnew(VBoxContainer); + filter_dialog->add_child(filter_vbox); + + filter_enabled = memnew(CheckBox); + filter_enabled->set_text(TTR("Enable filtering")); + filter_enabled->connect("pressed", this, "_filter_toggled"); + filter_vbox->add_child(filter_enabled); + + filters = memnew(Tree); + filter_vbox->add_child(filters); + filters->set_v_size_flags(SIZE_EXPAND_FILL); + filters->set_hide_root(true); + filters->connect("item_edited", this, "_filter_edited"); + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); +} + +void AnimationNodeBlendTreeEditorPlugin::edit(Object *p_object) { + + anim_tree_editor->edit(Object::cast_to<AnimationNodeBlendTree>(p_object)); +} + +bool AnimationNodeBlendTreeEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class("AnimationNodeBlendTree"); +} + +void AnimationNodeBlendTreeEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + //editor->hide_animation_player_editors(); + //editor->animation_panel_make_visible(true); + button->show(); + editor->make_bottom_panel_item_visible(anim_tree_editor); + anim_tree_editor->set_process(true); + } else { + + if (anim_tree_editor->is_visible_in_tree()) + editor->hide_bottom_panel(); + button->hide(); + anim_tree_editor->set_process(false); + } +} + +AnimationNodeBlendTreeEditorPlugin::AnimationNodeBlendTreeEditorPlugin(EditorNode *p_node) { + + editor = p_node; + anim_tree_editor = memnew(AnimationNodeBlendTreeEditor); + anim_tree_editor->set_custom_minimum_size(Size2(0, 300)); + + button = editor->add_bottom_panel_item(TTR("BlendTree"), anim_tree_editor); + button->hide(); +} + +AnimationNodeBlendTreeEditorPlugin::~AnimationNodeBlendTreeEditorPlugin() { +} diff --git a/editor/plugins/animation_blend_tree_editor_plugin.h b/editor/plugins/animation_blend_tree_editor_plugin.h new file mode 100644 index 0000000000..deba3b2b0e --- /dev/null +++ b/editor/plugins/animation_blend_tree_editor_plugin.h @@ -0,0 +1,117 @@ +#ifndef ANIMATION_BLEND_TREE_EDITOR_PLUGIN_H +#define ANIMATION_BLEND_TREE_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/property_editor.h" +#include "scene/animation/animation_blend_tree.h" +#include "scene/gui/button.h" +#include "scene/gui/graph_edit.h" +#include "scene/gui/popup.h" +#include "scene/gui/tree.h" +/** + @author Juan Linietsky <reduzio@gmail.com> +*/ + +class AnimationNodeBlendTreeEditor : public VBoxContainer { + + GDCLASS(AnimationNodeBlendTreeEditor, VBoxContainer); + + Ref<AnimationNodeBlendTree> blend_tree; + GraphEdit *graph; + MenuButton *add_node; + Button *goto_parent; + + PanelContainer *error_panel; + Label *error_label; + + UndoRedo *undo_redo; + + AcceptDialog *filter_dialog; + Tree *filters; + CheckBox *filter_enabled; + + Map<StringName, ProgressBar *> animations; + + void _update_graph(); + + struct AddOption { + String name; + String type; + Ref<Script> script; + AddOption(const String &p_name = String(), const String &p_type = String()) { + name = p_name; + type = p_type; + } + }; + + Vector<AddOption> add_options; + + void _add_node(int p_idx); + void _update_options_menu(); + + static AnimationNodeBlendTreeEditor *singleton; + + void _node_dragged(const Vector2 &p_from, const Vector2 &p_to, Ref<AnimationNode> p_node); + void _node_renamed(const String &p_text, Ref<AnimationNode> p_node); + void _node_renamed_focus_out(Node *le, Ref<AnimationNode> p_node); + + bool updating; + + void _connection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index); + void _disconnection_request(const String &p_from, int p_from_index, const String &p_to, int p_to_index); + + void _scroll_changed(const Vector2 &p_scroll); + void _node_selected(Object *p_node); + void _open_in_editor(const String &p_which); + void _open_parent(); + void _anim_selected(int p_index, Array p_options, const String &p_node); + void _delete_request(const String &p_which); + void _oneshot_start(const StringName &p_name); + void _oneshot_stop(const StringName &p_name); + + bool _update_filters(const Ref<AnimationNode> &anode); + void _edit_filters(const String &p_which); + void _filter_edited(); + void _filter_toggled(); + Ref<AnimationNode> _filter_edit; + + void _node_changed(ObjectID p_node); + + void _removed_from_graph(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static AnimationNodeBlendTreeEditor *get_singleton() { return singleton; } + + void add_custom_type(const String &p_name, const Ref<Script> &p_script); + void remove_custom_type(const Ref<Script> &p_script); + + virtual Size2 get_minimum_size() const; + void edit(AnimationNodeBlendTree *p_blend_tree); + AnimationNodeBlendTreeEditor(); +}; + +class AnimationNodeBlendTreeEditorPlugin : public EditorPlugin { + + GDCLASS(AnimationNodeBlendTreeEditorPlugin, EditorPlugin); + + AnimationNodeBlendTreeEditor *anim_tree_editor; + EditorNode *editor; + Button *button; + +public: + virtual String get_name() const { return "BlendTree"; } + 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); + + AnimationNodeBlendTreeEditorPlugin(EditorNode *p_node); + ~AnimationNodeBlendTreeEditorPlugin(); +}; + +#endif // ANIMATION_BLEND_TREE_EDITOR_PLUGIN_H diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 23c5e36a92..248e386bf1 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -30,7 +30,7 @@ #include "animation_player_editor_plugin.h" -#include "editor/animation_editor.h" +#include "editor/animation_track_editor.h" #include "editor/editor_settings.h" #include "io/resource_loader.h" #include "io/resource_saver.h" @@ -50,9 +50,9 @@ void AnimationPlayerEditor::_node_removed(Node *p_node) { set_process(false); - key_editor->set_animation(Ref<Animation>()); - key_editor->set_root(NULL); - key_editor->show_select_node_warning(true); + track_editor->set_animation(Ref<Animation>()); + track_editor->set_root(NULL); + track_editor->show_select_node_warning(true); _update_player(); //editor->animation_editor_make_visible(false); } @@ -84,7 +84,7 @@ void AnimationPlayerEditor::_notification(int p_what) { } } frame->set_value(player->get_current_animation_position()); - key_editor->set_anim_pos(player->get_current_animation_position()); + track_editor->set_anim_pos(player->get_current_animation_position()); EditorNode::get_singleton()->get_inspector()->refresh(); } else if (last_active) { @@ -101,8 +101,6 @@ void AnimationPlayerEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { - save_anim->get_popup()->connect("id_pressed", this, "_animation_save_menu"); - tool_anim->get_popup()->connect("id_pressed", this, "_animation_tool_menu"); onion_skinning->get_popup()->connect("id_pressed", this, "_onion_skinning_menu"); @@ -121,16 +119,8 @@ void AnimationPlayerEditor::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { - add_anim->set_icon(get_icon("New", "EditorIcons")); - rename_anim->set_icon(get_icon("Rename", "EditorIcons")); - duplicate_anim->set_icon(get_icon("Duplicate", "EditorIcons")); autoplay->set_icon(get_icon("AutoPlay", "EditorIcons")); - load_anim->set_icon(get_icon("Folder", "EditorIcons")); - save_anim->set_icon(get_icon("Save", "EditorIcons")); - - remove_anim->set_icon(get_icon("Remove", "EditorIcons")); - blend_anim->set_icon(get_icon("Blend", "EditorIcons")); play->set_icon(get_icon("PlayStart", "EditorIcons")); play_from->set_icon(get_icon("Play", "EditorIcons")); play_bw->set_icon(get_icon("PlayStartBackwards", "EditorIcons")); @@ -138,11 +128,27 @@ void AnimationPlayerEditor::_notification(int p_what) { autoplay_icon = get_icon("AutoPlay", "EditorIcons"); stop->set_icon(get_icon("Stop", "EditorIcons")); - resource_edit_anim->set_icon(get_icon("EditResource", "EditorIcons")); + pin->set_icon(get_icon("Pin", "EditorIcons")); - tool_anim->set_icon(get_icon("Tools", "EditorIcons")); onion_skinning->set_icon(get_icon("Onion", "EditorIcons")); + tool_anim->add_style_override("normal", get_stylebox("normal", "Button")); + track_editor->get_edit_menu()->add_style_override("normal", get_stylebox("normal", "Button")); + +#define ITEM_ICON(m_item, m_icon) tool_anim->get_popup()->set_item_icon(tool_anim->get_popup()->get_item_index(m_item), get_icon(m_icon, "EditorIcons")) + + ITEM_ICON(TOOL_NEW_ANIM, "New"); + ITEM_ICON(TOOL_LOAD_ANIM, "Load"); + ITEM_ICON(TOOL_SAVE_ANIM, "Save"); + ITEM_ICON(TOOL_SAVE_AS_ANIM, "Save"); + ITEM_ICON(TOOL_DUPLICATE_ANIM, "Duplicate"); + ITEM_ICON(TOOL_RENAME_ANIM, "Rename"); + ITEM_ICON(TOOL_EDIT_TRANSITIONS, "Blend"); + ITEM_ICON(TOOL_EDIT_RESOURCE, "Edit"); + ITEM_ICON(TOOL_REMOVE_ANIM, "Remove"); + //ITEM_ICON(TOOL_COPY_ANIM, "Copy"); + //ITEM_ICON(TOOL_PASTE_ANIM, "Paste"); + } break; } } @@ -304,10 +310,10 @@ void AnimationPlayerEditor::_animation_selected(int p_which) { Ref<Animation> anim = player->get_animation(current); { - key_editor->set_animation(anim); + track_editor->set_animation(anim); Node *root = player->get_node(player->get_root()); if (root) { - key_editor->set_root(root); + track_editor->set_root(root); } } frame->set_max(anim->get_length()); @@ -317,8 +323,8 @@ void AnimationPlayerEditor::_animation_selected(int p_which) { frame->set_step(0.00001); } else { - key_editor->set_animation(Ref<Animation>()); - key_editor->set_root(NULL); + track_editor->set_animation(Ref<Animation>()); + track_editor->set_root(NULL); } autoplay->set_pressed(current == player->get_autoplay()); @@ -704,16 +710,16 @@ void AnimationPlayerEditor::_animation_edit() { if (animation->get_item_count()) { String current = animation->get_item_text(animation->get_selected()); Ref<Animation> anim = player->get_animation(current); - key_editor->set_animation(anim); + track_editor->set_animation(anim); Node *root = player->get_node(player->get_root()); if (root) { - key_editor->set_root(root); + track_editor->set_root(root); } } else { - key_editor->set_animation(Ref<Animation>()); - key_editor->set_root(NULL); + track_editor->set_animation(Ref<Animation>()); + track_editor->set_root(NULL); } } void AnimationPlayerEditor::_dialog_action(String p_file) { @@ -810,8 +816,16 @@ void AnimationPlayerEditor::_update_player() { animation->clear(); - add_anim->set_disabled(player == NULL); - load_anim->set_disabled(player == NULL); +#define ITEM_DISABLED(m_item, m_disabled) tool_anim->get_popup()->set_item_disabled(tool_anim->get_popup()->get_item_index(m_item), m_disabled) + + ITEM_DISABLED(TOOL_SAVE_ANIM, animlist.size() == 0); + ITEM_DISABLED(TOOL_SAVE_AS_ANIM, animlist.size() == 0); + ITEM_DISABLED(TOOL_DUPLICATE_ANIM, animlist.size() == 0); + ITEM_DISABLED(TOOL_RENAME_ANIM, animlist.size() == 0); + ITEM_DISABLED(TOOL_EDIT_TRANSITIONS, animlist.size() == 0); + ITEM_DISABLED(TOOL_COPY_ANIM, animlist.size() == 0); + ITEM_DISABLED(TOOL_REMOVE_ANIM, animlist.size() == 0); + stop->set_disabled(animlist.size() == 0); play->set_disabled(animlist.size() == 0); play_bw->set_disabled(animlist.size() == 0); @@ -820,12 +834,6 @@ void AnimationPlayerEditor::_update_player() { 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); - blend_anim->set_disabled(animlist.size() == 0); - remove_anim->set_disabled(animlist.size() == 0); - resource_edit_anim->set_disabled(animlist.size() == 0); - save_anim->set_disabled(animlist.size() == 0); tool_anim->set_disabled(player == NULL); onion_skinning->set_disabled(player == NULL); pin->set_disabled(player == NULL); @@ -863,10 +871,10 @@ void AnimationPlayerEditor::_update_player() { if (animation->get_item_count()) { String current = animation->get_item_text(animation->get_selected()); Ref<Animation> anim = player->get_animation(current); - key_editor->set_animation(anim); + track_editor->set_animation(anim); Node *root = player->get_node(player->get_root()); if (root) { - key_editor->set_root(root); + track_editor->set_root(root); } } @@ -884,9 +892,9 @@ void AnimationPlayerEditor::edit(AnimationPlayer *p_player) { if (player) { _update_player(); - key_editor->show_select_node_warning(false); + track_editor->show_select_node_warning(false); } else { - key_editor->show_select_node_warning(true); + track_editor->show_select_node_warning(true); //hide(); } @@ -1024,7 +1032,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set) { player->seek(pos, true); } - key_editor->set_anim_pos(pos); + track_editor->set_anim_pos(pos); updating = true; }; @@ -1084,16 +1092,55 @@ void AnimationPlayerEditor::_hide_anim_editors() { hide(); set_process(false); - key_editor->set_animation(Ref<Animation>()); - key_editor->set_root(NULL); - key_editor->show_select_node_warning(true); + track_editor->set_animation(Ref<Animation>()); + track_editor->set_root(NULL); + track_editor->show_select_node_warning(true); //editor->animation_editor_make_visible(false); } +void AnimationPlayerEditor::_animation_about_to_show_menu() { +} + void AnimationPlayerEditor::_animation_tool_menu(int p_option) { + String current = animation->get_item_text(animation->get_selected()); + Ref<Animation> anim; + if (current != "") { + anim = player->get_animation(current); + } + switch (p_option) { + case TOOL_NEW_ANIM: { + _animation_new(); + } break; + + case TOOL_LOAD_ANIM: { + _animation_load(); + break; + } break; + case TOOL_SAVE_ANIM: { + if (anim.is_valid()) { + _animation_save(anim); + } + } break; + case TOOL_SAVE_AS_ANIM: { + if (anim.is_valid()) { + _animation_save_as(anim); + } + } break; + case TOOL_DUPLICATE_ANIM: { + _animation_duplicate(); + } break; + case TOOL_RENAME_ANIM: { + _animation_rename(); + } break; + case TOOL_EDIT_TRANSITIONS: { + _animation_blend(); + } break; + case TOOL_REMOVE_ANIM: { + _animation_remove(); + } break; case TOOL_COPY_ANIM: { if (!animation->get_item_count()) { @@ -1156,23 +1203,6 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { } } -void AnimationPlayerEditor::_animation_save_menu(int p_option) { - - String current = animation->get_item_text(animation->get_selected()); - if (current != "") { - Ref<Animation> anim = player->get_animation(current); - - switch (p_option) { - case ANIM_SAVE: - _animation_save(anim); - break; - case ANIM_SAVE_AS: - _animation_save_as(anim); - break; - } - } -} - void AnimationPlayerEditor::_onion_skinning_menu(int p_option) { PopupMenu *menu = onion_skinning->get_popup(); @@ -1431,7 +1461,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { float pos = cpos + step_off * anim->get_step(); - bool valid = anim->has_loop() || pos >= 0 && pos <= anim->get_length(); + bool valid = anim->has_loop() || (pos >= 0 && pos <= anim->get_length()); onion.captures_valid[cidx] = valid; if (valid) { player->seek(pos, true); @@ -1494,6 +1524,10 @@ void AnimationPlayerEditor::_stop_onion_skinning() { } } +void AnimationPlayerEditor::_pin_pressed() { + EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->update_tree(); +} + void AnimationPlayerEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &AnimationPlayerEditor::_gui_input); @@ -1532,11 +1566,13 @@ void AnimationPlayerEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_blend_editor_next_changed"), &AnimationPlayerEditor::_blend_editor_next_changed); ClassDB::bind_method(D_METHOD("_unhandled_key_input"), &AnimationPlayerEditor::_unhandled_key_input); ClassDB::bind_method(D_METHOD("_animation_tool_menu"), &AnimationPlayerEditor::_animation_tool_menu); - ClassDB::bind_method(D_METHOD("_animation_save_menu"), &AnimationPlayerEditor::_animation_save_menu); + ClassDB::bind_method(D_METHOD("_onion_skinning_menu"), &AnimationPlayerEditor::_onion_skinning_menu); ClassDB::bind_method(D_METHOD("_editor_visibility_changed"), &AnimationPlayerEditor::_editor_visibility_changed); ClassDB::bind_method(D_METHOD("_prepare_onion_layers_1"), &AnimationPlayerEditor::_prepare_onion_layers_1); ClassDB::bind_method(D_METHOD("_prepare_onion_layers_2"), &AnimationPlayerEditor::_prepare_onion_layers_2); + + ClassDB::bind_method(D_METHOD("_pin_pressed"), &AnimationPlayerEditor::_pin_pressed); } AnimationPlayerEditor *AnimationPlayerEditor::singleton = NULL; @@ -1606,26 +1642,6 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay scale->set_tooltip(TTR("Scale animation playback globally for the node.")); scale->hide(); - add_anim = memnew(ToolButton); - ED_SHORTCUT("animation_player_editor/add_animation", TTR("Create new animation in player.")); - add_anim->set_shortcut(ED_GET_SHORTCUT("animation_player_editor/add_animation")); - add_anim->set_tooltip(TTR("Create new animation in player.")); - - hb->add_child(add_anim); - - load_anim = memnew(ToolButton); - ED_SHORTCUT("animation_player_editor/load_from_disk", TTR("Load animation from disk.")); - add_anim->set_shortcut(ED_GET_SHORTCUT("animation_player_editor/load_from_disk")); - load_anim->set_tooltip(TTR("Load an animation from disk.")); - hb->add_child(load_anim); - - save_anim = memnew(MenuButton); - 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); - hb->add_child(save_anim); - accept = memnew(AcceptDialog); add_child(accept); accept->connect("confirmed", this, "_menu_confirm_current"); @@ -1634,23 +1650,28 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay add_child(delete_dialog); delete_dialog->connect("confirmed", this, "_animation_remove_confirmed"); - duplicate_anim = memnew(ToolButton); - hb->add_child(duplicate_anim); - ED_SHORTCUT("animation_player_editor/duplicate_animation", TTR("Duplicate Animation")); - duplicate_anim->set_shortcut(ED_GET_SHORTCUT("animation_player_editor/duplicate_animation")); - duplicate_anim->set_tooltip(TTR("Duplicate Animation")); - - rename_anim = memnew(ToolButton); - hb->add_child(rename_anim); - ED_SHORTCUT("animation_player_editor/rename_animation", TTR("Rename Animation")); - rename_anim->set_shortcut(ED_GET_SHORTCUT("animation_player_editor/rename_animation")); - rename_anim->set_tooltip(TTR("Rename Animation")); - - remove_anim = memnew(ToolButton); - hb->add_child(remove_anim); - ED_SHORTCUT("animation_player_editor/remove_animation", TTR("Remove Animation")); - remove_anim->set_shortcut(ED_GET_SHORTCUT("animation_player_editor/remove_animation")); - remove_anim->set_tooltip(TTR("Remove Animation")); + tool_anim = memnew(MenuButton); + tool_anim->set_flat(false); + //tool_anim->set_flat(false); + tool_anim->set_tooltip(TTR("Animation Tools")); + tool_anim->set_text(TTR("Animation")); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/new_animation", TTR("New")), TOOL_NEW_ANIM); + tool_anim->get_popup()->add_separator(); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/open_animation", TTR("Load")), TOOL_LOAD_ANIM); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/save_animation", TTR("Save")), TOOL_SAVE_ANIM); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/save_as_animation", TTR("Save As...")), TOOL_SAVE_AS_ANIM); + tool_anim->get_popup()->add_separator(); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/copy_animation", TTR("Copy")), TOOL_COPY_ANIM); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/paste_animation", TTR("Paste")), TOOL_PASTE_ANIM); + tool_anim->get_popup()->add_separator(); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/duplicate_animation", TTR("Duplicate")), TOOL_DUPLICATE_ANIM); + tool_anim->get_popup()->add_separator(); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/rename_animation", TTR("Rename...")), TOOL_RENAME_ANIM); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/edit_transitions", TTR("Edit Transitions...")), TOOL_EDIT_TRANSITIONS); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/open_animation_in_inspector", TTR("Open in Inspector")), TOOL_EDIT_RESOURCE); + tool_anim->get_popup()->add_separator(); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/remove_animation", TTR("Remove")), TOOL_REMOVE_ANIM); + hb->add_child(tool_anim); animation = memnew(OptionButton); hb->add_child(animation); @@ -1662,18 +1683,12 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay hb->add_child(autoplay); autoplay->set_tooltip(TTR("Autoplay on Load")); - blend_anim = memnew(ToolButton); - hb->add_child(blend_anim); - blend_anim->set_tooltip(TTR("Edit Target Blend Times")); - - tool_anim = memnew(MenuButton); - //tool_anim->set_flat(false); - tool_anim->set_tooltip(TTR("Animation Tools")); - tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/copy_animation", TTR("Copy Animation")), TOOL_COPY_ANIM); - tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/paste_animation", TTR("Paste Animation")), TOOL_PASTE_ANIM); //tool_anim->get_popup()->add_separator(); //tool_anim->get_popup()->add_item("Edit Anim Resource",TOOL_PASTE_ANIM); - hb->add_child(tool_anim); + + track_editor = memnew(AnimationTrackEditor); + + hb->add_child(track_editor->get_edit_menu()); onion_skinning = memnew(MenuButton); //onion_skinning->set_flat(false); @@ -1702,10 +1717,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay pin->set_toggle_mode(true); pin->set_tooltip(TTR("Pin AnimationPlayer")); hb->add_child(pin); - - resource_edit_anim = memnew(Button); - hb->add_child(resource_edit_anim); - resource_edit_anim->hide(); + pin->connect("pressed", this, "_pin_pressed"); file = memnew(EditorFileDialog); add_child(file); @@ -1758,16 +1770,10 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay play_bw_from->connect("pressed", this, "_play_bw_from_pressed"); stop->connect("pressed", this, "_stop_pressed"); //pause->connect("pressed", this,"_pause_pressed"); - add_anim->connect("pressed", this, "_animation_new"); - rename_anim->connect("pressed", this, "_animation_rename"); - load_anim->connect("pressed", this, "_animation_load"); - duplicate_anim->connect("pressed", this, "_animation_duplicate"); //frame->connect("text_entered", this,"_seek_frame_changed"); - blend_anim->connect("pressed", this, "_animation_blend"); - remove_anim->connect("pressed", this, "_animation_remove"); animation->connect("item_selected", this, "_animation_selected", Vector<Variant>(), true); - resource_edit_anim->connect("pressed", this, "_animation_resource_edit"); + file->connect("file_selected", this, "_dialog_action"); frame->connect("value_changed", this, "_seek_value_changed", Vector<Variant>(), true); scale->connect("text_entered", this, "_scale_changed", Vector<Variant>(), true); @@ -1777,18 +1783,17 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay set_process_unhandled_key_input(true); - key_editor = memnew(AnimationKeyEditor); - add_child(key_editor); - key_editor->set_v_size_flags(SIZE_EXPAND_FILL); - key_editor->connect("timeline_changed", this, "_animation_key_editor_seek"); - key_editor->connect("animation_len_changed", this, "_animation_key_editor_anim_len_changed"); - key_editor->connect("animation_step_changed", this, "_animation_key_editor_anim_step_changed"); + add_child(track_editor); + track_editor->set_v_size_flags(SIZE_EXPAND_FILL); + track_editor->connect("timeline_changed", this, "_animation_key_editor_seek"); + track_editor->connect("animation_len_changed", this, "_animation_key_editor_anim_len_changed"); + track_editor->connect("animation_step_changed", this, "_animation_key_editor_anim_step_changed"); _update_player(); // Onion skinning - key_editor->connect("visibility_changed", this, "_editor_visibility_changed"); + track_editor->connect("visibility_changed", this, "_editor_visibility_changed"); onion.enabled = false; onion.past = true; diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index a7b7c6c465..5ac7b99903 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -42,8 +42,9 @@ /** @author Juan Linietsky <reduzio@gmail.com> */ -class AnimationKeyEditor; +class AnimationTrackEditor; class AnimationPlayerEditorPlugin; + class AnimationPlayerEditor : public VBoxContainer { GDCLASS(AnimationPlayerEditor, VBoxContainer); @@ -53,6 +54,14 @@ class AnimationPlayerEditor : public VBoxContainer { AnimationPlayer *player; enum { + TOOL_NEW_ANIM, + TOOL_LOAD_ANIM, + TOOL_SAVE_ANIM, + TOOL_SAVE_AS_ANIM, + TOOL_DUPLICATE_ANIM, + TOOL_RENAME_ANIM, + TOOL_EDIT_TRANSITIONS, + TOOL_REMOVE_ANIM, TOOL_COPY_ANIM, TOOL_PASTE_ANIM, TOOL_EDIT_RESOURCE @@ -72,6 +81,7 @@ class AnimationPlayerEditor : public VBoxContainer { }; enum { + ANIM_OPEN, ANIM_SAVE, ANIM_SAVE_AS }; @@ -89,16 +99,8 @@ class AnimationPlayerEditor : public VBoxContainer { Button *play_bw_from; //Button *pause; - Button *add_anim; Button *autoplay; - Button *rename_anim; - Button *duplicate_anim; - - Button *resource_edit_anim; - Button *load_anim; - MenuButton *save_anim; - Button *blend_anim; - Button *remove_anim; + MenuButton *tool_anim; MenuButton *onion_skinning; ToolButton *pin; @@ -130,7 +132,7 @@ class AnimationPlayerEditor : public VBoxContainer { bool updating; bool updating_blends; - AnimationKeyEditor *key_editor; + AnimationTrackEditor *track_editor; // Onion skinning struct { @@ -207,8 +209,8 @@ class AnimationPlayerEditor : public VBoxContainer { void _unhandled_key_input(const Ref<InputEvent> &p_ev); void _animation_tool_menu(int p_option); - void _animation_save_menu(int p_option); void _onion_skinning_menu(int p_option); + void _animation_about_to_show_menu(); void _editor_visibility_changed(); bool _are_onion_layers_valid(); @@ -219,6 +221,8 @@ class AnimationPlayerEditor : public VBoxContainer { void _start_onion_skinning(); void _stop_onion_skinning(); + void _pin_pressed(); + AnimationPlayerEditor(); ~AnimationPlayerEditor(); @@ -232,7 +236,9 @@ public: AnimationPlayer *get_player() const; static AnimationPlayerEditor *singleton; - AnimationKeyEditor *get_key_editor() { return key_editor; } + bool is_pinned() const { return pin->is_pressed(); } + void unpin() { pin->set_pressed(false); } + AnimationTrackEditor *get_track_editor() { return track_editor; } Dictionary get_state() const; void set_state(const Dictionary &p_state); diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp new file mode 100644 index 0000000000..04bd5f0cec --- /dev/null +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -0,0 +1,1313 @@ +#include "animation_state_machine_editor.h" + +#include "core/io/resource_loader.h" +#include "core/project_settings.h" +#include "math/delaunay.h" +#include "os/input.h" +#include "os/keyboard.h" +#include "scene/animation/animation_blend_tree.h" +#include "scene/animation/animation_player.h" +#include "scene/gui/menu_button.h" +#include "scene/gui/panel.h" +#include "scene/main/viewport.h" + +void AnimationNodeStateMachineEditor::edit(AnimationNodeStateMachine *p_state_machine) { + + if (state_machine.is_valid()) { + state_machine->disconnect("removed_from_graph", this, "_removed_from_graph"); + } + + if (p_state_machine) { + state_machine = Ref<AnimationNodeStateMachine>(p_state_machine); + } else { + state_machine.unref(); + } + + if (state_machine.is_null()) { + hide(); + } else { + state_machine->connect("removed_from_graph", this, "_removed_from_graph"); + + selected_transition_from = StringName(); + selected_transition_to = StringName(); + selected_node = StringName(); + _update_mode(); + _update_graph(); + } +} + +void AnimationNodeStateMachineEditor::_state_machine_gui_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventKey> k = p_event; + if (tool_select->is_pressed() && k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_DELETE && !k->is_echo()) { + if (selected_node != StringName() || selected_transition_to != StringName() || selected_transition_from != StringName()) { + _erase_selected(); + accept_event(); + } + } + + Ref<InputEventMouseButton> mb = p_event; + + //Add new node + if (mb.is_valid() && mb->is_pressed() && ((tool_select->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) || (tool_create->is_pressed() && mb->get_button_index() == BUTTON_LEFT))) { + menu->clear(); + animations_menu->clear(); + animations_to_add.clear(); + List<StringName> classes; + classes.sort_custom<StringName::AlphCompare>(); + + ClassDB::get_inheriters_from_class("AnimationRootNode", &classes); + menu->add_submenu_item(TTR("Add Animation"), "animations"); + + AnimationTree *gp = state_machine->get_tree(); + ERR_FAIL_COND(!gp); + if (gp && gp->has_node(gp->get_animation_player())) { + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(gp->get_node(gp->get_animation_player())); + if (ap) { + List<StringName> names; + ap->get_animation_list(&names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + animations_menu->add_icon_item(get_icon("Animation", "EditorIcons"), E->get()); + animations_to_add.push_back(E->get()); + } + } + } + + for (List<StringName>::Element *E = classes.front(); E; E = E->next()) { + + String name = String(E->get()).replace_first("AnimationNode", ""); + if (name == "Animation") + continue; // nope + int idx = menu->get_item_count(); + menu->add_item(vformat("Add %s", name)); + menu->set_item_metadata(idx, E->get()); + } + + menu->set_global_position(state_machine_draw->get_global_transform().xform(mb->get_position())); + menu->popup(); + add_node_pos = mb->get_position() / EDSCALE + state_machine->get_graph_offset(); + } + + // select node or push a field inside + if (mb.is_valid() && !mb->get_shift() && mb->is_pressed() && tool_select->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + + selected_transition_from = StringName(); + selected_transition_to = StringName(); + selected_node = StringName(); + + for (int i = node_rects.size() - 1; i >= 0; i--) { //inverse to draw order + + if (node_rects[i].play.has_point(mb->get_position())) { //edit name + if (play_mode->get_selected() == 1 || !state_machine->is_playing()) { + //start + state_machine->start(node_rects[i].node_name); + } else { + //travel + if (!state_machine->travel(node_rects[i].node_name)) { + + state_machine->start(node_rects[i].node_name); + //removing this due to usability.. + //error_time = 5; + //error_text = vformat(TTR("No path found from '%s' to '%s'."), state_machine->get_current_node(), node_rects[i].node_name); + } + } + state_machine_draw->update(); + return; + } + + if (node_rects[i].name.has_point(mb->get_position())) { //edit name + + Ref<StyleBox> line_sb = get_stylebox("normal", "LineEdit"); + + Rect2 edit_rect = node_rects[i].name; + edit_rect.position -= line_sb->get_offset(); + edit_rect.size += line_sb->get_minimum_size(); + + name_edit->set_global_position(state_machine_draw->get_global_transform().xform(edit_rect.position)); + name_edit->set_size(edit_rect.size); + name_edit->set_text(node_rects[i].node_name); + name_edit->show_modal(); + name_edit->grab_focus(); + name_edit->select_all(); + + prev_name = node_rects[i].node_name; + return; + } + + if (node_rects[i].edit.has_point(mb->get_position())) { //edit name + call_deferred("_open_editor", node_rects[i].node_name); + return; + } + + if (node_rects[i].node.has_point(mb->get_position())) { //select node since nothing else was selected + selected_node = node_rects[i].node_name; + + Ref<AnimationNode> anode = state_machine->get_node(selected_node); + EditorNode::get_singleton()->push_item(anode.ptr(), "", true); + state_machine_draw->update(); + dragging_selected_attempt = true; + dragging_selected = false; + drag_from = mb->get_position(); + snap_x = StringName(); + snap_y = StringName(); + _update_mode(); + return; + } + } + + //test the lines now + int closest = -1; + float closest_d = 1e20; + for (int i = 0; i < transition_lines.size(); i++) { + + Vector2 s[2] = { + transition_lines[i].from, + transition_lines[i].to + }; + Vector2 cpoint = Geometry::get_closest_point_to_segment_2d(mb->get_position(), s); + float d = cpoint.distance_to(mb->get_position()); + if (d > transition_lines[i].width) { + continue; + } + + if (d < closest_d) { + closest = i; + closest_d = d; + } + } + + if (closest >= 0) { + selected_transition_from = transition_lines[closest].from_node; + selected_transition_to = transition_lines[closest].to_node; + + Ref<AnimationNodeStateMachineTransition> tr = state_machine->get_transition(closest); + EditorNode::get_singleton()->push_item(tr.ptr(), "", true); + } + + state_machine_draw->update(); + _update_mode(); + } + + //end moving node + if (mb.is_valid() && dragging_selected_attempt && mb->get_button_index() == BUTTON_LEFT && !mb->is_pressed()) { + + if (dragging_selected) { + + Ref<AnimationNode> an = state_machine->get_node(selected_node); + updating = true; + undo_redo->create_action("Move Node"); + undo_redo->add_do_method(an.ptr(), "set_position", an->get_position() + drag_ofs / EDSCALE); + undo_redo->add_undo_method(an.ptr(), "set_position", an->get_position()); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + } + snap_x = StringName(); + snap_y = StringName(); + + dragging_selected_attempt = false; + dragging_selected = false; + state_machine_draw->update(); + } + + //connect nodes + if (mb.is_valid() && ((tool_select->is_pressed() && mb->get_shift()) || tool_connect->is_pressed()) && mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { + + for (int i = node_rects.size() - 1; i >= 0; i--) { //inverse to draw order + if (node_rects[i].node.has_point(mb->get_position())) { //select node since nothing else was selected + connecting = true; + connecting_from = node_rects[i].node_name; + connecting_to = mb->get_position(); + connecting_to_node = StringName(); + return; + } + } + } + + //end connecting nodes + if (mb.is_valid() && connecting && mb->get_button_index() == BUTTON_LEFT && !mb->is_pressed()) { + + if (connecting_to_node != StringName()) { + + if (state_machine->has_transition(connecting_from, connecting_to_node)) { + EditorNode::get_singleton()->show_warning("Transition exists!"); + + } else { + + Ref<AnimationNodeStateMachineTransition> tr; + tr.instance(); + tr->set_switch_mode(AnimationNodeStateMachineTransition::SwitchMode(transition_mode->get_selected())); + + updating = true; + undo_redo->create_action("Add Transition"); + undo_redo->add_do_method(state_machine.ptr(), "add_transition", connecting_from, connecting_to_node, tr); + undo_redo->add_undo_method(state_machine.ptr(), "remove_transition", connecting_from, connecting_to_node); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + + selected_transition_from = connecting_from; + selected_transition_to = connecting_to_node; + + EditorNode::get_singleton()->push_item(tr.ptr(), "", true); + _update_mode(); + } + } + connecting_to_node = StringName(); + connecting = false; + state_machine_draw->update(); + } + + Ref<InputEventMouseMotion> mm = p_event; + + //pan window + if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_MIDDLE) { + + h_scroll->set_value(h_scroll->get_value() - mm->get_relative().x); + v_scroll->set_value(v_scroll->get_value() - mm->get_relative().y); + } + + //move mouse while connecting + if (mm.is_valid() && connecting) { + + connecting_to = mm->get_position(); + connecting_to_node = StringName(); + state_machine_draw->update(); + + for (int i = node_rects.size() - 1; i >= 0; i--) { //inverse to draw order + if (node_rects[i].node_name != connecting_from && node_rects[i].node.has_point(connecting_to)) { //select node since nothing else was selected + connecting_to_node = node_rects[i].node_name; + return; + } + } + } + + //move mouse while moving a node + if (mm.is_valid() && dragging_selected_attempt) { + + dragging_selected = true; + drag_ofs = mm->get_position() - drag_from; + snap_x = StringName(); + snap_y = StringName(); + { + //snap + Vector2 cpos = state_machine->get_node(selected_node)->get_position() + drag_ofs / EDSCALE; + List<StringName> nodes; + state_machine->get_node_list(&nodes); + + float best_d_x = 1e20; + float best_d_y = 1e20; + + for (List<StringName>::Element *E = nodes.front(); E; E = E->next()) { + if (E->get() == selected_node) + continue; + Vector2 npos = state_machine->get_node(E->get())->get_position(); + + float d_x = ABS(npos.x - cpos.x); + if (d_x < MIN(5, best_d_x)) { + drag_ofs.x -= cpos.x - npos.x; + best_d_x = d_x; + snap_x = E->get(); + } + + float d_y = ABS(npos.y - cpos.y); + if (d_y < MIN(5, best_d_y)) { + drag_ofs.y -= cpos.y - npos.y; + best_d_y = d_y; + snap_y = E->get(); + } + } + } + + state_machine_draw->update(); + } + + //put ibeam (text cursor) over names to make it clearer that they are editable + if (mm.is_valid()) { + + state_machine_draw->grab_focus(); + + bool over_text_now = false; + String new_over_node = StringName(); + int new_over_node_what = -1; + if (tool_select->is_pressed()) { + + for (int i = node_rects.size() - 1; i >= 0; i--) { //inverse to draw order + + if (node_rects[i].name.has_point(mm->get_position())) { + over_text_now = true; + break; + } + + if (node_rects[i].node.has_point(mm->get_position())) { + new_over_node = node_rects[i].node_name; + if (node_rects[i].play.has_point(mm->get_position())) { + new_over_node_what = 0; + } + if (node_rects[i].edit.has_point(mm->get_position())) { + new_over_node_what = 1; + } + } + } + } + + if (new_over_node != over_node || new_over_node_what != over_node_what) { + over_node = new_over_node; + over_node_what = new_over_node_what; + state_machine_draw->update(); + } + + if (over_text != over_text_now) { + + if (over_text_now) { + state_machine_draw->set_default_cursor_shape(CURSOR_IBEAM); + } else { + state_machine_draw->set_default_cursor_shape(CURSOR_ARROW); + } + + over_text = over_text_now; + } + } +} + +void AnimationNodeStateMachineEditor::_add_menu_type(int p_index) { + + String type = menu->get_item_metadata(p_index); + + Object *obj = ClassDB::instance(type); + ERR_FAIL_COND(!obj); + AnimationNode *an = Object::cast_to<AnimationNode>(obj); + ERR_FAIL_COND(!an); + + Ref<AnimationNode> node(an); + node->set_position(add_node_pos); + + String base_name = type.replace_first("AnimationNode", ""); + int base = 1; + String name = base_name; + while (state_machine->has_node(name)) { + base++; + name = base_name + " " + itos(base); + } + + updating = true; + undo_redo->create_action("Add Node"); + undo_redo->add_do_method(state_machine.ptr(), "add_node", name, node); + undo_redo->add_undo_method(state_machine.ptr(), "remove_node", name); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + + state_machine_draw->update(); +} + +void AnimationNodeStateMachineEditor::_add_animation_type(int p_index) { + + Ref<AnimationNodeAnimation> anim; + anim.instance(); + + anim->set_animation(animations_to_add[p_index]); + + String base_name = animations_to_add[p_index]; + int base = 1; + String name = base_name; + while (state_machine->has_node(name)) { + base++; + name = base_name + " " + itos(base); + } + + anim->set_position(add_node_pos); + + updating = true; + undo_redo->create_action("Add Node"); + undo_redo->add_do_method(state_machine.ptr(), "add_node", name, anim); + undo_redo->add_undo_method(state_machine.ptr(), "remove_node", name); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + + state_machine_draw->update(); +} + +void AnimationNodeStateMachineEditor::_connection_draw(const Vector2 &p_from, const Vector2 &p_to, AnimationNodeStateMachineTransition::SwitchMode p_mode, bool p_enabled, bool p_selected, bool p_travel, bool p_auto_advance) { + + Color linecolor = get_color("font_color", "Label"); + Color icon_color(1, 1, 1); + Color accent = get_color("accent_color", "Editor"); + + if (!p_enabled) { + linecolor.a *= 0.2; + icon_color.a *= 0.2; + accent.a *= 0.6; + } + + Ref<Texture> icons[6] = { + get_icon("TransitionImmediateBig", "EditorIcons"), + get_icon("TransitionSyncBig", "EditorIcons"), + get_icon("TransitionEndBig", "EditorIcons"), + get_icon("TransitionImmediateAutoBig", "EditorIcons"), + get_icon("TransitionSyncAutoBig", "EditorIcons"), + get_icon("TransitionEndAutoBig", "EditorIcons") + }; + + if (p_selected) { + state_machine_draw->draw_line(p_from, p_to, accent, 6, true); + } + + if (p_travel) { + linecolor = accent; + linecolor.set_hsv(1.0, linecolor.get_s(), linecolor.get_v()); + } + state_machine_draw->draw_line(p_from, p_to, linecolor, 2, true); + + Ref<Texture> icon = icons[p_mode + (p_auto_advance ? 3 : 0)]; + + Transform2D xf; + xf.elements[0] = (p_to - p_from).normalized(); + xf.elements[1] = xf.elements[0].tangent(); + xf.elements[2] = (p_from + p_to) * 0.5 - xf.elements[1] * icon->get_height() * 0.5 - xf.elements[0] * icon->get_height() * 0.5; + + state_machine_draw->draw_set_transform_matrix(xf); + state_machine_draw->draw_texture(icon, Vector2(), icon_color); + state_machine_draw->draw_set_transform_matrix(Transform2D()); +} + +void AnimationNodeStateMachineEditor::_clip_src_line_to_rect(Vector2 &r_from, Vector2 &r_to, const Rect2 &p_rect) { + + if (r_to == r_from) + return; + + //this could be optimized... + Vector2 n = (r_to - r_from).normalized(); + while (p_rect.has_point(r_from)) { + r_from += n; + } +} + +void AnimationNodeStateMachineEditor::_clip_dst_line_to_rect(Vector2 &r_from, Vector2 &r_to, const Rect2 &p_rect) { + + if (r_to == r_from) + return; + + //this could be optimized... + Vector2 n = (r_to - r_from).normalized(); + while (p_rect.has_point(r_to)) { + r_to -= n; + } +} + +void AnimationNodeStateMachineEditor::_state_machine_draw() { + + Ref<StyleBox> style = get_stylebox("frame", "GraphNode"); + Ref<StyleBox> style_selected = get_stylebox("selectedframe", "GraphNode"); + + Ref<Font> font = get_font("title_font", "GraphNode"); + Color font_color = get_color("title_color", "GraphNode"); + Ref<Texture> play = get_icon("Play", "EditorIcons"); + Ref<Texture> auto_play = get_icon("AutoPlay", "EditorIcons"); + Ref<Texture> edit = get_icon("Edit", "EditorIcons"); + Color accent = get_color("accent_color", "Editor"); + Color linecolor = get_color("font_color", "Label"); + linecolor.a *= 0.3; + Ref<StyleBox> playing_overlay = get_stylebox("position", "GraphNode"); + + bool playing = state_machine->is_playing(); + StringName current = state_machine->get_current_node(); + StringName blend_from = state_machine->get_blend_from_node(); + Vector<StringName> travel_path = state_machine->get_travel_path(); + + if (state_machine_draw->has_focus()) { + state_machine_draw->draw_rect(Rect2(Point2(), state_machine_draw->get_size()), accent, false); + } + int sep = 3 * EDSCALE; + + List<StringName> nodes; + state_machine->get_node_list(&nodes); + + node_rects.clear(); + Rect2 scroll_range(Point2(), state_machine_draw->get_size()); + + //snap lines + if (dragging_selected) { + + Vector2 from = (state_machine->get_node(selected_node)->get_position() * EDSCALE) + drag_ofs - state_machine->get_graph_offset() * EDSCALE; + if (snap_x != StringName()) { + Vector2 to = (state_machine->get_node(snap_x)->get_position() * EDSCALE) - state_machine->get_graph_offset() * EDSCALE; + state_machine_draw->draw_line(from, to, linecolor, 2); + } + if (snap_y != StringName()) { + Vector2 to = (state_machine->get_node(snap_y)->get_position() * EDSCALE) - state_machine->get_graph_offset() * EDSCALE; + state_machine_draw->draw_line(from, to, linecolor, 2); + } + } + + //pre pass nodes so we know the rectangles + for (List<StringName>::Element *E = nodes.front(); E; E = E->next()) { + + Ref<AnimationNode> anode = state_machine->get_node(E->get()); + String name = E->get(); + bool needs_editor = EditorNode::get_singleton()->item_has_editor(anode.ptr()); + Ref<StyleBox> sb = E->get() == selected_node ? style_selected : style; + + Size2 s = sb->get_minimum_size(); + int strsize = font->get_string_size(name).width; + s.width += strsize; + s.height += MAX(font->get_height(), play->get_height()); + s.width += sep + play->get_width(); + if (needs_editor) { + s.width += sep + edit->get_width(); + } + + Vector2 offset; + offset += anode->get_position() * EDSCALE; + if (selected_node == E->get() && dragging_selected) { + offset += drag_ofs; + } + offset -= s / 2; + offset = offset.floor(); + + //prepre rect + + NodeRect nr; + nr.node = Rect2(offset, s); + nr.node_name = E->get(); + + scroll_range = scroll_range.merge(nr.node); //merge with range + + //now scroll it to draw + nr.node.position -= state_machine->get_graph_offset() * EDSCALE; + + node_rects.push_back(nr); + } + + transition_lines.clear(); + + //draw conecting line for potential new transition + if (connecting) { + Vector2 from = (state_machine->get_node(connecting_from)->get_position() * EDSCALE) - state_machine->get_graph_offset() * EDSCALE; + Vector2 to; + if (connecting_to_node != StringName()) { + to = (state_machine->get_node(connecting_to_node)->get_position() * EDSCALE) - state_machine->get_graph_offset() * EDSCALE; + } else { + to = connecting_to; + } + + for (int i = 0; i < node_rects.size(); i++) { + if (node_rects[i].node_name == connecting_from) { + _clip_src_line_to_rect(from, to, node_rects[i].node); + } + if (node_rects[i].node_name == connecting_to_node) { + _clip_dst_line_to_rect(from, to, node_rects[i].node); + } + } + + _connection_draw(from, to, AnimationNodeStateMachineTransition::SwitchMode(transition_mode->get_selected()), true, false, false, false); + } + + Ref<Texture> tr_reference_icon = get_icon("TransitionImmediateBig", "EditorIcons"); + float tr_bidi_offset = int(tr_reference_icon->get_height() * 0.8); + + //draw transition lines + for (int i = 0; i < state_machine->get_transition_count(); i++) { + + TransitionLine tl; + tl.from_node = state_machine->get_transition_from(i); + Vector2 ofs_from = (dragging_selected && tl.from_node == selected_node) ? drag_ofs : Vector2(); + tl.from = (state_machine->get_node(tl.from_node)->get_position() * EDSCALE) + ofs_from - state_machine->get_graph_offset() * EDSCALE; + + tl.to_node = state_machine->get_transition_to(i); + Vector2 ofs_to = (dragging_selected && tl.to_node == selected_node) ? drag_ofs : Vector2(); + tl.to = (state_machine->get_node(tl.to_node)->get_position() * EDSCALE) + ofs_to - state_machine->get_graph_offset() * EDSCALE; + + Ref<AnimationNodeStateMachineTransition> tr = state_machine->get_transition(i); + tl.disabled = tr->is_disabled(); + tl.auto_advance = tr->has_auto_advance(); + tl.mode = tr->get_switch_mode(); + tl.width = tr_bidi_offset; + + if (state_machine->has_transition(tl.to_node, tl.from_node)) { //offset if same exists + Vector2 offset = -(tl.from - tl.to).normalized().tangent() * tr_bidi_offset; + tl.from += offset; + tl.to += offset; + } + + for (int i = 0; i < node_rects.size(); i++) { + if (node_rects[i].node_name == tl.from_node) { + _clip_src_line_to_rect(tl.from, tl.to, node_rects[i].node); + } + if (node_rects[i].node_name == tl.to_node) { + _clip_dst_line_to_rect(tl.from, tl.to, node_rects[i].node); + } + } + + bool selected = selected_transition_from == tl.from_node && selected_transition_to == tl.to_node; + + bool travel = false; + + if (blend_from == tl.from_node && current == tl.to_node) { + travel = true; + } + + if (travel_path.size()) { + + if (current == tl.from_node && travel_path[0] == tl.to_node) { + travel = true; + } else { + for (int j = 0; j < travel_path.size() - 1; j++) { + if (travel_path[j] == tl.from_node && travel_path[j + 1] == tl.to_node) { + travel = true; + break; + } + } + } + } + _connection_draw(tl.from, tl.to, tl.mode, !tl.disabled, selected, travel, tl.auto_advance); + + transition_lines.push_back(tl); + } + + //draw actual nodes + for (int i = 0; i < node_rects.size(); i++) { + + String name = node_rects[i].node_name; + Ref<AnimationNode> anode = state_machine->get_node(name); + bool needs_editor = EditorNode::get_singleton()->item_has_editor(anode.ptr()); + Ref<StyleBox> sb = name == selected_node ? style_selected : style; + int strsize = font->get_string_size(name).width; + + NodeRect &nr = node_rects[i]; + + Vector2 offset = nr.node.position; + int h = nr.node.size.height; + + //prepre rect + + //now scroll it to draw + state_machine_draw->draw_style_box(sb, nr.node); + + if (playing && (blend_from == name || current == name || travel_path.find(name) != -1)) { + state_machine_draw->draw_style_box(playing_overlay, nr.node); + } + + bool onstart = state_machine->get_start_node() == name; + if (onstart) { + state_machine_draw->draw_string(font, offset + Vector2(0, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("Start"), font_color); + } + + if (state_machine->get_end_node() == name) { + + int endofs = nr.node.size.x - font->get_string_size(TTR("End")).x; + state_machine_draw->draw_string(font, offset + Vector2(endofs, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("End"), font_color); + } + + offset.x += sb->get_offset().x; + + nr.play.position = offset + Vector2(0, (h - play->get_height()) / 2).floor(); + nr.play.size = play->get_size(); + + Ref<Texture> play_tex = onstart ? auto_play : play; + + if (over_node == name && over_node_what == 0) { + state_machine_draw->draw_texture(play_tex, nr.play.position, accent); + } else { + state_machine_draw->draw_texture(play_tex, nr.play.position); + } + offset.x += sep + play->get_width(); + + nr.name.position = offset + Vector2(0, (h - font->get_height()) / 2).floor(); + nr.name.size = Vector2(strsize, font->get_height()); + + state_machine_draw->draw_string(font, nr.name.position + Vector2(0, font->get_ascent()), name, font_color); + offset.x += strsize + sep; + + if (needs_editor) { + nr.edit.position = offset + Vector2(0, (h - edit->get_height()) / 2).floor(); + nr.edit.size = edit->get_size(); + + if (over_node == name && over_node_what == 1) { + state_machine_draw->draw_texture(edit, nr.edit.position, accent); + } else { + state_machine_draw->draw_texture(edit, nr.edit.position); + } + offset.x += sep + edit->get_width(); + } + } + + scroll_range = scroll_range.grow(200 * EDSCALE); + + //adjust scrollbars + updating = true; + h_scroll->set_min(scroll_range.position.x); + h_scroll->set_max(scroll_range.position.x + scroll_range.size.x); + h_scroll->set_page(state_machine_draw->get_size().x); + h_scroll->set_value(state_machine->get_graph_offset().x); + + v_scroll->set_min(scroll_range.position.y); + v_scroll->set_max(scroll_range.position.y + scroll_range.size.y); + v_scroll->set_page(state_machine_draw->get_size().y); + v_scroll->set_value(state_machine->get_graph_offset().y); + updating = false; + + state_machine_play_pos->update(); +} + +void AnimationNodeStateMachineEditor::_state_machine_pos_draw() { + + if (!state_machine->is_playing()) + return; + + int idx = -1; + for (int i = 0; node_rects.size(); i++) { + if (node_rects[i].node_name == state_machine->get_current_node()) { + idx = i; + break; + } + } + + if (idx == -1) + return; + + NodeRect &nr = node_rects[idx]; + + Vector2 from; + from.x = nr.play.position.x; + from.y = (nr.play.position.y + nr.play.size.y + nr.node.position.y + nr.node.size.y) * 0.5; + + Vector2 to; + if (nr.edit.size.x) { + to.x = nr.edit.position.x + nr.edit.size.x; + } else { + to.x = nr.name.position.x + nr.name.size.x; + } + to.y = from.y; + + float len = MAX(0.0001, state_machine->get_current_length()); + + float pos = CLAMP(state_machine->get_current_play_pos(), 0, len); + float c = pos / len; + Color fg = get_color("font_color", "Label"); + Color bg = fg; + bg.a *= 0.3; + + state_machine_play_pos->draw_line(from, to, bg, 2); + + to = from.linear_interpolate(to, c); + + state_machine_play_pos->draw_line(from, to, fg, 2); +} + +void AnimationNodeStateMachineEditor::_update_graph() { + + if (updating) + return; + + updating = true; + + if (state_machine->get_parent().is_valid()) { + goto_parent_hbox->show(); + } else { + goto_parent_hbox->hide(); + } + + state_machine_draw->update(); + + updating = false; +} + +void AnimationNodeStateMachineEditor::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + error_panel->add_style_override("panel", get_stylebox("bg", "Tree")); + error_label->add_color_override("font_color", get_color("error_color", "Editor")); + panel->add_style_override("panel", get_stylebox("bg", "Tree")); + goto_parent->set_icon(get_icon("MoveUp", "EditorIcons")); + + tool_select->set_icon(get_icon("ToolSelect", "EditorIcons")); + tool_create->set_icon(get_icon("ToolAddNode", "EditorIcons")); + tool_connect->set_icon(get_icon("ToolConnect", "EditorIcons")); + + transition_mode->clear(); + transition_mode->add_icon_item(get_icon("TransitionImmediate", "EditorIcons"), TTR("Immediate")); + transition_mode->add_icon_item(get_icon("TransitionSync", "EditorIcons"), TTR("Sync")); + transition_mode->add_icon_item(get_icon("TransitionEnd", "EditorIcons"), TTR("At End")); + + //force filter on those, so they deform better + get_icon("TransitionImmediateBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + get_icon("TransitionEndBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + get_icon("TransitionSyncBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + get_icon("TransitionImmediateAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + get_icon("TransitionEndAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + get_icon("TransitionSyncAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); + + tool_erase->set_icon(get_icon("Remove", "EditorIcons")); + tool_autoplay->set_icon(get_icon("AutoPlay", "EditorIcons")); + tool_end->set_icon(get_icon("AutoEnd", "EditorIcons")); + + play_mode->clear(); + play_mode->add_icon_item(get_icon("PlayTravel", "EditorIcons"), TTR("Travel")); + play_mode->add_icon_item(get_icon("Play", "EditorIcons"), TTR("Immediate")); + } + + if (p_what == NOTIFICATION_PROCESS) { + + String error; + + if (error_time > 0) { + error = error_text; + error_time -= get_process_delta_time(); + } else if (!state_machine->get_tree()) { + error = TTR("StateMachine does not belong to an AnimationTree node."); + } else if (!state_machine->get_tree()->is_active()) { + error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails."); + } else if (state_machine->get_tree()->is_state_invalid()) { + error = state_machine->get_tree()->get_invalid_state_reason(); + } else if (state_machine->get_parent().is_valid() && state_machine->get_parent()->is_class("AnimationNodeStateMachine")) { + if (state_machine->get_start_node() == StringName() || state_machine->get_end_node() == StringName()) { + error = TTR("Start and end nodes are needed for a sub-transition."); + } + } + + if (error != error_label->get_text()) { + error_label->set_text(error); + if (error != String()) { + error_panel->show(); + } else { + error_panel->hide(); + } + } + + for (int i = 0; i < transition_lines.size(); i++) { + int tidx = -1; + for (int j = 0; j < state_machine->get_transition_count(); j++) { + if (transition_lines[i].from_node == state_machine->get_transition_from(j) && transition_lines[i].to_node == state_machine->get_transition_to(j)) { + tidx = j; + break; + } + } + + if (tidx == -1) { //missing transition, should redraw + state_machine_draw->update(); + break; + } + + if (transition_lines[i].disabled != state_machine->get_transition(tidx)->is_disabled()) { + state_machine_draw->update(); + break; + } + + if (transition_lines[i].auto_advance != state_machine->get_transition(tidx)->has_auto_advance()) { + state_machine_draw->update(); + break; + } + + if (transition_lines[i].mode != state_machine->get_transition(tidx)->get_switch_mode()) { + state_machine_draw->update(); + break; + } + } + + bool same_travel_path = true; + Vector<StringName> tp = state_machine->get_travel_path(); + + { + + if (last_travel_path.size() != tp.size()) { + same_travel_path = false; + } else { + for (int i = 0; i < last_travel_path.size(); i++) { + if (last_travel_path[i] != tp[i]) { + same_travel_path = false; + break; + } + } + } + } + + //update if travel state changed + if (!same_travel_path || last_active != state_machine->is_playing() || last_current_node != state_machine->get_current_node() || last_blend_from_node != state_machine->get_blend_from_node()) { + + state_machine_draw->update(); + last_travel_path = tp; + last_current_node = state_machine->get_current_node(); + last_active = state_machine->is_playing(); + last_blend_from_node = state_machine->get_blend_from_node(); + state_machine_play_pos->update(); + } + + if (last_play_pos != state_machine->get_current_play_pos()) { + + last_play_pos = state_machine->get_current_play_pos(); + state_machine_play_pos->update(); + } + } + + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + over_node = StringName(); + } +} + +void AnimationNodeStateMachineEditor::_open_editor(const String &p_name) { + Ref<AnimationNode> an = state_machine->get_node(p_name); + ERR_FAIL_COND(!an.is_valid()); + EditorNode::get_singleton()->edit_item(an.ptr()); +} + +void AnimationNodeStateMachineEditor::_goto_parent() { + + EditorNode::get_singleton()->edit_item(state_machine->get_parent().ptr()); +} + +void AnimationNodeStateMachineEditor::_removed_from_graph() { + EditorNode::get_singleton()->edit_item(NULL); +} + +void AnimationNodeStateMachineEditor::_name_edited(const String &p_text) { + + String new_name = p_text; + + ERR_FAIL_COND(new_name == "" || new_name.find(".") != -1 || new_name.find("/") != -1) + + ERR_FAIL_COND(new_name == prev_name); + + String base_name = new_name; + int base = 1; + String name = base_name; + while (state_machine->has_node(name)) { + base++; + name = base_name + " " + itos(base); + } + + updating = true; + undo_redo->create_action("Node Renamed"); + undo_redo->add_do_method(state_machine.ptr(), "rename_node", prev_name, name); + undo_redo->add_undo_method(state_machine.ptr(), "rename_node", name, prev_name); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + + state_machine_draw->update(); + + name_edit->hide(); +} + +void AnimationNodeStateMachineEditor::_scroll_changed(double) { + if (updating) + return; + + state_machine->set_graph_offset(Vector2(h_scroll->get_value(), v_scroll->get_value())); + state_machine_draw->update(); +} + +void AnimationNodeStateMachineEditor::_erase_selected() { + + if (selected_node != StringName() && state_machine->has_node(selected_node)) { + updating = true; + undo_redo->create_action("Node Removed"); + undo_redo->add_do_method(state_machine.ptr(), "remove_node", selected_node); + undo_redo->add_undo_method(state_machine.ptr(), "add_node", selected_node, state_machine->get_node(selected_node)); + for (int i = 0; i < state_machine->get_transition_count(); i++) { + String from = state_machine->get_transition_from(i); + String to = state_machine->get_transition_to(i); + if (from == selected_node || to == selected_node) { + undo_redo->add_undo_method(state_machine.ptr(), "add_transition", from, to, state_machine->get_transition(i)); + } + } + if (String(state_machine->get_start_node()) == selected_node) { + undo_redo->add_undo_method(state_machine.ptr(), "set_start_node", selected_node); + } + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + selected_node = StringName(); + } + + if (selected_transition_to != StringName() && selected_transition_from != StringName() && state_machine->has_transition(selected_transition_from, selected_transition_to)) { + + Ref<AnimationNodeStateMachineTransition> tr = state_machine->get_transition(state_machine->find_transition(selected_transition_from, selected_transition_to)); + updating = true; + undo_redo->create_action("Transition Removed"); + undo_redo->add_do_method(state_machine.ptr(), "remove_transition", selected_transition_from, selected_transition_to); + undo_redo->add_undo_method(state_machine.ptr(), "add_transition", selected_transition_from, selected_transition_to, tr); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + selected_transition_from = StringName(); + selected_transition_to = StringName(); + } + + state_machine_draw->update(); +} + +void AnimationNodeStateMachineEditor::_autoplay_selected() { + + if (selected_node != StringName() && state_machine->has_node(selected_node)) { + + StringName new_start_node; + if (state_machine->get_start_node() == selected_node) { //toggle it + new_start_node = StringName(); + } else { + new_start_node = selected_node; + } + + updating = true; + undo_redo->create_action("Set Start Node (Autoplay)"); + undo_redo->add_do_method(state_machine.ptr(), "set_start_node", new_start_node); + undo_redo->add_undo_method(state_machine.ptr(), "set_start_node", state_machine->get_start_node()); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + state_machine_draw->update(); + } +} + +void AnimationNodeStateMachineEditor::_end_selected() { + + if (selected_node != StringName() && state_machine->has_node(selected_node)) { + + StringName new_end_node; + if (state_machine->get_end_node() == selected_node) { //toggle it + new_end_node = StringName(); + } else { + new_end_node = selected_node; + } + + updating = true; + undo_redo->create_action("Set Start Node (Autoplay)"); + undo_redo->add_do_method(state_machine.ptr(), "set_end_node", new_end_node); + undo_redo->add_undo_method(state_machine.ptr(), "set_end_node", state_machine->get_end_node()); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->commit_action(); + updating = false; + state_machine_draw->update(); + } +} +void AnimationNodeStateMachineEditor::_update_mode() { + + if (tool_select->is_pressed()) { + tool_erase_hb->show(); + tool_erase->set_disabled(selected_node == StringName() && selected_transition_from == StringName() && selected_transition_to == StringName()); + tool_autoplay->set_disabled(selected_node == StringName()); + tool_end->set_disabled(selected_node == StringName()); + } else { + tool_erase_hb->hide(); + } +} + +void AnimationNodeStateMachineEditor::_bind_methods() { + + ClassDB::bind_method("_state_machine_gui_input", &AnimationNodeStateMachineEditor::_state_machine_gui_input); + ClassDB::bind_method("_state_machine_draw", &AnimationNodeStateMachineEditor::_state_machine_draw); + ClassDB::bind_method("_state_machine_pos_draw", &AnimationNodeStateMachineEditor::_state_machine_pos_draw); + ClassDB::bind_method("_update_graph", &AnimationNodeStateMachineEditor::_update_graph); + + ClassDB::bind_method("_add_menu_type", &AnimationNodeStateMachineEditor::_add_menu_type); + ClassDB::bind_method("_add_animation_type", &AnimationNodeStateMachineEditor::_add_animation_type); + + ClassDB::bind_method("_name_edited", &AnimationNodeStateMachineEditor::_name_edited); + + ClassDB::bind_method("_goto_parent", &AnimationNodeStateMachineEditor::_goto_parent); + ClassDB::bind_method("_removed_from_graph", &AnimationNodeStateMachineEditor::_removed_from_graph); + + ClassDB::bind_method("_open_editor", &AnimationNodeStateMachineEditor::_open_editor); + ClassDB::bind_method("_scroll_changed", &AnimationNodeStateMachineEditor::_scroll_changed); + + ClassDB::bind_method("_erase_selected", &AnimationNodeStateMachineEditor::_erase_selected); + ClassDB::bind_method("_autoplay_selected", &AnimationNodeStateMachineEditor::_autoplay_selected); + ClassDB::bind_method("_end_selected", &AnimationNodeStateMachineEditor::_end_selected); + ClassDB::bind_method("_update_mode", &AnimationNodeStateMachineEditor::_update_mode); +} + +AnimationNodeStateMachineEditor *AnimationNodeStateMachineEditor::singleton = NULL; + +AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { + + singleton = this; + updating = false; + + HBoxContainer *top_hb = memnew(HBoxContainer); + add_child(top_hb); + + goto_parent_hbox = memnew(HBoxContainer); + goto_parent = memnew(ToolButton); + goto_parent->connect("pressed", this, "_goto_parent", varray(), CONNECT_DEFERRED); + goto_parent_hbox->add_child(goto_parent); + goto_parent_hbox->add_child(memnew(VSeparator)); + top_hb->add_child(goto_parent_hbox); + + Ref<ButtonGroup> bg; + bg.instance(); + + tool_select = memnew(ToolButton); + top_hb->add_child(tool_select); + tool_select->set_toggle_mode(true); + tool_select->set_button_group(bg); + tool_select->set_pressed(true); + tool_select->set_tooltip(TTR("Select and move nodes.\nRMB to add new nodes.\nShift+LMB to create connections.")); + tool_select->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + + tool_create = memnew(ToolButton); + top_hb->add_child(tool_create); + tool_create->set_toggle_mode(true); + tool_create->set_button_group(bg); + tool_create->set_tooltip(TTR("Create new nodes.")); + tool_create->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + + tool_connect = memnew(ToolButton); + top_hb->add_child(tool_connect); + tool_connect->set_toggle_mode(true); + tool_connect->set_button_group(bg); + tool_connect->set_tooltip(TTR("Connect nodes.")); + tool_connect->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + + tool_erase_hb = memnew(HBoxContainer); + top_hb->add_child(tool_erase_hb); + tool_erase_hb->add_child(memnew(VSeparator)); + tool_erase = memnew(ToolButton); + tool_erase->set_tooltip(TTR("Remove selected node or transition")); + tool_erase_hb->add_child(tool_erase); + tool_erase->connect("pressed", this, "_erase_selected"); + tool_erase->set_disabled(true); + + tool_erase_hb->add_child(memnew(VSeparator)); + + tool_autoplay = memnew(ToolButton); + tool_autoplay->set_tooltip(TTR("Toggle autoplay this animation on start, restart or seek to zero.")); + tool_erase_hb->add_child(tool_autoplay); + tool_autoplay->connect("pressed", this, "_autoplay_selected"); + tool_autoplay->set_disabled(true); + + tool_end = memnew(ToolButton); + tool_end->set_tooltip(TTR("Set the end animation. This is useful for sub-transitions.")); + tool_erase_hb->add_child(tool_end); + tool_end->connect("pressed", this, "_end_selected"); + tool_end->set_disabled(true); + + top_hb->add_child(memnew(VSeparator)); + top_hb->add_child(memnew(Label(TTR("Transition: ")))); + transition_mode = memnew(OptionButton); + top_hb->add_child(transition_mode); + + top_hb->add_spacer(); + + top_hb->add_child(memnew(Label("Play Mode:"))); + play_mode = memnew(OptionButton); + top_hb->add_child(play_mode); + + GridContainer *main_grid = memnew(GridContainer); + main_grid->set_columns(2); + add_child(main_grid); + main_grid->set_v_size_flags(SIZE_EXPAND_FILL); + + panel = memnew(PanelContainer); + panel->set_clip_contents(true); + main_grid->add_child(panel); + panel->set_h_size_flags(SIZE_EXPAND_FILL); + + state_machine_draw = memnew(Control); + state_machine_draw->connect("gui_input", this, "_state_machine_gui_input"); + state_machine_draw->connect("draw", this, "_state_machine_draw"); + state_machine_draw->set_focus_mode(FOCUS_ALL); + + state_machine_play_pos = memnew(Control); + state_machine_draw->add_child(state_machine_play_pos); + state_machine_play_pos->set_mouse_filter(MOUSE_FILTER_PASS); //pass all to parent + state_machine_play_pos->set_anchors_and_margins_preset(PRESET_WIDE); + state_machine_play_pos->connect("draw", this, "_state_machine_pos_draw"); + + panel->add_child(state_machine_draw); + panel->set_v_size_flags(SIZE_EXPAND_FILL); + + v_scroll = memnew(VScrollBar); + main_grid->add_child(v_scroll); + v_scroll->connect("value_changed", this, "_scroll_changed"); + + h_scroll = memnew(HScrollBar); + main_grid->add_child(h_scroll); + h_scroll->connect("value_changed", this, "_scroll_changed"); + + main_grid->add_child(memnew(Control)); //empty bottom right + + error_panel = memnew(PanelContainer); + add_child(error_panel); + error_label = memnew(Label); + error_panel->add_child(error_label); + error_label->set_text("eh"); + + undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + set_custom_minimum_size(Size2(0, 300 * EDSCALE)); + + menu = memnew(PopupMenu); + add_child(menu); + menu->connect("index_pressed", this, "_add_menu_type"); + + animations_menu = memnew(PopupMenu); + menu->add_child(animations_menu); + animations_menu->set_name("animations"); + animations_menu->connect("index_pressed", this, "_add_animation_type"); + + name_edit = memnew(LineEdit); + state_machine_draw->add_child(name_edit); + name_edit->hide(); + name_edit->connect("text_entered", this, "_name_edited"); + name_edit->set_as_toplevel(true); + + over_text = false; + + over_node_what = -1; + dragging_selected_attempt = false; + connecting = false; + + last_active = false; + + error_time = 0; +} + +void AnimationNodeStateMachineEditorPlugin::edit(Object *p_object) { + + anim_tree_editor->edit(Object::cast_to<AnimationNodeStateMachine>(p_object)); +} + +bool AnimationNodeStateMachineEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class("AnimationNodeStateMachine"); +} + +void AnimationNodeStateMachineEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + //editor->hide_animation_player_editors(); + //editor->animation_panel_make_visible(true); + button->show(); + editor->make_bottom_panel_item_visible(anim_tree_editor); + anim_tree_editor->set_process(true); + } else { + + if (anim_tree_editor->is_visible_in_tree()) + editor->hide_bottom_panel(); + button->hide(); + anim_tree_editor->set_process(false); + } +} + +AnimationNodeStateMachineEditorPlugin::AnimationNodeStateMachineEditorPlugin(EditorNode *p_node) { + + editor = p_node; + anim_tree_editor = memnew(AnimationNodeStateMachineEditor); + anim_tree_editor->set_custom_minimum_size(Size2(0, 300)); + + button = editor->add_bottom_panel_item(TTR("StateMachine"), anim_tree_editor); + button->hide(); +} + +AnimationNodeStateMachineEditorPlugin::~AnimationNodeStateMachineEditorPlugin() { +} diff --git a/editor/plugins/animation_state_machine_editor.h b/editor/plugins/animation_state_machine_editor.h new file mode 100644 index 0000000000..efd3de7415 --- /dev/null +++ b/editor/plugins/animation_state_machine_editor.h @@ -0,0 +1,167 @@ +#ifndef ANIMATION_STATE_MACHINE_EDITOR_H +#define ANIMATION_STATE_MACHINE_EDITOR_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/property_editor.h" +#include "scene/animation/animation_node_state_machine.h" +#include "scene/gui/button.h" +#include "scene/gui/graph_edit.h" +#include "scene/gui/popup.h" +#include "scene/gui/tree.h" + +class AnimationNodeStateMachineEditor : public VBoxContainer { + + GDCLASS(AnimationNodeStateMachineEditor, VBoxContainer); + + Ref<AnimationNodeStateMachine> state_machine; + + ToolButton *tool_select; + ToolButton *tool_create; + ToolButton *tool_connect; + LineEdit *name_edit; + + HBoxContainer *tool_erase_hb; + ToolButton *tool_erase; + ToolButton *tool_autoplay; + ToolButton *tool_end; + + OptionButton *transition_mode; + OptionButton *play_mode; + + HBoxContainer *goto_parent_hbox; + ToolButton *goto_parent; + + PanelContainer *panel; + + StringName selected_node; + + HScrollBar *h_scroll; + VScrollBar *v_scroll; + + Control *state_machine_draw; + Control *state_machine_play_pos; + + PanelContainer *error_panel; + Label *error_label; + + bool updating; + + UndoRedo *undo_redo; + + static AnimationNodeStateMachineEditor *singleton; + + void _state_machine_gui_input(const Ref<InputEvent> &p_event); + void _connection_draw(const Vector2 &p_from, const Vector2 &p_to, AnimationNodeStateMachineTransition::SwitchMode p_mode, bool p_enabled, bool p_selected, bool p_travel, bool p_auto_advance); + void _state_machine_draw(); + void _state_machine_pos_draw(); + + void _update_graph(); + + PopupMenu *menu; + PopupMenu *animations_menu; + Vector<String> animations_to_add; + + Vector2 add_node_pos; + + bool dragging_selected_attempt; + bool dragging_selected; + Vector2 drag_from; + Vector2 drag_ofs; + StringName snap_x; + StringName snap_y; + + bool connecting; + StringName connecting_from; + Vector2 connecting_to; + StringName connecting_to_node; + + void _add_menu_type(int p_index); + void _add_animation_type(int p_index); + + void _goto_parent(); + + void _removed_from_graph(); + + struct NodeRect { + StringName node_name; + Rect2 node; + Rect2 play; + Rect2 name; + Rect2 edit; + }; + + Vector<NodeRect> node_rects; + + struct TransitionLine { + StringName from_node; + StringName to_node; + Vector2 from; + Vector2 to; + AnimationNodeStateMachineTransition::SwitchMode mode; + bool disabled; + bool auto_advance; + float width; + }; + + Vector<TransitionLine> transition_lines; + + StringName selected_transition_from; + StringName selected_transition_to; + + bool over_text; + StringName over_node; + int over_node_what; + + String prev_name; + void _name_edited(const String &p_text); + void _open_editor(const String &p_name); + void _scroll_changed(double); + + void _clip_src_line_to_rect(Vector2 &r_from, Vector2 &r_to, const Rect2 &p_rect); + void _clip_dst_line_to_rect(Vector2 &r_from, Vector2 &r_to, const Rect2 &p_rect); + + void _erase_selected(); + void _update_mode(); + void _autoplay_selected(); + void _end_selected(); + + bool last_active; + StringName last_blend_from_node; + StringName last_current_node; + Vector<StringName> last_travel_path; + float last_play_pos; + + float error_time; + String error_text; + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static AnimationNodeStateMachineEditor *get_singleton() { return singleton; } + void edit(AnimationNodeStateMachine *p_state_machine); + AnimationNodeStateMachineEditor(); +}; + +class AnimationNodeStateMachineEditorPlugin : public EditorPlugin { + + GDCLASS(AnimationNodeStateMachineEditorPlugin, EditorPlugin); + + AnimationNodeStateMachineEditor *anim_tree_editor; + EditorNode *editor; + Button *button; + +public: + virtual String get_name() const { return "StateMachine"; } + 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); + + AnimationNodeStateMachineEditorPlugin(EditorNode *p_node); + ~AnimationNodeStateMachineEditorPlugin(); +}; + +#endif // ANIMATION_STATE_MACHINE_EDITOR_H diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index d595d4dd98..505dd4ab76 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -234,6 +234,7 @@ void EditorAssetLibraryItemDescription::_preview_click(int p_id) { if (!preview_images[i].is_video) { if (preview_images[i].image.is_valid()) { preview->set_texture(preview_images[i].image); + minimum_size_changed(); } } else { _link_click(preview_images[i].video_link); diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 488f687515..7c4cd6cb3d 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -30,7 +30,6 @@ #include "canvas_item_editor_plugin.h" -#include "editor/animation_editor.h" #include "editor/editor_node.h" #include "editor/editor_settings.h" #include "editor/plugins/animation_player_editor_plugin.h" @@ -365,7 +364,7 @@ Object *CanvasItemEditor::_get_editor_data(Object *p_what) { void CanvasItemEditor::_keying_changed() { - if (AnimationPlayerEditor::singleton->get_key_editor()->is_visible_in_tree()) + if (AnimationPlayerEditor::singleton->get_track_editor()->is_visible_in_tree()) animation_hb->show(); else animation_hb->hide(); @@ -1984,32 +1983,53 @@ bool CanvasItemEditor::_gui_input_hover(const Ref<InputEvent> &p_event) { 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; - } - } - } else { - changed = true; - } + Point2 click = transform.affine_inverse().xform(m->get_position()); - if (changed) { - hovering_results = hovering_results_tmp; - viewport->update(); + // Checks if the hovered items changed, update the viewport if so + Vector<_SelectResult> hovering_results_items; + _get_canvas_items_at_pos(click, hovering_results_items); + hovering_results_items.sort(); + + // Compute the nodes names and icon position + Vector<_HoverResult> hovering_results_tmp; + for (int i = 0; i < hovering_results_items.size(); i++) { + CanvasItem *canvas_item = hovering_results_items[i].item; + + if (canvas_item->_edit_use_rect()) + continue; + + _HoverResult hover_result; + hover_result.position = canvas_item->get_global_transform_with_canvas().get_origin(); + if (has_icon(canvas_item->get_class(), "EditorIcons")) + hover_result.icon = get_icon(canvas_item->get_class(), "EditorIcons"); + else + hover_result.icon = get_icon("Object", "EditorIcons"); + hover_result.name = canvas_item->get_name(); + + hovering_results_tmp.push_back(hover_result); + } + + // Check if changed, if so, update. + bool changed = false; + if (hovering_results_tmp.size() == hovering_results.size()) { + for (int i = 0; i < hovering_results_tmp.size(); i++) { + _HoverResult a = hovering_results_tmp[i]; + _HoverResult b = hovering_results[i]; + if (a.icon != b.icon || a.name != b.name || a.position != b.position) { + changed = true; + break; + } } + } else { + changed = true; + } - return true; + if (changed) { + hovering_results = hovering_results_tmp; + viewport->update(); } + + return true; } return false; @@ -2689,6 +2709,9 @@ void CanvasItemEditor::_draw_bones() { continue; Node2D *from_node = Object::cast_to<Node2D>(ObjectDB::get_instance(E->key().from)); + if (!from_node->is_visible_in_tree()) + continue; + Vector<Color> colors; if (from_node->has_meta("_edit_ik_")) { colors.push_back(bone_ik_color); @@ -2767,26 +2790,15 @@ 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; + Ref<Texture> node_icon = hovering_results[i].icon; + String node_name = hovering_results[i].name; - 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); + Point2 pos = transform.xform(hovering_results[i].position) - 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))) { @@ -2796,8 +2808,10 @@ void CanvasItemEditor::_draw_hover() { previous_rects.push_back(Rect2(pos, item_size)); - // Draw the node icon and name + // Draw icon viewport->draw_texture(node_icon, pos, Color(1.0, 1.0, 1.0, 0.5)); + + // Draw name viewport->draw_string(font, pos + Point2(node_icon->get_size().x + 4, item_size.y - 3), node_name, Color(1.0, 1.0, 1.0, 0.5)); } } @@ -3077,7 +3091,7 @@ void CanvasItemEditor::_notification(int p_what) { select_sb->set_default_margin(Margin(i), 4); } - AnimationPlayerEditor::singleton->get_key_editor()->connect("visibility_changed", this, "_keying_changed"); + AnimationPlayerEditor::singleton->get_track_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()); @@ -3689,11 +3703,11 @@ void CanvasItemEditor::_popup_callback(int p_op) { Node2D *n2d = Object::cast_to<Node2D>(canvas_item); if (key_pos) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), existing); if (key_rot) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(n2d, "rotation_degrees", Math::rad2deg(n2d->get_rotation()), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "rotation_degrees", Math::rad2deg(n2d->get_rotation()), existing); if (key_scale) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(n2d, "scale", n2d->get_scale(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(n2d, "scale", n2d->get_scale(), existing); if (n2d->has_meta("_edit_bone_") && n2d->get_parent_item()) { //look for an IK chain @@ -3720,11 +3734,11 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List<Node2D *>::Element *F = ik_chain.front(); F; F = F->next()) { if (key_pos) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(F->get(), "position", F->get()->get_position(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "position", F->get()->get_position(), existing); if (key_rot) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(F->get(), "rotation_degrees", Math::rad2deg(F->get()->get_rotation()), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "rotation_degrees", Math::rad2deg(F->get()->get_rotation()), existing); if (key_scale) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(F->get(), "scale", F->get()->get_scale(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(F->get(), "scale", F->get()->get_scale(), existing); } } } @@ -3734,11 +3748,11 @@ void CanvasItemEditor::_popup_callback(int p_op) { Control *ctrl = Object::cast_to<Control>(canvas_item); if (key_pos) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), existing); if (key_rot) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation_degrees(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation_degrees(), existing); if (key_scale) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), existing); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), existing); } } @@ -3834,7 +3848,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { ctrl->set_position(Point2()); /* if (key_scale) - AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl,"rect/size",ctrl->get_size()); + AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl,"rect/size",ctrl->get_size()); */ } } @@ -4336,13 +4350,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(snap_button); snap_button->set_toggle_mode(true); 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)); + snap_button->set_tooltip(TTR("Toggle snapping.")); + snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_snap", TTR("Use Snap"), KEY_MASK_SHIFT | KEY_S)); snap_config_menu = memnew(MenuButton); hb->add_child(snap_config_menu); snap_config_menu->set_h_size_flags(SIZE_SHRINK_END); - snap_config_menu->set_tooltip(TTR("Snapping options")); + snap_config_menu->set_tooltip(TTR("Snapping Options")); PopupMenu *p = snap_config_menu->get_popup(); p->connect("id_pressed", this, "_popup_callback"); diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 4d2af11303..adc4010f39 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -257,9 +257,15 @@ class CanvasItemEditor : public VBoxContainer { return has_z && p_rr.has_z ? p_rr.z_index < z_index : p_rr.has_z; } }; - Vector<_SelectResult> selection_results; - Vector<_SelectResult> hovering_results; + + struct _HoverResult { + + Point2 position; + Ref<Texture> icon; + String name; + }; + Vector<_HoverResult> hovering_results; struct BoneList { diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index d76c515c1f..0d25b3685a 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -37,6 +37,7 @@ #include "io/resource_loader.h" #include "os/os.h" #include "scene/resources/bit_mask.h" +#include "scene/resources/dynamic_font.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" @@ -96,6 +97,7 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from) { if (img.is_null() || img->empty()) return Ref<Texture>(); + img = img->duplicate(); img->clear_mipmaps(); int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); @@ -552,274 +554,92 @@ EditorScriptPreviewPlugin::EditorScriptPreviewPlugin() { } /////////////////////////////////////////////////////////////////// -// FIXME: Needs to be rewritten for AudioStream in Godot 3.0+ -#if 0 -bool EditorSamplePreviewPlugin::handles(const String& p_type) const { +bool EditorAudioStreamPreviewPlugin::handles(const String &p_type) const { - return ClassDB::is_parent_class(p_type,"Sample"); + return ClassDB::is_parent_class(p_type, "AudioStream"); } -Ref<Texture> EditorSamplePreviewPlugin::generate(const RES& p_from) { - - Ref<Sample> smp =p_from; - ERR_FAIL_COND_V(smp.is_null(),Ref<Texture>()); +Ref<Texture> EditorAudioStreamPreviewPlugin::generate(const RES &p_from) { + Ref<AudioStream> stream = p_from; + ERR_FAIL_COND_V(stream.is_null(), Ref<Texture>()); int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); - thumbnail_size*=EDSCALE; + thumbnail_size *= EDSCALE; PoolVector<uint8_t> img; int w = thumbnail_size; int h = thumbnail_size; - img.resize(w*h*3); + img.resize(w * h * 3); PoolVector<uint8_t>::Write imgdata = img.write(); - uint8_t * imgw = imgdata.ptr(); - PoolVector<uint8_t> data = smp->get_data(); - PoolVector<uint8_t>::Read sampledata = data.read(); - const uint8_t *sdata=sampledata.ptr(); + uint8_t *imgw = imgdata.ptr(); - bool stereo = smp->is_stereo(); - bool _16=smp->get_format()==Sample::FORMAT_PCM16; - int len = smp->get_length(); + Ref<AudioStreamPlayback> playback = stream->instance_playback(); - if (len<1) - return Ref<Texture>(); + float len_s = stream->get_length(); + if (len_s == 0) { + len_s = 60; //one minute audio if no length specified + } + int frame_length = AudioServer::get_singleton()->get_mix_rate() * len_s; - if (smp->get_format()==Sample::FORMAT_IMA_ADPCM) { - - struct IMA_ADPCM_State { - - int16_t step_index; - int32_t predictor; - /* values at loop point */ - int16_t loop_step_index; - int32_t loop_predictor; - int32_t last_nibble; - int32_t loop_pos; - int32_t window_ofs; - const uint8_t *ptr; - } ima_adpcm; - - ima_adpcm.step_index=0; - ima_adpcm.predictor=0; - ima_adpcm.loop_step_index=0; - ima_adpcm.loop_predictor=0; - ima_adpcm.last_nibble=-1; - ima_adpcm.loop_pos=0x7FFFFFFF; - ima_adpcm.window_ofs=0; - ima_adpcm.ptr=NULL; - - - for(int i=0;i<w;i++) { - - float max[2]={-1e10,-1e10}; - float min[2]={1e10,1e10}; - int from = i*len/w; - int to = (i+1)*len/w; - if (to>=len) - to=len-1; - - for(int j=from;j<to;j++) { - - while(j>ima_adpcm.last_nibble) { - - static const int16_t _ima_adpcm_step_table[89] = { - 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, - 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, - 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, - 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, - 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, - 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, - 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, - 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, - 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 - }; - - static const int8_t _ima_adpcm_index_table[16] = { - -1, -1, -1, -1, 2, 4, 6, 8, - -1, -1, -1, -1, 2, 4, 6, 8 - }; - - int16_t nibble,diff,step; - - ima_adpcm.last_nibble++; - const uint8_t *src_ptr=sdata; - - int ofs = ima_adpcm.last_nibble>>1; - - if (stereo) - ofs*=2; - - - nibble = (ima_adpcm.last_nibble&1)? - (src_ptr[ofs]>>4):(src_ptr[ofs]&0xF); - step=_ima_adpcm_step_table[ima_adpcm.step_index]; - - ima_adpcm.step_index += _ima_adpcm_index_table[nibble]; - if (ima_adpcm.step_index<0) - ima_adpcm.step_index=0; - if (ima_adpcm.step_index>88) - ima_adpcm.step_index=88; - - diff = step >> 3 ; - if (nibble & 1) - diff += step >> 2 ; - if (nibble & 2) - diff += step >> 1 ; - if (nibble & 4) - diff += step ; - if (nibble & 8) - diff = -diff ; - - ima_adpcm.predictor+=diff; - if (ima_adpcm.predictor<-0x8000) - ima_adpcm.predictor=-0x8000; - else if (ima_adpcm.predictor>0x7FFF) - ima_adpcm.predictor=0x7FFF; - - - /* store loop if there */ - if (ima_adpcm.last_nibble==ima_adpcm.loop_pos) { - - ima_adpcm.loop_step_index = ima_adpcm.step_index; - ima_adpcm.loop_predictor = ima_adpcm.predictor; - } + Vector<AudioFrame> frames; + frames.resize(frame_length); - } + playback->start(); + playback->mix(frames.ptrw(), 1, frames.size()); + playback->stop(); - float v=ima_adpcm.predictor/32767.0; - if (v>max[0]) - max[0]=v; - if (v<min[0]) - min[0]=v; - } - max[0]*=0.8; - min[0]*=0.8; - - for(int j=0;j<h;j++) { - float v = (j/(float)h) * 2.0 - 1.0; - uint8_t* imgofs = &imgw[(uint64_t(j)*w+i)*3]; - if (v>min[0] && v<max[0]) { - imgofs[0]=255; - imgofs[1]=150; - imgofs[2]=80; - } else { - imgofs[0]=0; - imgofs[1]=0; - imgofs[2]=0; - } - } - } - } else { - for(int i=0;i<w;i++) { - // i trust gcc will optimize this loop - float max[2]={-1e10,-1e10}; - float min[2]={1e10,1e10}; - int c=stereo?2:1; - int from = uint64_t(i)*len/w; - int to = (uint64_t(i)+1)*len/w; - if (to>=len) - to=len-1; - - if (_16) { - const int16_t*src =(const int16_t*)sdata; - - for(int j=0;j<c;j++) { - - for(int k=from;k<=to;k++) { - - float v = src[uint64_t(k)*c+j]/32768.0; - if (v>max[j]) - max[j]=v; - if (v<min[j]) - min[j]=v; - } + for (int i = 0; i < w; i++) { - } - } else { - - const int8_t*src =(const int8_t*)sdata; + float max = -1000; + float min = 1000; + int from = uint64_t(i) * frame_length / w; + int to = uint64_t(i + 1) * frame_length / w; + to = MIN(to, frame_length); + from = MIN(from, frame_length - 1); + if (to == from) { + to = from + 1; + } - for(int j=0;j<c;j++) { + for (int j = from; j < to; j++) { - for(int k=from;k<=to;k++) { + max = MAX(max, frames[j].l); + max = MAX(max, frames[j].r); - float v = src[uint64_t(k)*c+j]/128.0; - if (v>max[j]) - max[j]=v; - if (v<min[j]) - min[j]=v; - } + min = MIN(min, frames[j].l); + min = MIN(min, frames[j].r); + } - } - } + int pfrom = CLAMP((min * 0.5 + 0.5) * h / 2, 0, h / 2) + h / 4; + int pto = CLAMP((max * 0.5 + 0.5) * h / 2, 0, h / 2) + h / 4; - max[0]*=0.8; - max[1]*=0.8; - min[0]*=0.8; - min[1]*=0.8; - - if (!stereo) { - for(int j=0;j<h;j++) { - float v = (j/(float)h) * 2.0 - 1.0; - uint8_t* imgofs = &imgw[(j*w+i)*3]; - if (v>min[0] && v<max[0]) { - imgofs[0]=255; - imgofs[1]=150; - imgofs[2]=80; - } else { - imgofs[0]=0; - imgofs[1]=0; - imgofs[2]=0; - } - } + for (int j = 0; j < h; j++) { + uint8_t *p = &imgw[(j * w + i) * 3]; + if (j < pfrom || j > pto) { + p[0] = 100; + p[1] = 100; + p[2] = 100; } else { - - for(int j=0;j<h;j++) { - - int half; - float v; - if (j<(h/2)) { - half=0; - v = (j/(float)(h/2)) * 2.0 - 1.0; - } else { - half=1; - if( (float)(h/2) != 0 ) { - v = ((j-(h/2))/(float)(h/2)) * 2.0 - 1.0; - } else { - v = ((j-(h/2))/(float)(1/2)) * 2.0 - 1.0; - } - } - - uint8_t* imgofs = &imgw[(j*w+i)*3]; - if (v>min[half] && v<max[half]) { - imgofs[0]=255; - imgofs[1]=150; - imgofs[2]=80; - } else { - imgofs[0]=0; - imgofs[1]=0; - imgofs[2]=0; - } - } - + p[0] = 180; + p[1] = 180; + p[2] = 180; } - } } imgdata = PoolVector<uint8_t>::Write(); - post_process_preview(img); + //post_process_preview(img); - Ref<ImageTexture> ptex = Ref<ImageTexture>( memnew( ImageTexture)); - ptex->create_from_image(Image(w,h,0,Image::FORMAT_RGB8,img),0); + Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); + Ref<Image> image; + image.instance(); + image->create(w, h, false, Image::FORMAT_RGB8, img); + ptex->create_from_image(image, 0); return ptex; - } -EditorSamplePreviewPlugin::EditorSamplePreviewPlugin() { +EditorAudioStreamPreviewPlugin::EditorAudioStreamPreviewPlugin() { } -#endif /////////////////////////////////////////////////////////////////////////// @@ -933,3 +753,100 @@ EditorMeshPreviewPlugin::~EditorMeshPreviewPlugin() { VS::get_singleton()->free(camera); VS::get_singleton()->free(scenario); } + +/////////////////////////////////////////////////////////////////////////// + +void EditorFontPreviewPlugin::_preview_done(const Variant &p_udata) { + + preview_done = true; +} + +void EditorFontPreviewPlugin::_bind_methods() { + + ClassDB::bind_method("_preview_done", &EditorFontPreviewPlugin::_preview_done); +} + +bool EditorFontPreviewPlugin::handles(const String &p_type) const { + + return ClassDB::is_parent_class(p_type, "DynamicFontData"); +} + +Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path) { + if (canvas.is_valid()) { + VS::get_singleton()->viewport_remove_canvas(viewport, canvas); + } + + canvas = VS::get_singleton()->canvas_create(); + canvas_item = VS::get_singleton()->canvas_item_create(); + + VS::get_singleton()->viewport_attach_canvas(viewport, canvas); + VS::get_singleton()->canvas_item_set_parent(canvas_item, canvas); + + Ref<DynamicFontData> SampledFont; + SampledFont.instance(); + SampledFont->set_font_path(p_path); + + int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); + thumbnail_size *= EDSCALE; + + Ref<DynamicFont> sampled_font; + sampled_font.instance(); + sampled_font->set_size(50); + sampled_font->set_font_data(SampledFont); + + String sampled_text = "Abg"; + Vector2 size = sampled_font->get_string_size(sampled_text); + + Vector2 pos; + + pos.x = 64 - size.x / 2; + pos.y = 80; + + Ref<Font> font = sampled_font; + + font->draw(canvas_item, pos, sampled_text); + + VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_ONCE); //once used for capture + + preview_done = false; + VS::get_singleton()->request_frame_drawn_callback(this, "_preview_done", Variant()); + + while (!preview_done) { + OS::get_singleton()->delay_usec(10); + } + + Ref<Image> img = VS::get_singleton()->VS::get_singleton()->texture_get_data(viewport_texture); + ERR_FAIL_COND_V(img.is_null(), Ref<ImageTexture>()); + + 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; +} + +Ref<Texture> EditorFontPreviewPlugin::generate(const RES &p_from) { + + return generate_from_path(p_from->get_path()); +} + +EditorFontPreviewPlugin::EditorFontPreviewPlugin() { + + viewport = VS::get_singleton()->viewport_create(); + VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_DISABLED); + VS::get_singleton()->viewport_set_vflip(viewport, true); + VS::get_singleton()->viewport_set_size(viewport, 128, 128); + VS::get_singleton()->viewport_set_active(viewport, true); + viewport_texture = VS::get_singleton()->viewport_get_texture(viewport); +} + +EditorFontPreviewPlugin::~EditorFontPreviewPlugin() { + + VS::get_singleton()->free(canvas_item); + VS::get_singleton()->free(canvas); + VS::get_singleton()->free(viewport); +} diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h index 35b5c3a5f0..140d9f849f 100644 --- a/editor/plugins/editor_preview_plugins.h +++ b/editor/plugins/editor_preview_plugins.h @@ -100,17 +100,13 @@ public: EditorScriptPreviewPlugin(); }; -// FIXME: Needs to be rewritten for AudioStream in Godot 3.0+ -#if 0 -class EditorSamplePreviewPlugin : public EditorResourcePreviewGenerator { +class EditorAudioStreamPreviewPlugin : public EditorResourcePreviewGenerator { public: + virtual bool handles(const String &p_type) const; + virtual Ref<Texture> generate(const RES &p_from); - virtual bool handles(const String& p_type) const; - virtual Ref<Texture> generate(const RES& p_from); - - EditorSamplePreviewPlugin(); + EditorAudioStreamPreviewPlugin(); }; -#endif class EditorMeshPreviewPlugin : public EditorResourcePreviewGenerator { @@ -140,4 +136,27 @@ public: ~EditorMeshPreviewPlugin(); }; +class EditorFontPreviewPlugin : public EditorResourcePreviewGenerator { + + GDCLASS(EditorFontPreviewPlugin, EditorResourcePreviewGenerator) + + RID viewport; + RID viewport_texture; + RID canvas; + RID canvas_item; + volatile bool preview_done; + + void _preview_done(const Variant &p_udata); + +protected: + static void _bind_methods(); + +public: + virtual bool handles(const String &p_type) const; + virtual Ref<Texture> generate(const RES &p_from); + virtual Ref<Texture> generate_from_path(const String &p_path); + + EditorFontPreviewPlugin(); + ~EditorFontPreviewPlugin(); +}; #endif // EDITORPREVIEWPLUGINS_H diff --git a/editor/plugins/navigation_mesh_editor_plugin.cpp b/editor/plugins/navigation_mesh_editor_plugin.cpp deleted file mode 100644 index da3c744324..0000000000 --- a/editor/plugins/navigation_mesh_editor_plugin.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/*************************************************************************/ -/* navigation_mesh_editor_plugin.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 "navigation_mesh_editor_plugin.h" -#include "io/marshalls.h" -#include "io/resource_saver.h" -#include "scene/3d/mesh_instance.h" -#include "scene/gui/box_container.h" - -#ifdef RECAST_ENABLED - -void NavigationMeshEditor::_node_removed(Node *p_node) { - - if (p_node == node) { - node = NULL; - - hide(); - } -} - -void NavigationMeshEditor::_notification(int p_option) { - - if (p_option == NOTIFICATION_ENTER_TREE) { - - button_bake->set_icon(get_icon("Bake", "EditorIcons")); - button_reset->set_icon(get_icon("Reload", "EditorIcons")); - } -} - -void NavigationMeshEditor::_bake_pressed() { - - ERR_FAIL_COND(!node); - const String conf_warning = node->get_configuration_warning(); - if (!conf_warning.empty()) { - err_dialog->set_text(conf_warning); - err_dialog->popup_centered_minsize(); - button_bake->set_pressed(false); - return; - } - - NavigationMeshGenerator::clear(node->get_navigation_mesh()); - NavigationMeshGenerator::bake(node->get_navigation_mesh(), node); - - if (node) { - node->update_gizmo(); - } -} - -void NavigationMeshEditor::_clear_pressed() { - - if (node) - NavigationMeshGenerator::clear(node->get_navigation_mesh()); - - button_bake->set_pressed(false); - bake_info->set_text(""); - - if (node) { - node->update_gizmo(); - } -} - -void NavigationMeshEditor::edit(NavigationMeshInstance *p_nav_mesh_instance) { - - if (p_nav_mesh_instance == NULL || node == p_nav_mesh_instance) { - return; - } - - node = p_nav_mesh_instance; -} - -void NavigationMeshEditor::_bind_methods() { - - ClassDB::bind_method("_bake_pressed", &NavigationMeshEditor::_bake_pressed); - ClassDB::bind_method("_clear_pressed", &NavigationMeshEditor::_clear_pressed); -} - -NavigationMeshEditor::NavigationMeshEditor() { - - bake_hbox = memnew(HBoxContainer); - button_bake = memnew(ToolButton); - button_bake->set_text(TTR("Bake!")); - button_bake->set_toggle_mode(true); - button_reset = memnew(Button); - button_bake->set_tooltip(TTR("Bake the navigation mesh.") + "\n"); - - bake_info = memnew(Label); - bake_hbox->add_child(button_bake); - bake_hbox->add_child(button_reset); - bake_hbox->add_child(bake_info); - - err_dialog = memnew(AcceptDialog); - add_child(err_dialog); - node = NULL; - - button_bake->connect("pressed", this, "_bake_pressed"); - button_reset->connect("pressed", this, "_clear_pressed"); - button_reset->set_tooltip(TTR("Clear the navigation mesh.")); -} - -NavigationMeshEditor::~NavigationMeshEditor() { -} - -void NavigationMeshEditorPlugin::edit(Object *p_object) { - - navigation_mesh_editor->edit(Object::cast_to<NavigationMeshInstance>(p_object)); -} - -bool NavigationMeshEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("NavigationMeshInstance"); -} - -void NavigationMeshEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - navigation_mesh_editor->show(); - navigation_mesh_editor->bake_hbox->show(); - } else { - - navigation_mesh_editor->hide(); - navigation_mesh_editor->bake_hbox->hide(); - navigation_mesh_editor->edit(NULL); - } -} - -NavigationMeshEditorPlugin::NavigationMeshEditorPlugin(EditorNode *p_node) { - - editor = p_node; - navigation_mesh_editor = memnew(NavigationMeshEditor); - editor->get_viewport()->add_child(navigation_mesh_editor); - add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, navigation_mesh_editor->bake_hbox); - navigation_mesh_editor->hide(); - navigation_mesh_editor->bake_hbox->hide(); -} - -NavigationMeshEditorPlugin::~NavigationMeshEditorPlugin() { -} - -#endif // RECAST_ENABLED diff --git a/editor/plugins/navigation_mesh_editor_plugin.h b/editor/plugins/navigation_mesh_editor_plugin.h deleted file mode 100644 index 9382467d85..0000000000 --- a/editor/plugins/navigation_mesh_editor_plugin.h +++ /dev/null @@ -1,87 +0,0 @@ -/*************************************************************************/ -/* navigation_mesh_editor_plugin.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 NAVIGATION_MESH_GENERATOR_PLUGIN_H -#define NAVIGATION_MESH_GENERATOR_PLUGIN_H - -#ifdef RECAST_ENABLED - -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" -#include "navigation_mesh_generator.h" - -class NavigationMeshEditor : public Control { - friend class NavigationMeshEditorPlugin; - - GDCLASS(NavigationMeshEditor, Control); - - AcceptDialog *err_dialog; - - HBoxContainer *bake_hbox; - Button *button_bake; - Button *button_reset; - Label *bake_info; - - NavigationMeshInstance *node; - - void _bake_pressed(); - void _clear_pressed(); - -protected: - void _node_removed(Node *p_node); - static void _bind_methods(); - void _notification(int p_option); - -public: - void edit(NavigationMeshInstance *p_nav_mesh_instance); - NavigationMeshEditor(); - ~NavigationMeshEditor(); -}; - -class NavigationMeshEditorPlugin : public EditorPlugin { - - GDCLASS(NavigationMeshEditorPlugin, EditorPlugin); - - NavigationMeshEditor *navigation_mesh_editor; - EditorNode *editor; - -public: - virtual String get_name() const { return "NavigationMesh"; } - 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); - - NavigationMeshEditorPlugin(EditorNode *p_node); - ~NavigationMeshEditorPlugin(); -}; - -#endif // RECAST_ENABLED -#endif // NAVIGATION_MESH_GENERATOR_PLUGIN_H diff --git a/editor/plugins/navigation_mesh_generator.cpp b/editor/plugins/navigation_mesh_generator.cpp deleted file mode 100644 index 0537c5c31f..0000000000 --- a/editor/plugins/navigation_mesh_generator.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/*************************************************************************/ -/* navigation_mesh_generator.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 "navigation_mesh_generator.h" - -#ifdef RECAST_ENABLED - -void NavigationMeshGenerator::_add_vertex(const Vector3 &p_vec3, Vector<float> &p_verticies) { - p_verticies.push_back(p_vec3.x); - p_verticies.push_back(p_vec3.y); - p_verticies.push_back(p_vec3.z); -} - -void NavigationMeshGenerator::_add_mesh(const Ref<Mesh> &p_mesh, const Transform &p_xform, Vector<float> &p_verticies, Vector<int> &p_indices) { - int current_vertex_count = 0; - - for (int i = 0; i < p_mesh->get_surface_count(); i++) { - current_vertex_count = p_verticies.size() / 3; - - if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES) - continue; - - int index_count = 0; - if (p_mesh->surface_get_format(i) & Mesh::ARRAY_FORMAT_INDEX) { - index_count = p_mesh->surface_get_array_index_len(i); - } else { - index_count = p_mesh->surface_get_array_len(i); - } - - ERR_CONTINUE((index_count == 0 || (index_count % 3) != 0)); - - int face_count = index_count / 3; - - Array a = p_mesh->surface_get_arrays(i); - - PoolVector<Vector3> mesh_vertices = a[Mesh::ARRAY_VERTEX]; - PoolVector<Vector3>::Read vr = mesh_vertices.read(); - - if (p_mesh->surface_get_format(i) & Mesh::ARRAY_FORMAT_INDEX) { - - PoolVector<int> mesh_indices = a[Mesh::ARRAY_INDEX]; - PoolVector<int>::Read ir = mesh_indices.read(); - - for (int i = 0; i < mesh_vertices.size(); i++) { - _add_vertex(p_xform.xform(vr[i]), p_verticies); - } - - for (int i = 0; i < face_count; i++) { - // CCW - p_indices.push_back(current_vertex_count + (ir[i * 3 + 0])); - p_indices.push_back(current_vertex_count + (ir[i * 3 + 2])); - p_indices.push_back(current_vertex_count + (ir[i * 3 + 1])); - } - } else { - face_count = mesh_vertices.size() / 3; - for (int i = 0; i < face_count; i++) { - _add_vertex(p_xform.xform(vr[i * 3 + 0]), p_verticies); - _add_vertex(p_xform.xform(vr[i * 3 + 2]), p_verticies); - _add_vertex(p_xform.xform(vr[i * 3 + 1]), p_verticies); - - p_indices.push_back(current_vertex_count + (i * 3 + 0)); - p_indices.push_back(current_vertex_count + (i * 3 + 1)); - p_indices.push_back(current_vertex_count + (i * 3 + 2)); - } - } - } -} - -void NavigationMeshGenerator::_parse_geometry(const Transform &p_base_inverse, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices) { - - if (Object::cast_to<MeshInstance>(p_node)) { - - MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(p_node); - Ref<Mesh> mesh = mesh_instance->get_mesh(); - if (mesh.is_valid()) { - _add_mesh(mesh, p_base_inverse * mesh_instance->get_global_transform(), p_verticies, p_indices); - } - } - - for (int i = 0; i < p_node->get_child_count(); i++) { - _parse_geometry(p_base_inverse, p_node->get_child(i), p_verticies, p_indices); - } -} - -void NavigationMeshGenerator::_convert_detail_mesh_to_native_navigation_mesh(const rcPolyMeshDetail *p_detail_mesh, Ref<NavigationMesh> p_nav_mesh) { - - PoolVector<Vector3> nav_vertices; - - for (int i = 0; i < p_detail_mesh->nverts; i++) { - const float *v = &p_detail_mesh->verts[i * 3]; - nav_vertices.append(Vector3(v[0], v[1], v[2])); - } - p_nav_mesh->set_vertices(nav_vertices); - - for (int i = 0; i < p_detail_mesh->nmeshes; i++) { - const unsigned int *m = &p_detail_mesh->meshes[i * 4]; - const unsigned int bverts = m[0]; - const unsigned int btris = m[2]; - const unsigned int ntris = m[3]; - const unsigned char *tris = &p_detail_mesh->tris[btris * 4]; - for (unsigned int j = 0; j < ntris; j++) { - Vector<int> nav_indices; - nav_indices.resize(3); - nav_indices[0] = ((int)(bverts + tris[j * 4 + 0])); - nav_indices[1] = ((int)(bverts + tris[j * 4 + 1])); - nav_indices[2] = ((int)(bverts + tris[j * 4 + 2])); - p_nav_mesh->add_polygon(nav_indices); - } - } -} - -void NavigationMeshGenerator::_build_recast_navigation_mesh(Ref<NavigationMesh> p_nav_mesh, EditorProgress *ep, - rcHeightfield *hf, rcCompactHeightfield *chf, rcContourSet *cset, rcPolyMesh *poly_mesh, rcPolyMeshDetail *detail_mesh, - Vector<float> &vertices, Vector<int> &indices) { - rcContext ctx; - ep->step(TTR("Setting up Configuration..."), 1); - - const float *verts = vertices.ptr(); - const int nverts = vertices.size() / 3; - const int *tris = indices.ptr(); - const int ntris = indices.size() / 3; - - float bmin[3], bmax[3]; - rcCalcBounds(verts, nverts, bmin, bmax); - - rcConfig cfg; - memset(&cfg, 0, sizeof(cfg)); - - cfg.cs = p_nav_mesh->get_cell_size(); - cfg.ch = p_nav_mesh->get_cell_height(); - cfg.walkableSlopeAngle = p_nav_mesh->get_agent_max_slope(); - cfg.walkableHeight = (int)Math::ceil(p_nav_mesh->get_agent_height() / cfg.ch); - cfg.walkableClimb = (int)Math::floor(p_nav_mesh->get_agent_max_climb() / cfg.ch); - cfg.walkableRadius = (int)Math::ceil(p_nav_mesh->get_agent_radius() / cfg.cs); - cfg.maxEdgeLen = (int)(p_nav_mesh->get_edge_max_length() / p_nav_mesh->get_cell_size()); - cfg.maxSimplificationError = p_nav_mesh->get_edge_max_error(); - cfg.minRegionArea = (int)(p_nav_mesh->get_region_min_size() * p_nav_mesh->get_region_min_size()); - cfg.mergeRegionArea = (int)(p_nav_mesh->get_region_merge_size() * p_nav_mesh->get_region_merge_size()); - cfg.maxVertsPerPoly = (int)p_nav_mesh->get_verts_per_poly(); - cfg.detailSampleDist = p_nav_mesh->get_detail_sample_distance() < 0.9f ? 0 : p_nav_mesh->get_cell_size() * p_nav_mesh->get_detail_sample_distance(); - cfg.detailSampleMaxError = p_nav_mesh->get_cell_height() * p_nav_mesh->get_detail_sample_max_error(); - - cfg.bmin[0] = bmin[0]; - cfg.bmin[1] = bmin[1]; - cfg.bmin[2] = bmin[2]; - cfg.bmax[0] = bmax[0]; - cfg.bmax[1] = bmax[1]; - cfg.bmax[2] = bmax[2]; - - ep->step(TTR("Calculating grid size..."), 2); - rcCalcGridSize(cfg.bmin, cfg.bmax, cfg.cs, &cfg.width, &cfg.height); - - ep->step(TTR("Creating heightfield..."), 3); - hf = rcAllocHeightfield(); - - ERR_FAIL_COND(!hf); - ERR_FAIL_COND(!rcCreateHeightfield(&ctx, *hf, cfg.width, cfg.height, cfg.bmin, cfg.bmax, cfg.cs, cfg.ch)); - - ep->step(TTR("Marking walkable triangles..."), 4); - { - Vector<unsigned char> tri_areas; - tri_areas.resize(ntris); - - ERR_FAIL_COND(tri_areas.size() == 0); - - memset(tri_areas.ptrw(), 0, ntris * sizeof(unsigned char)); - rcMarkWalkableTriangles(&ctx, cfg.walkableSlopeAngle, verts, nverts, tris, ntris, tri_areas.ptrw()); - - ERR_FAIL_COND(!rcRasterizeTriangles(&ctx, verts, nverts, tris, tri_areas.ptr(), ntris, *hf, cfg.walkableClimb)); - } - - if (p_nav_mesh->get_filter_low_hanging_obstacles()) - rcFilterLowHangingWalkableObstacles(&ctx, cfg.walkableClimb, *hf); - if (p_nav_mesh->get_filter_ledge_spans()) - rcFilterLedgeSpans(&ctx, cfg.walkableHeight, cfg.walkableClimb, *hf); - if (p_nav_mesh->get_filter_walkable_low_height_spans()) - rcFilterWalkableLowHeightSpans(&ctx, cfg.walkableHeight, *hf); - - ep->step(TTR("Constructing compact heightfield..."), 5); - - chf = rcAllocCompactHeightfield(); - - ERR_FAIL_COND(!chf); - ERR_FAIL_COND(!rcBuildCompactHeightfield(&ctx, cfg.walkableHeight, cfg.walkableClimb, *hf, *chf)); - - rcFreeHeightField(hf); - hf = 0; - - ep->step(TTR("Eroding walkable area..."), 6); - ERR_FAIL_COND(!rcErodeWalkableArea(&ctx, cfg.walkableRadius, *chf)); - - ep->step(TTR("Partitioning..."), 7); - if (p_nav_mesh->get_sample_partition_type() == NavigationMesh::SAMPLE_PARTITION_WATERSHED) { - ERR_FAIL_COND(!rcBuildDistanceField(&ctx, *chf)); - ERR_FAIL_COND(!rcBuildRegions(&ctx, *chf, 0, cfg.minRegionArea, cfg.mergeRegionArea)); - } else if (p_nav_mesh->get_sample_partition_type() == NavigationMesh::SAMPLE_PARTITION_MONOTONE) { - ERR_FAIL_COND(!rcBuildRegionsMonotone(&ctx, *chf, 0, cfg.minRegionArea, cfg.mergeRegionArea)); - } else { - ERR_FAIL_COND(!rcBuildLayerRegions(&ctx, *chf, 0, cfg.minRegionArea)); - } - - ep->step(TTR("Creating contours..."), 8); - - cset = rcAllocContourSet(); - - ERR_FAIL_COND(!cset); - ERR_FAIL_COND(!rcBuildContours(&ctx, *chf, cfg.maxSimplificationError, cfg.maxEdgeLen, *cset)); - - ep->step(TTR("Creating polymesh..."), 9); - - poly_mesh = rcAllocPolyMesh(); - ERR_FAIL_COND(!poly_mesh); - ERR_FAIL_COND(!rcBuildPolyMesh(&ctx, *cset, cfg.maxVertsPerPoly, *poly_mesh)); - - detail_mesh = rcAllocPolyMeshDetail(); - ERR_FAIL_COND(!detail_mesh); - ERR_FAIL_COND(!rcBuildPolyMeshDetail(&ctx, *poly_mesh, *chf, cfg.detailSampleDist, cfg.detailSampleMaxError, *detail_mesh)); - - rcFreeCompactHeightfield(chf); - chf = 0; - rcFreeContourSet(cset); - cset = 0; - - ep->step(TTR("Converting to native navigation mesh..."), 10); - - _convert_detail_mesh_to_native_navigation_mesh(detail_mesh, p_nav_mesh); - - rcFreePolyMesh(poly_mesh); - poly_mesh = 0; - rcFreePolyMeshDetail(detail_mesh); - detail_mesh = 0; -} - -void NavigationMeshGenerator::bake(Ref<NavigationMesh> p_nav_mesh, Node *p_node) { - - ERR_FAIL_COND(!p_nav_mesh.is_valid()); - - EditorProgress ep("bake", TTR("Navigation Mesh Generator Setup:"), 11); - ep.step(TTR("Parsing Geometry..."), 0); - - Vector<float> vertices; - Vector<int> indices; - - _parse_geometry(Object::cast_to<Spatial>(p_node)->get_global_transform().affine_inverse(), p_node, vertices, indices); - - if (vertices.size() > 0 && indices.size() > 0) { - - rcHeightfield *hf = NULL; - rcCompactHeightfield *chf = NULL; - rcContourSet *cset = NULL; - rcPolyMesh *poly_mesh = NULL; - rcPolyMeshDetail *detail_mesh = NULL; - - _build_recast_navigation_mesh(p_nav_mesh, &ep, hf, chf, cset, poly_mesh, detail_mesh, vertices, indices); - - 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); -} - -void NavigationMeshGenerator::clear(Ref<NavigationMesh> p_nav_mesh) { - if (p_nav_mesh.is_valid()) { - p_nav_mesh->clear_polygons(); - p_nav_mesh->set_vertices(PoolVector<Vector3>()); - } -} - -#endif //RECAST_ENABLED diff --git a/editor/plugins/navigation_mesh_generator.h b/editor/plugins/navigation_mesh_generator.h deleted file mode 100644 index d26f541b8d..0000000000 --- a/editor/plugins/navigation_mesh_generator.h +++ /dev/null @@ -1,66 +0,0 @@ -/*************************************************************************/ -/* navigation_mesh_generator.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 NAVIGATION_MESH_GENERATOR_H -#define NAVIGATION_MESH_GENERATOR_H - -#ifdef RECAST_ENABLED - -#include "editor/editor_node.h" -#include "editor/editor_settings.h" - -#include "scene/3d/mesh_instance.h" - -#include "scene/3d/navigation_mesh.h" - -#include "os/thread.h" -#include "scene/resources/shape.h" - -#include <Recast.h> - -class NavigationMeshGenerator { -protected: - static void _add_vertex(const Vector3 &p_vec3, Vector<float> &p_verticies); - static void _add_mesh(const Ref<Mesh> &p_mesh, const Transform &p_xform, Vector<float> &p_verticies, Vector<int> &p_indices); - static void _parse_geometry(const Transform &p_base_inverse, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices); - - static void _convert_detail_mesh_to_native_navigation_mesh(const rcPolyMeshDetail *p_detail_mesh, Ref<NavigationMesh> p_nav_mesh); - static void _build_recast_navigation_mesh(Ref<NavigationMesh> p_nav_mesh, EditorProgress *ep, - rcHeightfield *hf, rcCompactHeightfield *chf, rcContourSet *cset, rcPolyMesh *poly_mesh, - rcPolyMeshDetail *detail_mesh, Vector<float> &vertices, Vector<int> &indices); - -public: - static void bake(Ref<NavigationMesh> p_nav_mesh, Node *p_node); - static void clear(Ref<NavigationMesh> p_nav_mesh); -}; - -#endif // RECAST_ENABLED - -#endif // NAVIGATION_MESH_GENERATOR_H diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp new file mode 100644 index 0000000000..89c1b3a978 --- /dev/null +++ b/editor/plugins/root_motion_editor_plugin.cpp @@ -0,0 +1,293 @@ +#include "root_motion_editor_plugin.h" +#include "editor/editor_node.h" +#include "scene/main/viewport.h" + +void EditorPropertyRootMotion::_confirmed() { + + TreeItem *ti = filters->get_selected(); + if (!ti) + return; + + NodePath path = ti->get_metadata(0); + emit_signal("property_changed", get_edited_property(), path); + update_property(); + filter_dialog->hide(); //may come from activated +} + +void EditorPropertyRootMotion::_node_assign() { + + NodePath current = get_edited_object()->get(get_edited_property()); + + AnimationTree *atree = Object::cast_to<AnimationTree>(get_edited_object()); + if (!atree->has_node(atree->get_animation_player())) { + EditorNode::get_singleton()->show_warning(TTR("AnimationTree has no path set to an AnimationPlayer")); + return; + } + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(atree->get_node(atree->get_animation_player())); + if (!player) { + EditorNode::get_singleton()->show_warning(TTR("Path to AnimationPlayer is invalid")); + return; + } + + Node *base = player->get_node(player->get_root()); + + if (!base) { + EditorNode::get_singleton()->show_warning(TTR("Animation player has no valid root node path, so unable to retrieve track names.")); + return; + } + + Set<String> paths; + { + List<StringName> animations; + player->get_animation_list(&animations); + + for (List<StringName>::Element *E = animations.front(); E; E = E->next()) { + + Ref<Animation> anim = player->get_animation(E->get()); + for (int i = 0; i < anim->get_track_count(); i++) { + paths.insert(anim->track_get_path(i)); + } + } + } + + filters->clear(); + TreeItem *root = filters->create_item(); + + Map<String, TreeItem *> parenthood; + + for (Set<String>::Element *E = paths.front(); E; E = E->next()) { + + NodePath path = E->get(); + TreeItem *ti = NULL; + String accum; + for (int i = 0; i < path.get_name_count(); i++) { + String name = path.get_name(i); + if (accum != String()) { + accum += "/"; + } + accum += name; + if (!parenthood.has(accum)) { + if (ti) { + ti = filters->create_item(ti); + } else { + ti = filters->create_item(root); + } + parenthood[accum] = ti; + ti->set_text(0, name); + ti->set_selectable(0, false); + ti->set_editable(0, false); + + if (base->has_node(accum)) { + Node *node = base->get_node(accum); + if (has_icon(node->get_class(), "EditorIcons")) { + ti->set_icon(0, get_icon(node->get_class(), "EditorIcons")); + } else { + ti->set_icon(0, get_icon("Node", "EditorIcons")); + } + } + + } else { + ti = parenthood[accum]; + } + } + + Node *node = NULL; + if (base->has_node(accum)) { + node = base->get_node(accum); + } + if (!node) + continue; //no node, cant edit + + if (path.get_subname_count()) { + + String concat = path.get_concatenated_subnames(); + + Skeleton *skeleton = Object::cast_to<Skeleton>(node); + if (skeleton && skeleton->find_bone(concat) != -1) { + //path in skeleton + String bone = concat; + int idx = skeleton->find_bone(bone); + List<String> bone_path; + while (idx != -1) { + bone_path.push_front(skeleton->get_bone_name(idx)); + idx = skeleton->get_bone_parent(idx); + } + + accum += ":"; + for (List<String>::Element *F = bone_path.front(); F; F = F->next()) { + if (F != bone_path.front()) { + accum += "/"; + } + + accum += F->get(); + if (!parenthood.has(accum)) { + ti = filters->create_item(ti); + parenthood[accum] = ti; + ti->set_text(0, F->get()); + ti->set_selectable(0, true); + ti->set_editable(0, false); + ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons")); + ti->set_metadata(0, accum); + } else { + ti = parenthood[accum]; + } + } + + ti->set_selectable(0, true); + ti->set_text(0, concat); + ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons")); + ti->set_metadata(0, path); + if (path == current) { + ti->select(0); + } + + } else { + //just a property + ti = filters->create_item(ti); + ti->set_text(0, concat); + ti->set_selectable(0, true); + ti->set_metadata(0, path); + if (path == current) { + ti->select(0); + } + } + } else { + if (ti) { + //just a node, likely call or animation track + ti->set_selectable(0, true); + ti->set_metadata(0, path); + if (path == current) { + ti->select(0); + } + } + } + } + + filters->ensure_cursor_is_visible(); + filter_dialog->popup_centered_ratio(); +} + +void EditorPropertyRootMotion::_node_clear() { + + emit_signal("property_changed", get_edited_property(), NodePath()); + update_property(); +} + +void EditorPropertyRootMotion::update_property() { + + NodePath p = get_edited_object()->get(get_edited_property()); + + assign->set_tooltip(p); + if (p == NodePath()) { + assign->set_icon(Ref<Texture>()); + assign->set_text(TTR("Assign..")); + assign->set_flat(false); + return; + } + assign->set_flat(true); + + Node *base_node = NULL; + if (base_hint != NodePath()) { + if (get_tree()->get_root()->has_node(base_hint)) { + base_node = get_tree()->get_root()->get_node(base_hint); + } + } else { + base_node = Object::cast_to<Node>(get_edited_object()); + } + + if (!base_node || !base_node->has_node(p)) { + assign->set_icon(Ref<Texture>()); + assign->set_text(p); + return; + } + + Node *target_node = base_node->get_node(p); + ERR_FAIL_COND(!target_node); + + assign->set_text(target_node->get_name()); + + Ref<Texture> icon; + if (has_icon(target_node->get_class(), "EditorIcons")) + icon = get_icon(target_node->get_class(), "EditorIcons"); + else + icon = get_icon("Node", "EditorIcons"); + + assign->set_icon(icon); +} + +void EditorPropertyRootMotion::setup(const NodePath &p_base_hint) { + + base_hint = p_base_hint; +} + +void EditorPropertyRootMotion::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + Ref<Texture> t = get_icon("Clear", "EditorIcons"); + clear->set_icon(t); + } +} + +void EditorPropertyRootMotion::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_confirmed"), &EditorPropertyRootMotion::_confirmed); + ClassDB::bind_method(D_METHOD("_node_assign"), &EditorPropertyRootMotion::_node_assign); + ClassDB::bind_method(D_METHOD("_node_clear"), &EditorPropertyRootMotion::_node_clear); +} + +EditorPropertyRootMotion::EditorPropertyRootMotion() { + + HBoxContainer *hbc = memnew(HBoxContainer); + add_child(hbc); + assign = memnew(Button); + assign->set_flat(true); + assign->set_h_size_flags(SIZE_EXPAND_FILL); + assign->set_clip_text(true); + assign->connect("pressed", this, "_node_assign"); + hbc->add_child(assign); + + clear = memnew(Button); + clear->set_flat(true); + clear->connect("pressed", this, "_node_clear"); + hbc->add_child(clear); + + filter_dialog = memnew(ConfirmationDialog); + add_child(filter_dialog); + filter_dialog->set_title(TTR("Edit Filtered Tracks:")); + filter_dialog->connect("confirmed", this, "_confirmed"); + + filters = memnew(Tree); + filter_dialog->add_child(filters); + filters->set_v_size_flags(SIZE_EXPAND_FILL); + filters->set_hide_root(true); + filters->connect("item_activated", this, "_confirmed"); + //filters->connect("item_edited", this, "_filter_edited"); +} +////////////////////////// + +bool EditorInspectorRootMotionPlugin::can_handle(Object *p_object) { + return true; //can handle everything +} + +void EditorInspectorRootMotionPlugin::parse_begin(Object *p_object) { + //do none +} + +bool EditorInspectorRootMotionPlugin::parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage) { + + if (p_path == "root_motion_track" && p_object->is_class("AnimationTree") && p_type == Variant::NODE_PATH) { + print_line("use custom!"); + EditorPropertyRootMotion *editor = memnew(EditorPropertyRootMotion); + if (p_hint == PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE && p_hint_text != String()) { + editor->setup(p_hint_text); + } + add_property_editor(p_path, editor); + return true; + } + + return false; //can be overriden, although it will most likely be last anyway +} + +void EditorInspectorRootMotionPlugin::parse_end() { + //do none +} diff --git a/editor/plugins/root_motion_editor_plugin.h b/editor/plugins/root_motion_editor_plugin.h new file mode 100644 index 0000000000..84af47872f --- /dev/null +++ b/editor/plugins/root_motion_editor_plugin.h @@ -0,0 +1,42 @@ +#ifndef ROOT_MOTION_EDITOR_PLUGIN_H +#define ROOT_MOTION_EDITOR_PLUGIN_H + +#include "editor/editor_inspector.h" +#include "editor/editor_spin_slider.h" +#include "editor/property_selector.h" +#include "scene/animation/animation_tree.h" + +class EditorPropertyRootMotion : public EditorProperty { + GDCLASS(EditorPropertyRootMotion, EditorProperty) + Button *assign; + Button *clear; + NodePath base_hint; + + ConfirmationDialog *filter_dialog; + Tree *filters; + + void _confirmed(); + void _node_assign(); + void _node_clear(); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + virtual void update_property(); + void setup(const NodePath &p_base_hint); + EditorPropertyRootMotion(); +}; + +class EditorInspectorRootMotionPlugin : public EditorInspectorPlugin { + GDCLASS(EditorInspectorRootMotionPlugin, EditorInspectorPlugin) + +public: + virtual bool can_handle(Object *p_object); + virtual void parse_begin(Object *p_object); + virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage); + virtual void parse_end(); +}; + +#endif // ROOT_MOTION_EDITOR_PLUGIN_H diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 94dcbd8e18..aa4673f41e 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -804,12 +804,12 @@ bool ScriptEditor::_test_script_times_on_disk(Ref<Script> p_for_script) { void ScriptEditor::_file_dialog_action(String p_file) { switch (file_dialog_option) { - case FILE_SAVE_THEME_AS: { + case THEME_SAVE_AS: { if (!EditorSettings::get_singleton()->save_text_editor_theme_as(p_file)) { editor->show_warning(TTR("Error while saving theme"), TTR("Error saving")); } } break; - case FILE_IMPORT_THEME: { + case THEME_IMPORT: { if (!EditorSettings::get_singleton()->import_text_editor_theme(p_file)) { editor->show_warning(TTR("Error importing theme"), TTR("Error importing")); } @@ -859,33 +859,6 @@ void ScriptEditor::_menu_option(int p_option) { save_all_scripts(); } break; - case FILE_IMPORT_THEME: { - file_dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); - file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - file_dialog_option = FILE_IMPORT_THEME; - file_dialog->clear_filters(); - file_dialog->add_filter("*.tet"); - file_dialog->popup_centered_ratio(); - file_dialog->set_title(TTR("Import Theme")); - } break; - case FILE_RELOAD_THEME: { - EditorSettings::get_singleton()->load_text_editor_theme(); - } break; - case FILE_SAVE_THEME: { - if (!EditorSettings::get_singleton()->save_text_editor_theme()) { - editor->show_warning(TTR("Error while saving theme"), TTR("Error saving")); - } - } break; - case FILE_SAVE_THEME_AS: { - file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - file_dialog_option = FILE_SAVE_THEME_AS; - file_dialog->clear_filters(); - 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...")); - } break; case SEARCH_HELP: { help_search_dialog->popup(); @@ -1143,6 +1116,38 @@ void ScriptEditor::_menu_option(int p_option) { } } +void ScriptEditor::_theme_option(int p_option) { + switch (p_option) { + case THEME_IMPORT: { + file_dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); + file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); + file_dialog_option = THEME_IMPORT; + file_dialog->clear_filters(); + file_dialog->add_filter("*.tet"); + file_dialog->popup_centered_ratio(); + file_dialog->set_title(TTR("Import Theme")); + } break; + case THEME_RELOAD: { + EditorSettings::get_singleton()->load_text_editor_theme(); + } break; + case THEME_SAVE: { + if (!EditorSettings::get_singleton()->save_text_editor_theme()) { + editor->show_warning(TTR("Error while saving theme"), TTR("Error saving")); + } + } break; + case THEME_SAVE_AS: { + file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); + file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); + file_dialog_option = THEME_SAVE_AS; + file_dialog->clear_filters(); + 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...")); + } break; + } +} + void ScriptEditor::_tab_changed(int p_which) { ensure_select_current(); @@ -1215,6 +1220,9 @@ void ScriptEditor::_notification(int p_what) { script_forward->set_icon(get_icon("Forward", "EditorIcons")); script_back->set_icon(get_icon("Back", "EditorIcons")); + members_overview_alphabeta_sort_button->set_icon(get_icon("Sort", "EditorIcons")); + filename->add_style_override("normal", editor->get_gui_base()->get_stylebox("normal", "LineEdit")); + recent_scripts->set_as_minsize(); } break; @@ -1404,17 +1412,20 @@ void ScriptEditor::_update_members_overview_visibility() { ScriptEditorBase *se = _get_current_editor(); if (!se) { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); members_overview->set_visible(false); + overview_vbox->set_visible(false); return; } if (members_overview_enabled && se->show_members_overview()) { - members_overview_buttons_hbox->set_visible(true); + members_overview_alphabeta_sort_button->set_visible(true); members_overview->set_visible(true); + overview_vbox->set_visible(true); } else { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); members_overview->set_visible(false); + overview_vbox->set_visible(false); } } @@ -1440,6 +1451,11 @@ void ScriptEditor::_update_members_overview() { members_overview->add_item(functions[i].get_slice(":", 0)); members_overview->set_item_metadata(i, functions[i].get_slice(":", 1).to_int() - 1); } + + String path = se->get_edited_script()->get_path(); + bool built_in = !path.is_resource_file(); + String name = built_in ? path.get_file() : se->get_name(); + filename->set_text(name); } void ScriptEditor::_update_help_overview_visibility() { @@ -1458,10 +1474,13 @@ void ScriptEditor::_update_help_overview_visibility() { } if (help_overview_enabled) { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); help_overview->set_visible(true); + overview_vbox->set_visible(true); + filename->set_text(se->get_name()); } else { help_overview->set_visible(false); + overview_vbox->set_visible(false); } } @@ -2577,6 +2596,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_close_all_tabs", &ScriptEditor::_close_all_tabs); ClassDB::bind_method("_close_other_tabs", &ScriptEditor::_close_other_tabs); ClassDB::bind_method("_open_recent_script", &ScriptEditor::_open_recent_script); + ClassDB::bind_method("_theme_option", &ScriptEditor::_theme_option); ClassDB::bind_method("_editor_play", &ScriptEditor::_editor_play); ClassDB::bind_method("_editor_pause", &ScriptEditor::_editor_pause); ClassDB::bind_method("_editor_stop", &ScriptEditor::_editor_stop); @@ -2673,13 +2693,19 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { add_child(context_menu); context_menu->connect("id_pressed", this, "_menu_option"); - members_overview_vbox = memnew(VBoxContainer); - members_overview_vbox->set_custom_minimum_size(Size2(0, 90)); - members_overview_vbox->set_v_size_flags(SIZE_EXPAND_FILL); + overview_vbox = memnew(VBoxContainer); + overview_vbox->set_custom_minimum_size(Size2(0, 90)); + overview_vbox->set_v_size_flags(SIZE_EXPAND_FILL); + + list_split->add_child(overview_vbox); + buttons_hbox = memnew(HBoxContainer); + overview_vbox->add_child(buttons_hbox); - list_split->add_child(members_overview_vbox); - members_overview_buttons_hbox = memnew(HBoxContainer); - members_overview_vbox->add_child(members_overview_buttons_hbox); + filename = memnew(Label); + filename->set_clip_text(true); + filename->set_h_size_flags(SIZE_EXPAND_FILL); + filename->add_style_override("normal", EditorNode::get_singleton()->get_gui_base()->get_stylebox("normal", "LineEdit")); + buttons_hbox->add_child(filename); members_overview_alphabeta_sort_button = memnew(ToolButton); members_overview_alphabeta_sort_button->set_tooltip(TTR("Toggle alphabetical sorting of the method list.")); @@ -2687,10 +2713,10 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { members_overview_alphabeta_sort_button->set_pressed(EditorSettings::get_singleton()->get("text_editor/tools/sort_members_outline_alphabetically")); members_overview_alphabeta_sort_button->connect("toggled", this, "_toggle_members_overview_alpha_sort"); - members_overview_buttons_hbox->add_child(members_overview_alphabeta_sort_button); + buttons_hbox->add_child(members_overview_alphabeta_sort_button); members_overview = memnew(ItemList); - members_overview_vbox->add_child(members_overview); + overview_vbox->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 @@ -2699,7 +2725,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { members_overview->set_drag_forwarding(this); help_overview = memnew(ItemList); - members_overview_vbox->add_child(help_overview); + overview_vbox->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); @@ -2743,10 +2769,18 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Prev"), KEY_MASK_ALT | KEY_LEFT), WINDOW_PREV); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_next", TTR("History Next"), KEY_MASK_ALT | KEY_RIGHT), WINDOW_NEXT); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme")), FILE_IMPORT_THEME); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_theme", TTR("Reload Theme")), FILE_RELOAD_THEME); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme", TTR("Save Theme")), FILE_SAVE_THEME); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As")), FILE_SAVE_THEME_AS); + + file_menu->get_popup()->add_submenu_item(TTR("Theme"), "Theme", FILE_THEME); + + theme_submenu = memnew(PopupMenu); + theme_submenu->set_name("Theme"); + file_menu->get_popup()->add_child(theme_submenu); + theme_submenu->connect("id_pressed", this, "_theme_option"); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme")), THEME_IMPORT); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/reload_theme", TTR("Reload Theme")), THEME_RELOAD); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme", TTR("Save Theme")), THEME_SAVE); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As")), THEME_SAVE_AS); + file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_docs", TTR("Close Docs")), CLOSE_DOCS); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD | KEY_W), FILE_CLOSE); @@ -2850,7 +2884,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { error_dialog = memnew(AcceptDialog); add_child(error_dialog); - error_dialog->get_ok()->set_text(TTR("I see..")); + error_dialog->get_ok()->set_text(TTR("I see...")); debugger = memnew(ScriptEditorDebugger(editor)); debugger->connect("goto_script_line", this, "_goto_script_line"); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index a2ff47cd99..67f506fdda 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -134,10 +134,7 @@ class ScriptEditor : public PanelContainer { FILE_SAVE, FILE_SAVE_AS, FILE_SAVE_ALL, - FILE_IMPORT_THEME, - FILE_RELOAD_THEME, - FILE_SAVE_THEME, - FILE_SAVE_THEME_AS, + FILE_THEME, FILE_RUN, FILE_CLOSE, CLOSE_DOCS, @@ -168,6 +165,13 @@ class ScriptEditor : public PanelContainer { WINDOW_SELECT_BASE = 100 }; + enum { + THEME_IMPORT, + THEME_RELOAD, + THEME_SAVE, + THEME_SAVE_AS + }; + enum ScriptSortBy { SORT_BY_NAME, SORT_BY_PATH, @@ -190,6 +194,7 @@ class ScriptEditor : public PanelContainer { uint64_t idle; PopupMenu *recent_scripts; + PopupMenu *theme_submenu; Button *help_search; Button *site_search; @@ -199,8 +204,9 @@ class ScriptEditor : public PanelContainer { ItemList *script_list; HSplitContainer *script_split; ItemList *members_overview; - VBoxContainer *members_overview_vbox; - HBoxContainer *members_overview_buttons_hbox; + VBoxContainer *overview_vbox; + HBoxContainer *buttons_hbox; + Label *filename; ToolButton *members_overview_alphabeta_sort_button; bool members_overview_enabled; ItemList *help_overview; @@ -250,6 +256,7 @@ class ScriptEditor : public PanelContainer { void _tab_changed(int p_which); void _menu_option(int p_option); + void _theme_option(int p_option); Tree *disk_changed_list; ConfirmationDialog *disk_changed; diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 45f5e667fa..aef2a53dd1 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -1727,7 +1727,7 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/select_all", TTR("Select All"), KEY_MASK_CMD | KEY_A); ED_SHORTCUT("script_text_editor/move_up", TTR("Move Up"), KEY_MASK_ALT | KEY_UP); ED_SHORTCUT("script_text_editor/move_down", TTR("Move Down"), KEY_MASK_ALT | KEY_DOWN); - ED_SHORTCUT("script_text_editor/delete_line", TTR("Delete Line"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_K); + ED_SHORTCUT("script_text_editor/delete_line", TTR("Delete Line"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_K); //leave these at zero, same can be accomplished with tab/shift-tab, including selection //the next/previous in history shortcut in this case makes a lot more sene. @@ -1740,28 +1740,36 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), 0); #ifdef OSX_ENABLED ED_SHORTCUT("script_text_editor/clone_down", TTR("Clone Down"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C); - ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CTRL | KEY_SPACE); #else ED_SHORTCUT("script_text_editor/clone_down", TTR("Clone Down"), KEY_MASK_CMD | KEY_B); - ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD | KEY_SPACE); #endif - ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CTRL | KEY_MASK_ALT | KEY_T); - ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent To Spaces"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_Y); - ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent To Tabs"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_X); + ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD | KEY_SPACE); + ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_T); + ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent To Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y); + ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent To Tabs"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_X); ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I); +#ifdef OSX_ENABLED + ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B); +#else ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9); - ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_F9); - ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CTRL | KEY_PERIOD); - ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CTRL | KEY_COMMA); +#endif + ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F9); + ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CMD | KEY_PERIOD); + ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CMD | KEY_COMMA); ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Convert To Uppercase"), KEY_MASK_SHIFT | KEY_F4); 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); +#ifdef OSX_ENABLED + ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_MASK_CMD | KEY_G); + ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G); +#else 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); +#endif 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); @@ -1769,7 +1777,11 @@ void ScriptTextEditor::register_editor() { 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); +#ifdef OSX_ENABLED + ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE); +#else ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_SHIFT | KEY_F1); +#endif ScriptEditor::register_create_script_editor_function(create_editor); } diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 5b713ef3c4..30fff474d7 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -32,7 +32,7 @@ #include "camera_matrix.h" #include "core/os/input.h" -#include "editor/animation_editor.h" + #include "editor/editor_node.h" #include "editor/editor_settings.h" #include "editor/plugins/animation_player_editor_plugin.h" @@ -217,7 +217,7 @@ bool SpatialEditorGizmo::intersect_frustum(const Camera *p_camera, const Vector< return false; } -bool SpatialEditorGizmo::intersect_ray(const Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle, bool p_sec_first) { +bool SpatialEditorGizmo::intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle, bool p_sec_first) { return false; } @@ -320,24 +320,20 @@ void SpatialEditorViewport::_select_clicked(bool p_append, bool p_single) { void SpatialEditorViewport::_select(Spatial *p_node, bool p_append, bool p_single) { if (!p_append) { + editor_selection->clear(); + } - // should not modify the selection.. + if (editor_selection->is_selected(p_node)) { + //erase + editor_selection->remove_node(p_node); + } else { - editor_selection->clear(); editor_selection->add_node(p_node); + } + if (p_single) { if (Engine::get_singleton()->is_editor_hint()) editor->call("edit_node", p_node); - - } else { - - if (editor_selection->is_selected(p_node) && p_single) { - //erase - editor_selection->remove_node(p_node); - } else { - - editor_selection->add_node(p_node); - } } } @@ -376,7 +372,7 @@ ObjectID SpatialEditorViewport::_select_ray(const Point2 &p_pos, bool p_append, Vector3 normal; int handle = -1; - bool inters = seg->intersect_ray(camera, p_pos, point, normal, NULL, p_alt_select); + bool inters = seg->intersect_ray(camera, p_pos, point, normal, &handle, p_alt_select); if (!inters) continue; @@ -475,7 +471,7 @@ void SpatialEditorViewport::_find_items_at_pos(const Point2 &p_pos, bool &r_incl Vector3 SpatialEditorViewport::_get_screen_to_space(const Vector3 &p_vector3) { CameraMatrix cm; - cm.set_perspective(get_fov(), get_size().aspect(), get_znear(), get_zfar()); + cm.set_perspective(get_fov(), get_size().aspect(), get_znear() + p_vector3.z, get_zfar()); float screen_w, screen_h; cm.get_viewport_size(screen_w, screen_h); @@ -485,7 +481,7 @@ Vector3 SpatialEditorViewport::_get_screen_to_space(const Vector3 &p_vector3) { camera_transform.basis.rotate(Vector3(0, 1, 0), -cursor.y_rot); camera_transform.translate(0, 0, cursor.distance); - return camera_transform.xform(Vector3(((p_vector3.x / get_size().width) * 2.0 - 1.0) * screen_w, ((1.0 - (p_vector3.y / get_size().height)) * 2.0 - 1.0) * screen_h, -get_znear())); + return camera_transform.xform(Vector3(((p_vector3.x / get_size().width) * 2.0 - 1.0) * screen_w, ((1.0 - (p_vector3.y / get_size().height)) * 2.0 - 1.0) * screen_h, -(get_znear() + p_vector3.z))); } void SpatialEditorViewport::_select_region() { @@ -493,23 +489,25 @@ void SpatialEditorViewport::_select_region() { if (cursor.region_begin == cursor.region_end) return; //nothing really + float z_offset = MAX(0.0, 5.0 - get_znear()); + Vector3 box[4] = { Vector3( MIN(cursor.region_begin.x, cursor.region_end.x), MIN(cursor.region_begin.y, cursor.region_end.y), - 0), + z_offset), Vector3( MAX(cursor.region_begin.x, cursor.region_end.x), MIN(cursor.region_begin.y, cursor.region_end.y), - 0), + z_offset), Vector3( MAX(cursor.region_begin.x, cursor.region_end.x), MAX(cursor.region_begin.y, cursor.region_end.y), - 0), + z_offset), Vector3( MIN(cursor.region_begin.x, cursor.region_end.x), MAX(cursor.region_begin.y, cursor.region_end.y), - 0) + z_offset) }; Vector<Plane> frustum; @@ -529,7 +527,7 @@ void SpatialEditorViewport::_select_region() { frustum.push_back(near); Plane far = -near; - far.d += 500.0; + far.d += get_zfar(); frustum.push_back(far); @@ -544,19 +542,26 @@ void SpatialEditorViewport::_select_region() { if (!sp) continue; + Spatial *root_sp = sp; + while (root_sp && root_sp != edited_scene && root_sp->get_owner() != edited_scene && !edited_scene->is_editable_instance(root_sp->get_owner())) { + root_sp = Object::cast_to<Spatial>(root_sp->get_owner()); + } + + if (selected.find(root_sp) != -1) continue; + Ref<SpatialEditorGizmo> seg = sp->get_gizmo(); if (!seg.is_valid()) continue; - Spatial *root_sp = sp; - while (root_sp && root_sp != edited_scene && root_sp->get_owner() != edited_scene && !edited_scene->is_editable_instance(root_sp->get_owner())) { - root_sp = Object::cast_to<Spatial>(root_sp->get_owner()); + if (seg->intersect_frustum(camera, frustum)) { + selected.push_back(root_sp); } + } - if (selected.find(root_sp) == -1) - if (seg->intersect_frustum(camera, frustum)) - _select(root_sp, true, false); + bool single = selected.size() == 1; + for (int i = 0; i < selected.size(); i++) { + _select(selected[i], true, single); } } @@ -1170,6 +1175,9 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } if (cursor.region_select) { + + if (!clicked_wants_append) _clear_selected(); + _select_region(); cursor.region_select = false; surface->update(); @@ -1279,7 +1287,6 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } if (cursor.region_select && nav_mode == NAVIGATION_NONE) { - cursor.region_end = m->get_position(); surface->update(); return; @@ -1829,7 +1836,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!get_selected_count() || _edit.mode != TRANSFORM_NONE) return; - if (!AnimationPlayerEditor::singleton->get_key_editor()->has_keying()) { + if (!AnimationPlayerEditor::singleton->get_track_editor()->has_keying()) { set_message(TTR("Keying is disabled (no key inserted).")); return; } @@ -2153,10 +2160,7 @@ void SpatialEditorViewport::_notification(int p_what) { VisualInstance *vi = Object::cast_to<VisualInstance>(sp); - if (se->aabb.has_no_surface()) { - - se->aabb = vi ? vi->get_aabb() : AABB(Vector3(-0.2, -0.2, -0.2), Vector3(0.4, 0.4, 0.4)); - } + 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_gizmo_transform(); t.translate(se->aabb.position); diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index 7736db67b1..637926a913 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -62,7 +62,7 @@ public: virtual void commit_handle(int p_idx, const Variant &p_restore, bool p_cancel = false); virtual bool intersect_frustum(const Camera *p_camera, const Vector<Plane> &p_frustum); - virtual bool intersect_ray(const Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false); + virtual bool intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false); SpatialEditorGizmo(); }; diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 72b3af5a09..7264af3488 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -35,6 +35,7 @@ #include "editor/editor_settings.h" #include "os/input.h" #include "os/keyboard.h" +#include "scene/gui/split_container.h" void TileMapEditor::_notification(int p_what) { @@ -132,16 +133,14 @@ void TileMapEditor::_menu_option(int p_option) { if (!selection_active) return; - undo_redo->create_action(TTR("Erase Selection")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Erase Selection")); 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); } } - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); - undo_redo->commit_action(); + _finish_undo(); selection_active = false; copydata.clear(); @@ -168,6 +167,13 @@ void TileMapEditor::_menu_option(int p_option) { } } +void TileMapEditor::_palette_selected(int index) { + + if (manual_autotile) { + _update_palette(); + } +} + void TileMapEditor::_canvas_mouse_enter() { mouse_over = true; @@ -200,6 +206,46 @@ void TileMapEditor::set_selected_tile(int p_tile) { } } +void TileMapEditor::_create_set_cell_undo(const Vector2 &p_vec, const CellOp &p_cell_old, const CellOp &p_cell_new) { + + Dictionary cell_old; + Dictionary cell_new; + + cell_old["id"] = p_cell_old.idx; + cell_old["flip_h"] = p_cell_old.xf; + cell_old["flip_y"] = p_cell_old.yf; + cell_old["transpose"] = p_cell_old.tr; + cell_old["auto_coord"] = p_cell_old.ac; + + cell_new["id"] = p_cell_new.idx; + cell_new["flip_h"] = p_cell_new.xf; + cell_new["flip_y"] = p_cell_new.yf; + cell_new["transpose"] = p_cell_new.tr; + cell_new["auto_coord"] = p_cell_new.ac; + + undo_redo->add_undo_method(node, "set_celld", p_vec, cell_old); + undo_redo->add_do_method(node, "set_celld", p_vec, cell_new); +} + +void TileMapEditor::_start_undo(const String &p_action) { + + undo_data.clear(); + undo_redo->create_action(p_action); +} + +void TileMapEditor::_finish_undo() { + + if (undo_data.size()) { + for (Map<Point2i, CellOp>::Element *E = undo_data.front(); E; E = E->next()) { + _create_set_cell_undo(E->key(), E->get(), _get_op_from_cell(E->key())); + } + + undo_data.clear(); + } + + undo_redo->commit_action(); +} + void TileMapEditor::_set_cell(const Point2i &p_pos, int p_value, bool p_flip_h, bool p_flip_v, bool p_transpose) { ERR_FAIL_COND(!node); @@ -209,12 +255,46 @@ void TileMapEditor::_set_cell(const Point2i &p_pos, int p_value, bool p_flip_h, bool prev_flip_h = node->is_cell_x_flipped(p_pos.x, p_pos.y); bool prev_flip_v = node->is_cell_y_flipped(p_pos.x, p_pos.y); bool prev_transpose = node->is_cell_transposed(p_pos.x, p_pos.y); + Vector2 prev_position = node->get_cell_autotile_coord(p_pos.x, p_pos.y); - if (p_value == prev_val && p_flip_h == prev_flip_h && p_flip_v == prev_flip_v && p_transpose == prev_transpose) + Vector2 position; + int current = manual_palette->get_current(); + if (current != -1) { + position = manual_palette->get_item_metadata(current); + } else { + // if there is no manual tile selected, that either means that + // autotiling is enabled, or the given tile is not autotiling. Either + // way, the coordinate of the tile does not matter, so assigning it to + // the coordinate of the existing tile works fine. + position = prev_position; + } + + if (p_value == prev_val && p_flip_h == prev_flip_h && p_flip_v == prev_flip_v && p_transpose == prev_transpose && prev_position == position) return; //check that it's actually different + for (int y = p_pos.y - 1; y <= p_pos.y + 1; y++) { + for (int x = p_pos.x - 1; x <= p_pos.x + 1; x++) { + Point2i p = Point2i(x, y); + if (!undo_data.has(p)) { + undo_data[p] = _get_op_from_cell(p); + } + } + } + node->set_cell(p_pos.x, p_pos.y, p_value, p_flip_h, p_flip_v, p_transpose); - node->update_bitmask_area(Point2(p_pos)); + if (manual_autotile) { + if (current != -1) { + node->set_cell_autotile_coord(p_pos.x, p_pos.y, position); + } + } else { + // manually placing tiles should not update bitmasks + node->update_bitmask_area(Point2(p_pos)); + } +} + +void TileMapEditor::_manual_toggled(bool p_enabled) { + manual_autotile = p_enabled; + _update_palette(); } void TileMapEditor::_text_entered(const String &p_text) { @@ -261,6 +341,8 @@ void TileMapEditor::_update_palette() { int selected = get_selected_tile(); palette->clear(); + manual_palette->clear(); + manual_palette->hide(); Ref<TileSet> tileset = node->get_tileset(); if (tileset.is_null()) @@ -268,7 +350,6 @@ void TileMapEditor::_update_palette() { List<int> tiles; tileset->get_tile_list(&tiles); - if (tiles.empty()) return; @@ -284,6 +365,9 @@ void TileMapEditor::_update_palette() { palette->set_fixed_icon_size(Size2(min_size, min_size)); palette->set_fixed_column_width(min_size * MAX(size_slider->get_value(), 1)); + palette->set_same_column_width(true); + manual_palette->set_fixed_icon_size(Size2(min_size, min_size)); + manual_palette->set_same_column_width(true); String filter = search_box->get_text().strip_edges(); @@ -344,12 +428,51 @@ void TileMapEditor::_update_palette() { palette->set_item_metadata(palette->get_item_count() - 1, entries[i].id); } - palette->set_same_column_width(true); - if (selected != -1) set_selected_tile(selected); else palette->select(0); + + if (manual_autotile && tileset->tile_get_tile_mode(get_selected_tile()) == TileSet::AUTO_TILE) { + + const Map<Vector2, uint16_t> &tiles = tileset->autotile_get_bitmask_map(get_selected_tile()); + + Vector<Vector2> entries; + for (const Map<Vector2, uint16_t>::Element *E = tiles.front(); E; E = E->next()) { + entries.push_back(E->key()); + } + entries.sort(); + + Ref<Texture> tex = tileset->tile_get_texture(get_selected_tile()); + + for (int i = 0; i < entries.size(); i++) { + + manual_palette->add_item(String()); + + if (tex.is_valid()) { + + Rect2 region = tileset->tile_get_region(get_selected_tile()); + int spacing = tileset->autotile_get_spacing(get_selected_tile()); + region.size = tileset->autotile_get_size(get_selected_tile()); + region.position += (region.size + Vector2(spacing, spacing)) * entries[i]; + + if (!region.has_no_area()) + manual_palette->set_item_icon_region(manual_palette->get_item_count() - 1, region); + + manual_palette->set_item_icon(manual_palette->get_item_count() - 1, tex); + } + + manual_palette->set_item_metadata(manual_palette->get_item_count() - 1, entries[i]); + } + } + + if (manual_palette->get_item_count() > 0) { + // Only show the manual palette if at least tile exists in it + int selected = manual_palette->get_current(); + if (selected == -1) selected = 0; + manual_palette->set_current(selected); + manual_palette->show(); + } } void TileMapEditor::_pick_tile(const Point2 &p_pos) { @@ -533,9 +656,17 @@ void TileMapEditor::_draw_cell(int p_cell, const Point2i &p_point, bool p_flip_h Rect2 r = node->get_tileset()->tile_get_region(p_cell); if (node->get_tileset()->tile_get_tile_mode(p_cell) == TileSet::AUTO_TILE) { + Vector2 offset; + int selected = manual_palette->get_current(); + if (manual_autotile && selected != -1) { + offset = manual_palette->get_item_metadata(selected); + } else { + offset = node->get_tileset()->autotile_get_icon_coordinate(p_cell); + } + 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); + r.position += (r.size + Vector2(spacing, spacing)) * offset; } Size2 sc = p_xform.get_scale(); @@ -760,8 +891,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_PAINTING; - undo_redo->create_action(TTR("Paint TileMap")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Paint TileMap")); } } else if (tool == TOOL_PICKING) { @@ -785,8 +915,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (id != TileMap::INVALID_CELL) { _set_cell(over_tile, id, flip_h, flip_v, transpose); - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); - undo_redo->commit_action(); + _finish_undo(); paint_undo.clear(); } @@ -796,14 +925,12 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (id != TileMap::INVALID_CELL) { - undo_redo->create_action(TTR("Line Draw")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Line Draw")); for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) { _set_cell(E->key(), id, flip_h, flip_v, transpose); } - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); - undo_redo->commit_action(); + _finish_undo(); paint_undo.clear(); @@ -815,16 +942,14 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (id != TileMap::INVALID_CELL) { - undo_redo->create_action(TTR("Rectangle Paint")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Rectangle Paint")); 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), id, flip_h, flip_v, transpose); } } - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); - undo_redo->commit_action(); + _finish_undo(); canvas_item_editor->update(); } @@ -832,14 +957,12 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { Point2 ofs = over_tile - rectangle.position; - undo_redo->create_action(TTR("Duplicate")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Duplicate")); 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(); + _finish_undo(); copydata.clear(); @@ -848,8 +971,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { 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")); + _start_undo(TTR("Move")); 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++) { @@ -860,8 +982,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { _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(); + _finish_undo(); copydata.clear(); selection_active = false; @@ -880,7 +1001,6 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; undo_redo->create_action(TTR("Bucket Fill")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); Dictionary op; op["id"] = get_selected_tile(); @@ -890,7 +1010,6 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { _fill_points(points, op); - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); undo_redo->commit_action(); // We want to keep the bucket-tool active @@ -942,8 +1061,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { Point2 local = node->world_to_map(xform_inv.xform(mb->get_position())); - undo_redo->create_action(TTR("Erase TileMap")); - undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data")); + _start_undo(TTR("Erase TileMap")); if (mb->get_shift()) { #ifdef APPLE_STYLE_KEYS @@ -970,8 +1088,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } else { if (tool == TOOL_ERASING || tool == TOOL_RECTANGLE_ERASE || tool == TOOL_LINE_ERASE) { - undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data")); - undo_redo->commit_action(); + _finish_undo(); if (tool == TOOL_RECTANGLE_ERASE || tool == TOOL_LINE_ERASE) { canvas_item_editor->update(); @@ -1503,12 +1620,14 @@ void TileMapEditor::_tileset_settings_changed() { void TileMapEditor::_icon_size_changed(float p_value) { if (node) { palette->set_icon_scale(p_value); + manual_palette->set_icon_scale(p_value); _update_palette(); } } void TileMapEditor::_bind_methods() { + ClassDB::bind_method(D_METHOD("_manual_toggled"), &TileMapEditor::_manual_toggled); ClassDB::bind_method(D_METHOD("_text_entered"), &TileMapEditor::_text_entered); ClassDB::bind_method(D_METHOD("_text_changed"), &TileMapEditor::_text_changed); ClassDB::bind_method(D_METHOD("_sbox_input"), &TileMapEditor::_sbox_input); @@ -1517,6 +1636,7 @@ void TileMapEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_canvas_mouse_exit"), &TileMapEditor::_canvas_mouse_exit); ClassDB::bind_method(D_METHOD("_tileset_settings_changed"), &TileMapEditor::_tileset_settings_changed); ClassDB::bind_method(D_METHOD("_update_transform_buttons"), &TileMapEditor::_update_transform_buttons); + ClassDB::bind_method(D_METHOD("_palette_selected"), &TileMapEditor::_palette_selected); ClassDB::bind_method(D_METHOD("_fill_points"), &TileMapEditor::_fill_points); ClassDB::bind_method(D_METHOD("_erase_points"), &TileMapEditor::_erase_points); @@ -1534,6 +1654,7 @@ TileMapEditor::CellOp TileMapEditor::_get_op_from_cell(const Point2i &p_pos) { op.yf = true; if (node->is_cell_transposed(p_pos.x, p_pos.y)) op.tr = true; + op.ac = node->get_cell_autotile_coord(p_pos.x, p_pos.y); } return op; } @@ -1574,6 +1695,8 @@ void TileMapEditor::_update_transform_buttons(Object *p_button) { TileMapEditor::TileMapEditor(EditorNode *p_editor) { node = NULL; + manual_autotile = false; + manual_position = Vector2(0, 0); canvas_item_editor = NULL; editor = p_editor; undo_redo = editor->get_undo_redo(); @@ -1601,6 +1724,11 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { HBoxContainer *tool_hb2 = memnew(HBoxContainer); add_child(tool_hb2); + manual_button = memnew(CheckBox); + manual_button->set_text("Disable Autotile"); + manual_button->connect("toggled", this, "_manual_toggled"); + add_child(manual_button); + search_box = memnew(LineEdit); search_box->set_h_size_flags(SIZE_EXPAND_FILL); search_box->connect("text_entered", this, "_text_entered"); @@ -1619,14 +1747,30 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { int mw = EDITOR_DEF("editors/tile_map/palette_min_width", 80); + VSplitContainer *palette_container = memnew(VSplitContainer); + palette_container->set_v_size_flags(SIZE_EXPAND_FILL); + palette_container->set_custom_minimum_size(Size2(mw, 0)); + add_child(palette_container); + // Add tile palette palette = memnew(ItemList); + palette->set_h_size_flags(SIZE_EXPAND_FILL); palette->set_v_size_flags(SIZE_EXPAND_FILL); - palette->set_custom_minimum_size(Size2(mw, 0)); palette->set_max_columns(0); palette->set_icon_mode(ItemList::ICON_MODE_TOP); palette->set_max_text_lines(2); - add_child(palette); + palette->connect("item_selected", this, "_palette_selected"); + palette_container->add_child(palette); + + // Add autotile override palette + manual_palette = memnew(ItemList); + manual_palette->set_h_size_flags(SIZE_EXPAND_FILL); + manual_palette->set_v_size_flags(SIZE_EXPAND_FILL); + manual_palette->set_max_columns(0); + manual_palette->set_icon_mode(ItemList::ICON_MODE_TOP); + manual_palette->set_max_text_lines(2); + manual_palette->hide(); + palette_container->add_child(manual_palette); // Add menu items toolbar = memnew(HBoxContainer); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index 642870aec0..77e9a33892 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -35,6 +35,7 @@ #include "editor/editor_plugin.h" #include "scene/2d/tile_map.h" +#include "scene/gui/check_box.h" #include "scene/gui/label.h" #include "scene/gui/line_edit.h" #include "scene/gui/menu_button.h" @@ -77,6 +78,8 @@ class TileMapEditor : public VBoxContainer { }; TileMap *node; + bool manual_autotile; + Vector2 manual_position; EditorNode *editor; UndoRedo *undo_redo; @@ -85,6 +88,7 @@ class TileMapEditor : public VBoxContainer { LineEdit *search_box; HSlider *size_slider; ItemList *palette; + ItemList *manual_palette; HBoxContainer *toolbar; @@ -97,6 +101,7 @@ class TileMapEditor : public VBoxContainer { ToolButton *rotate_90; ToolButton *rotate_180; ToolButton *rotate_270; + CheckBox *manual_button; Tool tool; @@ -124,6 +129,7 @@ class TileMapEditor : public VBoxContainer { bool xf; bool yf; bool tr; + Vector2 ac; CellOp() : idx(TileMap::INVALID_CELL), @@ -150,6 +156,8 @@ class TileMapEditor : public VBoxContainer { List<TileData> copydata; + Map<Point2i, CellOp> undo_data; + void _pick_tile(const Point2 &p_pos); PoolVector<Vector2> _bucket_fill(const Point2i &p_start, bool erase = false, bool preview = false); @@ -168,12 +176,17 @@ class TileMapEditor : public VBoxContainer { int get_selected_tile() const; void set_selected_tile(int p_tile); + void _manual_toggled(bool p_enabled); void _text_entered(const String &p_text); void _text_changed(const String &p_text); void _sbox_input(const Ref<InputEvent> &p_ie); void _update_palette(); void _menu_option(int p_option); + void _palette_selected(int index); + void _start_undo(const String &p_action); + void _finish_undo(); + void _create_set_cell_undo(const Vector2 &p_vec, const CellOp &p_cell_old, const CellOp &p_cell_new); void _set_cell(const Point2i &p_pos, int p_value, bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false); void _canvas_mouse_enter(); diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index c79cf02062..087c4293f1 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -123,10 +123,10 @@ void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) { for (List<uint32_t>::Element *E = shapes.front(); E; E = E->next()) { if (sb->is_shape_owner_disabled(E->get())) continue; - Transform2D shape_transform = sb->shape_owner_get_transform(E->get()); + Transform2D shape_transform = sb->get_transform() * sb->shape_owner_get_transform(E->get()); bool one_way = sb->is_shape_owner_one_way_collision_enabled(E->get()); - shape_transform[2] -= phys_offset - sb->get_transform().xform(shape_transform[2]); + shape_transform[2] -= phys_offset; for (int k = 0; k < sb->shape_owner_get_shape_count(E->get()); k++) { diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 82fd727620..cf136a5e58 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -149,53 +149,71 @@ void ProjectSettingsEditor::_action_edited() { if (!ti) return; - String new_name = ti->get_text(0); - String old_name = add_at.substr(add_at.find("/") + 1, add_at.length()); + if (input_editor->get_selected_column() == 0) { - if (new_name == old_name) - return; + String new_name = ti->get_text(0); + String old_name = add_at.substr(add_at.find("/") + 1, add_at.length()); - if (new_name == "" || !_validate_action_name(new_name)) { + if (new_name == old_name) + return; - ti->set_text(0, old_name); - add_at = "input/" + old_name; + if (new_name == "" || !_validate_action_name(new_name)) { - message->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\', or '\"'.")); - message->popup_centered(Size2(300, 100) * EDSCALE); - return; - } + ti->set_text(0, old_name); + add_at = "input/" + old_name; - String action_prop = "input/" + new_name; + message->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'")); + message->popup_centered(Size2(300, 100) * EDSCALE); + return; + } - if (ProjectSettings::get_singleton()->has_setting(action_prop)) { + String action_prop = "input/" + new_name; - ti->set_text(0, old_name); - add_at = "input/" + old_name; + if (ProjectSettings::get_singleton()->has_setting(action_prop)) { - message->set_text(vformat(TTR("Action '%s' already exists!"), new_name)); - message->popup_centered(Size2(300, 100) * EDSCALE); - return; - } + ti->set_text(0, old_name); + add_at = "input/" + old_name; - int order = ProjectSettings::get_singleton()->get_order(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, 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, 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"); - undo_redo->add_do_method(this, "_settings_changed"); - undo_redo->add_undo_method(this, "_settings_changed"); - undo_redo->commit_action(); - setting = false; + message->set_text(vformat(TTR("Action '%s' already exists!"), new_name)); + message->popup_centered(Size2(300, 100) * EDSCALE); + return; + } - add_at = action_prop; + int order = ProjectSettings::get_singleton()->get_order(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, 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, 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"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); + setting = false; + + add_at = action_prop; + } else if (input_editor->get_selected_column() == 1) { + + String name = "input/" + ti->get_text(0); + Dictionary old_action = ProjectSettings::get_singleton()->get(name); + Dictionary new_action = old_action.duplicate(); + new_action["deadzone"] = ti->get_range(1); + + undo_redo->create_action(TTR("Change Action deadzone")); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, new_action); + undo_redo->add_do_method(this, "_update_actions"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", name, old_action); + undo_redo->add_undo_method(this, "_update_actions"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); + } } void ProjectSettingsEditor::_device_input_add() { @@ -237,24 +255,18 @@ void ProjectSettingsEditor::_device_input_add() { jm->set_axis_value(device_index->get_selected() & 1 ? 1 : -1); jm->set_device(_get_current_device()); - bool should_update_event = true; - Variant deadzone = device_special_value->get_value(); for (int i = 0; i < events.size(); 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()) { - should_update_event = false; - break; + return; } } - if (!should_update_event && deadzone == action["deadzone"]) - return; - ie = jm; - action["deadzone"] = deadzone; } break; case INPUT_JOY_BUTTON: { @@ -430,8 +442,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even 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: { @@ -458,8 +468,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even device_input->get_ok()->set_text(TTR("Add")); } - device_special_value_label->hide(); - device_special_value->hide(); } break; case INPUT_JOY_MOTION: { @@ -482,14 +490,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even 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: { @@ -512,8 +512,6 @@ void ProjectSettingsEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_even device_input->get_ok()->set_text(TTR("Add")); } - device_special_value_label->hide(); - device_special_value->hide(); } break; default: {} } @@ -673,17 +671,24 @@ void ProjectSettingsEditor::_update_actions() { if (name == "") continue; + Dictionary action = ProjectSettings::get_singleton()->get(pi.name); + Array events = action["events"]; + TreeItem *item = input_editor->create_item(root); item->set_text(0, name); - item->add_button(0, get_icon("Add", "EditorIcons"), 1, false, TTR("Add Event")); - if (!ProjectSettings::get_singleton()->get_input_presets().find(pi.name)) { - item->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove")); - item->set_editable(0, true); - } item->set_custom_bg_color(0, get_color("prop_subsection", "Editor")); - Dictionary action = ProjectSettings::get_singleton()->get(pi.name); - Array events = action["events"]; + item->set_editable(1, true); + item->set_cell_mode(1, TreeItem::CELL_MODE_RANGE); + item->set_range_config(1, 0.0, 1.0, 0.01); + item->set_range(1, action["deadzone"]); + item->set_custom_bg_color(1, get_color("prop_subsection", "Editor")); + + item->add_button(2, get_icon("Add", "EditorIcons"), 1, false, TTR("Add Event")); + if (!ProjectSettings::get_singleton()->get_input_presets().find(pi.name)) { + item->add_button(2, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove")); + item->set_editable(2, true); + } for (int i = 0; i < events.size(); i++) { @@ -752,10 +757,11 @@ void ProjectSettingsEditor::_update_actions() { 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", event); + + action->add_button(2, get_icon("Edit", "EditorIcons"), 3, false, TTR("Edit")); + action->add_button(2, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove")); } } @@ -894,7 +900,7 @@ void ProjectSettingsEditor::_action_check(String p_action) { if (!_validate_action_name(p_action)) { - action_add_error->set_text(TTR("Invalid action name. it cannot be empty nor 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; @@ -1790,6 +1796,14 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { input_editor = memnew(Tree); vbc->add_child(input_editor); input_editor->set_v_size_flags(SIZE_EXPAND_FILL); + input_editor->set_columns(3); + input_editor->set_column_titles_visible(true); + input_editor->set_column_title(0, TTR("Action")); + input_editor->set_column_title(1, TTR("Deadzone")); + input_editor->set_column_expand(1, false); + input_editor->set_column_min_width(1, 80); + input_editor->set_column_expand(2, false); + input_editor->set_column_min_width(2, 50); input_editor->connect("item_edited", this, "_action_edited"); input_editor->connect("item_activated", this, "_action_activated"); input_editor->connect("cell_selected", this, "_action_selected"); @@ -1846,14 +1860,6 @@ 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 @@ -1979,7 +1985,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { tab_container->add_child(plugin_settings); timer = memnew(Timer); - timer->set_wait_time(1.5); + timer->set_wait_time(0.1); timer->connect("timeout", ProjectSettings::get_singleton(), "save"); timer->set_one_shot(true); add_child(timer); diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index b8bfdcd876..0ced88d7f6 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -83,8 +83,6 @@ class ProjectSettingsEditor : public AcceptDialog { 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; diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index e912ebe03a..7f46844f6c 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -847,6 +847,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: if (!color_picker) { //late init for performance color_picker = memnew(ColorPicker); + color_picker->set_deferred_mode(true); add_child(color_picker); color_picker->hide(); color_picker->connect("color_changed", this, "_color_changed"); diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 3e95064ead..d927e07976 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -120,33 +120,33 @@ void PropertySelector::_update_search() { bool found = false; Ref<Texture> type_icons[Variant::VARIANT_MAX] = { - Control::get_icon("MiniVariant", "EditorIcons"), - Control::get_icon("MiniBoolean", "EditorIcons"), - Control::get_icon("MiniInteger", "EditorIcons"), - Control::get_icon("MiniFloat", "EditorIcons"), - Control::get_icon("MiniString", "EditorIcons"), - Control::get_icon("MiniVector2", "EditorIcons"), - Control::get_icon("MiniRect2", "EditorIcons"), - Control::get_icon("MiniVector3", "EditorIcons"), - Control::get_icon("MiniMatrix2", "EditorIcons"), - Control::get_icon("MiniPlane", "EditorIcons"), - Control::get_icon("MiniQuat", "EditorIcons"), - Control::get_icon("MiniAabb", "EditorIcons"), - Control::get_icon("MiniMatrix3", "EditorIcons"), - Control::get_icon("MiniTransform", "EditorIcons"), - Control::get_icon("MiniColor", "EditorIcons"), - Control::get_icon("MiniPath", "EditorIcons"), - Control::get_icon("MiniRid", "EditorIcons"), - Control::get_icon("MiniObject", "EditorIcons"), - Control::get_icon("MiniDictionary", "EditorIcons"), - Control::get_icon("MiniArray", "EditorIcons"), - Control::get_icon("MiniRawArray", "EditorIcons"), - Control::get_icon("MiniIntArray", "EditorIcons"), - Control::get_icon("MiniFloatArray", "EditorIcons"), - Control::get_icon("MiniStringArray", "EditorIcons"), - Control::get_icon("MiniVector2Array", "EditorIcons"), - Control::get_icon("MiniVector3Array", "EditorIcons"), - Control::get_icon("MiniColorArray", "EditorIcons") + Control::get_icon("Variant", "EditorIcons"), + Control::get_icon("bool", "EditorIcons"), + Control::get_icon("int", "EditorIcons"), + Control::get_icon("float", "EditorIcons"), + Control::get_icon("String", "EditorIcons"), + Control::get_icon("Vector2", "EditorIcons"), + Control::get_icon("Rect2", "EditorIcons"), + Control::get_icon("Vector3", "EditorIcons"), + Control::get_icon("Transform2D", "EditorIcons"), + Control::get_icon("Plane", "EditorIcons"), + Control::get_icon("Quat", "EditorIcons"), + Control::get_icon("AABB", "EditorIcons"), + Control::get_icon("Basis", "EditorIcons"), + Control::get_icon("Transform", "EditorIcons"), + Control::get_icon("Color", "EditorIcons"), + Control::get_icon("Path", "EditorIcons"), + Control::get_icon("RID", "EditorIcons"), + Control::get_icon("Object", "EditorIcons"), + Control::get_icon("Dictionary", "EditorIcons"), + Control::get_icon("Array", "EditorIcons"), + Control::get_icon("PoolByteArray", "EditorIcons"), + Control::get_icon("PoolIntArray", "EditorIcons"), + Control::get_icon("PoolRealArray", "EditorIcons"), + Control::get_icon("PoolStringArray", "EditorIcons"), + Control::get_icon("PoolVector2Array", "EditorIcons"), + Control::get_icon("PoolVector3Array", "EditorIcons"), + Control::get_icon("PoolColorArray", "EditorIcons") }; for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { @@ -175,6 +175,10 @@ void PropertySelector::_update_search() { if (search_box->get_text() != String() && E->get().name.find(search_box->get_text()) == -1) continue; + + if (type_filter.size() && type_filter.find(E->get().type) == -1) + continue; + TreeItem *item = search_options->create_item(category ? category : root); item->set_text(0, E->get().name); item->set_metadata(0, E->get().name); @@ -534,6 +538,10 @@ void PropertySelector::select_property_from_instance(Object *p_instance, const S _update_search(); } +void PropertySelector::set_type_filter(const Vector<Variant::Type> &p_type_filter) { + type_filter = p_type_filter; +} + void PropertySelector::_bind_methods() { ClassDB::bind_method(D_METHOD("_text_changed"), &PropertySelector::_text_changed); diff --git a/editor/property_selector.h b/editor/property_selector.h index d9b1aee422..f5b34d210e 100644 --- a/editor/property_selector.h +++ b/editor/property_selector.h @@ -60,6 +60,8 @@ class PropertySelector : public ConfirmationDialog { void _item_selected(); + Vector<Variant::Type> type_filter; + protected: void _notification(int p_what); static void _bind_methods(); @@ -75,6 +77,8 @@ public: void select_property_from_basic_type(Variant::Type p_type, const String &p_current = ""); void select_property_from_instance(Object *p_instance, const String &p_current = ""); + void set_type_filter(const Vector<Variant::Type> &p_type_filter); + PropertySelector(); }; diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index b82a036130..77ee65879b 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -33,7 +33,7 @@ #include "core/io/resource_saver.h" #include "core/os/keyboard.h" #include "core/project_settings.h" -#include "editor/animation_editor.h" + #include "editor/editor_node.h" #include "editor/editor_settings.h" #include "editor/multi_node_edit.h" @@ -113,7 +113,7 @@ void SceneTreeDock::instance(const String &p_file) { Node *parent = scene_tree->get_selected(); if (!parent) { - Node *parent = edited_scene; + parent = edited_scene; }; if (!edited_scene) { @@ -1248,7 +1248,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V path_renames[ni].second = fixed_node_path; } - editor_data->get_undo_redo().add_do_method(sed, "live_debug_reparent_node", edited_scene->get_path_to(node), edited_scene->get_path_to(new_parent), new_name, -1); + editor_data->get_undo_redo().add_do_method(sed, "live_debug_reparent_node", edited_scene->get_path_to(node), edited_scene->get_path_to(new_parent), new_name, p_position_in_parent + inc); editor_data->get_undo_redo().add_undo_method(sed, "live_debug_reparent_node", NodePath(String(edited_scene->get_path_to(new_parent)) + "/" + new_name), edited_scene->get_path_to(node->get_parent()), node->get_name(), node->get_index()); if (p_keep_global_xform) { @@ -1262,8 +1262,8 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V editor_data->get_undo_redo().add_do_method(this, "_set_owners", edited_scene, owners); - if (AnimationPlayerEditor::singleton->get_key_editor()->get_root() == node) - editor_data->get_undo_redo().add_do_method(AnimationPlayerEditor::singleton->get_key_editor(), "set_root", node); + if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == node) + editor_data->get_undo_redo().add_do_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", node); editor_data->get_undo_redo().add_undo_method(new_parent, "remove_child", node); editor_data->get_undo_redo().add_undo_method(node, "set_name", former_names[ni]); @@ -1290,8 +1290,8 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node); editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, child_pos); editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners); - if (AnimationPlayerEditor::singleton->get_key_editor()->get_root() == node) - editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_key_editor(), "set_root", node); + if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == node) + editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", node); if (p_keep_global_xform) { if (Object::cast_to<Node2D>(node)) @@ -1392,8 +1392,8 @@ void SceneTreeDock::_delete_confirm() { editor_data->get_undo_redo().add_do_method(n->get_parent(), "remove_child", n); editor_data->get_undo_redo().add_undo_method(n->get_parent(), "add_child", n); editor_data->get_undo_redo().add_undo_method(n->get_parent(), "move_child", n, n->get_index()); - if (AnimationPlayerEditor::singleton->get_key_editor()->get_root() == n) - editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_key_editor(), "set_root", n); + if (AnimationPlayerEditor::singleton->get_track_editor()->get_root() == n) + editor_data->get_undo_redo().add_undo_method(AnimationPlayerEditor::singleton->get_track_editor(), "set_root", n); editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners); editor_data->get_undo_redo().add_undo_reference(n); @@ -1895,8 +1895,6 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { 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("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/rename"), TOOL_RENAME); - } else { // multi select - menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/batch_rename"), TOOL_BATCH_RENAME); } menu->add_icon_shortcut(get_icon("Reload", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/change_node_type"), TOOL_REPLACE); menu->add_separator(); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index dd79ae63d6..88d614ab89 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -30,6 +30,7 @@ #include "scene_tree_editor.h" +#include "editor/plugins/animation_player_editor_plugin.h" #include "editor/plugins/canvas_item_editor_plugin.h" #include "editor_node.h" #include "message_queue.h" @@ -90,6 +91,12 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i _update_tree(); emit_signal("node_changed"); } + } else if (p_id == BUTTON_PIN) { + + if (n->is_class("AnimationPlayer")) { + AnimationPlayerEditor::singleton->unpin(); + _update_tree(); + } } else if (p_id == BUTTON_GROUP) { if (n->is_class("CanvasItem")) { @@ -159,6 +166,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { } TreeItem *item = tree->create_item(p_parent); + item->set_text(0, p_node->get_name()); if (can_rename && !part_of_subscene /*(p_node->get_owner() == get_scene_node() || p_node==get_scene_node())*/) item->set_editable(0, true); @@ -189,7 +197,9 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (part_of_subscene) { //item->set_selectable(0,marked_selectable); - item->set_custom_color(0, get_color("disabled_font_color", "Editor")); + if (valid_types.size() == 0) { + item->set_custom_color(0, get_color("disabled_font_color", "Editor")); + } } else if (marked.has(p_node)) { @@ -219,7 +229,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool has_groups = p_node->has_persistent_groups(); if (has_connections && has_groups) { - item->add_button(0, get_icon("SignalsAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s)\nClick to show signals dock.")); + item->add_button(0, get_icon("SignalsAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s).\nClick to show signals dock.")); } else if (has_connections) { item->add_button(0, get_icon("Signals", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connections.\nClick to show signals dock.")); } else if (has_groups) { @@ -245,18 +255,18 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (!p_node->get_script().is_null()) { - item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT, false, TTR("Open script")); + item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT, false, TTR("Open Script")); } if (p_node->is_class("CanvasItem")) { bool is_locked = p_node->has_meta("_edit_lock_"); //_edit_group_ if (is_locked) - item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock")); + item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); bool is_grouped = p_node->has_meta("_edit_group_"); if (is_grouped) - item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable")); + item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable.")); bool v = p_node->call("is_visible"); if (v) @@ -272,7 +282,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool is_locked = p_node->has_meta("_edit_lock_"); if (is_locked) - item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock")); + item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); bool v = p_node->call("is_visible"); if (v) @@ -284,6 +294,13 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { p_node->connect("visibility_changed", this, "_node_visibility_changed", varray(p_node)); _update_visibility_color(p_node, item); + } else if (p_node->is_class("AnimationPlayer")) { + + bool is_pinned = AnimationPlayerEditor::singleton->get_player() == p_node && AnimationPlayerEditor::singleton->is_pinned(); + + if (is_pinned) { + item->add_button(0, get_icon("Pin", "EditorIcons"), BUTTON_PIN, false, TTR("AnimationPlayer is pinned.\nClick to unpin.")); + } } } @@ -309,6 +326,22 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { keep = keep || child_keep; } + if (valid_types.size()) { + bool valid = false; + for (int i = 0; i < valid_types.size(); i++) { + if (p_node->is_class(valid_types[i])) { + valid = true; + break; + } + } + + if (!valid) { + //item->set_selectable(0,marked_selectable); + item->set_custom_color(0, get_color("disabled_font_color", "Editor")); + item->set_selectable(0, false); + } + } + if (!keep) { memdelete(item); return false; @@ -702,6 +735,10 @@ bool SceneTreeEditor::get_display_foreign_nodes() const { return display_foreign; } +void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) { + valid_types = p_valid; +} + void SceneTreeEditor::set_editor_selection(EditorSelection *p_selection) { editor_selection = p_selection; diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h index 896fd6c431..c4f63f5736 100644 --- a/editor/scene_tree_editor.h +++ b/editor/scene_tree_editor.h @@ -55,6 +55,7 @@ class SceneTreeEditor : public Control { BUTTON_WARNING = 5, BUTTON_SIGNALS = 6, BUTTON_GROUPS = 7, + BUTTON_PIN = 8, }; Tree *tree; @@ -130,6 +131,8 @@ class SceneTreeEditor : public Control { List<StringName> *script_types; bool _is_script_type(const StringName &p_type) const; + Vector<StringName> valid_types; + public: void set_filter(const String &p_filter); String get_filter() const; @@ -146,6 +149,7 @@ public: void set_editor_selection(EditorSelection *p_selection); void set_show_enabled_subscene(bool p_show) { show_enabled_subscene = p_show; } + void set_valid_types(const Vector<StringName> &p_valid); void update_tree() { _update_tree(); } diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index 9ce4305683..62848a6035 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -872,7 +872,7 @@ void ScriptEditorDebugger::_set_reason_text(const String &p_reason, MessageType reason->add_color_override("font_color", get_color("success_color", "Editor")); } reason->set_text(p_reason); - reason->set_tooltip(p_reason); + reason->set_tooltip(p_reason.word_wrap(80)); } void ScriptEditorDebugger::_performance_select() { @@ -1877,6 +1877,9 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { reason->set_text(""); hbc->add_child(reason); reason->set_h_size_flags(SIZE_EXPAND_FILL); + reason->set_autowrap(true); + reason->set_max_lines_visible(3); + reason->set_mouse_filter(Control::MOUSE_FILTER_PASS); hbc->add_child(memnew(VSeparator)); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index c3e9e4ab62..45041bcf59 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -61,7 +61,7 @@ void EditorSettingsDialog::_settings_property_edited(const String &p_name) { if (full_name == "text_editor/theme/color_theme") { property_editor->get_property_editor()->update_tree(); } else if (full_name == "interface/theme/accent_color" || full_name == "interface/theme/base_color" || full_name == "interface/theme/contrast") { - EditorSettings::get_singleton()->set_manually("interface/theme/preset", 6); // set preset to Custom + EditorSettings::get_singleton()->set_manually("interface/theme/preset", "Custom"); // set preset to Custom } else if (full_name.begins_with("text_editor/highlighting")) { EditorSettings::get_singleton()->set_manually("text_editor/theme/color_theme", "Custom"); } @@ -493,7 +493,7 @@ EditorSettingsDialog::EditorSettingsDialog() { //get_cancel()->set_text("Close"); timer = memnew(Timer); - timer->set_wait_time(1.5); + timer->set_wait_time(0.1); timer->connect("timeout", this, "_settings_save"); timer->set_one_shot(true); add_child(timer); diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 2652b09763..873420b383 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -201,6 +201,9 @@ void EditorSpatialGizmo::add_unscaled_billboard(const Ref<Material> &p_material, } } + selectable_icon_size = p_scale; + mesh->set_custom_aabb(AABB(Vector3(-selectable_icon_size, -selectable_icon_size, -selectable_icon_size) * 40.0f, Vector3(selectable_icon_size, selectable_icon_size, selectable_icon_size) * 80.0f)); + ins.mesh = mesh; ins.unscaled = true; ins.billboard = true; @@ -209,13 +212,13 @@ void EditorSpatialGizmo::add_unscaled_billboard(const Ref<Material> &p_material, VS::get_singleton()->instance_set_transform(ins.instance, spatial_node->get_global_transform()); } + selectable_icon_size = p_scale * 2.0; + instances.push_back(ins); } -void EditorSpatialGizmo::add_collision_triangles(const Ref<TriangleMesh> &p_tmesh, const AABB &p_bounds) { - +void EditorSpatialGizmo::add_collision_triangles(const Ref<TriangleMesh> &p_tmesh) { collision_mesh = p_tmesh; - collision_mesh_bounds = p_bounds; } void EditorSpatialGizmo::add_collision_segments(const Vector<Vector3> &p_lines) { @@ -332,64 +335,74 @@ bool EditorSpatialGizmo::intersect_frustum(const Camera *p_camera, const Vector< ERR_FAIL_COND_V(!spatial_node, false); ERR_FAIL_COND_V(!valid, false); - if (collision_segments.size()) { + if (selectable_icon_size > 0.0f) { + Vector3 origin = spatial_node->get_global_transform().get_origin(); const Plane *p = p_frustum.ptr(); int fc = p_frustum.size(); - int vc = collision_segments.size(); - const Vector3 *vptr = collision_segments.ptr(); - Transform t = spatial_node->get_global_transform(); + bool any_out = false; - for (int i = 0; i < vc / 2; i++) { + for (int j = 0; j < fc; j++) { - Vector3 a = t.xform(vptr[i * 2 + 0]); - Vector3 b = t.xform(vptr[i * 2 + 1]); + if (p[j].is_point_over(origin)) { + any_out = true; + break; + } + } + + if (!any_out) + return true; + return false; + } - bool any_out = false; - for (int j = 0; j < fc; j++) { + if (collision_segments.size()) { - if (p[j].distance_to(a) > 0 && p[j].distance_to(b) > 0) { + const Plane *p = p_frustum.ptr(); + int fc = p_frustum.size(); + int vc = collision_segments.size(); + const Vector3 *vptr = collision_segments.ptr(); + Transform t = spatial_node->get_global_transform(); + + bool any_out = false; + for (int j = 0; j < fc; j++) { + for (int i = 0; i < vc; i++) { + Vector3 v = t.xform(vptr[i]); + if (p[j].is_point_over(v)) { any_out = true; break; } } - - if (!any_out) - return true; + if (any_out) break; } - return false; + if (!any_out) return true; } - if (collision_mesh_bounds.size != Vector3(0.0, 0.0, 0.0)) { + if (collision_mesh.is_valid()) { Transform t = spatial_node->get_global_transform(); - const Plane *p = p_frustum.ptr(); - int fc = p_frustum.size(); - Vector3 mins = t.xform(collision_mesh_bounds.get_position()); - Vector3 max = t.xform(collision_mesh_bounds.get_position() + collision_mesh_bounds.get_size()); - - bool any_out = false; + Vector3 mesh_scale = t.get_basis().get_scale(); + t.orthonormalize(); - for (int j = 0; j < fc; j++) { + Transform it = t.affine_inverse(); - if (p[j].distance_to(mins) > 0 || p[j].distance_to(max) > 0) { + Vector<Plane> transformed_frustum; - any_out = true; - break; - } + for (int i = 0; i < 4; i++) { + transformed_frustum.push_back(it.xform(p_frustum[i])); } - if (!any_out) + if (collision_mesh->inside_convex_shape(transformed_frustum.ptr(), transformed_frustum.size(), mesh_scale)) { return true; + } } return false; } -bool EditorSpatialGizmo::intersect_ray(const Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle, bool p_sec_first) { +bool EditorSpatialGizmo::intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle, bool p_sec_first) { ERR_FAIL_COND_V(!spatial_node, false); ERR_FAIL_COND_V(!valid, false); @@ -453,6 +466,43 @@ bool EditorSpatialGizmo::intersect_ray(const Camera *p_camera, const Point2 &p_p } } + if (selectable_icon_size > 0.0f) { + + Transform t = spatial_node->get_global_transform(); + t.orthonormalize(); + t.set_look_at(t.origin, p_camera->get_camera_transform().origin, Vector3(0, 1, 0)); + + float scale = t.origin.distance_to(p_camera->get_camera_transform().origin); + + if (p_camera->get_projection() == Camera::PROJECTION_ORTHOGONAL) { + float h = Math::abs(p_camera->get_size()); + scale = (h * 2.0); + } + + Point2 center = p_camera->unproject_position(t.origin); + + Transform oct = p_camera->get_camera_transform(); + + p_camera->look_at(t.origin, Vector3(0, 1, 0)); + Vector3 c0 = t.xform(Vector3(selectable_icon_size, selectable_icon_size, 0) * scale); + Vector3 c1 = t.xform(Vector3(-selectable_icon_size, -selectable_icon_size, 0) * scale); + + Point2 p0 = p_camera->unproject_position(c0); + Point2 p1 = p_camera->unproject_position(c1); + + p_camera->set_global_transform(oct); + + Rect2 rect(p0, p1 - p0); + + rect.set_position(center - rect.get_size() / 2.0); + + if (rect.has_point(p_point)) { + return true; + } + + return false; + } + if (collision_segments.size()) { Plane camp(p_camera->get_transform().origin, (-p_camera->get_transform().basis.get_axis(2)).normalized()); @@ -664,7 +714,7 @@ void EditorSpatialGizmo::_bind_methods() { ClassDB::bind_method(D_METHOD("add_lines", "lines", "material", "billboard"), &EditorSpatialGizmo::add_lines, DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_mesh", "mesh", "billboard", "skeleton"), &EditorSpatialGizmo::add_mesh, DEFVAL(false), DEFVAL(RID())); ClassDB::bind_method(D_METHOD("add_collision_segments", "segments"), &EditorSpatialGizmo::add_collision_segments); - ClassDB::bind_method(D_METHOD("add_collision_triangles", "triangles", "bounds"), &EditorSpatialGizmo::add_collision_triangles); + ClassDB::bind_method(D_METHOD("add_collision_triangles", "triangles"), &EditorSpatialGizmo::add_collision_triangles); ClassDB::bind_method(D_METHOD("add_unscaled_billboard", "material", "default_scale"), &EditorSpatialGizmo::add_unscaled_billboard, DEFVAL(1)); ClassDB::bind_method(D_METHOD("add_handles", "handles", "billboard", "secondary"), &EditorSpatialGizmo::add_handles, DEFVAL(false), DEFVAL(false)); ClassDB::bind_method(D_METHOD("set_spatial_node", "node"), &EditorSpatialGizmo::_set_spatial_node); @@ -1272,14 +1322,15 @@ bool MeshInstanceSpatialGizmo::can_draw() const { } void MeshInstanceSpatialGizmo::redraw() { + clear(); + Ref<Mesh> m = mesh->get_mesh(); if (!m.is_valid()) return; //none Ref<TriangleMesh> tm = m->generate_triangle_mesh(); if (tm.is_valid()) { - AABB aabb; - add_collision_triangles(tm, aabb); + add_collision_triangles(tm); } } @@ -1291,6 +1342,27 @@ MeshInstanceSpatialGizmo::MeshInstanceSpatialGizmo(MeshInstance *p_mesh) { ///// +bool Sprite3DSpatialGizmo::can_draw() const { + return true; +} +void Sprite3DSpatialGizmo::redraw() { + + clear(); + + Ref<TriangleMesh> tm = sprite->generate_triangle_mesh(); + if (tm.is_valid()) { + add_collision_triangles(tm); + } +} + +Sprite3DSpatialGizmo::Sprite3DSpatialGizmo(SpriteBase3D *p_sprite) { + + sprite = p_sprite; + set_spatial_node(p_sprite); +} + +/// + void Position3DSpatialGizmo::redraw() { clear(); @@ -2540,8 +2612,9 @@ void ParticlesGizmo::redraw() { } //add_unscaled_billboard(SpatialEditorGizmos::singleton->visi,0.05); - add_unscaled_billboard(icon, 0.05); + add_handles(handles); + add_unscaled_billboard(icon, 0.05); } ParticlesGizmo::ParticlesGizmo(Particles *p_particles) { diff --git a/editor/spatial_editor_gizmos.h b/editor/spatial_editor_gizmos.h index c5dc36cb22..924f82dc16 100644 --- a/editor/spatial_editor_gizmos.h +++ b/editor/spatial_editor_gizmos.h @@ -49,6 +49,7 @@ #include "scene/3d/ray_cast.h" #include "scene/3d/reflection_probe.h" #include "scene/3d/room_instance.h" +#include "scene/3d/sprite_3d.h" #include "scene/3d/vehicle_body.h" #include "scene/3d/visibility_notifier.h" @@ -80,7 +81,6 @@ class EditorSpatialGizmo : public SpatialEditorGizmo { Vector<Vector3> collision_segments; Ref<TriangleMesh> collision_mesh; - AABB collision_mesh_bounds; struct Handle { Vector3 pos; @@ -89,6 +89,7 @@ class EditorSpatialGizmo : public SpatialEditorGizmo { Vector<Vector3> handles; Vector<Vector3> secondary_handles; + float selectable_icon_size = -1.0f; bool billboard_handle; bool valid; @@ -102,7 +103,7 @@ protected: void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false); void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const RID &p_skeleton = RID()); void add_collision_segments(const Vector<Vector3> &p_lines); - void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh, const AABB &p_bounds = AABB()); + void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh); 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 p_size, Vector3 p_position = Vector3()); @@ -118,7 +119,7 @@ protected: public: virtual Vector3 get_handle_pos(int p_idx) const; virtual bool intersect_frustum(const Camera *p_camera, const Vector<Plane> &p_frustum); - virtual bool intersect_ray(const Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false); + virtual bool intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false); void clear(); void create(); @@ -192,6 +193,18 @@ public: MeshInstanceSpatialGizmo(MeshInstance *p_mesh = NULL); }; +class Sprite3DSpatialGizmo : public EditorSpatialGizmo { + + GDCLASS(Sprite3DSpatialGizmo, EditorSpatialGizmo); + + SpriteBase3D *sprite; + +public: + virtual bool can_draw() const; + void redraw(); + Sprite3DSpatialGizmo(SpriteBase3D *p_sprite = NULL); +}; + class Position3DSpatialGizmo : public EditorSpatialGizmo { GDCLASS(Position3DSpatialGizmo, EditorSpatialGizmo); diff --git a/editor/translations/af.po b/editor/translations/af.po index 8644e20317..c5853bbb2f 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -502,7 +502,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Koppel '%s' aan '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Koppel..." #: editor/connections_dialog.cpp @@ -928,11 +928,11 @@ msgid "Move Audio Bus" msgstr "Skuif Oudio-Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Stoor Oudio-Bus Uitleg As..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Ligging van Nuwe Uitleg..." #: editor/editor_audio_buses.cpp @@ -1071,11 +1071,11 @@ msgid "Updating Scene" msgstr "Toneel word Opgedateer" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Plaaslike veranderinge word gebêre..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Toneel word opgedateer..." #: editor/editor_data.cpp @@ -1146,7 +1146,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 @@ -1416,12 +1416,12 @@ msgid "Error saving resource!" msgstr "Fout tydens storing van hulpbron!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Stoor Hulpbron As..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Ek sien..." #: editor/editor_node.cpp @@ -1626,11 +1626,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 @@ -1642,7 +1642,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 @@ -1694,7 +1694,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 @@ -1839,7 +1839,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1851,11 +1851,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 @@ -1875,15 +1875,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 @@ -2128,7 +2128,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 @@ -2237,7 +2237,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2388,7 +2388,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 @@ -2464,7 +2464,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 @@ -2481,7 +2481,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2495,7 +2495,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2632,11 +2632,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 @@ -2649,16 +2649,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Dupliseer" #: editor/filesystem_dock.cpp @@ -2684,7 +2684,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2750,7 +2750,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2762,7 +2762,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 @@ -2778,7 +2778,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2798,7 +2798,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3213,7 +3213,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 @@ -3221,7 +3221,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 @@ -3290,7 +3290,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3357,7 +3357,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3544,6 +3544,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3965,7 +3966,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 @@ -4170,7 +4171,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 @@ -4532,7 +4533,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 @@ -4629,7 +4630,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 @@ -4835,15 +4836,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 @@ -5294,11 +5295,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5551,7 +5548,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5619,7 +5616,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5808,7 +5805,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5899,6 +5896,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ongeldige naam." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kon nie vouer skep nie." @@ -6087,8 +6089,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6116,7 +6118,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 @@ -6300,7 +6302,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6396,11 +6398,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 @@ -6571,7 +6573,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 diff --git a/editor/translations/ar.po b/editor/translations/ar.po index a57dc0f0cc..ccf2b97d9a 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.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. # +# Adel <dragonhunter250@gmail.com>, 2018. # athomield <athomield@hotmail.com>, 2017. # Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017. # Jamal Alyafei <jamal.qassim@gmail.com>, 2017. @@ -13,14 +14,15 @@ # noureldin sharaf <sharaf.noureldin@yahoo.com>, 2017. # omar anwar aglan <omar.aglan91@yahoo.com>, 2017-2018. # OWs Tetra <owstetra@gmail.com>, 2017. +# Rached Noureddine <rached.noureddine@gmail.com>, 2018. # Rex_sa <asd1234567890m@gmail.com>, 2017. # Wajdi Feki <wajdi.feki@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-30 16:34+0000\n" -"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" +"PO-Revision-Date: 2018-05-28 18:34+0000\n" +"Last-Translator: Rached Noureddine <rached.noureddine@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -28,7 +30,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -508,7 +510,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "قطع إتصال'%s' من '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "يتصل..." #: editor/connections_dialog.cpp @@ -928,11 +930,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 @@ -1068,11 +1070,11 @@ msgid "Updating Scene" msgstr "يُحدث المشهد" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "جاري تخزين التعديلات المحلية.." +msgid "Storing local changes..." +msgstr "جاري تخزين التعديلات المحلية..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "يُحدث المشهد..." #: editor/editor_data.cpp @@ -1141,8 +1143,8 @@ msgid "Show In File Manager" msgstr "أظهر في مدير الملفات" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "مجلد جديد.." +msgid "New Folder..." +msgstr "مجلد جديد..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1403,20 +1405,20 @@ msgstr "أخلاء الخرج" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "تصدير المشروع فشل, رمز الخطأ % d." #: 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.." -msgstr "أنا أري.." +msgid "I see..." +msgstr "أنا أري..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1640,11 +1642,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 @@ -1656,8 +1658,8 @@ msgid "Save changes to '%s' before closing?" msgstr "هل تريد حفظ التغييرات إلي'%s' قبل الإغلاق؟" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "حفظ المشهد كـ.." +msgid "Save Scene As..." +msgstr "حفظ المشهد كـ..." #: editor/editor_node.cpp msgid "No" @@ -1708,7 +1710,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 @@ -1865,8 +1867,8 @@ msgid "Previous tab" msgstr "التبويب السابق" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "فلتر الملفات.." +msgid "Filter Files..." +msgstr "فلتر الملفات..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1877,12 +1879,12 @@ msgid "New Scene" msgstr "مشهد جديد" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "مشهد مورث جديد.." +msgid "New Inherited Scene..." +msgstr "مشهد مورث جديد..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "افتح مشهد.." +msgid "Open Scene..." +msgstr "افتح مشهد..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1901,16 +1903,16 @@ msgid "Open Recent" msgstr "فُتح مؤخراً" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "تحويل الي.." +msgid "Convert To..." +msgstr "تحويل الي..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "مكتبة الميش.." +msgid "MeshLibrary..." +msgstr "مكتبة الميش..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "مجموعة البلاط.." +msgid "TileSet..." +msgstr "مجموعة البلاط..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2171,7 +2173,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 @@ -2280,8 +2282,8 @@ msgid "Creating Mesh Previews" msgstr "يُنشئ مستعرضات الميش" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "الصورة المصغرة.." +msgid "Thumbnail..." +msgstr "الصورة المصغرة..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2433,8 +2435,8 @@ msgid "(Current)" msgstr "(الحالي)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "يستقبل المرايا، من فضلك إنتظر.." +msgid "Retrieving mirrors, please wait..." +msgstr "يستقبل المرايا، من فضلك إنتظر..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2511,8 +2513,8 @@ msgid "Error requesting url: " msgstr "خطأ في طلب الرابط: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "يتصل بالسرفر.." +msgid "Connecting to Mirror..." +msgstr "يتصل بالسرفر..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2528,7 +2530,7 @@ msgstr "لا يمكن الحل" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "جاري الإتصال..." #: editor/export_template_manager.cpp @@ -2541,7 +2543,7 @@ msgstr "متصل" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "جار الطلب..." #: editor/export_template_manager.cpp @@ -2674,12 +2676,12 @@ msgid "Collapse all" msgstr "طوي الكل" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "إعادة تسمية.." +msgid "Rename..." +msgstr "إعادة تسمية..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "تحريك إلي.." +msgid "Move To..." +msgstr "تحريك إلي..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2690,15 +2692,15 @@ msgid "Instance" msgstr "نموذج" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "تعديل التبعيات.." +msgid "Edit Dependencies..." +msgstr "تعديل التبعيات..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "أظهر المُلاك.." +msgid "View Owners..." +msgstr "أظهر المُلاك..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "تكرير..." #: editor/filesystem_dock.cpp @@ -2724,10 +2726,10 @@ msgstr "نمذج المشهد(المشاهد) المحددة كطفل للعقد #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "يفحص الملفات،\n" -"من فضلك إنتظر.." +"من فضلك إنتظر..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2792,8 +2794,8 @@ msgid "Import Scene" msgstr "إستيراد مشهد" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "حاري إستيراد المشهد.." +msgid "Importing Scene..." +msgstr "حاري إستيراد المشهد..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2804,8 +2806,8 @@ msgid "Generating for Mesh: " msgstr "انشاء من اجل الميش: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "تشغيل الكود المُخصص.." +msgid "Running Custom Script..." +msgstr "تشغيل الكود المُخصص..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2820,8 +2822,8 @@ msgid "Error running post-import script:" msgstr "خطأ في تشغيل الكود الملصق- المستورد:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "جاري الحفظ.." +msgid "Saving..." +msgstr "جاري الحفظ..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2840,8 +2842,8 @@ msgid "Import As:" msgstr "إستيراد كـ:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "إعداد مُسبق.." +msgid "Preset..." +msgstr "إعداد مُسبق..." #: editor/import_dock.cpp msgid "Reimport" @@ -3258,16 +3260,16 @@ msgid "Transition Node" msgstr "عقدة التنقل" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "إستيراد الحركة.." +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 "الفلترة.." +msgid "Filters..." +msgstr "الفلترة..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3334,7 +3336,7 @@ msgid "Fetching:" msgstr "يجلب:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "جاري الحل..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3401,7 +3403,7 @@ msgid "Site:" msgstr "الموقع:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "الدعم..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3595,6 +3597,7 @@ msgid "Use Rotation Snap" msgstr "إستعمال كبس التدوير" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "تعديل الكبس..." @@ -3691,14 +3694,12 @@ msgid "Show Guides" msgstr "أظهر الموجهات" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "إظهار الشبكة" +msgstr "إظهار المركز" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "أظهر المساعدات" +msgstr "أظهر الشاشة" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3758,11 +3759,11 @@ msgstr "إضافة %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +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 @@ -3991,7 +3992,7 @@ msgstr "الميش ليس لديه سطح لكي ينشئ حدود منه!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "شبكة بسيطة ليست PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4022,8 +4023,8 @@ msgid "Create Convex Collision Sibling" msgstr "إنشاء متصادم محدب قريب" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "إنشاء شبكة الخطوط العريضة .." +msgid "Create Outline Mesh..." +msgstr "إنشاء شبكة الخطوط العريضة ..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4171,7 +4172,7 @@ msgstr "إنشاء مجال الإرتفاع..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "تعليم مثلثات التحرك.." +msgstr "تعليم مثلثات التحرك..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4216,101 +4217,101 @@ msgstr "إنشاء مُضلع التنقل" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "يُنشئ AABB" +msgstr "توليد AABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "لا يمكن إنشاء سوى نقطة وحيدة داخل ParticlesMaterial معالج المواد" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "خطأ تحميل الصورة:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgid "No pixels with transparency > 128 in image..." +msgstr "لا بيكسل بشفافية > 128 في الصورة..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "توليد Rect الرؤية" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "حمل قناع الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "إمسح قناع الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "" +msgstr "جسيمات" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "" +msgstr "عدد النقاط المولدة:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "" +msgstr "وقت التوليد (تانية):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "" +msgstr "قناع الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "التقط من البيكسل" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "الوان الانبعاث" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "العقدة لا تحتوي على هندسة." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "العقدة لا تحتوي على هندسة (الوجوه)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "معالج المواد من نوع 'ParticlesMaterial' مطلوب." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" -msgstr "" +msgstr "الوجوه لا تحتوي على منطقة!" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "" +msgstr "لا وجوه!" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "ولد AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "أنشئ نقاط إنبعاث من الشبكة" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "أنشئ نقاط إنبعاث من العقدة" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "أنشئ باعث" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "نقاط الانبعاث:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "نقاط المساحة" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" @@ -4318,15 +4319,15 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "حجم" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "مصدر الانبعاث: " #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "ولد رؤية AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -4338,39 +4339,39 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "أزل In-Control من المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "" +msgstr "أضف نقطة للمنحنى" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "حرك النقطة داخل المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "حرك In-Control داخل المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "حرك Out-Control داخل المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "إختر النقاط" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift+سحب: إختر نقاط التحكم" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "إظغط: أضف نقطة" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4588,7 +4589,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 @@ -4685,7 +4686,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 @@ -4891,15 +4892,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 @@ -5350,11 +5351,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5607,7 +5604,7 @@ msgid "Remove All" msgstr "مسح الكل" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5635,33 +5632,39 @@ msgid "Create From Current Editor Theme" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "CheckBox Radio1" -msgstr "" +msgstr "صندوق تأشير ١" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "CheckBox Radio2" -msgstr "" +msgstr "صندوق تأشير٢" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Item" -msgstr "" +msgstr "عنصر" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Check Item" -msgstr "" +msgstr "اختار العنصر" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Checked Item" -msgstr "" +msgstr "عنصر مَضْبُوط" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Radio Item" -msgstr "إضافة عنصر" +msgstr "عنصر انتقاء" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Checked Radio Item" -msgstr "" +msgstr "عنصر انتقاء مَضْبُوط" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5672,24 +5675,26 @@ msgid "Many" msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#, fuzzy msgid "Options" -msgstr "" +msgstr "الخيارات" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "بكثير، خيارات عديدة،!" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "علامة التبويب 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "علامة التبويب 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "علامة التبويب 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" @@ -5864,7 +5869,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5954,6 +5959,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "اسم غير صالح." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "لا يمكن إنشاء المجلد." @@ -6140,8 +6150,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6169,7 +6179,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 @@ -6353,7 +6363,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6449,11 +6459,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 @@ -6624,7 +6634,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 @@ -8068,6 +8078,9 @@ msgstr "" msgid "Invalid font size." msgstr "" +#~ msgid "Next" +#~ msgstr "التالي" + #~ msgid "Can't contain '/' or ':'" #~ msgstr "لا يمكن أن يحتوي علي '/' أو ':'" @@ -8080,9 +8093,6 @@ msgstr "" #~ msgid "Can't write file." #~ msgstr "لا يمكن كتابة الملف." -#~ msgid "Next" -#~ msgstr "التالي" - #~ msgid "Not found!" #~ msgstr "لم يوجد!" @@ -8131,8 +8141,8 @@ msgstr "" #~ msgid "Exporting for %s" #~ msgstr "التصدير كـ %s" -#~ msgid "Setting Up.." -#~ msgstr "جاري الإعداد.." +#~ msgid "Setting Up..." +#~ msgstr "جاري الإعداد..." #~ msgid "The quick brown fox jumps over the lazy dog." #~ msgstr "أبجد هوز حطي كلمن صعفص قرشت ثخذ ضظغ." diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 741f6ab209..9f366b3d2f 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -497,7 +497,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -907,11 +907,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 @@ -1048,12 +1048,12 @@ msgid "Updating Scene" msgstr "Обновяване на сцената" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Обновяване на сцената.." +msgid "Updating scene..." +msgstr "Обновяване на сцената..." #: editor/editor_data.cpp msgid "[empty]" @@ -1121,8 +1121,8 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Нова папка.." +msgid "New Folder..." +msgstr "Нова папка..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1384,12 +1384,12 @@ 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 @@ -1594,11 +1594,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Бързо отваряне на сцена.." +msgid "Quick Open Scene..." +msgstr "Бързо отваряне на сцена..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1610,8 +1610,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Запазване на сцената като.." +msgid "Save Scene As..." +msgstr "Запазване на сцената като..." #: editor/editor_node.cpp msgid "No" @@ -1662,8 +1662,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Бързо пускане на сцена.." +msgid "Quick Run Scene..." +msgstr "Бързо пускане на сцена..." #: editor/editor_node.cpp msgid "Quit" @@ -1812,7 +1812,7 @@ msgid "Previous tab" msgstr "Предишен подпрозорец" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,12 +1824,12 @@ msgid "New Scene" msgstr "Нова сцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Отваряне на сцена.." +msgid "Open Scene..." +msgstr "Отваряне на сцена..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1848,15 +1848,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 @@ -2101,7 +2101,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 @@ -2211,7 +2211,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2363,7 +2363,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 @@ -2420,7 +2420,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Request Failed." -msgstr "Запитване.." +msgstr "Запитване..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2443,8 +2443,8 @@ msgstr "Имаше грешка при внасянето:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." -msgstr "Свързване.." +msgid "Connecting to Mirror..." +msgstr "Свързване..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2460,8 +2460,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Свързване.." +msgid "Connecting..." +msgstr "Свързване..." #: editor/export_template_manager.cpp #, fuzzy @@ -2475,8 +2475,8 @@ msgstr "Изрязване на възелите" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запитване.." +msgid "Requesting..." +msgstr "Запитване..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2485,7 +2485,7 @@ msgstr "" #: editor/export_template_manager.cpp #, fuzzy msgid "Connection Error" -msgstr "Свързване.." +msgstr "Свързване..." #: editor/export_template_manager.cpp msgid "SSL Handshake Error" @@ -2616,11 +2616,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 @@ -2633,15 +2633,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 @@ -2667,7 +2667,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2690,12 +2690,12 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "Внасяне на сцената.." +msgstr "Внасяне на сцената..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "Внасяне на анимации.." +msgstr "Внасяне на анимации..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2736,8 +2736,8 @@ msgid "Import Scene" msgstr "Внасяне на сцена" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Внасяне на сцената.." +msgid "Importing Scene..." +msgstr "Внасяне на сцената..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2748,7 +2748,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 @@ -2764,7 +2764,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2785,7 +2785,7 @@ msgid "Import As:" msgstr "Внасяне като:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3203,15 +3203,15 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Внасяне на анимации.." +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.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3280,7 +3280,7 @@ msgid "Fetching:" msgstr "Изтегляне:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3348,7 +3348,7 @@ msgid "Site:" msgstr "Място:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Поддръжка" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3538,6 +3538,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3960,7 +3961,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 @@ -4167,7 +4168,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 @@ -4529,7 +4530,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 @@ -4627,7 +4628,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 @@ -4835,15 +4836,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 @@ -5299,11 +5300,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5558,7 +5555,7 @@ msgid "Remove All" msgstr "Затваряне на всичко" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5626,7 +5623,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5817,7 +5814,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5911,6 +5908,11 @@ msgstr "Внесен проект" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Име:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Неуспешно създаване на папка." @@ -6104,8 +6106,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6133,7 +6135,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 @@ -6317,7 +6319,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6414,11 +6416,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 @@ -6592,7 +6594,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 @@ -8139,8 +8141,8 @@ msgstr "" #~ "Status: Needs Re-Import" #~ msgstr "Запазване и повторно внасяне" -#~ msgid "Re-Import.." -#~ msgstr "Повторно внасяне.." +#~ msgid "Re-Import..." +#~ msgstr "Повторно внасяне..." #~ msgid "Font Import" #~ msgstr "Внасяне на шрифт" @@ -8229,5 +8231,5 @@ msgstr "" #~ msgid "Export all files in the project directory." #~ msgstr "Изнасяне на всички файлове в папката на проекта." -#~ msgid "Export.." -#~ msgstr "Изнасяне.." +#~ msgid "Export..." +#~ msgstr "Изнасяне..." diff --git a/editor/translations/bn.po b/editor/translations/bn.po index b8cd30b562..3d00e3450c 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -502,8 +502,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' এর সাথে '%s' সংযুক্ত করুন" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "সংযোগ.." +msgid "Connect..." +msgstr "সংযোগ..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -927,12 +927,12 @@ msgid "Move Audio Bus" msgstr "অডিও বাস মুভ করুন" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "অডিও বাস লেআউট সেভ করুন.." +msgid "Save Audio Bus Layout As..." +msgstr "অডিও বাস লেআউট সেভ করুন..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "নতুন লেআউট লোকেশন.." +msgid "Location for New Layout..." +msgstr "নতুন লেআউট লোকেশন..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1073,12 +1073,12 @@ msgid "Updating Scene" msgstr "দৃশ্য হাল নাগাদ হচ্ছে" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "স্থানীয় পরিবর্তন-সমূহ সংরক্ষিত হচ্ছে.." +msgid "Storing local changes..." +msgstr "স্থানীয় পরিবর্তন-সমূহ সংরক্ষিত হচ্ছে..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "দৃশ্য হাল নাগাদ হচ্ছে.." +msgid "Updating scene..." +msgstr "দৃশ্য হাল নাগাদ হচ্ছে..." #: editor/editor_data.cpp #, fuzzy @@ -1151,7 +1151,7 @@ msgstr "ফাইল-ম্যানেজারে দেখুন" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "ফোল্ডার তৈরি করুন" #: editor/editor_file_dialog.cpp @@ -1437,13 +1437,13 @@ msgid "Error saving resource!" msgstr "রিসোর্স সংরক্ষণে সমস্যা হয়েছে!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "রিসোর্স এইরূপে সংরক্ষণ করুন.." +msgid "Save Resource As..." +msgstr "রিসোর্স এইরূপে সংরক্ষণ করুন..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "বুঝলাম.." +msgid "I see..." +msgstr "বুঝলাম..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1680,12 +1680,12 @@ msgid "Open Base Scene" msgstr "গোড়ার দৃশ্য খুলুন" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "দ্রুত দৃশ্য খুলুন.." +msgid "Quick Open Scene..." +msgstr "দ্রুত দৃশ্য খুলুন..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "দ্রুত স্ক্রিপ্ট খুলুন.." +msgid "Quick Open Script..." +msgstr "দ্রুত স্ক্রিপ্ট খুলুন..." #: editor/editor_node.cpp #, fuzzy @@ -1697,8 +1697,8 @@ msgid "Save changes to '%s' before closing?" msgstr "'%s' বন্ধ করার পূর্বে পরিবর্তনসমূহ সংরক্ষণ করবেন?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "দৃশ্য এইরূপে সংরক্ষণ করুন.." +msgid "Save Scene As..." +msgstr "দৃশ্য এইরূপে সংরক্ষণ করুন..." #: editor/editor_node.cpp #, fuzzy @@ -1752,8 +1752,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "এই কাজটি অসম্পাদিত করা সম্ভব হবে না। তবুও প্রত্যাবর্তন করবেন?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "দ্রুত দৃশ্য চালান.." +msgid "Quick Run Scene..." +msgstr "দ্রুত দৃশ্য চালান..." #: editor/editor_node.cpp msgid "Quit" @@ -1915,8 +1915,8 @@ msgstr "পূর্বের ট্যাব" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "দ্রুত ফাইলসমূহ ফিল্টার করুন.." +msgid "Filter Files..." +msgstr "দ্রুত ফাইলসমূহ ফিল্টার করুন..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1927,12 +1927,12 @@ msgid "New Scene" msgstr "নতুন দৃশ্য" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "নতুন উত্তরাধিকারী দৃশ্য.." +msgid "New Inherited Scene..." +msgstr "নতুন উত্তরাধিকারী দৃশ্য..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "দৃশ্য খুলুন.." +msgid "Open Scene..." +msgstr "দৃশ্য খুলুন..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1951,16 +1951,16 @@ msgid "Open Recent" msgstr "সাম্প্রতিকসমূহ খুলুন" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "এতে রূপান্তর করুন.." +msgid "Convert To..." +msgstr "এতে রূপান্তর করুন..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary (মেস-লাইব্রেরি).." +msgid "MeshLibrary..." +msgstr "MeshLibrary (মেস-লাইব্রেরি)..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet (টাইল-সেট).." +msgid "TileSet..." +msgstr "TileSet (টাইল-সেট)..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2228,8 +2228,8 @@ msgid "Save the currently edited resource." msgstr "এই-মুহূর্তে সম্পাদিত রিসোর্সটি সংরক্ষণ করুন।" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "এইরূপে সংরক্ষণ করুন.." +msgid "Save As..." +msgstr "এইরূপে সংরক্ষণ করুন..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2300,7 +2300,7 @@ msgstr "একটি স্ক্রিপ্ট খুলুন এবং চ #: editor/editor_node.cpp #, fuzzy msgid "New Inherited" -msgstr "নতুন উত্তরাধিকারী দৃশ্য.." +msgstr "নতুন উত্তরাধিকারী দৃশ্য..." #: editor/editor_node.cpp msgid "Load Errors" @@ -2346,8 +2346,8 @@ msgid "Creating Mesh Previews" msgstr "মেস লাইব্রেরি তৈরি হচ্ছে" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "থাম্বনেইল.." +msgid "Thumbnail..." +msgstr "থাম্বনেইল..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2507,8 +2507,8 @@ msgid "(Current)" msgstr "বর্তমান:" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "মিরর রিট্রাইভ করা হচ্ছে, দযা করে অপেক্ষা করুন.." +msgid "Retrieving mirrors, please wait..." +msgstr "মিরর রিট্রাইভ করা হচ্ছে, দযা করে অপেক্ষা করুন..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2557,7 +2557,7 @@ msgstr "সমস্যা সমাধানে ব্যর্থ।" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Can't connect." -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2592,8 +2592,8 @@ msgstr "এটলাস/মানচিত্রাবলী সংরক্ষ #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." -msgstr "সংযোগ.." +msgid "Connecting to Mirror..." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2603,7 +2603,7 @@ msgstr "সংযোগ বিচ্ছিন্ন করুন" #: editor/export_template_manager.cpp #, fuzzy msgid "Resolving" -msgstr "সংরক্ষিত হচ্ছে.." +msgstr "সংরক্ষিত হচ্ছে..." #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2612,13 +2612,13 @@ msgstr "কাংখিত সমাধানে ব্যর্থ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." -msgstr "সংযোগ.." +msgid "Connecting..." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy msgid "Can't Connect" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2628,7 +2628,7 @@ msgstr "সংযোগ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Requesting.." +msgid "Requesting..." msgstr "পরীক্ষামূলক উৎস" #: editor/export_template_manager.cpp @@ -2639,7 +2639,7 @@ msgstr "নীচে" #: editor/export_template_manager.cpp #, fuzzy msgid "Connection Error" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2747,7 +2747,7 @@ msgstr "ব্যবহৃত নামে অগ্রহণযোগ্য অ #: editor/filesystem_dock.cpp #, fuzzy msgid "No name provided." -msgstr "পুনঃনামকরণ করুন অথবা সরান.." +msgstr "পুনঃনামকরণ করুন অথবা সরান..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2790,12 +2790,12 @@ msgstr "কলাপ্স করুন" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." +msgid "Rename..." msgstr "পুনঃনামকরণ করুন" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "এখানে সরান.." +msgid "Move To..." +msgstr "এখানে সরান..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2807,16 +2807,16 @@ msgid "Instance" msgstr "ইনস্ট্যান্স" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "নির্ভরতাসমূহ সম্পাদন করুন.." +msgid "Edit Dependencies..." +msgstr "নির্ভরতাসমূহ সম্পাদন করুন..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "স্বত্বাধিকারীদের দেখুন.." +msgid "View Owners..." +msgstr "স্বত্বাধিকারীদের দেখুন..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "ডুপ্লিকেট" #: editor/filesystem_dock.cpp @@ -2842,10 +2842,10 @@ msgstr "নির্বাচিত দৃশ্য(সমূহ)-কে নি #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ফাইল স্ক্যান করা হচ্ছে,\n" -"অনুগ্রহপূর্বক অপেক্ষা করুন.." +"অনুগ্রহপূর্বক অপেক্ষা করুন..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2867,12 +2867,12 @@ msgstr "গ্রুপ/দল হতে অপসারণ করুন" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "দৃশ্য ইম্পোর্ট করা হচ্ছে.." +msgstr "দৃশ্য ইম্পোর্ট করা হচ্ছে..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "অ্যানিমেশনসমূহ ইম্পোর্ট করুন.." +msgstr "অ্যানিমেশনসমূহ ইম্পোর্ট করুন..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2913,8 +2913,8 @@ msgid "Import Scene" msgstr "দৃশ্য ইম্পোর্ট করুন" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "দৃশ্য ইম্পোর্ট করা হচ্ছে.." +msgid "Importing Scene..." +msgstr "দৃশ্য ইম্পোর্ট করা হচ্ছে..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2927,8 +2927,8 @@ msgid "Generating for Mesh: " msgstr "AABB উৎপন্ন করুন" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "স্বনির্মিত স্ক্রিপ্ট চালানো হচ্ছে.." +msgid "Running Custom Script..." +msgstr "স্বনির্মিত স্ক্রিপ্ট চালানো হচ্ছে..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2943,8 +2943,8 @@ msgid "Error running post-import script:" msgstr "ইম্পোর্ট-পরবর্তী স্ক্রিপ্ট চালানোয় সমস্যা হয়েছে:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "সংরক্ষিত হচ্ছে.." +msgid "Saving..." +msgstr "সংরক্ষিত হচ্ছে..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2965,8 +2965,8 @@ msgid "Import As:" msgstr "ইম্পোর্ট" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "প্রিসেট.." +msgid "Preset..." +msgstr "প্রিসেট..." #: editor/import_dock.cpp #, fuzzy @@ -3392,16 +3392,16 @@ msgid "Transition Node" msgstr "ট্র্যানজিশন নোড" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "অ্যানিমেশনসমূহ ইম্পোর্ট করুন.." +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 "ফিল্টারসমূহ.." +msgid "Filters..." +msgstr "ফিল্টারসমূহ..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3474,8 +3474,8 @@ msgstr "খুঁজে আনার চেস্টা চলছে:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Resolving.." -msgstr "সংরক্ষিত হচ্ছে.." +msgid "Resolving..." +msgstr "সংরক্ষিত হচ্ছে..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3543,8 +3543,8 @@ msgid "Site:" msgstr "ওয়েবসাইট:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "সমর্থন.." +msgid "Support..." +msgstr "সমর্থন..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3743,9 +3743,10 @@ msgid "Use Rotation Snap" msgstr "ঘূর্ণন স্ন্যাপ ব্যবহার করুন" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Configure Snap..." -msgstr "স্ন্যাপ কনফিগার করুন.." +msgstr "স্ন্যাপ কনফিগার করুন..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -4189,8 +4190,8 @@ msgid "Create Convex Collision Sibling" msgstr "কনভেক্স কলিশ়ন সহোদর তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "প্রান্তরেখা মেস তৈরি করুন.." +msgid "Create Outline Mesh..." +msgstr "প্রান্তরেখা মেস তৈরি করুন..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4334,7 +4335,7 @@ msgstr "কনফিগারেশন তৈরি করা হচ্ছে... #: editor/plugins/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "গ্রিড সাইজ হিসাব করা হচ্ছে.." +msgstr "গ্রিড সাইজ হিসাব করা হচ্ছে..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4344,7 +4345,7 @@ msgstr "লাইটের ওকট্রী (octree) তৈরি করা #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "অনুবাদ-সম্ভব শব্দমালা/বাক্য-সমূহ.." +msgstr "অনুবাদ-সম্ভব শব্দমালা/বাক্য-সমূহ..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4367,7 +4368,7 @@ msgstr "ওকট্রী (octree) গঠনবিন্যাস তৈরি #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "প্রান্তরেখা মেস তৈরি করুন.." +msgstr "প্রান্তরেখা মেস তৈরি করুন..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4406,8 +4407,8 @@ msgid "Error loading image:" msgstr "ছবি লোডে সমস্যা হয়েছে:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "স্বচ্ছতাসহ কোনো পিক্সেল নেই > ছবিতে ১২৮.." +msgid "No pixels with transparency > 128 in image..." +msgstr "স্বচ্ছতাসহ কোনো পিক্সেল নেই > ছবিতে ১২৮..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4790,8 +4791,8 @@ msgid "Import Theme" msgstr "থিম ইম্পোর্ট করুন" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "থিম এইরূপে সংরক্ষণ করুন.." +msgid "Save Theme As..." +msgstr "থিম এইরূপে সংরক্ষণ করুন..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4891,8 +4892,8 @@ msgstr "ফেবরিট/প্রিয়-সমূহ অদলবদল/ #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "খুঁজুন.." +msgid "Find..." +msgstr "খুঁজুন..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5095,28 +5096,28 @@ msgstr "পূর্বের বিরতিবিন্দুতে যান" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Uppercase" -msgstr "এতে রূপান্তর করুন.." +msgstr "এতে রূপান্তর করুন..." #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Lowercase" -msgstr "এতে রূপান্তর করুন.." +msgstr "এতে রূপান্তর করুন..." #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "পূর্বে খুঁজুন" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "প্রতিস্থাপন.." +msgid "Replace..." +msgstr "প্রতিস্থাপন..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "ফাংশনে যান.." +msgid "Goto Function..." +msgstr "ফাংশনে যান..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "লাইনে যান.." +msgid "Goto Line..." +msgstr "লাইনে যান..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5590,12 +5591,8 @@ msgid "Transform" msgstr "রুপান্তর" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "স্ন্যাপ কনফিগার করুন.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "রুপান্তরের এর সংলাপ.." +msgid "Transform Dialog..." +msgstr "রুপান্তরের এর সংলাপ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5854,8 +5851,8 @@ msgid "Remove All" msgstr "অপসারণ করুন" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "থিম এডিট করুন.." +msgid "Edit theme..." +msgstr "থিম এডিট করুন..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5925,7 +5922,8 @@ msgid "Options" msgstr "সিদ্ধান্তসমূহ" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "আছে,অনেক,একাধিক,সিদ্ধান্তসমূহ!" #: editor/plugins/theme_editor_plugin.cpp @@ -6055,7 +6053,7 @@ msgstr "দৃশ্য হতে একত্রিত করবেন?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet (টাইল-সেট).." +msgstr "TileSet (টাইল-সেট)..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6123,11 +6121,11 @@ msgstr "" #: editor/project_export.cpp #, fuzzy msgid "Presets" -msgstr "প্রিসেট.." +msgstr "প্রিসেট..." #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "সংযোগ.." +msgid "Add..." +msgstr "সংযোগ..." #: editor/project_export.cpp msgid "Resources" @@ -6236,6 +6234,11 @@ msgstr "প্রকল্প ইম্পোর্ট করা হয়েছে #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "প্রকল্পের নাম:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" @@ -6332,7 +6335,7 @@ msgstr "নামহীন প্রকল্প" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -6418,7 +6421,7 @@ msgstr "পুনরারম্ভ (সেঃ):" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/project_manager.cpp msgid "" @@ -6444,8 +6447,8 @@ msgstr "মাউসের বোতাম" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6473,8 +6476,8 @@ msgid "Control+" msgstr "কন্ট্রোল+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "যেকোনো কী/চাবি চাপুন.." +msgid "Press a Key..." +msgstr "যেকোনো কী/চাবি চাপুন..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6667,8 +6670,8 @@ msgid "Property:" msgstr "প্রপার্টি:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "ওভাররাইড.." +msgid "Override For..." +msgstr "ওভাররাইড..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6768,12 +6771,12 @@ msgid "Easing Out-In" msgstr "গমন-আগমন সহজ/আলগা করন" #: editor/property_editor.cpp -msgid "File.." -msgstr "ফাইল.." +msgid "File..." +msgstr "ফাইল..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "পথ.." +msgid "Dir..." +msgstr "পথ..." #: editor/property_editor.cpp msgid "Assign" @@ -6805,7 +6808,7 @@ msgstr "ফাইলসিস্টেম" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "এতে রূপান্তর করুন.." +msgstr "এতে রূপান্তর করুন..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6953,8 +6956,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ইন্সট্যান্স করা দৃশ্যে এটি করা সম্ভব হবে না।" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "নতুন দৃশ্য এইরূপে সংরক্ষণ করুন.." +msgid "Save New Scene As..." +msgstr "নতুন দৃশ্য এইরূপে সংরক্ষণ করুন..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7497,12 +7500,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "প্লাটফর্মে প্রতিলিপি করুন.." +msgstr "প্লাটফর্মে প্রতিলিপি করুন..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary (মেস-লাইব্রেরি).." +msgstr "MeshLibrary (মেস-লাইব্রেরি)..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7516,7 +7519,7 @@ msgstr "জিডিন্যাটিভ" #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary (মেস-লাইব্রেরি).." +msgstr "MeshLibrary (মেস-লাইব্রেরি)..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -8544,6 +8547,13 @@ msgstr "ফন্ট তুলতে/লোডে সমস্যা হয়ে msgid "Invalid font size." msgstr "ফন্টের আকার অগ্রহনযোগ্য।" +#, fuzzy +#~ msgid "Previous" +#~ msgstr "পূর্বের ট্যাব" + +#~ msgid "Next" +#~ msgstr "পরবর্তী" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "অকার্যকর অ্যাকশন ('/' বা ':' ছাড়া কিছুই যাবে না)।" @@ -8573,9 +8583,6 @@ msgstr "ফন্টের আকার অগ্রহনযোগ্য।" #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" -#~ msgid "Next" -#~ msgstr "পরবর্তী" - #~ msgid "Not found!" #~ msgstr "খুঁজে পাওয়া যায়নি!" @@ -8717,8 +8724,8 @@ msgstr "ফন্টের আকার অগ্রহনযোগ্য।" #~ msgid "Exporting for %s" #~ msgstr "%s এর জন্য এক্সপোর্ট (export) হচ্ছে" -#~ msgid "Setting Up.." -#~ msgstr "স্থাপিত/বিন্যস্ত হচ্ছে.." +#~ msgid "Setting Up..." +#~ msgstr "স্থাপিত/বিন্যস্ত হচ্ছে..." #~ msgid "Error loading scene." #~ msgstr "দৃশ্য লোডে সমস্যা হয়েছে।" @@ -8772,8 +8779,8 @@ msgstr "ফন্টের আকার অগ্রহনযোগ্য।" #~ msgid "Info" #~ msgstr "তথ্য" -#~ msgid "Re-Import.." -#~ msgstr "পুন-ইম্পোর্ট.." +#~ msgid "Re-Import..." +#~ msgstr "পুন-ইম্পোর্ট..." #~ msgid "No bit masks to import!" #~ msgstr "ইম্পোর্ট করার জন্য কোনো বিট মাস্ক নেই!" @@ -9170,14 +9177,14 @@ msgstr "ফন্টের আকার অগ্রহনযোগ্য।" #~ msgid "Zoom (%):" #~ msgstr "জুম্ (%):" -#~ msgid "Skeleton.." -#~ msgstr "স্কেলেটন/কাঠাম.." +#~ msgid "Skeleton..." +#~ msgstr "স্কেলেটন/কাঠাম..." #~ msgid "Zoom Reset" #~ msgstr "জুম্ পুন:স্থাপন করুন" -#~ msgid "Zoom Set.." -#~ msgstr "জুম্ নির্ধারণ করুন.." +#~ msgid "Zoom Set..." +#~ msgstr "জুম্ নির্ধারণ করুন..." #~ msgid "Set a Value" #~ msgstr "একটি মান নির্ধারণ করুন" @@ -9642,8 +9649,8 @@ msgstr "ফন্টের আকার অগ্রহনযোগ্য।" #~ msgid "Export Project PCK" #~ msgstr "প্রকল্পের PCK এক্সপোর্ট করুন" -#~ msgid "Export.." -#~ msgstr "এক্সপোর্ট.." +#~ msgid "Export..." +#~ msgstr "এক্সপোর্ট..." #~ msgid "Project Export" #~ msgstr "এক্সপোর্ট প্রকল্প" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index a1f92b5316..d2bffb0f84 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -2,14 +2,13 @@ # 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. -# # BennyBeat <bennybeat@gmail.com>, 2017. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-03-10 03:34+0000\n" +"PO-Revision-Date: 2018-06-08 03:41+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 +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.20-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -498,8 +497,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconnecta '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Connecta.." +msgid "Connect..." +msgstr "Connecta..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -919,11 +918,11 @@ msgid "Move Audio Bus" msgstr "Mou el Bus d'Àudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Anomena i Desa el Disseny del Bus d'Àudio..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Ubicació del Nou Disseny..." #: editor/editor_audio_buses.cpp @@ -1065,12 +1064,12 @@ msgid "Updating Scene" msgstr "Actualitzant l'Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Emmagatzemant canvis locals..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "S'està actualitzant l'escena.." +msgid "Updating scene..." +msgstr "S'està actualitzant l'escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1138,8 +1137,8 @@ msgid "Show In File Manager" msgstr "Mostra en el Gestor de Fitxers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nou Directori.." +msgid "New Folder..." +msgstr "Nou Directori..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1400,19 +1399,19 @@ msgstr "Buida la Sortida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "L'exportació del projecte ha fallat amb el codi d'error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error en desar recurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Anomena i Desa el Recurs..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Vaja..." #: editor/editor_node.cpp @@ -1642,11 +1641,11 @@ msgid "Open Base Scene" msgstr "Obre una Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Obertura Ràpida d'Escenes..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Obertura Ràpida d'Scripts..." #: editor/editor_node.cpp @@ -1658,7 +1657,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Desar els canvis a '%s' abans de tancar?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Anomena i Desa l'Escena..." #: editor/editor_node.cpp @@ -1711,7 +1710,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Aquesta acció no es pot desfer. N'esteu segur?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Execució Ràpida de l'Escena..." #: editor/editor_node.cpp @@ -1872,7 +1871,7 @@ msgid "Previous tab" msgstr "Pestanya Anterior" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrat de Fitxers..." #: editor/editor_node.cpp @@ -1884,11 +1883,11 @@ msgid "New Scene" msgstr "Nova Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nova Escena heretada..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Obre Escena..." #: editor/editor_node.cpp @@ -1908,15 +1907,15 @@ msgid "Open Recent" msgstr "Obre Recent" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converteix a..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "Biblioteca de Models (MeshLibrary)..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2181,7 +2180,7 @@ msgid "Save the currently edited resource." msgstr "Desa el recurs editat ara." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Anomena i Desa..." #: editor/editor_node.cpp @@ -2290,8 +2289,8 @@ msgid "Creating Mesh Previews" msgstr "Creant Previsualitzacions de Malles" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2443,7 +2442,7 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "S'estan buscant rèpliques..." #: editor/export_template_manager.cpp @@ -2490,7 +2489,7 @@ msgstr "No es pot resoldre." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "No es pot connectar.." +msgstr "No es pot connectar..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2521,7 +2520,7 @@ msgid "Error requesting url: " msgstr "Error en la sol·licitud de l'url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Connexió amb la Rèplica..." #: editor/export_template_manager.cpp @@ -2538,7 +2537,7 @@ msgstr "No es pot resoldre" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "Connexió en marxa..." #: editor/export_template_manager.cpp @@ -2551,7 +2550,7 @@ msgstr "Connectat" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Sol·licitud en marxa..." #: editor/export_template_manager.cpp @@ -2685,11 +2684,11 @@ msgid "Collapse all" msgstr "Col·lapsar tot" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Reanomena.." +msgid "Rename..." +msgstr "Reanomena..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Mou cap a..." #: editor/filesystem_dock.cpp @@ -2701,16 +2700,16 @@ msgid "Instance" msgstr "Instància" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Edita Dependències..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Mostra Propietaris..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplica.." +msgid "Duplicate..." +msgstr "Duplica..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2735,7 +2734,7 @@ msgstr "Instancia les escenes seleccionades com a filles del node seleccionat." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "Analitzant Fitxers..." #: editor/filesystem_dock.cpp @@ -2801,7 +2800,7 @@ msgid "Import Scene" msgstr "Importa Escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Important Escena..." #: editor/import/resource_importer_scene.cpp @@ -2813,7 +2812,7 @@ msgid "Generating for Mesh: " msgstr "S'està generant per a la Malla: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Executant Script Personalitzat..." #: editor/import/resource_importer_scene.cpp @@ -2829,7 +2828,7 @@ msgid "Error running post-import script:" msgstr "Error en l'execució de l'Script de post-importació:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Desant..." #: editor/import_dock.cpp @@ -2849,8 +2848,8 @@ msgid "Import As:" msgstr "Importar com a:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Configuració.." +msgid "Preset..." +msgstr "Configuració..." #: editor/import_dock.cpp msgid "Reimport" @@ -3268,7 +3267,7 @@ msgid "Transition Node" msgstr "Node de Transició" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importa animacions..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3276,7 +3275,7 @@ msgid "Edit Node Filters" msgstr "Edita els filtres de Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtres..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3344,8 +3343,8 @@ msgid "Fetching:" msgstr "Recollida:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "s'està resolent.." +msgid "Resolving..." +msgstr "s'està resolent..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3411,7 +3410,7 @@ msgid "Site:" msgstr "Lloc:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Suport..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3610,6 +3609,7 @@ msgid "Use Rotation Snap" msgstr "Rotació alineada" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configura l'Alineament..." @@ -3706,14 +3706,12 @@ 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" +msgstr "Mostra el Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4006,7 +4004,7 @@ 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 "" +msgstr "El tipus primitiu de Mesh no és PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4037,7 +4035,7 @@ msgid "Create Convex Collision Sibling" msgstr "Crea col·lisions convexes entre nodes germans" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Crea una malla de contorn..." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4242,7 +4240,7 @@ msgid "Error loading image:" msgstr "Error en carregar la imatge:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Cap píxel amb transparència > 128 en la imatge..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4603,7 +4601,7 @@ msgid "Import Theme" msgstr "Importa un Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Desa el Tema com a..." #: editor/plugins/script_editor_plugin.cpp @@ -4700,7 +4698,7 @@ msgstr "Panell d'Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Cerca..." #: editor/plugins/script_editor_plugin.cpp @@ -4910,15 +4908,15 @@ msgid "Find Previous" msgstr "Cerca l'Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substitueix..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Vés a la Funció.." +msgid "Goto Function..." +msgstr "Vés a la Funció..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Vés a la Línia..." #: editor/plugins/script_text_editor.cpp @@ -5372,11 +5370,7 @@ msgid "Transform" msgstr "Transforma" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configura l'Alineament..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Diàleg de Transformació..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5629,7 +5623,7 @@ msgid "Remove All" msgstr "Treu-los tots" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Edita el Tema..." #: editor/plugins/theme_editor_plugin.cpp @@ -5677,14 +5671,12 @@ msgid "Checked Item" msgstr "Element validat" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Afegeix un Element" +msgstr "Element de ràdio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Element validat" +msgstr "Element de ràdio validat" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5699,8 +5691,8 @@ msgid "Options" msgstr "Opcions" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Tens,Moltes,Diverses,Opcions!" +msgid "Has,Many,Options" +msgstr "Té,Moltes,Opcions" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5892,7 +5884,7 @@ msgid "Presets" msgstr "Configuracions prestablertes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Afegeix..." #: editor/project_export.cpp @@ -5986,6 +5978,10 @@ msgid "Imported Project" msgstr "Project importat" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "El nom del Projecte no és vàlid." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "No s'ha pogut crear el directori." @@ -6185,9 +6181,11 @@ msgstr "Botó del ratolí" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nom d'acció no vàlid. No pot estar buit ni contenir '/', ':', '=', '\\' o " +"'\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6214,8 +6212,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Premeu una Tecla.." +msgid "Press a Key..." +msgstr "Premeu una Tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6398,7 +6396,7 @@ msgid "Property:" msgstr "Propietat:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Substitutiu per a..." #: editor/project_settings_editor.cpp @@ -6494,11 +6492,11 @@ msgid "Easing Out-In" msgstr "Esmorteeix Sortida-Entrada" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Fitxer..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Directori..." #: editor/property_editor.cpp @@ -6671,7 +6669,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Aquesta operació no es pot dur a terme en escenes instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Anomena i Desa la Nova Escena..." #: editor/scene_tree_dock.cpp @@ -7390,7 +7388,7 @@ msgstr "Trieu la distància:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nom de la classe no pot ser una paraula clau reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8101,7 +8099,7 @@ 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 "" +msgstr "WorldEnvironment necessita un recurs Ambiental." #: scene/3d/scenario_fx.cpp msgid "" @@ -8115,6 +8113,8 @@ 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 "" +"Aquest WorldEnvironment s'ignora. Afegiu una càmera (per a escenes 3D) o " +"configureu el Background Mode a Canvas (per a escenes 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8213,6 +8213,13 @@ msgstr "Error carregant lletra." msgid "Invalid font size." msgstr "La mida de la lletra no és vàlida." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Pestanya Anterior" + +#~ msgid "Next" +#~ msgstr "Següent" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "L'Acció no és vàlida (no es pot utilitzar ' / ' o ':')." @@ -8240,9 +8247,6 @@ msgstr "La mida de la lletra no és vàlida." #~ msgstr "" #~ "No es pot trobat el el fitxer 'project.godot' en el camí del projecte." -#~ msgid "Next" -#~ msgstr "Següent" - #~ msgid "Not found!" #~ msgstr "No s'ha trobat!" @@ -8375,8 +8379,8 @@ msgstr "La mida de la lletra no és vàlida." #~ msgid "Exporting for %s" #~ msgstr "Exportació per a %s" -#~ msgid "Setting Up.." -#~ msgstr "Instal·lant.." +#~ msgid "Setting Up..." +#~ msgstr "Instal·lant..." #~ msgid "Error loading scene." #~ msgstr "No s'ha pogut carregar l'escena." @@ -8433,7 +8437,7 @@ msgstr "La mida de la lletra no és vàlida." #~ msgid "Info" #~ msgstr "Informació" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "ReImporta..." #~ msgid "No bit masks to import!" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index ce26418cbf..1066bbad94 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -6,6 +6,7 @@ # Fadex <vitekpaulik@gmail.com>, 2017. # Jan 'spl!te' Kondelík <j.kondelik@centrum.cz>, 2016. # Jiri Hysek <contact@jirihysek.com>, 2017. +# Josef Kuchař <josef.kuchar267@gmail.com>, 2018. # Luděk Novotný <gladosicek@gmail.com>, 2016, 2018. # Martin Novák <maidx@seznam.cz>, 2017. # zxey <r.hozak@seznam.cz>, 2018. @@ -13,15 +14,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 12:07+0000\n" -"Last-Translator: zxey <r.hozak@seznam.cz>\n" +"PO-Revision-Date: 2018-05-21 12:36+0000\n" +"Last-Translator: Josef Kuchař <josef.kuchar267@gmail.com>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -32,9 +33,8 @@ msgid "All Selection" msgstr "Všechny vybrané" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animace: změna hodnoty" +msgstr "Animace: Změnit čas klíčového snímku" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -45,9 +45,8 @@ msgid "Anim Change Transform" msgstr "Animace: změna transformace" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Animace: změna hodnoty" +msgstr "Animace: Změnit hodnotu klíčového snímku" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -92,7 +91,7 @@ msgstr "Animace: změna typu hodnot" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "Změna režimu opakování animační stopy" +msgstr "Animace: Změna režimu opakování animační stopy" #: editor/animation_editor.cpp msgid "Edit Node Curve" @@ -230,7 +229,7 @@ msgstr "Změnit opakování animace" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Animace: Vytvořit typovaný klíč" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -326,7 +325,7 @@ msgstr "Přechod" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "Poměr měřítka:" +msgstr "Poměr zvětšení:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" @@ -504,8 +503,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Odpojit '%s' od '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Připojit.." +msgid "Connect..." +msgstr "Připojit..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -876,7 +875,7 @@ msgstr "Ztlumit" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Obejít" #: editor/editor_audio_buses.cpp msgid "Bus options" @@ -924,12 +923,12 @@ msgid "Move Audio Bus" msgstr "Přesunout Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Uložit rozložení Audio Busu jako.." +msgid "Save Audio Bus Layout As..." +msgstr "Uložit rozložení Audio Busu jako..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Umístění pro nové rozložení.." +msgid "Location for New Layout..." +msgstr "Umístění pro nové rozložení..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1066,12 +1065,12 @@ msgid "Updating Scene" msgstr "Aktualizuji scénu" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Ukládám lokální změny.." +msgid "Storing local changes..." +msgstr "Ukládám lokální změny..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aktualizuji scénu.." +msgid "Updating scene..." +msgstr "Aktualizuji scénu..." #: editor/editor_data.cpp msgid "[empty]" @@ -1139,8 +1138,8 @@ msgid "Show In File Manager" msgstr "Ukázat ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nová složka.." +msgid "New Folder..." +msgstr "Nová složka..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1209,14 +1208,12 @@ msgid "Focus Path" msgstr "" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "Přesunout oblíbenou položku o úroveň výš" +msgstr "Přesunout oblíbenou položku nahoru" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "Přesunout oblíbenou položku o úroveň níž" +msgstr "Přesunout oblíbenou položku dolů" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1245,7 +1242,7 @@ msgstr "" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "(Re)Importování assetů" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1410,13 +1407,13 @@ 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.." -msgstr "Chápu.." +msgid "I see..." +msgstr "Chápu..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1622,12 +1619,12 @@ msgid "Open Base Scene" msgstr "Otevřít základní scénu" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Rychlé otevření scény.." +msgid "Quick Open Scene..." +msgstr "Rychle otevřít scénu..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Rychlé otevření skriptu.." +msgid "Quick Open Script..." +msgstr "Rychlé otevření skriptu..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1638,8 +1635,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Uložit změny '%s' před zavřením?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Uložit scénu jako.." +msgid "Save Scene As..." +msgstr "Uložit scénu jako..." #: editor/editor_node.cpp msgid "No" @@ -1690,7 +1687,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tuto akci nelze vrátit zpět. Pokračovat?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Rychlé spuštění scény..." #: editor/editor_node.cpp @@ -1845,7 +1842,7 @@ msgid "Previous tab" msgstr "Předchozí záložka" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrovat soubory..." #: editor/editor_node.cpp @@ -1857,12 +1854,12 @@ msgid "New Scene" msgstr "Nová scéna" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nová odvozená scéna.." +msgid "New Inherited Scene..." +msgstr "Nová odvozená scéna..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Otevřít scénu.." +msgid "Open Scene..." +msgstr "Otevřít scénu..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1881,16 +1878,16 @@ msgid "Open Recent" msgstr "Otevřít nedávné" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konvertovat na.." +msgid "Convert To..." +msgstr "Konvertovat na..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2065,9 +2062,8 @@ msgid "Q&A" msgstr "Q&A" #: editor/editor_node.cpp -#, fuzzy msgid "Issue Tracker" -msgstr "Správa chyb" +msgstr "Issue Tracker" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -2115,7 +2111,7 @@ msgstr "Přehrát vlastní scénu" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "Přehrát vlastní scénu" +msgstr "Spustit vlastní scénu" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2150,8 +2146,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Uložit jako.." +msgid "Save As..." +msgstr "Uložit jako..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2259,8 +2255,8 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Náhled.." +msgid "Thumbnail..." +msgstr "Náhled..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2304,14 +2300,12 @@ msgid "Average Time (sec)" msgstr "Průměrný čas (sek.)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame %" -msgstr "% snímku" +msgstr "Snímek %" #: editor/editor_profiler.cpp -#, fuzzy msgid "Physics Frame %" -msgstr "% fyzikálního snímku" +msgstr "Fyzikální snímek %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2326,7 +2320,6 @@ msgid "Self" msgstr "" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame #:" msgstr "Snímek č.:" @@ -2416,7 +2409,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 @@ -2492,9 +2485,8 @@ msgid "Error requesting url: " msgstr "Chyba požadavku o url: " #: editor/export_template_manager.cpp -#, fuzzy -msgid "Connecting to Mirror.." -msgstr "Připojuji se k mirroru.." +msgid "Connecting to Mirror..." +msgstr "Připojuji se k zrcadlu..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2510,22 +2502,21 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Připojuji.." +msgid "Connecting..." +msgstr "Připojuji..." #: editor/export_template_manager.cpp msgid "Can't Connect" msgstr "Nelze se připojit" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" msgstr "Připojeno" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Posílá se žádost.." +msgid "Requesting..." +msgstr "Posílá se žádost..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2653,44 +2644,43 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Sbalit vše" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "" +msgid "Rename..." +msgstr "Přejmenovat..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "" +msgid "Move To..." +msgstr "Přesunout do..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" -msgstr "Otevřít scénu" +msgstr "Otevřít scénu(y)" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Instance" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +msgid "Edit Dependencies..." +msgstr "Upravit závislosti..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "View Owners..." +msgstr "Zobrazit vlastníky..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplikovat.." +msgid "Duplicate..." +msgstr "Duplikovat..." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "Předchozí adresář" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Následující adresář" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" @@ -2707,7 +2697,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2773,7 +2763,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2785,7 +2775,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 @@ -2801,7 +2791,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2821,8 +2811,8 @@ msgid "Import As:" msgstr "Importovat jako:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "Předvolba..." #: editor/import_dock.cpp msgid "Reimport" @@ -2878,7 +2868,6 @@ msgid "" msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" msgstr "Odstranit body" @@ -2983,7 +2972,7 @@ msgstr "Přehrát vybranou animaci od vybrané pozice. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Pozice animace (v sekundách)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." @@ -3034,17 +3023,14 @@ msgid "Enable Onion Skinning" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" msgstr "Směry" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" -msgstr "Minulý" +msgstr "Předcházející" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Future" msgstr "Budoucí" @@ -3159,7 +3145,6 @@ msgid "Amount:" msgstr "Množství:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Blend:" msgstr "Prolínání:" @@ -3241,21 +3226,20 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importovat animace.." +msgid "Import Animations..." +msgstr "Importovat animace..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtry.." +msgid "Filters..." +msgstr "Filtry..." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Přiblížení animace." +msgstr "Strom animací" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3319,8 +3303,8 @@ msgid "Fetching:" msgstr "Stahuji:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Zjišťování.." +msgid "Resolving..." +msgstr "Zjišťování..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3386,8 +3370,8 @@ msgid "Site:" msgstr "Web:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Podpora.." +msgid "Support..." +msgstr "Podpora..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3435,28 +3419,28 @@ msgstr "Nastavení přichycování" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "Offset mřížky:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "Krok mřížky:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "Offset rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Krok rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "" +msgstr "Přemístit střed" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "Přesunout akci" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" @@ -3487,23 +3471,20 @@ msgid "Create new horizontal and vertical guides" msgstr "Vytvořit nové vodorovné a svislé vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Edit IK Chain" msgstr "Upravit IK řetězec" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "Upravit CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Anchors only" msgstr "Pouze kotvy" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Anchors and Margins" -msgstr "Upravit kotvy a okraje" +msgstr "Změnit kotvy a okraje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3519,19 +3500,20 @@ msgstr "Režim výběru" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Táhnutí: Otočit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+Táhnutí: Přemístit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt+Pravé tlačíko myši:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3569,7 +3551,6 @@ msgid "Snapping options" msgstr "Možnosti přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to grid" msgstr "Přichytit k mřížce" @@ -3578,6 +3559,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Nastavení přichytávání..." @@ -3591,11 +3573,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "" +msgstr "Chytré přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "" +msgstr "Přichytit k rodičovi" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" @@ -3611,7 +3593,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "" +msgstr "Přichytit k vodítkům" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3633,15 +3615,15 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" -msgstr "" +msgstr "Vytvořit kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "" +msgstr "Vymazat kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" -msgstr "" +msgstr "Zobrazit kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -3662,9 +3644,8 @@ msgid "Show Grid" msgstr "Zobrazit mřížku" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Helpers" -msgstr "Zobrazit pomocné" +msgstr "Zobrazit pomocníky" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -3675,9 +3656,8 @@ msgid "Show Guides" msgstr "Zobrazit vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Zobrazit mřížku" +msgstr "Zobrazit počátek" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -3685,25 +3665,22 @@ msgid "Show Viewport" msgstr "Zobrazit pomocné" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Selection" msgstr "Vycentrovat výběr" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "" +msgstr "Výběr snímku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" msgstr "Rozložení" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" msgstr "Vložit klíče" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Key" msgstr "Vložit klíč" @@ -3724,9 +3701,8 @@ msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Odstranit signál" +msgstr "Nastavit střed na pozici myši" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -3755,7 +3731,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "Vytvořit uzel" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3774,7 +3750,7 @@ msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" -msgstr "" +msgstr "Vytvořit Poly3D" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" @@ -3782,17 +3758,17 @@ msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "Odstranit %d?" #: 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 "Přidat položku" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "" +msgstr "Odstranit vybranou položku" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" @@ -3804,11 +3780,11 @@ msgstr "Aktualizovat ze scény" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Flat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -3883,7 +3859,7 @@ msgstr "" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "Položka %d" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" @@ -3891,17 +3867,19 @@ msgstr "Položky" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Editor seznamu položek" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Na tomto uzlu není žádný OccluderPolygon2D.\n" +"Vytvořit a přiřadit k tomuto uzlu?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "" +msgstr "Vytvořit Occluder Polygon" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." @@ -3937,19 +3915,19 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "" +msgstr "Toto v kořenu scény nefunguje!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Vytvořit Trimesh Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "Vytvořit Convex Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Vytvořit Navigation Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." @@ -4008,7 +3986,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 @@ -4020,7 +3998,6 @@ msgid "View UV2" msgstr "Zobrazit UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Unwrap UV2 for Lightmap/AO" msgstr "Rozbalit UV2 pro Lightmapu/AO" @@ -4103,15 +4080,15 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "" +msgstr "Osa X" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "" +msgstr "Osa Y" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "" +msgstr "Osa Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" @@ -4127,11 +4104,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "" +msgstr "Náhodné měřítko:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "" +msgstr "Naplnit" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" @@ -4215,7 +4192,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 @@ -4278,7 +4255,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "Vygenerovat AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" @@ -4335,7 +4312,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "Přesunout bod v křivce" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" @@ -4348,17 +4325,18 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "Vybrat body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp +#, fuzzy msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift+Táhnutí:" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "Kliknutí: Přidat bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4382,16 +4360,16 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Odstranit bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "" +msgstr "Uzavřít křivku" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "" +msgstr "Bod křivky #" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4399,9 +4377,8 @@ msgid "Set Curve Point Position" msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Odstranit signál" +msgstr "Nastavit křivku na pozici" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4410,11 +4387,11 @@ msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "Rozdělit cestu" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Odstranit bod cesty" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4431,7 +4408,7 @@ msgstr "Vytvořit UV mapu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "" +msgstr "Transformovat UV mapu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -4443,16 +4420,15 @@ msgstr "Přesunout bod" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: Otočit" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Přesunout vše" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: Zvětšení" +msgstr "Shift+Ctrl: Změnit měřítko" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" @@ -4464,7 +4440,7 @@ msgstr "Otočit polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "Změnit měřítko mnohoúhelníku" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4523,18 +4499,18 @@ 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 "" +msgstr "Otevřít v editoru" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "" +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 "" +msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4581,13 +4557,12 @@ msgid "Import Theme" msgstr "Importovat motiv" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Uložit motiv jako.." +msgid "Save Theme As..." +msgstr "Uložit motiv jako..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid " Class Reference" -msgstr " Referenční třídy" +msgstr " Reference třídy" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -4627,12 +4602,11 @@ msgstr "Uložit vše" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Lehký restart skriptu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Zkopírovat uzly" +msgstr "Zkopírovat cestu ke skriptu" #: editor/plugins/script_editor_plugin.cpp msgid "Show In File System" @@ -4680,8 +4654,8 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Najít.." +msgid "Find..." +msgstr "Najít..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4699,7 +4673,7 @@ msgstr "Vstoupit" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "Přerušit" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp @@ -4708,7 +4682,7 @@ msgstr "Pokračovat" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Nechat ladící program otevřený" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" @@ -4821,12 +4795,11 @@ msgstr "Odsadit zprava" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" +msgstr "Přepnout komentář" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Běž na řádek" +msgstr "Složit/Rozložit řádek" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -4890,16 +4863,16 @@ msgid "Find Previous" msgstr "Najít předchozí" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Nahradit.." +msgid "Replace..." +msgstr "Nahradit..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Přejít na funkci.." +msgid "Goto Function..." +msgstr "Přejít na funkci..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Přejít na řádek.." +msgid "Goto Line..." +msgstr "Přejít na řádek..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -4947,7 +4920,7 @@ msgstr "Změnit skalární funkci" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Změnit vektorovou funkci" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" @@ -5043,19 +5016,19 @@ msgstr "Perspektivní" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "" +msgstr "Transformace zrušena." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "Změnit osu X." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "Změnit osu Y." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "Změnit osu Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." @@ -5063,7 +5036,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "" +msgstr "Škálování: " #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5080,7 +5053,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "" +msgstr "Animační klíč vložen." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -5103,9 +5076,8 @@ msgid "Draw Calls" msgstr "Vykreslovací volání" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" -msgstr "Vertexy" +msgstr "Vrcholy" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" @@ -5188,9 +5160,8 @@ msgid "Display Unshaded" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Zobrazení prostředí" +msgstr "Zobrazit prostředí" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" @@ -5247,7 +5218,7 @@ msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "XForm Dialog" #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode (Q)" @@ -5259,6 +5230,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Táhnutí: Otočit\n" +"Alt+Táhnutí: Přemístit\n" +"Alt+Pravé tlačíko myši: Výběr seznamu hloubky" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5314,19 +5288,19 @@ msgstr "Přepnout perspektivní/ortogonální pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "" +msgstr "Vložit animační klíč" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "" +msgstr "Zaměřit počátek" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "" +msgstr "Zaměřit výběr" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" -msgstr "" +msgstr "Zarovnat výběr s pohledem" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Select" @@ -5353,44 +5327,40 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Nastavit přichycení.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "1 výřez" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "" +msgstr "2 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "2 výřezy (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "" +msgstr "3 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "3 výřezy (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "" +msgstr "4 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "" +msgstr "Zobrazit počátek" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "" +msgstr "Zobrazit mřížku" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -5444,11 +5414,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "Otočit (stupně):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "Změnit měřítko (poměr):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -5456,11 +5426,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "" +msgstr "Před" #: editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "" +msgstr "Po" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -5468,7 +5438,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "" +msgstr "Přidat snímek" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" @@ -5476,7 +5446,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "" +msgstr "Vložit snímek" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" @@ -5488,27 +5458,27 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "Změnit FPS animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(prázdný)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Rychlost (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "Smyčka" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "Snímky animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -5525,7 +5495,7 @@ msgstr "Zkopírovat uzly" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "" +msgstr "Přemístit (za)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" @@ -5549,7 +5519,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Žádné>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" @@ -5566,25 +5536,25 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Offset:" -msgstr "" +msgstr "Offset:" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Step:" -msgstr "" +msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Separation:" -msgstr "" +msgstr "Oddělení:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region" -msgstr "" +msgstr "Oblast textury" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "" +msgstr "Editor oblasti textury" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -5592,29 +5562,28 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "" +msgstr "Přidat všechny položky" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "" +msgstr "Přidat vše" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Item" -msgstr "" +msgstr "Odstranit položku" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Odstranit výběr" +msgstr "Odstranit všechny položky" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All" msgstr "Odebrat vše" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "" +msgid "Edit theme..." +msgstr "Editovat téma..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5622,15 +5591,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "Přidat položky třídy" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Odstranit položky třídy" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "Vytvořit prázdnou šablonu" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" @@ -5642,19 +5611,20 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "CheckBox Radio1" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "CheckBox Radio2" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Položka" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Check Item" -msgstr "" +msgstr "Zkontrolovat položku" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" @@ -5678,61 +5648,60 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "" +msgstr "Možnosti" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Možnosti" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Tab 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Tab 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "Tab 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "" +msgstr "Datový typ:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Ikona" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" -msgstr "" +msgstr "Styl" #: editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "" +msgstr "Font" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Barva" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Změnit měřítko výběru" +msgstr "Vymazat označené" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Lineární" +msgstr "Nakreslit čáru" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -5760,11 +5729,11 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "" +msgstr "Zrcadlit X" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "" +msgstr "Zrcadlit Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5776,19 +5745,19 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "Otočit o 0 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "Otočit o 90 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "Otočit o 180 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "Otočit o 270 stupňů" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" @@ -5796,15 +5765,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" -msgstr "" +msgstr "Název položky nebo ID:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" -msgstr "" +msgstr "Vytvořit ze scény?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "Sloučit ze scény?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -5813,15 +5782,15 @@ msgstr "Soubor:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "Vytvořit ze scény" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Sloučit ze scény" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" -msgstr "" +msgstr "Chyba" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" @@ -5864,7 +5833,7 @@ msgstr "Odstranit" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "Odstranit preset '%s'?" +msgstr "Odstranit předvolbu '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " @@ -5872,35 +5841,35 @@ msgstr "Exportní šablony pro tuto platformu chybí nebo jsou poškozené: " #: editor/project_export.cpp msgid "Presets" -msgstr "" +msgstr "Předvolby" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "" +msgid "Add..." +msgstr "Přidat..." #: editor/project_export.cpp msgid "Resources" -msgstr "" +msgstr "Zdroje" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "" +msgstr "Exportovat včechny zdroje tohoto projektu" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "" +msgstr "Exportovat vybrané scény (a závislosti)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "" +msgstr "Exportovat vybrané zdroje (a závislosti)" #: editor/project_export.cpp msgid "Export Mode:" -msgstr "" +msgstr "Expertní režim:" #: editor/project_export.cpp msgid "Resources to export:" -msgstr "" +msgstr "Zdroje k exportu:" #: editor/project_export.cpp msgid "" @@ -5966,6 +5935,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Jméno projektu:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Nelze vytvořit složku." @@ -6013,11 +5987,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Import & Edit" -msgstr "" +msgstr "Importovat a upravit" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Vytvořit nový projekt" #: editor/project_manager.cpp msgid "Create & Edit" @@ -6025,7 +5999,7 @@ msgstr "Vytvořit a editovat" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "" +msgstr "Instalovat projekt:" #: editor/project_manager.cpp msgid "Install & Edit" @@ -6033,7 +6007,7 @@ msgstr "Instalovat a editovat" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Jméno projektu:" #: editor/project_manager.cpp msgid "Create folder" @@ -6041,15 +6015,15 @@ msgstr "Vytvořit složku" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Cesta k projektu:" #: editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Procházet" #: editor/project_manager.cpp msgid "Unnamed Project" -msgstr "" +msgstr "Nepojmenovaný projekt" #: editor/project_manager.cpp msgid "Can't open project" @@ -6057,7 +6031,7 @@ msgstr "Nelze otevřít projekt" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "" +msgstr "Jste si jisti, že chcete otevřit více než jeden projekt?" #: editor/project_manager.cpp msgid "" @@ -6074,11 +6048,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" -msgstr "" +msgstr "Jste si jisti, že chcete spustit více než jeden projekt?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" -msgstr "" +msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotčen)" #: editor/project_manager.cpp msgid "" @@ -6102,15 +6076,15 @@ msgstr "Seznam projektů" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Skenovat" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Vyberte složku pro skenování" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nový projekt" #: editor/project_manager.cpp msgid "Templates" @@ -6118,11 +6092,11 @@ msgstr "Šablony" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "Ukončit" #: editor/project_manager.cpp msgid "Restart Now" -msgstr "" +msgstr "Restartovat nyní" #: editor/project_manager.cpp msgid "Can't run project" @@ -6148,17 +6122,20 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Mouse Button" -msgstr "" +msgstr "Tlačítko myši" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Neplatné jméno akce. Nesmí být prázdné nebo obsahovat '/', ':', '=', '\\' " +"nebo '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" -msgstr "" +msgstr "Akce '%s' již existuje!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -6178,51 +6155,51 @@ msgstr "Alt+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Control+" -msgstr "" +msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "" +msgid "Press a Key..." +msgstr "Stiskněte klávesu..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" -msgstr "" +msgstr "Index tlačítka myši:" #: editor/project_settings_editor.cpp msgid "Left Button" -msgstr "" +msgstr "Levé tlačítko" #: editor/project_settings_editor.cpp msgid "Right Button" -msgstr "" +msgstr "Pravé tlačítko" #: editor/project_settings_editor.cpp msgid "Middle Button" -msgstr "" +msgstr "Prostřední tlačítko" #: editor/project_settings_editor.cpp msgid "Wheel Up Button" -msgstr "" +msgstr "Kolečko nahoru" #: editor/project_settings_editor.cpp msgid "Wheel Down Button" -msgstr "" +msgstr "Kolečko dolů" #: editor/project_settings_editor.cpp msgid "Button 6" -msgstr "" +msgstr "Tlačítko č. 6" #: editor/project_settings_editor.cpp msgid "Button 7" -msgstr "" +msgstr "Tlačítko č. 7" #: editor/project_settings_editor.cpp msgid "Button 8" -msgstr "" +msgstr "Tlačítko č. 8" #: editor/project_settings_editor.cpp msgid "Button 9" -msgstr "" +msgstr "Tlačítko č. 9" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -6247,7 +6224,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "" +msgstr "Přidat akci" #: editor/project_settings_editor.cpp msgid "Device" @@ -6287,7 +6264,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "" +msgstr "Vlastnost '%s' neexistuje." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." @@ -6299,7 +6276,7 @@ msgstr "Odstranit položku" #: editor/project_settings_editor.cpp msgid "Already existing" -msgstr "" +msgstr "Již existující" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -6307,11 +6284,11 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Error saving settings." -msgstr "" +msgstr "Chyba při ukládání nastavení." #: editor/project_settings_editor.cpp msgid "Settings saved OK." -msgstr "" +msgstr "Nastavení úspěšně uloženo." #: editor/project_settings_editor.cpp msgid "Override for Feature" @@ -6319,11 +6296,11 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "" +msgstr "Přidat překlad" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "" +msgstr "Odstranit překlad" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" @@ -6360,14 +6337,14 @@ msgstr "Nastavení projektu (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Všeobecné" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" -msgstr "" +msgstr "Vlastnost:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6376,35 +6353,35 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Action:" -msgstr "" +msgstr "Akce:" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "" +msgstr "Zařízení:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "" +msgstr "Index:" #: editor/project_settings_editor.cpp msgid "Localization" -msgstr "" +msgstr "Lokalizace" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "" +msgstr "Překlady" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "" +msgstr "Překlady:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "" +msgstr "Přemapování" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "" +msgstr "Zdroje:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" @@ -6452,7 +6429,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "Nula" #: editor/property_editor.cpp msgid "Easing In-Out" @@ -6463,37 +6440,36 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "" +msgid "File..." +msgstr "Soubor..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "" +msgid "Dir..." +msgstr "Složka..." #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "Přiřadit" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Vybrat vše" +msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "New Script" -msgstr "" +msgstr "Nový skript" #: editor/property_editor.cpp msgid "New %s" -msgstr "" +msgstr "Nový %s" #: editor/property_editor.cpp msgid "Make Unique" -msgstr "" +msgstr "Vytvořit unikátní" #: editor/property_editor.cpp msgid "Show in File System" -msgstr "" +msgstr "Zobrazit v souborovém systému" #: editor/property_editor.cpp msgid "Convert To %s" @@ -6508,9 +6484,8 @@ msgid "Selected node is not a Viewport!" msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" -msgstr "Vložit uzly" +msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -6522,20 +6497,19 @@ msgstr "" #: editor/property_editor.cpp msgid "[Empty]" -msgstr "" +msgstr "[Prázdné]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" -msgstr "" +msgstr "Nastavit" #: editor/property_editor.cpp msgid "Properties:" -msgstr "" +msgstr "Vlastnosti:" #: editor/property_selector.cpp -#, fuzzy msgid "Select Property" -msgstr "Přidat vlastnost setter" +msgstr "Vybrat vlastnost" #: editor/property_selector.cpp msgid "Select Virtual Method" @@ -6575,15 +6549,15 @@ msgstr "" #: editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "" +msgstr "Aktuální scéna" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "" +msgstr "Hlavní scéna" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "" +msgstr "Argumenty hlavní scény:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" @@ -6600,7 +6574,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Chyba při načítání scény z %s" #: editor/scene_tree_dock.cpp msgid "" @@ -6618,19 +6592,19 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Přesunout uzel v rodiči" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Přesunout uzly v rodiči" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "Duplikovat uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "" +msgstr "Odstranit uzel/uzly?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -6641,8 +6615,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "" +msgid "Save New Scene As..." +msgstr "Uložit novou scénu jako..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -6658,7 +6632,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" -msgstr "" +msgstr "Dává smysl!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -6670,7 +6644,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp msgid "" @@ -6680,7 +6654,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "Chyba při ukládání scény." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." @@ -6696,11 +6670,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "" +msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "Přidat podřízený uzel" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -6708,11 +6682,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "Změnit typ" #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "" +msgstr "Připojit skript" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -6720,16 +6694,15 @@ msgstr "Vymazat skript" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "Sloučit ze scény" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Uložit větev jako scénu" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Copy Node Path" -msgstr "Kopírovat cestu uzlu" +msgstr "Kopírovat cestu k uzlu" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -6737,7 +6710,7 @@ msgstr "Odstranit (bez potvrzení)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "" +msgstr "Přidat/Vytvořit nový uzel" #: editor/scene_tree_dock.cpp msgid "" @@ -6746,26 +6719,24 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" msgstr "Filtrovat uzly" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "Připojit nový, nebo existující skript k vybranému uzlu." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" msgstr "Vzdálený" #: editor/scene_tree_dock.cpp msgid "Local" -msgstr "" +msgstr "Místní" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" @@ -6823,7 +6794,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Přepnout viditelnost" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -6831,11 +6802,11 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Přejmenovat uzel" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Strom scény (uzly):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" @@ -6843,7 +6814,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Vybrat uzel" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -6859,36 +6830,35 @@ msgstr "Chyba nahrávání skriptu z %s" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "N/A" #: editor/script_create_dialog.cpp msgid "Path is empty" -msgstr "" +msgstr "Cesta je prázdná" #: editor/script_create_dialog.cpp msgid "Path is not local" -msgstr "" +msgstr "Cesta není místní" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Neplatná základní cesta" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" -msgstr "" +msgstr "Složka se stejným jménem již existuje" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Soubor už existuje. Přepsat?" +msgstr "Soubor již existuje, bude znovu použit" #: editor/script_create_dialog.cpp msgid "Invalid extension" -msgstr "" +msgstr "Neplatná přípona" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Vybrána špatná přípona" #: editor/script_create_dialog.cpp msgid "Invalid Path" @@ -6896,7 +6866,7 @@ msgstr "Neplatná cesta" #: editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "" +msgstr "Neplatné jméno třídy" #: editor/script_create_dialog.cpp #, fuzzy @@ -6905,11 +6875,11 @@ msgstr "Neplatné jméno vlastnosti." #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Skript je validní" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Povoleno: a-z, A-Z, 0-9 a _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" @@ -6925,15 +6895,15 @@ msgstr "" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "" +msgstr "Jazyk" #: editor/script_create_dialog.cpp msgid "Inherits" -msgstr "" +msgstr "Dědí" #: editor/script_create_dialog.cpp msgid "Class Name" -msgstr "" +msgstr "Jméno třídy" #: editor/script_create_dialog.cpp msgid "Template" @@ -6948,29 +6918,28 @@ msgid "Attach Node Script" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " msgstr "Vzdálený " #: editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "" +msgstr "Bajtů:" #: editor/script_editor_debugger.cpp msgid "Warning" -msgstr "" +msgstr "Varování" #: editor/script_editor_debugger.cpp msgid "Error:" -msgstr "" +msgstr "Chyba:" #: editor/script_editor_debugger.cpp msgid "Source:" -msgstr "" +msgstr "Zdroj:" #: editor/script_editor_debugger.cpp msgid "Function:" -msgstr "" +msgstr "Funkce:" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -6978,16 +6947,15 @@ msgstr "" #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" -msgstr "" +msgstr "Chyby" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Připojit.." +msgstr "Kopírovat chybu" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -7003,11 +6971,11 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Variable" -msgstr "" +msgstr "Proměnná" #: editor/script_editor_debugger.cpp msgid "Errors:" -msgstr "" +msgstr "Chyby:" #: editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" @@ -7023,7 +6991,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Value" -msgstr "" +msgstr "Hodnota" #: editor/script_editor_debugger.cpp msgid "Monitors" @@ -7035,7 +7003,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" +msgstr "Celkem:" #: editor/script_editor_debugger.cpp msgid "Video Mem" @@ -7043,23 +7011,23 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Cesta ke zdroji" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "" +msgstr "Typ" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "" +msgstr "Formát" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "Používání" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Různé" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -7079,7 +7047,7 @@ msgstr "" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Zkratky" #: editor/settings_config_dialog.cpp msgid "Binding" @@ -7087,7 +7055,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" -msgstr "" +msgstr "Změnit rádius světla" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" @@ -7095,11 +7063,11 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "" +msgstr "Změnit zorné pole kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" -msgstr "" +msgstr "Změnit velikost kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Sphere Shape Radius" @@ -7152,15 +7120,15 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "" +msgstr "Platforma:" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform" -msgstr "" +msgstr "Platforma" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dynamic Library" -msgstr "" +msgstr "Dynamická knihovna" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7168,23 +7136,23 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" -msgstr "" +msgstr "Knihovna" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" -msgstr "" +msgstr "Status" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "Knihovny: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7260,14 +7228,12 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Smazat vybraný" +msgstr "GridMap Smazat výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Duplikovat výběr" +msgstr "GridMap Duplikovat výběr" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -7292,15 +7258,15 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editovat osu X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Editovat osu Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editovat osu Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" @@ -7331,9 +7297,8 @@ msgid "Cursor Clear Rotation" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Vytvořit nový" +msgstr "Vytvořit plochu" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Create Exterior Connector" @@ -7341,15 +7306,13 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Erase Area" -msgstr "" +msgstr "Vymazat oblast" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Změnit měřítko výběru" +msgstr "Vymazat výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" msgstr "Nastavení GridMap" @@ -7363,25 +7326,23 @@ msgstr "" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "" +msgstr "Generování řešení..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Generování C# projektu..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." msgstr "Nepodařilo se vytvořit řešení." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." msgstr "Nepodařilo se uložit řešení." #: modules/mono/editor/godotsharp_editor.cpp msgid "Done" -msgstr "" +msgstr "Hotovo" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create C# project." @@ -7389,14 +7350,13 @@ msgstr "" #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "O podpoře C#" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Create C# solution" msgstr "Vytvořit C# řešení" @@ -7410,7 +7370,7 @@ msgstr "Sestavit projekt" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Warnings" -msgstr "" +msgstr "Varování" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" @@ -7458,9 +7418,8 @@ msgid "Change Signal Arguments" msgstr "Upravit argumenty signálu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Změnit typ hodnot pole" +msgstr "Změnit typ argumentu" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" @@ -7515,29 +7474,25 @@ msgid "Add Signal" msgstr "Přidat signál" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Expression" -msgstr "Animace: změna přechodu" +msgstr "Změnit výraz" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" msgstr "Přidat uzel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Odstranit neplatné klíče" +msgstr "Odstranit uzly VisualScriptu" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Podržte Meta k uvolnění getteru. Podržte Shift k uvolnění generického " -"podpisu." +"Podržte %s k uvolnění getteru. Podržte Shift k uvolnění generického podpisu." #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -7547,7 +7502,6 @@ msgstr "" "podpisu." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a simple reference to the node." msgstr "Podržte %s k uvolnění jednoduché reference na uzel." @@ -7627,11 +7581,11 @@ msgstr "Zavolat" #: modules/visual_script/visual_script_editor.cpp msgid "Get" -msgstr "" +msgstr "Získat" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "" +msgstr "Script již má funkci '%s'" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" @@ -7643,7 +7597,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "" +msgstr "Schránka je prázdná!" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" @@ -7775,11 +7729,11 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "" +msgstr "Spustit v prohlížeči" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "Spustit vyexportované HTML ve výchozím prohlížeči." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -7845,7 +7799,7 @@ msgstr "" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "Prázdný CollisionPolygon2D nemá žádný efekt na kolizích." +msgstr "Prázdný CollisionPolygon2D nemá při kolizi žádný efekt." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -7930,6 +7884,8 @@ msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D funguje nejlépe, když je nastaven jako rodič editované " +"scény." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" @@ -7961,11 +7917,11 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "%d%%" -msgstr "" +msgstr "%d%%" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(Zbývající čas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8092,11 +8048,11 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Raw Mode" -msgstr "" +msgstr "RAW mód" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "Přidat aktuální barvu jako předvolbu" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8104,7 +8060,7 @@ msgstr "Pozor!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Potvrďte prosím.." +msgstr "Potvrďte prosím..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" @@ -8168,6 +8124,13 @@ msgstr "Chyba nahrávání fontu." msgid "Invalid font size." msgstr "Neplatná velikost fontu." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Předchozí záložka" + +#~ msgid "Next" +#~ msgstr "Další" + #~ msgid "Can't contain '/' or ':'" #~ msgstr "Nesmí obsaovat '/' nebo ':'" @@ -8181,9 +8144,6 @@ msgstr "Neplatná velikost fontu." #~ msgid "Can't write file." #~ msgstr "Nelze zapsat soubor." -#~ msgid "Next" -#~ msgstr "Další" - #~ msgid "Not found!" #~ msgstr "Nenalezeno!" diff --git a/editor/translations/da.po b/editor/translations/da.po index 349706f6e0..3b5854334a 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -6,14 +6,14 @@ # 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. +# Kim Nielsen <kimmowich@stofanet.dk>, 2017, 2018. # Michael Madsen <mim@michael-madsen.dk>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-22 07:35+0000\n" -"Last-Translator: Dankse Memes <purplelops@gmail.com>\n" +"PO-Revision-Date: 2018-05-17 19:35+0000\n" +"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" @@ -501,7 +501,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Afbryd '%s' fra '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Forbind..." #: editor/connections_dialog.cpp @@ -829,9 +829,8 @@ msgid "Rename Audio Bus" msgstr "Omdøb Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Skifter Audio Bus Solo" +msgstr "Skift Audio Bus Volume" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -923,12 +922,12 @@ msgid "Move Audio Bus" msgstr "Flyt Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Gem Audio Bus Layout Som.." +msgid "Save Audio Bus Layout As..." +msgstr "Gem Audio Bus Layout Som..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Placering for Ny Layout.." +msgid "Location for New Layout..." +msgstr "Placering for Ny Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1069,12 +1068,12 @@ msgid "Updating Scene" msgstr "Opdatere Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Gemmer lokale ændringer.." +msgid "Storing local changes..." +msgstr "Gemmer lokale ændringer..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Opdatere scene.." +msgid "Updating scene..." +msgstr "Opdatere scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1142,8 +1141,8 @@ msgid "Show In File Manager" msgstr "Vis I Fil Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Opret mappe.." +msgid "New Folder..." +msgstr "Opret mappe..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1335,18 +1334,16 @@ msgid "Description" msgstr "Beskrivelse" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentation:" +msgstr "Online Undervisning:" #: 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 "" -"Der er i øjeblikket ingen beskrivelse af denne metode. Det vil være en stor " +"Der er i øjeblikket ingen beskrivelse af denne klasse. Det vil være en stor " "hjælp, hvis du kan [color=$color][url=$url]bidrage[/url][/color] med en " "beskrivelse!" @@ -1404,30 +1401,28 @@ msgid "Clear" msgstr "Clear" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Output" +msgstr "Ryd Output" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt eksport fejlede med fejlkode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fejl, kan ikke gemme ressource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Gem Ressource Som.." +msgid "Save Resource As..." +msgstr "Gem Ressource Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "Jeg ser.." +msgid "I see..." +msgstr "Jeg ser..." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open file for writing:" msgstr "Kan ikke åbne fil til skrivning:" @@ -1448,7 +1443,6 @@ msgid "Error while parsing '%s'." msgstr "Error ved parsing af '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unexpected end of file '%s'." msgstr "Uventet afslutning af fil '%s'." @@ -1478,12 +1472,11 @@ msgid "This operation can't be done without a tree root." msgstr "Denne handling kan ikke foretages uden tree root" #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Kunne ikke gemme scene. Der er nogle afhængigheder (forekomster) some ikke " +"Kunne ikke gemme scene. Der er nogle afhængigheder (forekomster) som ikke " "kunne opfyldes." #: editor/editor_node.cpp @@ -1660,12 +1653,12 @@ msgid "Open Base Scene" msgstr "Åbn Grund Scene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Hurtig Åbn Scene.." +msgid "Quick Open Scene..." +msgstr "Hurtig Åbn Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Hurtig Åbn Script.." +msgid "Quick Open Script..." +msgstr "Hurtig Åbn Script..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1676,8 +1669,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Gem ændringer til '%s' før lukning?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Gem Scene Som.." +msgid "Save Scene As..." +msgstr "Gem Scene Som..." #: editor/editor_node.cpp msgid "No" @@ -1728,8 +1721,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Denne handling kan ikke fortrydes. Vend tilbage alligevel?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hurtig Kør Scene.." +msgid "Quick Run Scene..." +msgstr "Hurtig Kør Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1887,8 +1880,8 @@ msgid "Previous tab" msgstr "Forrige fane" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer filer.." +msgid "Filter Files..." +msgstr "Filtrer filer..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1900,12 +1893,12 @@ msgstr "Ny Scene" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "Ny Nedarvet Scene.." +msgid "New Inherited Scene..." +msgstr "Ny Nedarvet Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Åbn Scene.." +msgid "Open Scene..." +msgstr "Åbn Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1924,16 +1917,16 @@ msgid "Open Recent" msgstr "Åben Seneste" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konverter Til.." +msgid "Convert To..." +msgstr "Konverter Til..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MaskeBibliotek.." +msgid "MeshLibrary..." +msgstr "MaskeBibliotek..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2199,8 +2192,8 @@ msgid "Save the currently edited resource." msgstr "Gem den aktuelt redigerede ressource." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Gem Som.." +msgid "Save As..." +msgstr "Gem Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2308,8 +2301,8 @@ msgid "Creating Mesh Previews" msgstr "Opretter Maske Forhåndsvisninger" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniature.." +msgid "Thumbnail..." +msgstr "Miniature..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2465,8 +2458,8 @@ msgid "(Current)" msgstr "(Nuværende)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Henter spejle, vent venligst .." +msgid "Retrieving mirrors, please wait..." +msgstr "Henter spejle, vent venligst ..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2548,7 +2541,7 @@ msgstr "Fejl i anmodning url: " #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Forbinder..." #: editor/export_template_manager.cpp @@ -2566,8 +2559,8 @@ msgstr "Kan ikke Løses" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Forbinder.." +msgid "Connecting..." +msgstr "Forbinder..." #: editor/export_template_manager.cpp #, fuzzy @@ -2580,8 +2573,8 @@ msgstr "Tilsluttet" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Anmoder.." +msgid "Requesting..." +msgstr "Anmoder..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2722,12 +2715,12 @@ msgid "Collapse all" msgstr "Klap alle sammen" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Omdøb.." +msgid "Rename..." +msgstr "Omdøb..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Flyt Til.." +msgid "Move To..." +msgstr "Flyt Til..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2739,16 +2732,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Rediger Afhængigheder.." +msgid "Edit Dependencies..." +msgstr "Rediger Afhængigheder..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vis Ejere.." +msgid "View Owners..." +msgstr "Vis Ejere..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplikere" #: editor/filesystem_dock.cpp @@ -2774,10 +2767,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Scanner Filer,\n" -"Vent Venligst.." +"Vent Venligst..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2842,20 +2835,20 @@ msgid "Import Scene" msgstr "Importer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importerer Scene.." +msgid "Importing Scene..." +msgstr "Importerer Scene..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Generering af lightmaps" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Generering til Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Kører Brugerdefineret Script.." +msgid "Running Custom Script..." +msgstr "Kører Brugerdefineret Script..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2870,8 +2863,8 @@ msgid "Error running post-import script:" msgstr "Fejl ved kørsel af efter-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Gemmer.." +msgid "Saving..." +msgstr "Gemmer..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2890,8 +2883,8 @@ msgid "Import As:" msgstr "Importer Som:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Forudindstillet.." +msgid "Preset..." +msgstr "Forudindstillet..." #: editor/import_dock.cpp msgid "Reimport" @@ -2981,21 +2974,21 @@ msgstr "Fjern Animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "FEJL: Ugyldig animationsnavn!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "FEJL: Animationsnavn eksisterer allerede!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Omdøb animation" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Tilføj animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" @@ -3007,19 +3000,19 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Indlæs animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Lav en kopi af animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "" +msgstr "FEJL: Der er ingen animation der kan kopieres!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "FEJL: Ingen animationsressource i udklipsholder!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3031,31 +3024,31 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "FEJL: Der er ingen animation som kan redigeres!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "Afspil valgte animation baglæns fra nuværende position. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "Afspil valgt animation baglæns fra slutningen. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Stop animation afspilning. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "Afspil valgt animation fra start. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "Afspil valgt animation fra nuværende position. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Animationsposition (i sekunder)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." @@ -3310,7 +3303,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 @@ -3318,7 +3311,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 @@ -3387,7 +3380,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3454,7 +3447,7 @@ msgid "Site:" msgstr "Websted:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Støtte..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3642,6 +3635,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4065,7 +4059,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 @@ -4272,7 +4266,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 @@ -4638,7 +4632,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 @@ -4737,7 +4731,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 @@ -4944,15 +4938,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 @@ -5405,11 +5399,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5662,7 +5652,7 @@ msgid "Remove All" msgstr "Fjern Alt" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5730,7 +5720,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5856,7 +5846,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5920,7 +5910,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6011,6 +6001,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ugyldigt navn." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunne ikke oprette mappe." @@ -6201,8 +6196,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6230,7 +6225,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 @@ -6415,7 +6410,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6511,11 +6506,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 @@ -6686,7 +6681,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 @@ -8197,6 +8192,13 @@ msgstr "Error loading skrifttype." msgid "Invalid font size." msgstr "Ugyldig skriftstørrelse." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Forrige fane" + +#~ msgid "Next" +#~ msgstr "Næste" + #~ msgid "Can't contain '/' or ':'" #~ msgstr "Kan ikke indeholde '/' eller ':'" @@ -8210,9 +8212,6 @@ msgstr "Ugyldig skriftstørrelse." #~ msgid "Can't write file." #~ msgstr "Kan ikke skrive til fil." -#~ msgid "Next" -#~ msgstr "Næste" - #~ msgid "Not found!" #~ msgstr "Ikke fundet!" diff --git a/editor/translations/de.po b/editor/translations/de.po index 2087c7f4b6..d5d63f654b 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -2,7 +2,6 @@ # 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. -# # Alexander Mahr <alex.mahr@gmail.com>, 2016. # Andreas Esau <andreasesau@gmail.com>, 2016. # Andreas Haas <liu.gam3@gmail.com>, 2016. @@ -12,10 +11,13 @@ # CitrusEdition <mariankloesler@web.de>, 2017. # danjo <atze@libra.uberspace.de>, 2016. # Eurocloud KnowHow <tobias.kloy@werde-volunteer.info>, 2017. +# HugeGameArt <hugegameartgd@gmail.com>, 2018. # hyperglow <greensoma@web.de>, 2016. # Jan Groß <jan@grossit.de>, 2016. # Kim <github@aggsol.de>, 2017. +# Metin Celik <metincelik88@gmail.com>, 2018. # Neicul <neicul@gmx.de>, 2018. +# nimradium <nimra242001@gmail.com>, 2018. # Oliver Ruehl <oliver@ruehldesign.co>, 2016-2017. # Paul-Vincent Roll <paviro@me.com>, 2016. # Peter Friedland <peter_friedland@gmx.de>, 2016. @@ -25,13 +27,12 @@ # Tim Schellenberg <smwleod@gmail.com>, 2017. # Timo Schwarzer <account@timoschwarzer.com>, 2016-2018. # viernullvier <hannes.breul+github@gmail.com>, 2016. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-18 15:38+0000\n" -"Last-Translator: Neicul <neicul@gmx.de>\n" +"PO-Revision-Date: 2018-06-19 19:38+0000\n" +"Last-Translator: nimradium <nimra242001@gmail.com>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -39,7 +40,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -330,7 +331,8 @@ msgstr "Optimieren" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "" -"AnimationPlayer aus dem Szenenbaum auswählen um Animationen zu bearbeiten." +"Wählen Sie einen AnimationPlayer aus dem Szenenbaum aus, um Animationen zu " +"bearbeiten." #: editor/animation_editor.cpp msgid "Key" @@ -520,8 +522,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' von '%s' trennen" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Verbinden.." +msgid "Connect..." +msgstr "Verbinden..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -946,12 +948,12 @@ msgid "Move Audio Bus" msgstr "Audiobus verschieben" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Audiobus-Layout speichern als.." +msgid "Save Audio Bus Layout As..." +msgstr "Audiobus-Layout speichern als..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Speicherort für neues Layout.." +msgid "Location for New Layout..." +msgstr "Speicherort für neues Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1092,11 +1094,11 @@ msgid "Updating Scene" msgstr "Aktualisiere Szene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Speichere lokale Änderungen.." +msgid "Storing local changes..." +msgstr "Speichere lokale Änderungen..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Aktualisiere Szene..." #: editor/editor_data.cpp @@ -1165,8 +1167,8 @@ msgid "Show In File Manager" msgstr "Zeige im Dateimanager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Neuer Ordner.." +msgid "New Folder..." +msgstr "Neuer Ordner..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1427,19 +1429,19 @@ msgstr "Ausgabe löschen" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt-Export ist fehlgeschlagen mit Fehlercode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fehler beim speichern der Ressource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Speichere Ressource als.." +msgid "Save Resource As..." +msgstr "Speichere Ressource als..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Verstehe..." #: editor/editor_node.cpp @@ -1671,12 +1673,12 @@ msgid "Open Base Scene" msgstr "Basisszene öffnen" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Schnell Szenen öffnen.." +msgid "Quick Open Scene..." +msgstr "Schnell Szenen öffnen..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Schnell Skripte öffnen.." +msgid "Quick Open Script..." +msgstr "Schnell Skripte öffnen..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1687,8 +1689,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Änderungen in ‚%s‘ vor dem Schließen speichern?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Szene speichern als.." +msgid "Save Scene As..." +msgstr "Szene speichern als..." #: editor/editor_node.cpp msgid "No" @@ -1741,8 +1743,8 @@ msgstr "" "Diese Aktion kann nicht rückgängig gemacht werden. Trotzdem zurücksetzen?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Schnell Szene starten.." +msgid "Quick Run Scene..." +msgstr "Schnell Szene starten..." #: editor/editor_node.cpp msgid "Quit" @@ -1905,8 +1907,8 @@ msgid "Previous tab" msgstr "Vorheriger Tab" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Dateien filtern.." +msgid "Filter Files..." +msgstr "Dateien filtern..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1917,12 +1919,12 @@ msgid "New Scene" msgstr "Neue Szene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Neue gererbte Szene.." +msgid "New Inherited Scene..." +msgstr "Neue geerbte Szene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Szene öffnen.." +msgid "Open Scene..." +msgstr "Szene öffnen..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1941,16 +1943,16 @@ msgid "Open Recent" msgstr "Zuletzt benutzte Szenen" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Umwandeln zu.." +msgid "Convert To..." +msgstr "Umwandeln zu..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2214,8 +2216,8 @@ msgid "Save the currently edited resource." msgstr "Speichere die so eben bearbeitete Ressource." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Speichern als.." +msgid "Save As..." +msgstr "Speichern als..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2323,8 +2325,8 @@ msgid "Creating Mesh Previews" msgstr "Mesh-Vorschauen erzeugen" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Vorschau.." +msgid "Thumbnail..." +msgstr "Vorschau..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2476,12 +2478,12 @@ msgid "(Current)" msgstr "(Aktuell)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Mirrors werden geladen, bitte warten..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "Template-Version ‚%s‘ entfernen?" +msgstr "Template-Version '%s' entfernen?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2554,8 +2556,8 @@ msgid "Error requesting url: " msgstr "Fehler beim Abrufen der URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Verbinde mit Mirror.." +msgid "Connecting to Mirror..." +msgstr "Verbinde mit Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2571,8 +2573,8 @@ msgstr "Kann nicht aufgelöst werden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Verbinde.." +msgid "Connecting..." +msgstr "Verbinde..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2584,8 +2586,8 @@ msgstr "Verbunden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Frage an.." +msgid "Requesting..." +msgstr "Frage an..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2721,12 +2723,12 @@ msgid "Collapse all" msgstr "Alle einklappen" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Umbenennen.." +msgid "Rename..." +msgstr "Umbenennen..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Verschiebe zu.." +msgid "Move To..." +msgstr "Verschiebe zu..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2737,16 +2739,16 @@ msgid "Instance" msgstr "Instanz" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Abhängigkeiten bearbeiten.." +msgid "Edit Dependencies..." +msgstr "Abhängigkeiten bearbeiten..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Zeige Besitzer.." +msgid "View Owners..." +msgstr "Zeige Besitzer..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplizieren.." +msgid "Duplicate..." +msgstr "Duplizieren..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2771,10 +2773,10 @@ msgstr "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes. #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Lese Dateien,\n" -"Bitte warten.." +"Bitte warten..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2839,8 +2841,8 @@ msgid "Import Scene" msgstr "Szene importieren" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Szene wird importiert.." +msgid "Importing Scene..." +msgstr "Szene wird importiert..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2851,8 +2853,8 @@ msgid "Generating for Mesh: " msgstr "Generierung für Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Angepasstes Skript wird ausgeführt.." +msgid "Running Custom Script..." +msgstr "Angepasstes Skript wird ausgeführt..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2867,8 +2869,8 @@ msgid "Error running post-import script:" msgstr "Fehler beim ausführen des Post-Import Skripts:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Speichere.." +msgid "Saving..." +msgstr "Speichere..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2887,8 +2889,8 @@ msgid "Import As:" msgstr "Importiere als:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Voreinstellungen.." +msgid "Preset..." +msgstr "Voreinstellungen..." #: editor/import_dock.cpp msgid "Reimport" @@ -3305,16 +3307,16 @@ msgid "Transition Node" msgstr "Übergangs-Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animationen importieren.." +msgid "Import Animations..." +msgstr "Animationen importieren..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Nodefilter bearbeiten" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filter.." +msgid "Filters..." +msgstr "Filter..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3381,8 +3383,8 @@ msgid "Fetching:" msgstr "Hole:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Löse auf.." +msgid "Resolving..." +msgstr "Löse auf..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3448,8 +3450,8 @@ msgid "Site:" msgstr "Seite:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Stabilität.." +msgid "Support..." +msgstr "Stabilität..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3648,6 +3650,7 @@ msgid "Use Rotation Snap" msgstr "Rotationsraster benutzen" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Einrasten konfigurieren..." @@ -3745,14 +3748,12 @@ 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" +msgstr "Zeige Ansichtsfenster (Viewport)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4046,7 +4047,7 @@ 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 "" +msgstr "Der Mesh-Grundtyp ist nicht ist nicht PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4077,8 +4078,8 @@ msgid "Create Convex Collision Sibling" msgstr "Konvexes Kollisionselement erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Umriss-Mesh erzeugen.." +msgid "Create Outline Mesh..." +msgstr "Umriss-Mesh erzeugen..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4285,8 +4286,8 @@ msgid "Error loading image:" msgstr "Fehler beim Laden des Bilds:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Keine Pixel mit einer Transparenz > 128 im Bild.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Keine Pixel mit einer Transparenz > 128 im Bild..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4646,8 +4647,8 @@ msgid "Import Theme" msgstr "Motiv importieren" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Motiv speichern als.." +msgid "Save Theme As..." +msgstr "Motiv speichern als..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4743,8 +4744,8 @@ msgstr "Seitenleiste umschalten" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Finde.." +msgid "Find..." +msgstr "Finde..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4953,16 +4954,16 @@ msgid "Find Previous" msgstr "Finde Vorheriges" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Ersetzen.." +msgid "Replace..." +msgstr "Ersetzen..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Springe zu Funktion.." +msgid "Goto Function..." +msgstr "Springe zu Funktion..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Springe zu Zeile.." +msgid "Goto Line..." +msgstr "Springe zu Zeile..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5415,12 +5416,8 @@ msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Einrasten konfigurieren.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Transformationsdialog.." +msgid "Transform Dialog..." +msgstr "Transformationsdialog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5672,8 +5669,8 @@ msgid "Remove All" msgstr "Alles entfernen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Thema bearbeiten.." +msgid "Edit theme..." +msgstr "Thema bearbeiten..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5720,14 +5717,12 @@ msgid "Checked Item" msgstr "Überprüftes Element" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Element hinzufügen" +msgstr "Element der Auswahl" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Überprüftes Element" +msgstr "Markiertes Element der Auswahl" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5742,8 +5737,8 @@ msgid "Options" msgstr "Optionen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Enthalten,Viele,Einige,Optionen!" +msgid "Has,Many,Options" +msgstr "Einstellungen" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5934,8 +5929,8 @@ msgid "Presets" msgstr "Vorlagen" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Hinzufügen.." +msgid "Add..." +msgstr "Hinzufügen..." #: editor/project_export.cpp msgid "Resources" @@ -6028,6 +6023,10 @@ msgid "Imported Project" msgstr "Importiertes Projekt" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Ungültiger Projektname." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Ordner konnte nicht erstellt werden." @@ -6230,9 +6229,11 @@ msgstr "Maustaste" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Ungültiger Aktionsname. Er kann weder leer sein noch ‚/‘, ‚:‘, ‚=‘, ‘\\‘ " +"oder ‚\"‘ enthalten." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6259,8 +6260,8 @@ msgid "Control+" msgstr "Steuerung+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Drücke eine Taste.." +msgid "Press a Key..." +msgstr "Drücke eine Taste..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6443,8 +6444,8 @@ msgid "Property:" msgstr "Eigenschaft:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Überschreiben für.." +msgid "Override For..." +msgstr "Überschreiben für..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6539,12 +6540,12 @@ msgid "Easing Out-In" msgstr "Glätten Aus-Ein" #: editor/property_editor.cpp -msgid "File.." -msgstr "Datei.." +msgid "File..." +msgstr "Datei..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Verzeichnis.." +msgid "Dir..." +msgstr "Verzeichnis..." #: editor/property_editor.cpp msgid "Assign" @@ -6719,8 +6720,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Diese Aktion kann nicht auf instantiierten Szenen ausgeführt werden." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Speichere neue Szene als.." +msgid "Save New Scene As..." +msgstr "Speichere neue Szene als..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7439,7 +7440,7 @@ msgstr "Auswahlradius:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Der Klassenname kann nicht ein reserviertes Schlüsselwort sein" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8164,7 +8165,7 @@ msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Spatial-Node verweisen." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "Ein WorldEnvironment benötigt eine Environment-Ressource." #: scene/3d/scenario_fx.cpp msgid "" @@ -8178,6 +8179,9 @@ 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 "" +"Dieses WorldEnvironment wird ignoriert. Entweder füge eine Kamera (für 3D-" +"Szenen) hinzu oder setze den Hintergrund-Modus des Environments nach Canvas " +"(für 2D-Szenen)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8280,6 +8284,13 @@ msgstr "Fehler beim Laden der Schriftart." msgid "Invalid font size." msgstr "Ungültige Schriftgröße." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Vorheriger Tab" + +#~ msgid "Next" +#~ msgstr "Nächste" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "" #~ "Ungültiger Name für Aktion (alle Zeichen außer ‚/‘ und ‚:‘ möglich)." @@ -8306,9 +8317,6 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "project.godot konnte nicht im Projektpfad gefunden werden." -#~ msgid "Next" -#~ msgstr "Nächste" - #~ msgid "Not found!" #~ msgstr "Nicht gefunden!" @@ -8457,7 +8465,7 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Exporting for %s" #~ msgstr "Exportiere für %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Bereite vor..." #~ msgid "Error loading scene." @@ -8520,8 +8528,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Neuimport.." +#~ msgid "Re-Import..." +#~ msgstr "Neuimport..." #~ msgid "No bit masks to import!" #~ msgstr "Keine Bitmasken zu importieren!" @@ -8915,14 +8923,14 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Zoom (%):" #~ msgstr "Vergrößerung (%):" -#~ msgid "Skeleton.." -#~ msgstr "Skelett.." +#~ msgid "Skeleton..." +#~ msgstr "Skelett..." #~ msgid "Zoom Reset" #~ msgstr "Vergrößerung zurücksetzen" -#~ msgid "Zoom Set.." -#~ msgstr "Vergrößerung setzen.." +#~ msgid "Zoom Set..." +#~ msgstr "Vergrößerung setzen..." #~ msgid "Set a Value" #~ msgstr "Einen Wert setzen" @@ -9392,8 +9400,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Export Project PCK" #~ msgstr "Exportiere Projekt-PCK" -#~ msgid "Export.." -#~ msgstr "Exportieren.." +#~ msgid "Export..." +#~ msgstr "Exportieren..." #~ msgid "Project Export" #~ msgstr "Projekt exportieren" @@ -9458,8 +9466,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Method In Node:" #~ msgstr "Methode in Node:" -#~ msgid "Edit Connections.." -#~ msgstr "Bearbeite Verbindungen.." +#~ msgid "Edit Connections..." +#~ msgstr "Bearbeite Verbindungen..." #~ msgid "Plugin List:" #~ msgstr "Plugin Liste:" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index ea942bb7c2..26f824bc4b 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -916,11 +916,11 @@ msgid "Move Audio Bus" msgstr "Bild bewegen/einfügen" #: 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 @@ -1056,11 +1056,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 @@ -1130,7 +1130,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 @@ -1394,12 +1394,12 @@ 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 @@ -1608,11 +1608,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 @@ -1625,7 +1625,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 @@ -1680,7 +1680,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 @@ -1828,7 +1828,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1840,11 +1840,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 @@ -1865,15 +1865,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 @@ -2123,7 +2123,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 @@ -2235,7 +2235,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2386,7 +2386,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 @@ -2465,7 +2465,7 @@ msgstr "Szene kann nicht gespeichert werden." #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Connections editieren" #: editor/export_template_manager.cpp @@ -2483,7 +2483,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "Connections editieren" #: editor/export_template_manager.cpp @@ -2498,7 +2498,7 @@ msgstr "Verbindung zu Node:" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2639,11 +2639,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 @@ -2656,16 +2656,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Node(s) duplizieren" #: editor/filesystem_dock.cpp @@ -2691,7 +2691,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2757,7 +2757,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2769,7 +2769,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 @@ -2785,7 +2785,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2806,7 +2806,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3231,7 +3231,7 @@ msgid "Transition Node" msgstr "Transition-Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3239,7 +3239,7 @@ msgid "Edit Node Filters" msgstr "Node Filter editieren" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3310,7 +3310,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3378,7 +3378,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3571,6 +3571,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3998,7 +3999,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 @@ -4206,7 +4207,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 @@ -4575,7 +4576,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 @@ -4672,7 +4673,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 @@ -4881,15 +4882,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 @@ -5347,11 +5348,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5607,7 +5604,7 @@ msgid "Remove All" msgstr "Ungültige Bilder löschen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5675,7 +5672,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5865,7 +5862,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5961,6 +5958,11 @@ msgstr "Importierte Projekte" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Projektname:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Node erstellen" @@ -6157,8 +6159,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6186,8 +6188,8 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Taste drücken.." +msgid "Press a Key..." +msgstr "Taste drücken..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6373,7 +6375,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6470,11 +6472,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 @@ -6651,7 +6653,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Das funktioniert nicht bei einer instanzierten Szene." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Neue Szene speichern als..." #: editor/scene_tree_dock.cpp diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 687c517180..1cb31e0ee9 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -3491,6 +3491,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -5240,10 +5241,6 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap..." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." msgstr "" @@ -5565,7 +5562,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5843,6 +5840,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6029,8 +6030,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp diff --git a/editor/translations/el.po b/editor/translations/el.po index 2bf8d790ab..b3275b4647 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-03-05 16:04+0000\n" +"PO-Revision-Date: 2018-05-20 09:37+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.20-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -498,8 +498,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Αποσύνδεση του '%s' απο το '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Σύνδεση.." +msgid "Connect..." +msgstr "Σύνδεση..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -919,12 +919,12 @@ msgid "Move Audio Bus" msgstr "Μετακίνηση διαύλου ήχου" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Αποθήκευση διάταξης διαύλων ήχου ώς.." +msgid "Save Audio Bus Layout As..." +msgstr "Αποθήκευση διάταξης διαύλων ήχου ώς..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Τοποθεσία για νέα διάταξη.." +msgid "Location for New Layout..." +msgstr "Τοποθεσία για νέα διάταξη..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1061,12 +1061,12 @@ msgid "Updating Scene" msgstr "Ενημέρωση σκηνής" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Αποθήκευση τοπικών αλλαγών.." +msgid "Storing local changes..." +msgstr "Αποθήκευση τοπικών αλλαγών..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Ενημέρωση σκηνής.." +msgid "Updating scene..." +msgstr "Ενημέρωση σκηνής..." #: editor/editor_data.cpp msgid "[empty]" @@ -1134,7 +1134,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 @@ -1396,20 +1396,20 @@ msgstr "Εκκαθάριση εξόδου" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Η εξαγωγή του έργου απέτυχε με κωδικό %d." #: 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 "Αποθήκευση πόρου ως.." +msgid "Save Resource As..." +msgstr "Αποθήκευση πόρου ως..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Εντάξει.." +msgid "I see..." +msgstr "Εντάξει..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1643,11 +1643,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 @@ -1659,7 +1659,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Αποθήκευση αλλαγών στο '%s' πριν το κλείσιμο;" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Αποθήκευση σκηνή ως..." #: editor/editor_node.cpp @@ -1714,7 +1714,7 @@ msgstr "" "επαναφορά;" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Γρήγορη εκτέλεση σκηνής..." #: editor/editor_node.cpp @@ -1877,7 +1877,7 @@ msgid "Previous tab" msgstr "Προηγούμενη καρτέλα" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Φιλτράρισμα αρχείων..." #: editor/editor_node.cpp @@ -1889,12 +1889,12 @@ msgid "New Scene" msgstr "Νέα σκηνή" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Νέα κληρονομημένη σκηνή.." +msgid "New Inherited Scene..." +msgstr "Νέα κληρονομημένη σκηνή..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Άνοιγμα σκηνής.." +msgid "Open Scene..." +msgstr "Άνοιγμα σκηνής..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1913,15 +1913,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 "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2186,7 +2186,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 @@ -2295,8 +2295,8 @@ msgid "Creating Mesh Previews" msgstr "Δημιουργία προεπισκοπήσεων πλεγμάτων" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Μικρογραφία.." +msgid "Thumbnail..." +msgstr "Μικρογραφία..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2448,8 +2448,8 @@ msgid "(Current)" msgstr "(Τρέχων)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Ανάκτηση δεδοένων κατοπτρισμού, παρακαλώ περιμένετε.." +msgid "Retrieving mirrors, please wait..." +msgstr "Ανάκτηση δεδοένων κατοπτρισμού, παρακαλώ περιμένετε..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2526,8 +2526,8 @@ msgid "Error requesting url: " msgstr "Σφάλμα κατά τo αίτημα για διεύθηνση url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Σύνδεση σε διακομιστή κατοπτρισμού.." +msgid "Connecting to Mirror..." +msgstr "Σύνδεση σε διακομιστή κατοπτρισμού..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2543,8 +2543,8 @@ msgstr "Δεν είναι δυνατή η επίλυση" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Σύνδεση.." +msgid "Connecting..." +msgstr "Σύνδεση..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2556,8 +2556,8 @@ msgstr "Συνδέθηκε" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Γίνεται αίτημα.." +msgid "Requesting..." +msgstr "Γίνεται αίτημα..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2693,11 +2693,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 @@ -2709,15 +2709,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 @@ -2745,10 +2745,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Σάρωση αρχείων,\n" -"Παρακαλώ περιμένετε.." +"Παρακαλώ περιμένετε..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2813,7 +2813,7 @@ msgid "Import Scene" msgstr "Εισαγωγή σκηνής" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Εισαγωγή σκηνής..." #: editor/import/resource_importer_scene.cpp @@ -2825,7 +2825,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 @@ -2843,7 +2843,7 @@ msgid "Error running post-import script:" msgstr "Σφάλμα κατά την εκτέλεση της δέσμης ενεργειών μετ-εισαγωγής:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Αποθήκευση..." #: editor/import_dock.cpp @@ -2863,7 +2863,7 @@ msgid "Import As:" msgstr "Εισαγωγή ώς:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Διαμόρφωση..." #: editor/import_dock.cpp @@ -3281,16 +3281,16 @@ msgid "Transition Node" msgstr "Κόμβος μετάβασης" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Εισαγωγή κινήσεων.." +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 "Φίλτρα.." +msgid "Filters..." +msgstr "Φίλτρα..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3358,7 +3358,7 @@ msgid "Fetching:" msgstr "Λήψη:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Επίλυση..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3425,8 +3425,8 @@ msgid "Site:" msgstr "Διεύθυνση:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Υποστήριξη.." +msgid "Support..." +msgstr "Υποστήριξη..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3624,6 +3624,7 @@ msgid "Use Rotation Snap" msgstr "Χρήση κουμπώματος περιστροφής" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Διαμόρφωση κουμπώματος..." @@ -3720,14 +3721,12 @@ msgid "Show Guides" msgstr "Εμφάνιση οδηγών" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Προβολή Αρχής" +msgstr "Προβολή πηγής" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Οπτική γωνία" +msgstr "Προβολή οπτικής γωνίας" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4020,7 +4019,7 @@ msgstr "Το πλέγμα δεν έχει επιφάνει από την οπο #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "O πρωταρχικός τύπος δεν είναι PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4051,8 +4050,8 @@ msgid "Create Convex Collision Sibling" msgstr "Δημιουργία αδελφού σύγκρουσης κυρτού σώματος" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Δημιουργία πλέγματος περιγράμματος.." +msgid "Create Outline Mesh..." +msgstr "Δημιουργία πλέγματος περιγράμματος..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4260,8 +4259,8 @@ msgid "Error loading image:" msgstr "Σφάλμα κατά την φόρτωση εικόνας:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Δεν υπάρχουν εικονοστοιχεία με διαφάνεια >128 στην εικόνα.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Δεν υπάρχουν εικονοστοιχεία με διαφάνεια >128 στην εικόνα..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4621,8 +4620,8 @@ msgid "Import Theme" msgstr "Εισαγωγή θέματος" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Αποθήκευση θέματος ως.." +msgid "Save Theme As..." +msgstr "Αποθήκευση θέματος ως..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4718,8 +4717,8 @@ msgstr "Εναλλαγή πλαισίου δεσμών ενεργειών" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Εύρεση.." +msgid "Find..." +msgstr "Εύρεση..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4928,16 +4927,16 @@ msgid "Find Previous" msgstr "Έυρεση προηγούμενου" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Αντικατάσταση.." +msgid "Replace..." +msgstr "Αντικατάσταση..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Πήγαινε σε συνάρτηση.." +msgid "Goto Function..." +msgstr "Πήγαινε σε συνάρτηση..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Πήγαινε σε γραμμή.." +msgid "Goto Line..." +msgstr "Πήγαινε σε γραμμή..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5392,12 +5391,8 @@ msgid "Transform" msgstr "Μετασχηματισμός" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Διαμόρφωση κουμπώματος.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Διάλογος μετασχηματισμού.." +msgid "Transform Dialog..." +msgstr "Διάλογος μετασχηματισμού..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5649,8 +5644,8 @@ msgid "Remove All" msgstr "Αφαίρεση όλων" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Επεξεργασία θέματος.." +msgid "Edit theme..." +msgstr "Επεξεργασία θέματος..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5697,14 +5692,12 @@ msgid "Checked Item" msgstr "Επιλεγμένο στοιχείο" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Προσθήκη στοιχείου" +msgstr "Στοιχείο επιλογής" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Επιλεγμένο στοιχείο" +msgstr "Επιλεγμένο στοιχείο επιλογής" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5719,7 +5712,8 @@ msgid "Options" msgstr "Επιλογές" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Έχει,Πάρα,Πολλές,Επιλογές!" #: editor/plugins/theme_editor_plugin.cpp @@ -5912,8 +5906,8 @@ msgid "Presets" msgstr "Διαμορφώσεις" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Προσθήκη.." +msgid "Add..." +msgstr "Προσθήκη..." #: editor/project_export.cpp msgid "Resources" @@ -6007,6 +6001,11 @@ msgid "Imported Project" msgstr "Εισαγμένο έργο" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Όνομα έργου:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Αδύνατη η δημιουργία φακέλου." @@ -6189,7 +6188,7 @@ msgid "" "Would you like to explore the official example projects in the Asset Library?" msgstr "" "Δεν έχετε κανένα έργο.\n" -"Θα θέλατε να εξερευνήσετε μερικά παραδείγματα στην βιβλιοθήκη πόρων;" +"Θέλετε να εξερευνήσετε μερικά παραδείγματα στην βιβλιοθήκη πόρων;" #: editor/project_settings_editor.cpp msgid "Key " @@ -6208,10 +6207,13 @@ msgid "Mouse Button" msgstr "Κουμπί ποντικιού" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Άκυρο όνομα ενέργειας. Δεν μπορεί να είναι άδειο ή να περιέχει '/', ':', " +"'=', '\\' ή '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6238,8 +6240,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Πατήστε ένα κουμπί.." +msgid "Press a Key..." +msgstr "Πατήστε ένα κουμπί..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6422,7 +6424,7 @@ msgid "Property:" msgstr "Ιδιότητα:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Παράκαμψη για..." #: editor/project_settings_editor.cpp @@ -6518,12 +6520,12 @@ msgid "Easing Out-In" msgstr "Ομαλή κίνηση από έξω προς τα μέσα" #: editor/property_editor.cpp -msgid "File.." -msgstr "Αρχείο.." +msgid "File..." +msgstr "Αρχείο..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Κατάλογος.." +msgid "Dir..." +msgstr "Κατάλογος..." #: editor/property_editor.cpp msgid "Assign" @@ -6699,8 +6701,8 @@ msgstr "" "δημιουργηθεί στιγμιότυπα." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Αποθήκευση νέας σκηνής ως.." +msgid "Save New Scene As..." +msgstr "Αποθήκευση νέας σκηνής ως..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7422,7 +7424,7 @@ msgstr "Επιλογή απόστασης:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Το όνομα της κλάσης δεν μπορεί να είναι λέξη-κλειδί" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8144,7 +8146,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "Το WorldEnvironment χρειάζεται έναν πόρο Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8158,6 +8160,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Αυτό το WorldEnvironment θα αγνοηθεί. Προσθέστε μια κάμερα (για 3d) ή ορίστε " +"το Background Mode αυτού του περιβάλλοντος σε Canvas (για 2d)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8256,6 +8260,13 @@ msgstr "Σφάλμα κατά την φόρτωση της γραμματοσε msgid "Invalid font size." msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Προηγούμενη καρτέλα" + +#~ msgid "Next" +#~ msgstr "Επόμενο" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Μη έγκυρη ενέργεια (Όλα επιτρέποντα εκτός από το '/' και το ':')." @@ -8283,9 +8294,6 @@ msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." -#~ msgid "Next" -#~ msgstr "Επόμενο" - #~ msgid "Not found!" #~ msgstr "Δεν βρέθηκε!" @@ -8431,8 +8439,8 @@ msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." #~ msgid "Exporting for %s" #~ msgstr "Εξαγωγή για %s" -#~ msgid "Setting Up.." -#~ msgstr "Αρχικοποίηση.." +#~ msgid "Setting Up..." +#~ msgstr "Αρχικοποίηση..." #~ msgid "Error loading scene." #~ msgstr "Σφάλμα κατά τη φόρτωση σκηνής." @@ -8494,7 +8502,7 @@ msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." #~ msgid "Info" #~ msgstr "Πληροφορίες" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Εκ νέου εισαγωγή..." #~ msgid "No bit masks to import!" @@ -8894,14 +8902,14 @@ msgstr "Μη έγκυρο μέγεθος γραμματοσειράς." #~ msgid "Zoom (%):" #~ msgstr "Μεγέθυνση (%):" -#~ msgid "Skeleton.." -#~ msgstr "Σκελετός.." +#~ msgid "Skeleton..." +#~ msgstr "Σκελετός..." #~ msgid "Zoom Reset" #~ msgstr "Επαναφορά μεγέθυνσης" -#~ msgid "Zoom Set.." -#~ msgstr "Ορισμός μεγέθυνσης.." +#~ msgid "Zoom Set..." +#~ msgstr "Ορισμός μεγέθυνσης..." #~ msgid "Set a Value" #~ msgstr "Ορισμός τιμής" diff --git a/editor/translations/es.po b/editor/translations/es.po index 86188201c1..89118d2501 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -2,9 +2,8 @@ # 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. -# # Addiel Lucena Perez <addiell2017@gmail.com>, 2017. -# Aleix Sanchis <aleixsanchis@hotmail.com>, 2017. +# Aleix Sanchis <aleixsanchis@hotmail.com>, 2017, 2018. # Alejandro Alvarez <eliluminado00@gmail.com>, 2017. # Avocado <avocadosan42@gmail.com>, 2018. # BLaDoM GUY <simplybladom@gmail.com>, 2017. @@ -13,27 +12,29 @@ # David Couto <davidcouto@gmail.com>, 2017. # Dharkael <izhe@hotmail.es>, 2017. # Diego López <diegodario21@gmail.com>, 2017. +# eon-s <emanuel.segretin@gmail.com>, 2018. # Gustavo Leon <gleondiaz@gmail.com>, 2017-2018. # Javier Ocampos <xavier.ocampos@gmail.com>, 2018. +# Jose Maria Martinez <josemar1992@hotmail.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-2018. # Mario Nachbaur <manachbaur@gmail.com>, 2018. # Oscar Carballal <oscar.carballal@protonmail.com>, 2017-2018. -# Rabid Orange <theorangerabid@gmail.com>, 2017. +# R. Joshua Seville <rjoshua@protonmail.com>, 2018. +# Rabid Orange <theorangerabid@gmail.com>, 2017, 2018. # 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: 2018-05-03 02:11+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2018-06-22 08:31+0000\n" +"Last-Translator: R. Joshua Seville <rjoshua@protonmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -41,7 +42,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -53,11 +54,11 @@ msgstr "Toda la Selección" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Cambiar el tiempo de la clave de animación" +msgstr "Cambiar el tiempo del Fotograma Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Cambiar transición de animación" +msgstr "Cambiar Transición de Animación" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -65,76 +66,76 @@ msgstr "Cambiar transformación de animación" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Cambiar valor de la clave de animación" +msgstr "Cambiar valor del Fotograma Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Cambiar llamada de animación" +msgstr "Cambiar Llamada de Animación" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Añadir pista de animación" +msgstr "Añadir Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Duplicar claves de animación" +msgstr "Duplicar Claves de Animación" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Subir pista de animación" +msgstr "Subir Pista de Animación" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Bajar pista de animación" +msgstr "Bajar Pista de Animación" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Quitar pista de animación" +msgstr "Quitar Pista de Animación" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "Establecer transiciones en:" +msgstr "Establecer Transiciones en:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Renombrar pista de animación" +msgstr "Renombrar Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "Cambiar interpolación de pista de animación" +msgstr "Cambiar Interpolación de Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "Cambiar modo de valor de pista de animación" +msgstr "Cambiar Modo de Valor de Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "Cambiar modo de ciclo de pista de animación" +msgstr "Cambiar Modo de Ciclo de Pista de Animación" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Editar nodo de curva" +msgstr "Editar Nodo de Curva" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "Editar curva de selección" +msgstr "Editar Curva de Selección" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Borrar claves de animación" +msgstr "Borrar Claves de Animación" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Duplicar selección" +msgstr "Duplicar Selección" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "Duplicar transpuesto" +msgstr "Duplicar Transpuesto" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "Quitar selección" +msgstr "Quitar Selección" #: editor/animation_editor.cpp msgid "Continuous" @@ -150,15 +151,15 @@ msgstr "Trigger" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "Añadir clave de animación" +msgstr "Añadir Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "Mover claves de animación" +msgstr "Mover Claves de Animación" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Escalar selección" +msgstr "Escalar Selección" #: editor/animation_editor.cpp msgid "Scale From Cursor" @@ -166,11 +167,11 @@ msgstr "Escalar desde cursor" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "Ir al siguiente paso" +msgstr "Ir al Siguiente Paso" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "Ir al paso anterior" +msgstr "Ir al Paso Anterior" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -203,11 +204,11 @@ msgstr "Transiciones" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "Optimizar animación" +msgstr "Optimizar Animación" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "Limpiar animación" +msgstr "Limpiar Animación" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" @@ -235,19 +236,19 @@ 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 bucle de Animación" +msgstr "Cambiar Bucle de Animación" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "Crear clave de valor tipado para Animación" +msgstr "Crear Clave de Valor Tipado para Animación" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -267,7 +268,7 @@ msgstr "Zoom de Animación." #: editor/animation_editor.cpp msgid "Length (s):" -msgstr "Duración (seg):" +msgstr "Duración (segs.):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." @@ -275,7 +276,7 @@ msgstr "Duración de la Animación (en segundos)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "Paso (s):" +msgstr "Paso(s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." @@ -307,7 +308,7 @@ msgstr "Herramientas de pistas" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "Editar claves individuales al hacer clic." +msgstr "Habilitar la edición de claves individuales al hacer clic." #: editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -345,11 +346,11 @@ msgstr "Transición" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "Relación de Escalado:" +msgstr "Relación de Escala:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "¿Desde que nodo quieres realizar llamadas a funciones?" +msgstr "¿Desde que Nodo quieres realizar Llamadas a Funciones?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -441,19 +442,19 @@ msgstr "Columna:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "¡Debes establecer un método en el nodo seleccionado!" +msgstr "¡Debes establecer un método en el Nodo seleccionado!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"No se ha encontrado el método objetivo. Especifica un método válido o " -"adjunta un script en el Nodo objetivo." +"No se encontró el método del objetivo! Especifica un método válido o adjunta " +"un script al Nodo objetivo." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "Conectar a nodo:" +msgstr "Conectar a Nodo:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -478,7 +479,7 @@ msgstr "Argumentos extras de llamada:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Ruta al nodo:" +msgstr "Ruta al Nodo:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -490,7 +491,7 @@ msgstr "Diferido" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "Una vez" +msgstr "OneShot" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -516,15 +517,15 @@ msgstr "Conectar «%s» a «%s»" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "Conectando señal:" +msgstr "Conectando Señal:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Conectar.." +msgid "Connect..." +msgstr "Conectar..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -546,7 +547,7 @@ msgstr "Cambiar" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "Crear nuevo %s" +msgstr "Crear Nuevo %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -625,7 +626,7 @@ msgstr "Arreglar rota(s)" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "Editor de dependencias" +msgstr "Editor de Dependencias" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -716,7 +717,7 @@ msgstr "Eliminar" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "Cambiar Clave de Diccionario" +msgstr "Cambiar Clave del Diccionario" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" @@ -736,7 +737,7 @@ msgstr "Contribuidores de Godot" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "Fundadores del proyecto" +msgstr "Fundadores del Proyecto" #: editor/editor_about.cpp msgid "Lead Developer" @@ -756,11 +757,11 @@ msgstr "Autores" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "Patrocinadores Platino" +msgstr "Patrocinadores Platinum" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "Patrocinadores Oro" +msgstr "Patrocinadores Gold" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -768,11 +769,11 @@ msgstr "Mini Patrocinadores" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Donantes Oro" +msgstr "Donantes Gold" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Donantes Plata" +msgstr "Donantes Silver" #: editor/editor_about.cpp msgid "Bronze Donors" @@ -946,12 +947,12 @@ msgid "Move Audio Bus" msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Guardar configuración de los Buses de Audio como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Ruta para nueva configuración.." +msgid "Location for New Layout..." +msgstr "Ubicación para Nueva Configuración..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1047,19 +1048,19 @@ msgstr "¡El fichero «%s» ya existe!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "Renombrar «Autoload»" +msgstr "Renombrar Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "Des/activar globales de «Autoload»" +msgstr "Des/Activar Globales de Autoload" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "Mover «Autoload»" +msgstr "Mover Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "Quitar «Autoload»" +msgstr "Quitar Autoload" #: editor/editor_autoload_settings.cpp msgid "Enable" @@ -1067,7 +1068,7 @@ msgstr "Activar" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "Reordenar «Autoloads»" +msgstr "Reordenar Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp @@ -1076,7 +1077,7 @@ msgstr "Ruta:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Nombre del nodo:" +msgstr "Nombre del Nodo:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1085,19 +1086,19 @@ msgstr "Nombre" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "«Singleton»" +msgstr "Singleton" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "Actualizando escena" +msgstr "Actualizando Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Guardando cambios locales.." +msgid "Storing local changes..." +msgstr "Guardando cambios locales..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Actualizando escena.." +msgid "Updating scene..." +msgstr "Actualizando escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1109,7 +1110,7 @@ msgstr "[no guardado]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "Por favor, primero seleccione un directorio base" +msgstr "Por favor, selecciona primero un directorio base" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1165,7 +1166,7 @@ msgid "Show In File Manager" msgstr "Mostrar en el navegador de archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Nueva carpeta..." #: editor/editor_file_dialog.cpp @@ -1427,20 +1428,20 @@ msgstr "Borrar salida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "La exportación del proyecto falló con el código de error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "¡Hubo un error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar recurso como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ya veo.." +msgid "I see..." +msgstr "Ya veo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1476,7 +1477,7 @@ msgstr "Error al cargar '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "Guardar escena" +msgstr "Guardar Escena" #: editor/editor_node.cpp msgid "Analyzing" @@ -1589,7 +1590,7 @@ msgstr "Expandir todas las propiedades" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "Colapsar todo" +msgstr "Ocultar todas las propiedades" #: editor/editor_node.cpp msgid "Copy Params" @@ -1613,7 +1614,7 @@ msgstr "Convertirlo en integrado" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "Hacer sub-recursos únicos" +msgstr "Creación de Subrecursos Únicos" #: editor/editor_node.cpp msgid "Open in Help" @@ -1665,31 +1666,31 @@ msgstr "¡No se pudo comenzar el subproceso!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "Abrir escena" +msgstr "Abrir Escena" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Abrir escena base" +msgstr "Abrir Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Apertura rápida de escena.." +msgid "Quick Open Scene..." +msgstr "Apertura Rápida de Escena..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Apertura rápida de script.." +msgid "Quick Open Script..." +msgstr "Apertura Rápida de Script..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "Guardar & Cerrar" +msgstr "Guardar y Cerrar" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" msgstr "¿Guardar cambios de '%s' antes de cerrar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar escena como.." +msgid "Save Scene As..." +msgstr "Guardar Escena Como..." #: editor/editor_node.cpp msgid "No" @@ -1743,8 +1744,8 @@ msgstr "" "modos?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Ejecución rápida de escena.." +msgid "Quick Run Scene..." +msgstr "Ejecución Rápida de Escena..." #: editor/editor_node.cpp msgid "Quit" @@ -1782,7 +1783,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "Elige una escena principal" +msgstr "Elige una Escena Principal" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -1845,11 +1846,11 @@ msgstr "Limpiar Escenas Recientes" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "Guardar ajustes" +msgstr "Guardar Ajustes" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "Borrar ajustes" +msgstr "Borrar Ajustes" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -1858,7 +1859,7 @@ msgstr "Predeterminado" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Cambiar pestaña de escena" +msgstr "Cambiar Pestaña de Escena" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1886,11 +1887,11 @@ msgstr "Alternar modo sin distracciones." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "Añadir nueva Escena." +msgstr "Añadir nueva escena." #: editor/editor_node.cpp msgid "Scene" -msgstr "Escena" +msgstr "Escenas" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -1905,8 +1906,8 @@ msgid "Previous tab" msgstr "Pestaña anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrado de archivos.." +msgid "Filter Files..." +msgstr "Filtrado de Archivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1914,19 +1915,19 @@ msgstr "Operaciones con archivos de escena." #: editor/editor_node.cpp msgid "New Scene" -msgstr "Nueva escena" +msgstr "Nueva Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nueva escena heredada.." +msgid "New Inherited Scene..." +msgstr "Nueva Escena Heredada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir escena.." +msgid "Open Scene..." +msgstr "Abrir Escena..." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "Guardar escena" +msgstr "Guardar Escena" #: editor/editor_node.cpp msgid "Save all Scenes" @@ -1941,16 +1942,16 @@ msgid "Open Recent" msgstr "Abrir reciente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Convertir a.." +msgid "Convert To..." +msgstr "Convertir a..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "Librería de mallas.." +msgid "MeshLibrary..." +msgstr "Librería de mallas..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "\"TileSet\".." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1964,7 +1965,7 @@ msgstr "Rehacer" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "Revertir escena" +msgstr "Revertir Escena" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." @@ -1976,19 +1977,19 @@ msgstr "Proyecto" #: editor/editor_node.cpp msgid "Project Settings" -msgstr "Ajustes del proyecto" +msgstr "Ajustes del Proyecto" #: editor/editor_node.cpp msgid "Run Script" -msgstr "Ejecutar script" +msgstr "Ejecutar Script" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "Export" +msgstr "Exportar" #: editor/editor_node.cpp msgid "Tools" -msgstr "Herramientas" +msgstr "Tools" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2091,11 +2092,11 @@ msgstr "Editor" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "Ajustes del editor" +msgstr "Ajustes del Editor" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "Ajustes de diseño del editor" +msgstr "Ajustes de Diseño del Editor" #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2142,7 +2143,7 @@ msgstr "Acerca de" #: editor/editor_node.cpp msgid "Play the project." -msgstr "Inicia el proyecto para poder jugarlo." +msgstr "Reproducir el proyecto." #: editor/editor_node.cpp msgid "Play" @@ -2213,8 +2214,8 @@ msgid "Save the currently edited resource." msgstr "Guardar el recurso editado actualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2243,11 +2244,11 @@ msgstr "Importar" #: editor/editor_node.cpp msgid "Node" -msgstr "Nodo" +msgstr "Nodos" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "SistDeArchivos" +msgstr "Sistema de Archivos" #: editor/editor_node.cpp msgid "Output" @@ -2263,7 +2264,7 @@ msgstr "Importar plantillas desde un archivo ZIP" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "Exportar proyecto" +msgstr "Exportar Proyecto" #: editor/editor_node.cpp msgid "Export Library" @@ -2283,7 +2284,7 @@ msgstr "Abrir y ejecutar un script" #: editor/editor_node.cpp msgid "New Inherited" -msgstr "Nueva escena heredada" +msgstr "Nueva Escena Heredada" #: editor/editor_node.cpp msgid "Load Errors" @@ -2322,8 +2323,8 @@ msgid "Creating Mesh Previews" msgstr "Creando vistas previas de las mallas" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2425,7 +2426,7 @@ msgstr "No se pudo instanciar el script:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "Has olvidado la palabra clave 'tool'?" +msgstr "¿Olvidaste la palabra clave 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2437,19 +2438,19 @@ msgstr "Te olvidaste del método '_run'?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "Predeterminado (Igual que el editor)" +msgstr "Predeterminado (Igual que el Editor)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Selecciona nodos a importar" +msgstr "Selecciona Nodos a importar" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "Ruta a la escena:" +msgstr "Ruta de la Escena:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "Importar desde nodo:" +msgstr "Importar desde Nodo:" #: editor/export_template_manager.cpp msgid "Re-Download" @@ -2476,7 +2477,7 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Obteniendo mirrors, por favor espere..." #: editor/export_template_manager.cpp @@ -2554,8 +2555,8 @@ msgid "Error requesting url: " msgstr "Error al solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Intentando conexión alternativa.." +msgid "Connecting to Mirror..." +msgstr "Intentando conexión alternativa..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2571,8 +2572,8 @@ msgstr "No se puede resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2584,8 +2585,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2722,32 +2723,32 @@ msgid "Collapse all" msgstr "Colapsar todo" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renombrar.." +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover a.." +msgid "Move To..." +msgstr "Mover a..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "Abrir escena/s" +msgstr "Abrir Escena(s)" #: editor/filesystem_dock.cpp msgid "Instance" msgstr "Instanciar" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar dependencias.." +msgid "Edit Dependencies..." +msgstr "Editar Dependencias..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver propietarios.." +msgid "View Owners..." +msgstr "Ver Propietarios..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplicar.." +msgid "Duplicate..." +msgstr "Duplicar..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2759,7 +2760,7 @@ msgstr "Carpeta siguiente" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "Reanalizar sistema de archivos" +msgstr "Reanalizar Sistema de Archivos" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" @@ -2773,7 +2774,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Escaneando archivos,\n" "Por favor, espere..." @@ -2841,8 +2842,8 @@ msgid "Import Scene" msgstr "Importar escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando escena.." +msgid "Importing Scene..." +msgstr "Importando Escena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2853,8 +2854,8 @@ msgid "Generating for Mesh: " msgstr "Generando para modelo: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Ejecutando script personalizado.." +msgid "Running Custom Script..." +msgstr "Ejecutando Script Personalizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2870,8 +2871,8 @@ msgid "Error running post-import script:" msgstr "Error ejecutando el script de posimportacion:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Guardando.." +msgid "Saving..." +msgstr "Guardando..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2890,8 +2891,8 @@ msgid "Import As:" msgstr "Importar como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ajuste.." +msgid "Preset..." +msgstr "Ajuste..." #: editor/import_dock.cpp msgid "Reimport" @@ -2907,7 +2908,7 @@ msgstr "Grupos" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Selecciona un nodo para editar señales y grupos." +msgstr "Selecciona un Nodo para editar Señales y Grupos." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -2946,9 +2947,9 @@ msgid "" "RMB: Erase Point." msgstr "" "Editar polígono existente:\n" -"Click izquierdo: Mover punto.\n" -"Control + Click izquierdo: Dividir segmento.\n" -"Click derecho: Borrar punto." +"Clic izquierdo: Mover punto.\n" +"Control + Clic izquierdo: Dividir segmento.\n" +"Clic derecho: Borrar punto." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" @@ -3085,7 +3086,7 @@ msgstr "Mostrar la lista de animaciones en el reproductor." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "Autoreproducir al cargar" +msgstr "Autoreproducir al Cargar" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" @@ -3206,7 +3207,7 @@ msgstr "Mezcla" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "Mezclar" +msgstr "Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" @@ -3251,7 +3252,7 @@ msgstr "Actual:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "Añadir entrada" +msgstr "Añadir Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" @@ -3263,7 +3264,7 @@ msgstr "Establecer autoavanzar" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "Eliminar entrada" +msgstr "Eliminar Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." @@ -3275,15 +3276,15 @@ msgstr "El árbol de animación no es correcto." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Nodo de animación" +msgstr "Nodo de Animación" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "Nodo UnaVez" +msgstr "Nodo OneShot" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Nodo Mezcla" +msgstr "Nodo Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" @@ -3299,7 +3300,7 @@ msgstr "Nodo Blend4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "Nodo TimeScale (Escala de tiempo)" +msgstr "Nodo TimeScale" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" @@ -3307,19 +3308,19 @@ msgstr "Nodo TimeSeek" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Nodo de transición" +msgstr "Nodo Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importar animaciones.." +msgid "Import Animations..." +msgstr "Importar Animaciones..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Editar filtros de nodo" +msgstr "Editar Filtros de Nodo" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtros.." +msgid "Filters..." +msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3386,7 +3387,7 @@ msgid "Fetching:" msgstr "Buscando:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Resolviendo..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3453,8 +3454,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." +msgid "Support..." +msgstr "Soporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3494,7 +3495,7 @@ msgstr "" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "Calculando «lightmaps»" +msgstr "Calculando Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3508,20 +3509,20 @@ msgstr "Configurar ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "Desplazamiento de rejilla:" +msgstr "Desplazamiento de Cuadrícula:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "Pasos de rejilla:" +msgstr "Paso de Cuadrícula:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "Desplazamiento de rotación:" +msgstr "Desplazamiento de Rotación:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "Cantidad de rotaciones:" +msgstr "Cantidad de Rotaciones:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" @@ -3603,7 +3604,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt+Click Der.: Selección en listado de solapamientos" +msgstr "Alt + Clic Derecho: Selección en listado de solapamientos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3619,12 +3620,13 @@ 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 posición cliqueada\n" -"(igual que Alt+Click Der. en modo selección)." +"Mostrar una lista de todos los objetos en la posición en la que se ha hecho " +"clic\n" +"(igual que Alt + Clic Derecho en modo selección)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "Click para cambiar el pivote de rotación de un objeto." +msgstr "Haz clic para cambiar el pivote de rotación de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" @@ -3651,8 +3653,9 @@ msgid "Use Rotation Snap" msgstr "Ajustar rotación" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar Cuadrícula..." +msgstr "Configurar Ajuste..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3672,7 +3675,7 @@ msgstr "Ajustar al padre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "Ajustar al anclado del nodo" +msgstr "Ajustar al anclaje del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" @@ -3732,7 +3735,7 @@ msgstr "Ver" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "Mostrar rejilla" +msgstr "Mostrar Cuadrícula" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -3747,14 +3750,12 @@ msgid "Show Guides" msgstr "Mostrar guías" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver origen" +msgstr "Ver Origen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 visor" +msgstr "Ver Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3774,11 +3775,11 @@ msgstr "Insertar claves" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Insertar clave" +msgstr "Insertar Clave" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Insertar clave (pistas existentes)" +msgstr "Insertar Clave (Pistas Existentes)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -3823,7 +3824,7 @@ 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 msgid "Create Node" -msgstr "Crear nodo" +msgstr "Crear Nodo" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -4049,7 +4050,7 @@ 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 "" +msgstr "El tipo de la malla primitiva no es PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4080,8 +4081,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crear colisión hermanada convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crear contorno de malla.." +msgid "Create Outline Mesh..." +msgstr "Crear Contorno de Malla..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4227,7 +4228,7 @@ msgstr "Calculando tamaño de cuadrícula..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "Creando octree de luces (\"heigfield\")..." +msgstr "Creando heightfield..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." @@ -4251,7 +4252,7 @@ msgstr "Creando contornos..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "Crear malla 3D de contorno (\"polymesh\")..." +msgstr "Crear polymesh..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." @@ -4263,7 +4264,7 @@ msgstr "Configuración del Generador de Mallas de Navegación:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "Analizando geometría..." +msgstr "Analizando Geometría..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4288,8 +4289,8 @@ msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "No hay píxeles con transparencia > 128 en la imagen.." +msgid "No pixels with transparency > 128 in image..." +msgstr "No hay píxeles con transparencia > 128 en la imagen..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4331,11 +4332,11 @@ msgstr "Colores de emisión" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "El nodo no contiene geometría." +msgstr "El nodo no posee geometría." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "El nodo no contiene geometría (caras)." +msgstr "El nodo no posee geometría (caras)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -4359,7 +4360,7 @@ msgstr "Crear puntos de emisión desde malla" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "Crear puntos de emisión desde el nodo" +msgstr "Crear Puntos de Emisión desde el Nodo" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -4431,12 +4432,12 @@ msgstr "Mayús + arrastrar: Seleccionar puntos de control" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "Click: Añadir punto" +msgstr "Clic: Añadir Punto" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "Clic derecho: Eliminar punto" +msgstr "Clic Derecho: Eliminar Punto" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -4565,7 +4566,7 @@ msgstr "Habilitar fijado" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "Rejilla" +msgstr "Cuadrícula" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -4591,7 +4592,7 @@ 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" +msgstr "Abrir en el Editor" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp @@ -4649,8 +4650,8 @@ msgid "Import Theme" msgstr "Importar tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Guardar tema como.." +msgid "Save Theme As..." +msgstr "Guardar Tema Como..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4746,8 +4747,8 @@ msgstr "Alternar panel de scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Buscar.." +msgid "Find..." +msgstr "Buscar..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4856,7 +4857,7 @@ msgstr "Minúscula" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "Letra Capital" +msgstr "Poner en mayúsculas" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4920,7 +4921,7 @@ msgstr "Convertir Indentación a Espacios" #: editor/plugins/script_text_editor.cpp 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" @@ -4956,16 +4957,16 @@ msgid "Find Previous" msgstr "Buscar anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Reemplazar.." +msgid "Replace..." +msgstr "Reemplazar..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ir a función.." +msgid "Goto Function..." +msgstr "Ir a función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ir a línea.." +msgid "Goto Line..." +msgstr "Ir a línea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -4973,7 +4974,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" @@ -5073,11 +5074,11 @@ msgstr "Desconectar Nodos Gráficos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "Borrar Nodo Gráfico de Shader" +msgstr "Eliminar el Nodo Gráfico del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "Mover Nodo Gráfico de Shader" +msgstr "Mover el Nodo Gráfico del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" @@ -5085,7 +5086,7 @@ msgstr "Duplicar Nodo(s) Gráfico" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "Borrar Nodo(s) Gráfico(s) de Shader" +msgstr "Eliminar Nodo(s) Gráfico(s) del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" @@ -5097,7 +5098,7 @@ msgstr "Error: Conexiones de Entrada Faltantes" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" -msgstr "Añadir nodo gráfico de Shader" +msgstr "Añadir Nodo Gráfico del Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5125,7 +5126,7 @@ msgstr "Transformación en el eje Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Ver transformación en plano." +msgstr "Ver Transformación de Plano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5145,7 +5146,7 @@ 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." +msgstr "Clave de Animación Insertada." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -5157,7 +5158,7 @@ msgstr "Cambios del material" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" -msgstr "Cambios del shader" +msgstr "Cambios del Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" @@ -5177,11 +5178,11 @@ msgstr "FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Vista superior." +msgstr "Vista Superior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Vista inferior." +msgstr "Vista Inferior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -5189,7 +5190,7 @@ msgstr "Fondo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Vista izquierda." +msgstr "Vista Izquierda." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -5197,7 +5198,7 @@ msgstr "Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Vista derecha." +msgstr "Vista Derecha." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -5205,7 +5206,7 @@ msgstr "Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Vista frontal." +msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -5213,7 +5214,7 @@ msgstr "Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Vista anterior." +msgstr "Vista Posterior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -5281,31 +5282,31 @@ msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "Vista libre izquierda" +msgstr "Vista Libre Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "Vista libre derecha" +msgstr "Vista Libre Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Vista libre frente" +msgstr "Vista Libre Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vista libre atrás" +msgstr "Vista Libre Posterior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Vista libre arriba" +msgstr "Vista Libre Arriba" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Vista libre abajo" +msgstr "Vista Libre Abajo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "Modificador de velocidad de \"vista libre\"" +msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5323,7 +5324,7 @@ msgid "" msgstr "" "Arrastrar: Rotar\n" "Alt + Arrastrar: Mover\n" -"Alt + Click derecho: Selección en la lista de superposición" +"Alt + Clic Derecho: Selección en la lista de superposición" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5339,7 +5340,7 @@ msgstr "Modo escalado (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas locales" +msgstr "Local Coords (Coordenadas Locales)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5351,35 +5352,35 @@ msgstr "Modo de ajuste (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "Vista inferior" +msgstr "Vista Inferior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "Vista superior" +msgstr "Vista Superior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vista anterior" +msgstr "Vista Posterior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Vista frontal" +msgstr "Vista Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "Vista izquierda" +msgstr "Vista Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "Vista derecha" +msgstr "Vista Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "Intercambiar entre vista de perspectiva y ortogonal" +msgstr "Intercambiar vista Perspectiva/Ortogonal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "Insertar clave de animación" +msgstr "Insertar Clave de Animación" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" @@ -5411,23 +5412,19 @@ msgstr "Escalar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" -msgstr "Alternar vista libre" +msgstr "Activar Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "Transformar" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar ajuste.." +msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Ventana de transformación.." +msgid "Transform Dialog..." +msgstr "Ventana de transformación..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "1 visor" +msgstr "1 Viewport" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" @@ -5455,7 +5452,7 @@ msgstr "Ver origen" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "Ver rejilla" +msgstr "Ver Cuadrícula" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -5484,7 +5481,7 @@ msgstr "Ajuste de escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "Ajustes del visor" +msgstr "Ajustes del Viewport" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" @@ -5592,7 +5589,7 @@ msgstr "Mover (Después)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "Fotogramas del sprite" +msgstr "SpriteFrames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5620,7 +5617,7 @@ msgstr "Ajustar a píxeles" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "Ajustar a cuadrícula" +msgstr "Ajustar a Cuadrícula" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -5675,8 +5672,8 @@ msgid "Remove All" msgstr "Quitar todos" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5723,14 +5720,12 @@ msgid "Checked Item" msgstr "Casilla de verificación activa" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Añadir elemento" +msgstr "Radio Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Casilla de verificación activa" +msgstr "Ratio Item Activo" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5745,8 +5740,8 @@ msgid "Options" msgstr "Opciones" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "¡Tienes,Muchas,Y,Variadas,Opciones!" +msgid "Has,Many,Options" +msgstr "Tienes, Muchas, Opciones" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5870,7 +5865,7 @@ msgstr "¿Mezclar desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" -msgstr "\"Tile Set\"" +msgstr "Tile Set" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5886,7 +5881,7 @@ msgstr "Error" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" -msgstr "\"Autotiles\"" +msgstr "Autotiles" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -5901,8 +5896,8 @@ msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" -"Click izquierdo: habilitar bit.\n" -"Click derecho: deshabilitar bit." +"Clic Izquierdo: habilitar bit.\n" +"Clic Derecho: deshabilitar bit." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select current edited sub-tile." @@ -5938,8 +5933,8 @@ msgid "Presets" msgstr "Preajustes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Añadir.." +msgid "Add..." +msgstr "Añadir..." #: editor/project_export.cpp msgid "Resources" @@ -6014,7 +6009,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "Exportar con depuración" +msgstr "Exportar con Depuración" #: editor/project_manager.cpp msgid "The path does not exist." @@ -6030,7 +6025,11 @@ msgstr "Por favor elija una carpeta vacía." #: editor/project_manager.cpp msgid "Imported Project" -msgstr "Proyecto importado" +msgstr "Proyecto Importado" + +#: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nombre de Proyecto Inválido." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -6074,11 +6073,11 @@ msgstr "Renombrar proyecto" #: editor/project_manager.cpp msgid "New Game Project" -msgstr "Nuevo proyecto de juego" +msgstr "Nuevo Proyecto de Juego" #: editor/project_manager.cpp msgid "Import Existing Project" -msgstr "Importar proyecto existente" +msgstr "Importar Proyecto Existente" #: editor/project_manager.cpp msgid "Import & Edit" @@ -6086,7 +6085,7 @@ msgstr "Importar y editar" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "Crear proyecto nuevo" +msgstr "Crear Nuevo Proyecto" #: editor/project_manager.cpp msgid "Create & Edit" @@ -6094,7 +6093,7 @@ msgstr "Crear y editar" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "Instalar proyecto:" +msgstr "Instalar Proyecto:" #: editor/project_manager.cpp msgid "Install & Edit" @@ -6102,7 +6101,7 @@ msgstr "Instalar y editar" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "Nombre del proyecto:" +msgstr "Nombre del Proyecto:" #: editor/project_manager.cpp msgid "Create folder" @@ -6110,7 +6109,7 @@ msgstr "Crear carpeta" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "Ruta del proyecto:" +msgstr "Ruta del Proyecto:" #: editor/project_manager.cpp msgid "Browse" @@ -6118,7 +6117,7 @@ msgstr "Examinar" #: editor/project_manager.cpp msgid "Unnamed Project" -msgstr "Proyecto sin nombre" +msgstr "Proyecto sin Nombre" #: editor/project_manager.cpp msgid "Can't open project" @@ -6135,8 +6134,8 @@ msgid "" "the \"Application\" category." msgstr "" "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\"." +"Por favor elija la escena principal en \"Ajustes del Proyecto\" en la " +"categoría \"Application\"." #: editor/project_manager.cpp msgid "" @@ -6153,8 +6152,8 @@ msgstr "¿Seguro que quieres ejecutar más de un proyecto?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" -"¿Quieres quitar proyecto de la lista? (El contenido de la carpeta no se " -"modificarán)" +"¿Quieres quitar el proyecto de la lista? (El contenido de la carpeta no se " +"modificará)" #: editor/project_manager.cpp msgid "" @@ -6191,7 +6190,7 @@ msgstr "Selecciona la carpeta a analizar" #: editor/project_manager.cpp msgid "New Project" -msgstr "Proyecto nuevo" +msgstr "Nuevo Proyecto" #: editor/project_manager.cpp msgid "Templates" @@ -6214,8 +6213,9 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" -"Ahora mismo no tiene ningún proyecto.\n" -"¿Le gustaría explorar los proyectos ejemplo oficiales del Asset Library?" +"Actualmente no tienes ningún proyecto.\n" +"¿Quieres explorar los proyectos de ejemplo oficiales en la Biblioteca de " +"Assets?" #: editor/project_settings_editor.cpp msgid "Key " @@ -6235,9 +6235,11 @@ msgstr "Botón del ratón" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nombre de acción inválido. No puede estar vacío ni contener '/', ':', '=', " +"'\\' o '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6245,11 +6247,11 @@ msgstr "¡La acción «%s» ya existe!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "Renombrar evento de acción de entrada" +msgstr "Renombrar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "Añadir evento de acción de entrada" +msgstr "Añadir Evento de Acción de Entrada" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Shift+" @@ -6264,8 +6266,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Presiona una tecla.." +msgid "Press a Key..." +msgstr "Presiona una tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6321,11 +6323,11 @@ msgstr "Índice de boton del mando:" #: editor/project_settings_editor.cpp msgid "Erase Input Action" -msgstr "Borrar \"Input Action\"" +msgstr "Borrar Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "Borrar evento de acción de entrada" +msgstr "Borrar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Add Event" @@ -6385,7 +6387,7 @@ msgstr "Ya existe" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "Añadir acción de entrada" +msgstr "Añadir Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6397,7 +6399,7 @@ msgstr "Los ajustes se han guardado correctamente." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "Sobreescribir para esta característica" +msgstr "Sobrescribir la Característica" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6448,12 +6450,12 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sobre escribir por.." +msgid "Override For..." +msgstr "Sustituir por..." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "Mapa de entradas" +msgstr "Mapa de Entradas" #: editor/project_settings_editor.cpp msgid "Action:" @@ -6521,7 +6523,7 @@ msgstr "AutoLoad" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "Selecciona un visor" +msgstr "Selecciona un Viewport" #: editor/property_editor.cpp msgid "Ease In" @@ -6544,12 +6546,12 @@ msgid "Easing Out-In" msgstr "Transición salida-entrada" #: editor/property_editor.cpp -msgid "File.." -msgstr "Archivo.." +msgid "File..." +msgstr "Archivo..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Directorio.." +msgid "Dir..." +msgstr "Directorio..." #: editor/property_editor.cpp msgid "Assign" @@ -6557,7 +6559,7 @@ msgstr "Asignar" #: editor/property_editor.cpp msgid "Select Node" -msgstr "Seleccionar nodo" +msgstr "Seleccionar Nodo" #: editor/property_editor.cpp msgid "New Script" @@ -6585,11 +6587,11 @@ msgstr "Error al cargar el archivo: ¡No es un recurso!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "¡El nodo seleccionado no es un visor!" +msgstr "¡El nodo seleccionado no es un Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "Selecciona un nodo" +msgstr "Selecciona un Nodo" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -6634,7 +6636,7 @@ msgstr "" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "Reemparentar nodo" +msgstr "Reemparentar Nodo" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" @@ -6707,11 +6709,11 @@ msgstr "Mover Nodos Dentro del Padre" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "Duplicar nodos" +msgstr "Duplicar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "¿Quieres borrar los nodos?" +msgstr "¿Eliminar Nodo(s)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -6722,20 +6724,20 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operación no puede realizarse en escenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Guardar nueva escena como.." +msgid "Save New Scene As..." +msgstr "Guardar Nueva Escena Como..." #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "Hijos editables" +msgstr "Hijos Editables" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "Cargar como temporal" +msgstr "Cargar como Temporal" #: editor/scene_tree_dock.cpp msgid "Discard Instancing" -msgstr "Descartar instancia" +msgstr "Descartar Instancia" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" @@ -6751,7 +6753,7 @@ msgstr "¡No se puede operar sobre los nodos heredados por la escena actual!" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Borrar nodos" +msgstr "Eliminar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -6771,27 +6773,27 @@ msgstr "Error al duplicar escena para guardarla." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" -msgstr "Sub-recursos" +msgstr "Sub-Recursos" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "Limpiar heredado" +msgstr "Limpiar Heredado" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Borrar nodos" +msgstr "Eliminar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Añadir nodo hijo" +msgstr "Añadir Nodo Hijo" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "Instanciar escena hija" +msgstr "Instanciar Escena Hija" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "Cambiar tipo" +msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -6803,7 +6805,7 @@ msgstr "Quitar script" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Unir desde escena" +msgstr "Unir Desde Escena" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" @@ -6811,22 +6813,22 @@ msgstr "Guardar Rama como Escena" #: editor/scene_tree_dock.cpp msgid "Copy Node Path" -msgstr "Copiar ruta del nodo" +msgstr "Copiar Ruta del Nodo" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "Eliminar (sin confirmar)" +msgstr "Eliminar (Sin Confirmar)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "Añadir/crear nodo nuevo" +msgstr "Añadir/Crear un Nuevo Nodo" #: editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"Instanciar un archivo de escena como Nodo. Crear una escena heredada si no " +"Instanciar un archivo de escena como Nodo. Crea una escena heredada si no " "existe ningún nodo raíz." #: editor/scene_tree_dock.cpp @@ -6839,7 +6841,7 @@ msgstr "Añadir un script nuevo o existente al nodo seleccionado." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "Borra el script del nodo seleccionado." +msgstr "Borrar el script del nodo seleccionado." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -6874,8 +6876,8 @@ msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión/es y grupo/s\n" -"Haz click para mostrar el panel de señales." +"El nodo tiene conexión(es) y grupo(s)\n" +"Haz clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" @@ -6883,7 +6885,7 @@ msgid "" "Click to show signals dock." msgstr "" "El nodo tiene conexiones.\n" -"Haz click para mostrar el panel de señales." +"Haz clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" @@ -6891,7 +6893,7 @@ msgid "" "Click to show groups dock." msgstr "" "El nodo está en el/los grupo(s).\n" -"Click para mostrar el panel de grupos." +"Haz clic para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp msgid "Open script" @@ -6903,7 +6905,7 @@ msgid "" "Click to unlock" msgstr "" "El nodo está bloqueado.\n" -"Click para desbloquear" +"Haz clic para desbloquear" #: editor/scene_tree_editor.cpp msgid "" @@ -6911,7 +6913,7 @@ msgid "" "Click to make selectable" msgstr "" "Los hijos no son seleccionables.\n" -"Haz click para hacerlos seleccionables" +"Haz clic para hacerlos seleccionables" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -6924,7 +6926,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "Renombrar nodo" +msgstr "Renombrar Nodo" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -6932,11 +6934,11 @@ msgstr "Árbol de escenas (nodos):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "¡Alerta de configuración de nodos!" +msgstr "¡Alerta de Configuración de Nodos!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "Selecciona un nodo" +msgstr "Selecciona un Nodo" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -6944,7 +6946,7 @@ msgstr "Error al cargar la plantilla '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "Error - No se pudo crear script en el sistema." +msgstr "Error - No se pudo crear script en el sistema de archivos." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -6980,7 +6982,7 @@ msgstr "La extensión no es correcta" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "Extensión seleccionada errónea" +msgstr "Se ha elegido una extensión incorrecta" #: editor/script_create_dialog.cpp msgid "Invalid Path" @@ -7036,7 +7038,7 @@ msgstr "Script integrado" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "Añadir script de nodo" +msgstr "Añadir Script de Nodo" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -7140,7 +7142,7 @@ msgstr "Tipo" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "Format" +msgstr "Formato" #: editor/script_editor_debugger.cpp msgid "Usage" @@ -7152,11 +7154,11 @@ msgstr "Otros" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Controles seleccionados:" +msgstr "Controles Seleccionados:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Tipo de controles seleccionados:" +msgstr "Tipo de Controles Seleccionados:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -7236,7 +7238,7 @@ msgstr "Borrar entrada actual" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "Doble click para crear una nueva entrada" +msgstr "Haz doble clic para crear una nueva entrada" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -7248,15 +7250,15 @@ msgstr "Plataforma" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dynamic Library" -msgstr "Librería dinámica" +msgstr "Librería Dinámica" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "Añadir entrada de arquitectura" +msgstr "Añadir una entrada de arquitectura" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "\"GDNativeLibrary\"" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -7290,7 +7292,7 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "¡El argumento «step» es cero!" +msgstr "¡el argumento del paso es cero!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -7330,7 +7332,7 @@ msgstr "El objeto no puede proporcionar una longitud." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" -msgstr "Plano siguiente" +msgstr "Siguiente Plano" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Plane" @@ -7342,7 +7344,7 @@ msgstr "Plano:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "Suelo Posterior" +msgstr "Siguiente Piso" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" @@ -7362,7 +7364,7 @@ msgstr "GridMap Duplicar selección" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" -msgstr "Rejilla" +msgstr "Mapa de Cuadrícula" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" @@ -7446,7 +7448,7 @@ msgstr "Seleccionar distancia:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nombre de la clase no puede ser una palabra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7490,7 +7492,7 @@ msgstr "Compilaciones" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Build Project" -msgstr "Compilar proyecto" +msgstr "Compilar Proyecto" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Warnings" @@ -7505,7 +7507,7 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"¡Un nodo ejecutó un «yield» sin memoria de trabajo. Prueba leyendo la " +"¡Un nodo ejecutó un yield sin memoria de trabajo. Prueba leyendo la " "documentación sobre cómo utilizar yield!" #: modules/visual_script/visual_script.cpp @@ -7513,8 +7515,8 @@ msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"Un nodo ejecutó un «yield» pero no devolvió un estado de función en la " -"memoria de trabajo original." +"Un nodo ejecutó un yield pero no devolvió un estado de función en la memoria " +"de trabajo original." #: modules/visual_script/visual_script.cpp msgid "" @@ -7540,7 +7542,7 @@ msgstr "Desbordamiento de pila en el nivel: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "Cambiar argumentos de la señal" +msgstr "Cambiar Argumentos de la Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" @@ -7576,35 +7578,35 @@ msgstr "Otra función/variable/señal ya utiliza este nombre:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" -msgstr "Renombrar función" +msgstr "Renombrar Función" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Variable" -msgstr "Renombrar variable" +msgstr "Renombrar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Signal" -msgstr "Renombrar señal" +msgstr "Renombrar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" -msgstr "Añadir función" +msgstr "Añadir Función" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" -msgstr "Añadir variable" +msgstr "Añadir Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Add Signal" -msgstr "Añadir señal" +msgstr "Añadir Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" -msgstr "Cambiar expresión" +msgstr "Cambiar Expresión" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "Añadir nodo" +msgstr "Añadir Nodo" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" @@ -7612,7 +7614,7 @@ msgstr "Quitar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "Duplicar nodos de VisualScript" +msgstr "Duplicar Nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -7632,7 +7634,7 @@ 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 soltar una referencia al nodo." +msgstr "Mantén pulsado Ctrl para soltar una referencia simple al nodo." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." @@ -7644,19 +7646,19 @@ msgstr "Mantén pulsado Ctrl para soltar un «Setter» de variable." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "Añadir nodo «Preload»" +msgstr "Añadir Nodo Preload" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "Añadir nodo/s desde árbol" +msgstr "Añadir Nodo(s) desde Árbol" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "Añadir propiedad «Getter»" +msgstr "Añadir propiedad Getter" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "Añadir propiedad «Setter»" +msgstr "Añadir propiedad Setter" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -7664,15 +7666,15 @@ msgstr "Cambiar tipo base" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "Mover nodo/s" +msgstr "Mover Nodo(s)" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "Quitar nodo de VisualScript" +msgstr "Quitar Nodo de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "Conectar nodos" +msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7700,7 +7702,7 @@ msgstr "Devuelve (\"Return\")" #: modules/visual_script/visual_script_editor.cpp msgid "Call" -msgstr "Call" +msgstr "Llamada (\"Call\")" #: modules/visual_script/visual_script_editor.cpp msgid "Get" @@ -7712,7 +7714,7 @@ msgstr "El script ya contiene la función '%s'" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Cambiar valor de entrada" +msgstr "Cambiar Valor de Entrada" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." @@ -7728,35 +7730,35 @@ msgstr "Pegar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "Quitar función" +msgstr "Quitar Función" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable" -msgstr "Editar variable" +msgstr "Editar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "Quitar variable" +msgstr "Quitar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal" -msgstr "Editar señal" +msgstr "Editar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "Quitar señal" +msgstr "Quitar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" -msgstr "Editando variable:" +msgstr "Editando Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" -msgstr "Editando señal:" +msgstr "Editando Señal:" #: modules/visual_script/visual_script_editor.cpp msgid "Base Type:" -msgstr "Tipo base:" +msgstr "Tipo Base:" #: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" @@ -7772,7 +7774,7 @@ msgstr "Editar argumentos de la señal:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" -msgstr "Editar variable:" +msgstr "Editar Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -7780,19 +7782,19 @@ msgstr "Quitar seleccionados" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Buscar tipo de nodo" +msgstr "Buscar Tipo de Nodo" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "Copiar nodos" +msgstr "Copiar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "Cortar nodos" +msgstr "Cortar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "Pegar nodos" +msgstr "Pegar Nodos" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -7812,11 +7814,11 @@ msgstr "Índice del nombre de la propiedad inválido." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "¡El objeto base no es un nodo!" +msgstr "¡El objeto base no es un Nodo!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "¡La ruta no apunta a un nodo!" +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." @@ -7858,7 +7860,7 @@ 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." +msgstr "Ejecutar HTML exportado en el navegador predeterminado del sistema." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -7889,8 +7891,8 @@ msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" -"Se debe crear un recurso \"SpriteFrames\" o asignar uno en la propiedad " -"'Frames' para que AnimatedSprite pueda mostrar fotogramas." +"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 "" @@ -7934,9 +7936,8 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "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." +"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 "" @@ -7979,15 +7980,15 @@ msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance debe ser 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 "" -"En nodo \"ParallaxLayer\" solo funciona cuando esta posicionado 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 msgid "" @@ -8000,8 +8001,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"\"PathFollow2D\" solo funciona cuando está posicionado como hijo de un nodo " -"\"Path2D\"." +"PathFollow2D solo funciona cuando está colocado como hijo de un nodo Path2D." #: scene/2d/physics_body_2d.cpp msgid "" @@ -8090,8 +8090,8 @@ msgid "" 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." +"Considera añadir un CollisionShape o CollisionPolygon como hijos de este " +"nodo para dotarlo de una forma." #: scene/3d/collision_polygon.cpp msgid "" @@ -8114,8 +8114,8 @@ msgid "" "KinematicBody, etc. to give them a shape." msgstr "" "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." +"CollisionObject. Por favor, úsalo solo como hijo de Area, StaticBody, " +"RigidBody, KinematicBody, etc. para darles dicha forma." #: scene/3d/collision_shape.cpp msgid "" @@ -8166,7 +8166,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment necesita un recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8180,6 +8180,9 @@ 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 "" +"Este WorldEnvironment está siendo ignorado. Agrega un nodo Camera (para " +"escenas 3D) o configura el Background Mode de este entorno en modo Canvas " +"(para escenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8203,7 +8206,7 @@ msgstr "Modo Raw" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "Añadir el color actual como predefinido" +msgstr "Añadir el color actual como predeterminado" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8211,7 +8214,7 @@ msgstr "¡Alerta!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Confirmar decisión…" +msgstr "Por favor, Confirma..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" @@ -8246,8 +8249,8 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"El entorno especificado por defecto en los Ajustes del Proyecto (Renderizado " -"-> Ventana -> Entorno por Defecto) no se ha podido cargar." +"El Entorno por Defecto como se especifica en los Ajustes del Proyecto " +"(Rendering -> Environment -> Default Environment) no se ha podido cargar." #: scene/main/viewport.cpp msgid "" @@ -8256,10 +8259,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á 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." +"Este viewport no está configurado como render target. Si quieres que muestre " +"su contenido directamente en la pantalla, hazlo hijo de un Control para que " +"pueda obtener un tamaño. De lo contrario, conviértelo en un RenderTarget y " +"asigna su textura interna a algún nodo para mostrarlo." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8277,6 +8280,13 @@ msgstr "Error al cargar la tipografía." msgid "Invalid font size." msgstr "Tamaño de tipografía incorrecto." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Pestaña anterior" + +#~ msgid "Next" +#~ msgstr "Siguiente" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "La acción no es correcta (no puedes utilizar «/» o «:»)." @@ -8303,9 +8313,6 @@ msgstr "Tamaño de tipografía incorrecto." #~ 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" - #~ msgid "Not found!" #~ msgstr "¡No se ha encontrado!" @@ -8459,8 +8466,8 @@ msgstr "Tamaño de tipografía incorrecto." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." -#~ msgstr "Configurando.." +#~ msgid "Setting Up..." +#~ msgstr "Configurando..." #~ msgid "Error loading scene." #~ msgstr "Hubo un error al cargar la escena." @@ -8525,8 +8532,8 @@ msgstr "Tamaño de tipografía incorrecto." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Reimportar.." +#~ msgid "Re-Import..." +#~ msgstr "Reimportar..." #~ msgid "No bit masks to import!" #~ msgstr "¡Sin máscaras de bits para importar!" @@ -8925,14 +8932,14 @@ msgstr "Tamaño de tipografía incorrecto." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%):" -#~ msgid "Skeleton.." -#~ msgstr "Esqueleto.." +#~ msgid "Skeleton..." +#~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Restablecer zoom" -#~ msgid "Zoom Set.." -#~ msgstr "Ajustar zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Ajustar zoom..." #~ msgid "Set a Value" #~ msgstr "Establecer valor" @@ -9443,7 +9450,7 @@ msgstr "Tamaño de tipografía incorrecto." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK del proyecto" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exportar…" #~ msgid "Project Export" @@ -9557,8 +9564,8 @@ msgstr "Tamaño de tipografía incorrecto." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Volver a Cargar Script de Herramientas (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Editar Conecciones.." +#~ msgid "Edit Connections..." +#~ msgstr "Editar Conecciones..." #~ msgid "Set Params" #~ msgstr "Setear Params" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 304fc7dbc5..64ee2404f1 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -2,17 +2,15 @@ # 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. -# # Diego López <diegodario21@gmail.com>, 2017. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2018. # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. # Sebastian Silva <sebastian@sugarlabs.org>, 2016. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-03-04 06:03+0000\n" +"PO-Revision-Date: 2018-06-06 13:28+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 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.20-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -502,8 +500,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Conectar.." +msgid "Connect..." +msgstr "Conectar..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -922,12 +920,12 @@ msgid "Move Audio Bus" msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Guardar Layout de Bus de Audio Como.." +msgid "Save Audio Bus Layout As..." +msgstr "Guardar Layout de Bus de Audio Como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Ubicación para el Nuevo Layout.." +msgid "Location for New Layout..." +msgstr "Ubicación para el Nuevo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1068,12 +1066,12 @@ msgid "Updating Scene" msgstr "Actualizando Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Guardando cambios locales.." +msgid "Storing local changes..." +msgstr "Guardando cambios locales..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Actualizando escena.." +msgid "Updating scene..." +msgstr "Actualizando escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1141,8 +1139,8 @@ msgid "Show In File Manager" msgstr "Mostrar en Gestor de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nueva Carpeta.." +msgid "New Folder..." +msgstr "Nueva Carpeta..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1403,20 +1401,20 @@ msgstr "Limpiar Salida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "La exportación del proyecto falló con el código de error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar Recurso Como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ya Veo.." +msgid "I see..." +msgstr "Ya Veo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1649,12 +1647,12 @@ msgid "Open Base Scene" msgstr "Abrir Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Abrir Escena Rapido.." +msgid "Quick Open Scene..." +msgstr "Abrir Escena Rapido..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Abrir Script Rapido.." +msgid "Quick Open Script..." +msgstr "Abrir Script Rapido..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1665,8 +1663,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Guardar cambios a '%s' antes de cerrar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar Escena Como.." +msgid "Save Scene As..." +msgstr "Guardar Escena Como..." #: editor/editor_node.cpp msgid "No" @@ -1717,8 +1715,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta acción no se puede deshacer. Revertir de todos modos?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Ejecutar Escena Rapido.." +msgid "Quick Run Scene..." +msgstr "Ejecutar Escena Rapido..." #: editor/editor_node.cpp msgid "Quit" @@ -1880,8 +1878,8 @@ msgid "Previous tab" msgstr "Pestaña anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Archivos.." +msgid "Filter Files..." +msgstr "Filtrar Archivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1892,12 +1890,12 @@ msgid "New Scene" msgstr "Nueva Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nueva Escena Heredada.." +msgid "New Inherited Scene..." +msgstr "Nueva Escena Heredada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir Escena.." +msgid "Open Scene..." +msgstr "Abrir Escena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1916,16 +1914,16 @@ msgid "Open Recent" msgstr "Abrir Reciente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Convertir A.." +msgid "Convert To..." +msgstr "Convertir A..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2189,8 +2187,8 @@ msgid "Save the currently edited resource." msgstr "Guardar el recurso editado actualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar Como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2298,8 +2296,8 @@ msgid "Creating Mesh Previews" msgstr "Creando Vistas Previas de Mesh/es" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2452,8 +2450,8 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Recuperando mirrors, esperá, por favor.." +msgid "Retrieving mirrors, please wait..." +msgstr "Recuperando mirrors, esperá, por favor..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2530,8 +2528,8 @@ msgid "Error requesting url: " msgstr "Error al pedir el url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Conectando al Mirror.." +msgid "Connecting to Mirror..." +msgstr "Conectando al Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2547,8 +2545,8 @@ msgstr "No se ha podido resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2560,8 +2558,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2697,12 +2695,12 @@ msgid "Collapse all" msgstr "Colapsar todos" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renombrar.." +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover A.." +msgid "Move To..." +msgstr "Mover A..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2713,16 +2711,16 @@ msgid "Instance" msgstr "Instancia" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependencias.." +msgid "Edit Dependencies..." +msgstr "Editar Dependencias..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver Dueños.." +msgid "View Owners..." +msgstr "Ver Dueños..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplicar.." +msgid "Duplicate..." +msgstr "Duplicar..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2748,7 +2746,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Examinando Archivos,\n" "Aguardá, por favor." @@ -2816,8 +2814,8 @@ msgid "Import Scene" msgstr "Importar Escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando Escena.." +msgid "Importing Scene..." +msgstr "Importando Escena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2828,8 +2826,8 @@ msgid "Generating for Mesh: " msgstr "Generando para Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Ejecutando Script Personalizado.." +msgid "Running Custom Script..." +msgstr "Ejecutando Script Personalizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2844,8 +2842,8 @@ msgid "Error running post-import script:" msgstr "Error ejecutando el script de post-importacion:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Guardando.." +msgid "Saving..." +msgstr "Guardando..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2864,8 +2862,8 @@ msgid "Import As:" msgstr "Importar Como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preseteo.." +msgid "Preset..." +msgstr "Preseteo..." #: editor/import_dock.cpp msgid "Reimport" @@ -3284,16 +3282,16 @@ msgid "Transition Node" msgstr "Nodo Transición" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importar Animaciones.." +msgid "Import Animations..." +msgstr "Importar Animaciones..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Editar Filtros de Nodo" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtros.." +msgid "Filters..." +msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3360,8 +3358,8 @@ msgid "Fetching:" msgstr "Obteniendo:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Resolviendo.." +msgid "Resolving..." +msgstr "Resolviendo..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3427,8 +3425,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." +msgid "Support..." +msgstr "Soporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3625,8 +3623,9 @@ msgid "Use Rotation Snap" msgstr "Usar Snap de Rotación" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar alineado.." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3721,14 +3720,12 @@ msgid "Show Guides" msgstr "Mostrar guías" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver Origen" +msgstr "Mostrar Orígen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Viewport" +msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4021,7 +4018,7 @@ 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 "" +msgstr "El tipo de la malla primitiva no es PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4052,8 +4049,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crear Collision Sibling Convexo" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crear Outline Mesh.." +msgid "Create Outline Mesh..." +msgstr "Crear Outline Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4259,8 +4256,8 @@ msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Sin pixeles con transparencia > 128 en imagen.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Sin pixeles con transparencia > 128 en imagen..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4620,8 +4617,8 @@ msgid "Import Theme" msgstr "Importar Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Guardar Tema Como.." +msgid "Save Theme As..." +msgstr "Guardar Tema Como..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4717,8 +4714,8 @@ msgstr "Act/Desact. Panel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Encontrar.." +msgid "Find..." +msgstr "Encontrar..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4927,16 +4924,16 @@ msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Reemplazar.." +msgid "Replace..." +msgstr "Reemplazar..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ir a Función.." +msgid "Goto Function..." +msgstr "Ir a Función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ir a Línea.." +msgid "Goto Line..." +msgstr "Ir a Línea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5389,12 +5386,8 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Dialogo de Transformación.." +msgid "Transform Dialog..." +msgstr "Dialogo de Transformación..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5646,8 +5639,8 @@ msgid "Remove All" msgstr "Quitar Todos" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5694,14 +5687,12 @@ msgid "Checked Item" msgstr "Item Tildado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Agregar Item" +msgstr "Radio Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item Tildado" +msgstr "Radio Item Tildado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5716,8 +5707,8 @@ msgid "Options" msgstr "Opciones" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Tienes, Muchas, Variadas, Opciones!" +msgid "Has,Many,Options" +msgstr "Tiene,Muchas,Opciones" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5910,8 +5901,8 @@ msgid "Presets" msgstr "Presets" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Agregar.." +msgid "Add..." +msgstr "Agregar..." #: editor/project_export.cpp msgid "Resources" @@ -6006,6 +5997,10 @@ msgid "Imported Project" msgstr "Proyecto Importado" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nombre de Proyecto Inválido." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "No se pudo crear la carpeta." @@ -6209,9 +6204,11 @@ msgstr "Botón de Mouse" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nombre de acción inválido. No puede estar vacío o contener '/', ':', '=', " +"'\\' o '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6238,8 +6235,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Presionar una Tecla.." +msgid "Press a Key..." +msgstr "Presionar una Tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6422,8 +6419,8 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sobreescribir Para.." +msgid "Override For..." +msgstr "Sobreescribir Para..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6518,12 +6515,12 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." -msgstr "Archivo.." +msgid "File..." +msgstr "Archivo..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Dir.." +msgid "Dir..." +msgstr "Dir..." #: editor/property_editor.cpp msgid "Assign" @@ -6696,8 +6693,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operación no puede ser realizada en escenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Guardar Nueva Escena Como.." +msgid "Save New Scene As..." +msgstr "Guardar Nueva Escena Como..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7417,7 +7414,7 @@ msgstr "Elegir Instancia:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nombre de la clase no puede ser una palabra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8128,7 +8125,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment necesita un recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8142,6 +8139,9 @@ 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 "" +"Este WorldEnvironment esta siendo ignorado. Agregá un nodo Camera (para " +"escenas 3D) o configurá el Background Mode de este entorno en modo Canvas " +"(para escenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8239,6 +8239,13 @@ msgstr "Error cargando tipografía." msgid "Invalid font size." msgstr "Tamaño de tipografía inválido." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Pestaña anterior" + +#~ msgid "Next" +#~ msgstr "Siguiente" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Acción Invalida (cualquier cosa va menos '/' o ':')." @@ -8265,9 +8272,6 @@ msgstr "Tamaño de tipografía inválido." #~ 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" - #~ msgid "Not found!" #~ msgstr "No se encontró!" @@ -8413,8 +8417,8 @@ msgstr "Tamaño de tipografía inválido." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." -#~ msgstr "Configurando.." +#~ msgid "Setting Up..." +#~ msgstr "Configurando..." #~ msgid "Error loading scene." #~ msgstr "Error al cargar la escena." @@ -8476,8 +8480,8 @@ msgstr "Tamaño de tipografía inválido." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Reimportando.." +#~ msgid "Re-Import..." +#~ msgstr "Reimportando..." #~ msgid "No bit masks to import!" #~ msgstr "Sin máscaras de bits para importar!" @@ -8873,14 +8877,14 @@ msgstr "Tamaño de tipografía inválido." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%):" -#~ msgid "Skeleton.." -#~ msgstr "Esqueleto.." +#~ msgid "Skeleton..." +#~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Resetear Zoom" -#~ msgid "Zoom Set.." -#~ msgstr "Setear Zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Setear Zoom..." #~ msgid "Set a Value" #~ msgstr "Setear un Valor" @@ -9362,8 +9366,8 @@ msgstr "Tamaño de tipografía inválido." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK de Proyecto" -#~ msgid "Export.." -#~ msgstr "Exportar.." +#~ msgid "Export..." +#~ msgstr "Exportar..." #~ msgid "Project Export" #~ msgstr "Exportar Proyecto" @@ -9483,8 +9487,8 @@ msgstr "Tamaño de tipografía inválido." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Volver a Cargar Script de Herramientas (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Editar Conecciones.." +#~ msgid "Edit Connections..." +#~ msgstr "Editar Conecciones..." #~ msgid "Set Params" #~ msgstr "Setear Params" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 8b7fdcbb79..f674ef99cc 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -502,7 +502,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "'s%' را از 's%' جدا کن" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "در حال اتصال..." #: editor/connections_dialog.cpp @@ -928,11 +928,11 @@ msgid "Move Audio Bus" msgstr "کلید Add را جابجا کن" #: 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 @@ -1068,11 +1068,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 @@ -1143,8 +1143,8 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "ساختن پوشه.." +msgid "New Folder..." +msgstr "ساختن پوشه..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1406,12 +1406,12 @@ 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 @@ -1619,11 +1619,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 @@ -1635,7 +1635,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 @@ -1687,7 +1687,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 @@ -1834,7 +1834,7 @@ msgid "Previous tab" msgstr "زبانه قبلی" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1846,11 +1846,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 @@ -1870,15 +1870,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 @@ -2124,7 +2124,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 @@ -2233,7 +2233,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2386,7 +2386,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 @@ -2443,7 +2443,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Request Failed." -msgstr "در حال درخواست.." +msgstr "در حال درخواست..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2465,7 +2465,7 @@ msgstr "خطای آدرس درخواستی: " #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "در حال اتصال..." #: editor/export_template_manager.cpp @@ -2482,8 +2482,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "در حال اتصال.." +msgid "Connecting..." +msgstr "در حال اتصال..." #: editor/export_template_manager.cpp #, fuzzy @@ -2496,8 +2496,8 @@ msgstr "وصل شده" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "در حال درخواست.." +msgid "Requesting..." +msgstr "در حال درخواست..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2634,11 +2634,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "تغییر نام.." +msgid "Rename..." +msgstr "تغییر نام..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2651,16 +2651,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "انتخاب شده را به دو تا تکثیر کن" #: editor/filesystem_dock.cpp @@ -2686,7 +2686,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2752,7 +2752,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2764,7 +2764,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 @@ -2780,7 +2780,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2800,7 +2800,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3217,7 +3217,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 @@ -3225,7 +3225,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 @@ -3295,7 +3295,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3363,8 +3363,8 @@ msgid "Site:" msgstr "تارنما:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "پشتیبانی.." +msgid "Support..." +msgstr "پشتیبانی..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3553,6 +3553,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3977,7 +3978,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 @@ -4184,7 +4185,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 @@ -4550,7 +4551,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 @@ -4651,7 +4652,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 @@ -4862,15 +4863,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 @@ -5330,11 +5331,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5590,7 +5587,7 @@ msgid "Remove All" msgstr "برداشتن" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5659,7 +5656,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5853,7 +5850,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5947,6 +5944,11 @@ msgstr "پروژه واردشده" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "نام پروژه:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ناتوان در ساختن پوشه." @@ -6138,8 +6140,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6167,7 +6169,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 @@ -6352,7 +6354,7 @@ msgid "Property:" msgstr "ویژگی:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6448,11 +6450,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 @@ -6628,7 +6630,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 @@ -8183,15 +8185,19 @@ msgstr "خطای بارگذاری قلم." msgid "Invalid font size." msgstr "اندازهٔ قلم نامعتبر." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "زبانه قبلی" + +#~ msgid "Next" +#~ msgstr "بعدی" + #~ msgid "Can't contain '/' or ':'" #~ msgstr "نمیتواند شامل '/' یا ':' باشد" #~ msgid "Can't write file." #~ msgstr "ناتوان در نوشتن پرونده." -#~ msgid "Next" -#~ msgstr "بعدی" - #~ msgid "Not found!" #~ msgstr "چیزی یافت نشد!" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 139983464e..f80efffd42 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -2,25 +2,25 @@ # 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. -# # basse <basse@roiske.org>, 2017. -# Bastian Salmela <bastian.salmela@gmail.com>, 2017. +# Bastian Salmela <bastian.salmela@gmail.com>, 2017, 2018. # ekeimaja <ekeimaja@gmail.com>, 2017-2018. # Jarmo Riikonen <amatrelan@gmail.com>, 2017. +# Nuutti Varvikko <nvarvikko@gmail.com>, 2018. # Sami Lehtilä <sami.lehtila@gmail.com>, 2018. -# +# Tapani Niemi <tapani.niemi@kapsi.fi>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-31 04:36+0000\n" -"Last-Translator: Sami Lehtilä <sami.lehtila@gmail.com>\n" +"PO-Revision-Date: 2018-06-14 20:37+0000\n" +"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" "Language: fi\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.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -31,26 +31,24 @@ msgid "All Selection" msgstr "Koko valinta" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animaatio: muuta arvoa" +msgstr "Animaatio: muuta avainruudun aikaa" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Vaihda animaation siirtymää" +msgstr "Animaatio: muuta siirtymää" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Animaatio: muuta siirtymää" +msgstr "Animaatio: muuta muunnosta" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Animaatio: muuta arvoa" +msgstr "Animaatio: muuta avainruudun arvoa" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Anmaatio: Muuta kutsua" +msgstr "Animaatio: muuta kutsua" #: editor/animation_editor.cpp msgid "Anim Add Track" @@ -70,7 +68,7 @@ msgstr "Siirrä animaatioraita alas" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Poista animaation raita" +msgstr "Poista animaatioraita" #: editor/animation_editor.cpp msgid "Set Transitions to:" @@ -78,24 +76,23 @@ msgstr "Aseta siirtymät:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Nimeä animaatioraita uudelleen" +msgstr "Animaatioraita: nimeä uudelleen" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "Animaatio: Vaihda raidan interpolaatiota" +msgstr "Animaatioraita: muuta interpolaatiota" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "Animaatio: Muuta avainta tila" +msgstr "Animaatioraita: muuta arvon tilaa" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "Animaatio: Muuta toisto tila" +msgstr "Animaatioraita: muuta kierron tilaa" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Muokkaa noden käyrää" +msgstr "Muokkaa solmun käyrää" #: editor/animation_editor.cpp msgid "Edit Selection Curve" @@ -103,16 +100,16 @@ msgstr "Muokkaa valinnan käyrää" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Poista avaimet" +msgstr "Animaatio: poista avaimet" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Monista valinta" +msgstr "Kahdenna valinta" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "Monista käänteisesti" +msgstr "Kahdenna käänteisesti" #: editor/animation_editor.cpp msgid "Remove Selection" @@ -132,11 +129,11 @@ msgstr "Liipaisin" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "Lisää avain" +msgstr "Animaatio: lisää avain" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "SIirrä avaimia" +msgstr "Animaatio: siirrä avaimia" #: editor/animation_editor.cpp msgid "Scale Selection" @@ -193,7 +190,7 @@ msgstr "Siivoa animaatio" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Luo UUSI raita %lle ja lisää avain?" +msgstr "Luo kohteelle %s UUSI raita ja lisää avain?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -209,7 +206,7 @@ msgstr "Luo" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "Animaatio: Luo ja lisää" +msgstr "Animaatio: luo ja lisää" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" @@ -221,7 +218,7 @@ msgstr "Animaatio: Lisää avain" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "Vaihda animaation pituutta" +msgstr "Muuta animaation pituutta" #: editor/animation_editor.cpp msgid "Change Anim Loop" @@ -233,7 +230,7 @@ msgstr "Animaatio: Luo tyypitetty arvoavain" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "Animaatio: Lisää" +msgstr "Animaatio: lisää" #: editor/animation_editor.cpp msgid "Anim Scale Keys" @@ -245,7 +242,7 @@ msgstr "Animaatio: Lisää kutsuraita" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "Animaation zoom." +msgstr "Animaation lähennystaso." #: editor/animation_editor.cpp msgid "Length (s):" @@ -257,7 +254,7 @@ msgstr "Animaation pituus (sekunteina)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "Askellus:" +msgstr "Askellus (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." @@ -265,7 +262,7 @@ msgstr "Kohdistimen askelrajoitin (sekunneissa)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "Ota käyttöön/poista käytöstä animaation toisto." +msgstr "Ota käyttöön tai poista käytöstä animaation toisto." #: editor/animation_editor.cpp msgid "Add new tracks." @@ -289,7 +286,7 @@ msgstr "Raidan työkalut" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "Mahdollistaa avainten muokkaamisen klikkaamalla." +msgstr "Mahdollistaa avainten muokkaamisen napsauttamalla niitä." #: editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -301,11 +298,11 @@ msgstr "Max. lineaarinen virhe:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "Max. Kulmavirhe:" +msgstr "Max. kulmavirhe:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "Max. Optimoitava kulma:" +msgstr "Max. optimoitava kulma:" #: editor/animation_editor.cpp msgid "Optimize" @@ -313,7 +310,7 @@ msgstr "Optimoi" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." -msgstr "Valitse AnimationPlayer Scenepuusta muokataksesi animaatioita." +msgstr "Valitse AnimationPlayer skenen puusta muokataksesi animaatioita." #: editor/animation_editor.cpp msgid "Key" @@ -329,7 +326,7 @@ msgstr "Skaalaussuhde:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "Mistä nodesta kutsutaan funktiota?" +msgstr "Mistä solmusta kutsutaan funktiota?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -345,7 +342,7 @@ msgstr "Siivoa kaikki animaatiot" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Siivoa animaatio(t) (EI VOI KUMOTA)" +msgstr "Siivoa animaatio(t) (EI VOI KUMOTA!)" #: editor/animation_editor.cpp msgid "Clean-Up" @@ -369,7 +366,7 @@ msgstr "Mene riville" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "RIvinumero:" +msgstr "Rivinumero:" #: editor/code_editor.cpp msgid "No Matches" @@ -409,7 +406,7 @@ msgstr "Loitonna" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "Nollaa lähennys" +msgstr "Palauta oletuslähennystaso" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" @@ -417,23 +414,23 @@ msgstr "Rivi:" #: editor/code_editor.cpp msgid "Col:" -msgstr "Kolumni:" +msgstr "Sarake:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "Kohdenoden metodi täytyy määrittää!" +msgstr "Kohdesolmun metodi täytyy määrittää!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"Kohde metodia ei löytynyt! Määrittele voimassa oleva metodi tai kiinnitä " -"skripti nodeen." +"Kohdemetodia ei löytynyt! Määrittele voimassa oleva metodi tai kiinnitä " +"skripti solmuun." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "Yhdistä Nodeen:" +msgstr "Yhdistä solmuun:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -458,7 +455,7 @@ msgstr "Ylimääräiset argumentit:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Polku Nodeen:" +msgstr "Polku solmuun:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -492,7 +489,7 @@ msgstr "Yhdistä" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "Yhdistä '%s' '%s':n" +msgstr "Yhdistä solmu '%s' solmuun '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" @@ -500,10 +497,10 @@ msgstr "Yhdistävä signaali:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "Katkaise yhteys '%s' '%s':n" +msgstr "Katkaise yhteys solmusta '%s' solmuun '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Yhdistä..." #: editor/connections_dialog.cpp @@ -569,7 +566,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" -"Sceneä '%s' muokataan parhaillaan.\n" +"Skeneä '%s' muokataan parhaillaan.\n" "Muutokset tulevat voimaan vasta päivityksen jälkeen." #: editor/dependency_editor.cpp @@ -619,9 +616,8 @@ msgid "Open" msgstr "Avaa" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owners Of:" -msgstr "Omistajat:" +msgstr "Omistajat kohteelle:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" @@ -638,7 +634,6 @@ msgstr "" "Poistetaanko silti? (ei mahdollisuutta kumota)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" msgstr "Ei voida poistaa:" @@ -648,7 +643,7 @@ msgstr "Virhe ladatessa:" #: editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "Scenen lataaminen epäonnistui puuttuvan riippuvuuden takia:" +msgstr "Skenen lataaminen epäonnistui puuttuvan riippuvuuden takia:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -667,9 +662,8 @@ msgid "Errors loading!" msgstr "Virheitä ladatessa!" #: editor/dependency_editor.cpp -#, fuzzy msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "Poista pysyvästi %d ? (Ei voi kumota!)" +msgstr "Poista pysyvästi %d kohdetta? (Ei voi kumota!)" #: editor/dependency_editor.cpp msgid "Owns" @@ -680,9 +674,8 @@ msgid "Resources Without Explicit Ownership:" msgstr "Resurssit, joilla ei ole selvää omistajaa:" #: editor/dependency_editor.cpp editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer" -msgstr "Orpojen resurssien selain" +msgstr "Irrallisten resurssien hallinta" #: editor/dependency_editor.cpp msgid "Delete selected files?" @@ -697,14 +690,12 @@ msgid "Delete" msgstr "Poista" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Key" -msgstr "Vaihda taulukon avainta" +msgstr "Vaihda hakurakenteen avainta" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" -msgstr "Vaihda taulukon arvoa" +msgstr "Vaihda hakurakenteen arvoa" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -727,9 +718,8 @@ msgid "Lead Developer" msgstr "Pääkehittäjä" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Projektinhallinta" +msgstr "Projektipäällikkö " #: editor/editor_about.cpp msgid "Developers" @@ -741,27 +731,27 @@ msgstr "Tekijät" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "Platinum sponsorit" +msgstr "Platinasponsorit" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "Kulta sponsorit" +msgstr "Kultasponsorit" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "Mini sponsorit" +msgstr "Minisponsorit" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Kulta lahjoittajat" +msgstr "Kultalahjoittajat" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Hopea lahjoittajat" +msgstr "Hopealahjoittajat" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "Pronssi lahjoittajat" +msgstr "Pronssilahjoittajat" #: editor/editor_about.cpp msgid "Donors" @@ -784,8 +774,8 @@ msgid "" msgstr "" "Godot moottori käyttää useita kolmannen osapuolen ilmaisia ja avoimia " "kirjastoja, jotka kaikki ovat yhteensopivia sen MIT lisenssin kanssa. " -"Seuraava tyhjentävä listaus sisältää kaikki tälläiset kolmannen osapuolen " -"komponentit ja niiden vastaavat copyright ja lisenssi määritelmät." +"Seuraava tyhjentävä listaus sisältää kaikki tällaiset kolmannen osapuolen " +"komponentit ja niiden vastaavat tekijänoikeustiedot ja käyttöoikeusehdot." #: editor/editor_about.cpp msgid "All Components" @@ -801,7 +791,7 @@ msgstr "Lisenssit" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "Virhe avattaessa pakettia, ei zip muotoinen." +msgstr "Virhe avattaessa pakettitiedostoa, ei zip-muodossa." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -835,12 +825,11 @@ msgstr "Lisää efekti" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Nimeä väylä uudelleen" +msgstr "Nimeä ääniväylä uudelleen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Ääniväylä sooloksi" +msgstr "Muuta ääniväylän voimakkuutta" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -856,7 +845,7 @@ msgstr "Käytä ääniväylän efektejä" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Valitse ääniväylän lähtö" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -905,7 +894,7 @@ msgstr "Poista efekti" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Äänet" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -925,18 +914,18 @@ msgstr "Monista ääniväylä" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "Palauta äänenvoimakkuus" +msgstr "Palauta väylän äänenvoimakkuus" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "Siirrä ääniväylää" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Tallenna ääniväylän asettelu nimellä..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Sijainti uudelle asettelulle..." #: editor/editor_audio_buses.cpp @@ -1020,18 +1009,16 @@ msgid "File does not exist." msgstr "Tiedostoa ei ole olemassa." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." msgstr "Ei löytynyt resurssipolusta." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "Lisää automaattisesti ladattava" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "Automaattisesti ladattava '%s' löytyi jo!" +msgstr "Automaattisesti ladattava '%s' on jo olemassa!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" @@ -1039,10 +1026,9 @@ msgstr "Nimeä automaattisesti ladattava uudelleen" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Aseta globaalien automaattilataus" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Move Autoload" msgstr "Siirrä automaattisesti ladattavaa" @@ -1065,7 +1051,7 @@ msgstr "Polku:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Noden nimi:" +msgstr "Solmun nimi:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1073,30 +1059,28 @@ msgid "Name" msgstr "Nimi" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Singleton" -msgstr "Ainokainen" +msgstr "Singleton" #: editor/editor_data.cpp msgid "Updating Scene" msgstr "Päivitetään skeneä" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Varastoidaan paikalliset muutokset..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Päivitetään skeneä..." #: editor/editor_data.cpp -#, fuzzy msgid "[empty]" -msgstr "(tyhjä)" +msgstr "[tyhjä]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "[ei tallennettu]" +msgstr "[tallentamaton]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1136,18 +1120,16 @@ msgid "Packing" msgstr "Pakataan" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Mallitiedostoa ei löytynyt:\n" +msgstr "Mallitiedostoa ei löytynyt:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Tiedosto on jo olemassa, korvaa?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "Luo kansio" +msgstr "Valitse nykyinen kansio" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1158,8 +1140,8 @@ msgid "Show In File Manager" msgstr "Näytä tiedostonhallinnassa" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Luo kansio..." +msgid "New Folder..." +msgstr "Uusi kansio..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1216,19 +1198,16 @@ msgid "Toggle Hidden Files" msgstr "Näytä piilotiedostot" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" -msgstr "Näytä suosikit" +msgstr "Aseta suosikiksi" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" -msgstr "Näytä/piilota" +msgstr "Aseta tila" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Focus Path" -msgstr "Kohdista polku" +msgstr "Kohdista polkuun" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -1239,13 +1218,12 @@ msgid "Move Favorite Down" msgstr "Siirrä suosikkia alas" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder" -msgstr "Kansiota ei voitu luoda." +msgstr "Siirry yläkansioon" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "Hakemistot & tiedostot:" +msgstr "Hakemistot ja tiedostot:" #: editor/editor_file_dialog.cpp msgid "Preview:" @@ -1257,23 +1235,21 @@ msgid "File:" msgstr "Tiedosto:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Must use a valid extension." -msgstr "Käytä sopivaa laajennusta" +msgstr "Käytä sopivaa tiedostopäätettä." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "Selaa lähdetiedostoja" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "Tuodaan (uudelleen) Assetteja" +msgstr "Tuodaan (uudelleen) assetteja" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Help" -msgstr "Hae oppaasta" +msgstr "Etsi ohjeesta" #: editor/editor_help.cpp msgid "Class List:" @@ -1285,7 +1261,7 @@ msgstr "Etsi luokkia" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "Pinta" +msgstr "Yläpuoli" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" @@ -1296,27 +1272,24 @@ msgid "Inherits:" msgstr "Perii:" #: editor/editor_help.cpp -#, fuzzy msgid "Inherited by:" -msgstr "Peritty:" +msgstr "Perivät:" #: editor/editor_help.cpp msgid "Brief Description:" msgstr "Lyhyt kuvaus:" #: editor/editor_help.cpp -#, fuzzy msgid "Members" -msgstr "Jäsenet:" +msgstr "Jäsenet" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Jäsenet:" #: editor/editor_help.cpp -#, fuzzy msgid "Public Methods" -msgstr "Julkiset metodit:" +msgstr "Julkiset metodit" #: editor/editor_help.cpp msgid "Public Methods:" @@ -1324,66 +1297,59 @@ msgstr "Julkiset metodit:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "GUI teeman osat" +msgstr "Käyttöliittymäteeman osat" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "GUI teeman osat:" +msgstr "Käyttöliittymäteeman osat:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Signaalit:" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Animaatiot" +msgstr "Enumeraatiot" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations:" -msgstr "Animaatiot" +msgstr "Enumeraatiot:" #: editor/editor_help.cpp msgid "enum " -msgstr "enum" +msgstr "enum " #: editor/editor_help.cpp -#, fuzzy msgid "Constants" -msgstr "Vakiot:" +msgstr "Vakiot" #: editor/editor_help.cpp msgid "Constants:" msgstr "Vakiot:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Kuvaus:" +msgstr "Kuvaus" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Oppaat" +msgstr "Online-oppaat:" #: 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 "" -"Tälle metodille ei vielä löydy kuvailua. Voit auttaa meitä [color=$color]" -"[url=$url]kirjoittamalla sellaisen[/url][/color]!" +"Tälle luokalle ei vielä löydy kuvausta. Voit [color=$color][url=$url]auttaa " +"luomalla sellaisen[/url][/color] tai [color=$color][url=$url2]pyytää " +"sellaisen[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Properties" -msgstr "Ominaisuudet:" +msgstr "Ominaisuudet" #: editor/editor_help.cpp -#, fuzzy msgid "Property Description:" msgstr "Ominaisuuden kuvaus:" @@ -1392,13 +1358,12 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Tälle ei vielä löydy kuvailua. Voit auttaa meitä [color=$color][url=" -"$url]kirjoittamalla sellaisen[/url][/color]!" +"Tälle ominaisuudelle ei vielä löydy kuvausta. Voit auttaa meitä [color=" +"$color][url=$url]kirjoittamalla sellaisen[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Methods" -msgstr "Metodilista:" +msgstr "Metodit" #: editor/editor_help.cpp msgid "Method Description:" @@ -1409,7 +1374,7 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Tälle metodille ei vielä löydy kuvailua. Voit auttaa meitä [color=$color]" +"Tälle metodille ei vielä löydy kuvausta. Voit auttaa meitä [color=$color]" "[url=$url]kirjoittamalla sellaisen[/url][/color]!" #: editor/editor_help.cpp @@ -1421,9 +1386,8 @@ msgid "Find" msgstr "Etsi" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Tuloste:" +msgstr "Tuloste:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp @@ -1433,25 +1397,24 @@ msgid "Clear" msgstr "Tyhjennä" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Tuloste" +msgstr "Tyhjennä tuloste" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projektin vienti epäonnistui virhekoodilla %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Virhe tallennettaessa resurssia!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Tallenna resurssi nimellä..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Ymmärrän..." #: editor/editor_node.cpp @@ -1467,32 +1430,28 @@ msgid "Error while saving." msgstr "Virhe tallennettaessa." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open '%s'." -msgstr "Yhdistä..." +msgstr "Ei voida avata tiedostoa '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Error while parsing '%s'." -msgstr "Virhe tallennettaessa." +msgstr "Virhe jäsennettäessä tiedostoa '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." msgstr "Odottamaton loppu tiedostossa '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Missing '%s' or its dependencies." -msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" +msgstr "Tiedosto '%s' tai jokin sen riippuvuuksista puuttuu." #: editor/editor_node.cpp -#, fuzzy msgid "Error while loading '%s'." -msgstr "Virhe tallennettaessa." +msgstr "Virhe ladattaessa tiedostoa '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "Tallennetaan sceneä" +msgstr "Tallennetaan skeneä" #: editor/editor_node.cpp msgid "Analyzing" @@ -1503,16 +1462,16 @@ msgid "Creating Thumbnail" msgstr "Luodaan pienoiskuvaa" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Tätä toimintoa ei voi tehdä ilman Sceneä." +msgstr "Tätä toimintoa ei voi tehdä ilman että puun juuri on olemassa." #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." -msgstr "Sceneä ei voitu tallentaa. Riippuvuuksia ei voitu tyydyttää." +msgstr "" +"Skeneä ei voitu tallentaa. Mahdollisia riippuvuuksia (ilmentymiä tai " +"perintää) ei voida toteuttaa." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1520,19 +1479,19 @@ msgstr "Resurssin lataaminen epäonnistui." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "MalliKirjastojen yhdistäminen ei onnistunut!" +msgstr "Ei voitu ladata MeshLibrary resurssia yhdistämistä varten!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "Virhe tallennettaessa MeshLibrarya!" +msgstr "Virhe tallennettaessa MeshLibrary resurssia!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Ei voida ladata tilesetiä tuontia varten!" +msgstr "Ei voida ladata ruutuvalikoimaa yhdistämistä varten!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "Virhe tallennettaessa tilesetiä!" +msgstr "Virhe tallennettaessa ruutuvalikoimaa!" #: editor/editor_node.cpp msgid "Error trying to save layout!" @@ -1540,16 +1499,15 @@ msgstr "Virhe tallennettaessa asettelua!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "Editorin oletusulkoasu ylikirjoitettu." +msgstr "Editorin oletusasettelu ylikirjoitettu." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "Layoutin nimeä ei löytynyt!" +msgstr "Asettelun nimeä ei löytynyt!" #: editor/editor_node.cpp -#, fuzzy msgid "Restored default layout to base settings." -msgstr "Palautettiin oletusasettelu alkuperäiseen muotoonsa." +msgstr "Palautettiin oletusasettelu alkuperäisiin asetuksiinsa." #: editor/editor_node.cpp msgid "" @@ -1558,16 +1516,16 @@ msgid "" "understand this workflow." msgstr "" "Tämä resurssi kuuluu tuotuun skeneen, joten sitä ei voi suoraan muokata.\n" -"Lue ohjeet skenejen tuomisesta, jotta ymmärrät paremmin tämän työkulun." +"Lue ohjeet skenejen tuomisesta, jotta ymmärrät paremmin tämän työnkulun." #: 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 "" -"Tämä resurssi kuuluu skeneen josta on luotu instanssi, tai joka on " +"Tämä resurssi kuuluu skeneen, josta on luotu ilmentymä, tai joka on " "periytyvä.\n" -"Muutokset tähän eivät ole pysyviä, kun tallennat nykyisen skenen." +"Muutokset siihen eivät ole pysyviä, kun tallennat nykyisen skenen." #: editor/editor_node.cpp msgid "" @@ -1585,9 +1543,10 @@ msgid "" "understand this workflow." msgstr "" "Tämä skene on tuotu, joten siihen tehtyjä muutoksia ei säilytetä.\n" -"Instanssin, tai periytyvän skenen luominen mahdollistaa tämän.\n" -"Ole hyvä ja lue tarkemmat ohjeet skenejen tuomisesta jotta ymmärrät paremmin " -"tämän työnkulun." +"Ilmentymän tai periytyvän skenen luominen siitä mahdollistaa muutoksien " +"tekemisen siihen.\n" +"Ole hyvä ja lue dokumentaatiosta tarkemmat ohjeet skenejen tuomisesta, jotta " +"ymmärrät paremmin tämän työnkulun." #: editor/editor_node.cpp msgid "" @@ -1599,14 +1558,12 @@ msgstr "" "Ole hyvä ja lue ohjeet testaamisesta ymmärtääksesi paremmin tämän työnkulun." #: editor/editor_node.cpp -#, fuzzy msgid "Expand all properties" -msgstr "Laajenna kaikki" +msgstr "Laajenna kaikki ominaisuudet" #: editor/editor_node.cpp -#, fuzzy msgid "Collapse all properties" -msgstr "Pienennä kaikki" +msgstr "Tiivistä kaikki ominaisuudet" #: editor/editor_node.cpp msgid "Copy Params" @@ -1625,14 +1582,12 @@ msgid "Copy Resource" msgstr "Kopioi resurssi" #: editor/editor_node.cpp -#, fuzzy msgid "Make Built-In" msgstr "Tee sisäänrakennettu" #: editor/editor_node.cpp -#, fuzzy msgid "Make Sub-Resources Unique" -msgstr "Tee ali-resursseista yksilöllisiä." +msgstr "Tee aliresursseista yksilöllisiä" #: editor/editor_node.cpp msgid "Open in Help" @@ -1640,17 +1595,16 @@ msgstr "Avaa ohjeessa" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "Suoritettavaa sceneä ei ole määritetty." +msgstr "Suoritettavaa skeneä ei ole määritetty." #: 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 "" -"Pääsceneä ei ole määritetty, haluatko valita sen?\n" -"Voit muuttaa sitä myöhemmin projektin asetuksista." +"Pääskeneä ei ole määritetty, haluatko valita sen?\n" +"Voit muuttaa sen myöhemmin projektin asetuksista, kohdasta 'Application'." #: editor/editor_node.cpp msgid "" @@ -1658,8 +1612,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Valittua sceneä '%s' ei ole olemassa, valitse kelvollinen?\n" -"Voit muuttaa sitä myöhemmin projektin asetuksista." +"Valittua skeneä '%s' ei ole olemassa, valitse kelvollinen?\n" +"Voit muuttaa sitä myöhemmin projektin asetuksista, kohdasta 'Application'." #: editor/editor_node.cpp msgid "" @@ -1667,13 +1621,13 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Valittu scene '%s' ei ole scene-tiedosto, valitse kelvollinen?\n" -"Voit muuttaa sitä myöhemmin projektin asetuksista." +"Valittu skene '%s' ei ole scene-tiedosto, valitse kelvollinen?\n" +"Voit muuttaa sitä myöhemmin projektin asetuksista, kohdasta 'Application'." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" -"Nykyistä sceneä ei ole vielä tallennettu. Tallenna se ennen suorittamista." +"Nykyistä skeneä ei ole vielä tallennettu. Tallenna se ennen suorittamista." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1681,32 +1635,31 @@ msgstr "Aliprosessia ei voitu käynnistää!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "Avaa scene" +msgstr "Avaa skene" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Avaa kantascene" +msgstr "Avaa kantaskene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Nopea skenen avaus..." +msgid "Quick Open Scene..." +msgstr "Skenen pika-avaus..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Nopea skriptin avaus..." +msgid "Quick Open Script..." +msgstr "Skriptin pika-avaus..." #: editor/editor_node.cpp msgid "Save & Close" msgstr "Tallenna ja sulje" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes to '%s' before closing?" -msgstr "Tallennetaanko muutokset '%s' ennen sulkemista?" +msgstr "Tallennetaanko muutokset tiedostoon '%s' ennen sulkemista?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Tallenna scene nimellä..." +msgid "Save Scene As..." +msgstr "Tallenna skene nimellä..." #: editor/editor_node.cpp msgid "No" @@ -1718,35 +1671,35 @@ msgstr "Kyllä" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Tätä sceneä ei ole koskaan tallennettu. Tallenna ennen suorittamista?" +msgstr "Tätä skeneä ei ole koskaan tallennettu. Tallenna ennen suorittamista?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "Tätä toimintoa ei voi tehdä ilman sceneä." +msgstr "Tätä toimintoa ei voi tehdä ilman skeneä." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Vie malli kirjasto" +msgstr "Vie mesh-kirjasto" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "Tätä toimintoa ei voida suorittaa ilman päänodea." +msgstr "Tätä toimintoa ei voida suorittaa ilman juurisolmua." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Vie tileset" +msgstr "Vie ruutuvalikoima" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "Tätä toimintoa ei voi tehdä ilman valittua nodea." +msgstr "Tätä toimintoa ei voi tehdä ilman valittua solmua." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "Nykyistä sceneä ei ole tallennettu. Avaa joka tapauksessa?" +msgstr "Nykyistä skeneä ei ole tallennettu. Avaa joka tapauksessa?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "Ei voida uudelleen ladata skeneä jota ei ole vielä tallennettu." +msgstr "Ei voida ladata uudelleen skeneä, jota ei ole koskaan tallennettu." #: editor/editor_node.cpp msgid "Revert" @@ -1757,8 +1710,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tätä toimintoa ei voida peruttaa. Palauta joka tapauksessa?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Nopea skenen käynnistys..." +msgid "Quick Run Scene..." +msgstr "Skenen pikakäynnistys..." #: editor/editor_node.cpp msgid "Quit" @@ -1770,7 +1723,7 @@ msgstr "Poistu editorista?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "Projektienhallinta" +msgstr "Avataanko projektinhallinta?" #: editor/editor_node.cpp msgid "Save & Quit" @@ -1796,7 +1749,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "Valitse pääscene" +msgstr "Valitse pääskene" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -1804,7 +1757,7 @@ msgstr "Lisäosan '%s' aktivointi epäonnistui, virheellinen asetustiedosto." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "" +msgstr "Skriptikenttää ei löytynyt lisäosan tiedostosta: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." @@ -1825,8 +1778,8 @@ 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 "" -"Scene '%s' tuotiin automaattisesti, joten sitä ei voida muokata.\n" -"Muokataksesi sitä voit luoda uuden perityn Scenen." +"Skene '%s' tuotiin automaattisesti, joten sitä ei voida muokata.\n" +"Muokataksesi sitä voit luoda uuden perityn skenen." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1838,20 +1791,20 @@ 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 "" -"Virhe Scenen latauksessa, sen täytyy sijaita projektin polussa. Käytä 'Tuo' -" -"toimintoa avataksesi Scenen ja tallenna se projektin polkuun." +"Virhe skenen latauksessa, sen täytyy sijaita projektin polussa. Käytä 'Tuo'-" +"toimintoa avataksesi skenen ja tallenna se projektin polkuun." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" +msgstr "Skenellä '%s' on rikkinäisiä riippuvuuksia:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "Tyhjennä viimeiset scenet" +msgstr "Tyhjennä viimeisimmät skenet" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "Tallenna asettelut" +msgstr "Tallenna asettelu" #: editor/editor_node.cpp msgid "Delete Layout" @@ -1864,7 +1817,7 @@ msgstr "Oletus" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Vaihda Scenen välilehteä" +msgstr "Vaihda skenen välilehteä" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1911,23 +1864,23 @@ msgid "Previous tab" msgstr "Edellinen välilehti" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Suodata tiedostot..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "Toiminnot skene tiedostoille." +msgstr "Toiminnot skenetiedostoille." #: editor/editor_node.cpp msgid "New Scene" msgstr "Uusi skene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Uusi peritty skene..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Avaa skene..." #: editor/editor_node.cpp @@ -1947,16 +1900,16 @@ msgid "Open Recent" msgstr "Avaa viimeaikainen" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Muunna..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MalliKirjasto..." +msgid "MeshLibrary..." +msgstr "Mesh-kirjastoksi..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "" +msgid "TileSet..." +msgstr "Ruutuvalikoimaksi..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1977,9 +1930,8 @@ msgid "Miscellaneous project or scene-wide tools." msgstr "Sekalaiset projekti- tai skenetyökalut." #: editor/editor_node.cpp -#, fuzzy msgid "Project" -msgstr "Uusi projekti" +msgstr "Projekti" #: editor/editor_node.cpp msgid "Project Settings" @@ -2003,23 +1955,23 @@ msgstr "Lopeta ja palaa projektiluetteloon" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "Testaa" +msgstr "Virheenkorjaus" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Julkaise etätestauksen kasnsa" +msgstr "Julkaise etätestauksen kanssa" #: 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 "" -"Vietäessä tai julkaistaessa, käynnistystiedosto yrittää ottaa yhteyden tämän " -"tietokoneen IP osoitteeseen testaamista varten." +"Vietäessä tai julkaistaessa, käynnistettävä ohjelma yrittää ottaa yhteyden " +"tämän tietokoneen IP-osoitteeseen testaamista varten." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Kevyt käyttöönotto verkkolevyn avulla" #: editor/editor_node.cpp msgid "" @@ -2038,16 +1990,15 @@ msgstr "" "kohdalla." #: editor/editor_node.cpp -#, fuzzy msgid "Visible Collision Shapes" -msgstr "Näytä osuma-alueet" +msgstr "Näytä törmäysmuodot" #: 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 "" -"Osuma-alueet ja raycast nodet (2D ja 3D) ovat näkyvillä peliä ajettaessa " +"Törmäysmuodot ja raycast-solmut (2D ja 3D) ovat näkyvillä peliä ajettaessa " "tämän ollessa valittuna." #: editor/editor_node.cpp @@ -2059,8 +2010,8 @@ msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"Navigaatiomuodot ja -polygonit ovat näkyvillä peliä ajettaessa tämän ollessa " -"valittuna." +"Navigointiverkot ja niiden polygonit ovat näkyvillä peliä ajettaessa tämän " +"ollessa valittuna." #: editor/editor_node.cpp msgid "Sync Scene Changes" @@ -2075,15 +2026,13 @@ msgid "" msgstr "" "Tämän ollessa valittuna, kaikki skeneen tehdyt muutokset toteutetaan myös " "käynnissä olevassa pelissä.\n" -"Tämä on tehokkainta verkkotiedostojärjestelmän kanssa mikäli käytössä on " -"etälaite." +"Mikäli peliä ajetaan etälaitteella, on tehokkaampaa käyttää verkkolevyä." #: editor/editor_node.cpp msgid "Sync Script Changes" msgstr "Synkronoi skriptin muutokset" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is turned on, any script that is saved will be reloaded on " "the running game.\n" @@ -2092,13 +2041,11 @@ msgid "" msgstr "" "Jos tämä on valittu, kaikki tallennetut skriptit ladataan uudelleen pelin " "käynnistyessä.\n" -"Mikäli peli ajetaan etälaitteella, on tehokkaampaa käyttää " -"verkkotiedostojärjestelmää ." +"Mikäli peliä ajetaan etälaitteella, on tehokkaampaa käyttää verkkolevyä." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "Muokkaa" +msgstr "Editori" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2114,7 +2061,7 @@ msgstr "Siirry koko näytön tilaan" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "Hallitse vietäviä Templateja" +msgstr "Hallinnoi vientimalleja" #: editor/editor_node.cpp msgid "Help" @@ -2136,9 +2083,8 @@ msgid "Online Docs" msgstr "Dokumentaatio" #: editor/editor_node.cpp -#, fuzzy msgid "Q&A" -msgstr "Kysy&Vastaa" +msgstr "Kysymykset ja vastaukset" #: editor/editor_node.cpp msgid "Issue Tracker" @@ -2154,24 +2100,23 @@ msgstr "Tietoja" #: editor/editor_node.cpp msgid "Play the project." -msgstr "Käynnistä projekti" +msgstr "Käynnistä projekti." #: editor/editor_node.cpp -#, fuzzy msgid "Play" -msgstr "Toista" +msgstr "Pelaa" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "Pysäytä Scene" +msgstr "Keskeytä skenen suorittaminen hetkellisesti" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "Pysäytä Scene" +msgstr "Keskeytä skene" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "Lopeta Scene." +msgstr "Lopeta skenen suorittaminen." #: editor/editor_node.cpp msgid "Stop" @@ -2179,11 +2124,11 @@ msgstr "Pysäytä" #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "Käynnistä muokattu skene." +msgstr "Käynnistä muokattavana oleva skene." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Toista Scene" +msgstr "Toista skene" #: editor/editor_node.cpp msgid "Play custom scene" @@ -2211,7 +2156,7 @@ msgstr "Poista päivitysanimaatio" #: editor/editor_node.cpp msgid "Inspector" -msgstr "Tarkastaja" +msgstr "Tarkastelu" #: editor/editor_node.cpp msgid "Create a new resource in memory and edit it." @@ -2226,7 +2171,7 @@ msgid "Save the currently edited resource." msgstr "Tallenna tällä hetkellä muokattu resurssi." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Tallenna nimellä..." #: editor/editor_node.cpp @@ -2256,7 +2201,7 @@ msgstr "Tuo" #: editor/editor_node.cpp msgid "Node" -msgstr "Node" +msgstr "Solmu" #: editor/editor_node.cpp msgid "FileSystem" @@ -2292,16 +2237,15 @@ msgstr "Salasana:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "Avaa & suorita skripti" +msgstr "Avaa ja suorita skripti" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Uusi peritty Scene..." +msgstr "Uusi peritty skene" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "Lataa virheet" +msgstr "Latausvirheet" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" @@ -2321,7 +2265,7 @@ msgstr "Avaa skriptieditori" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Avaa Asset-kirjasto" +msgstr "Avaa asset-kirjasto" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -2333,10 +2277,10 @@ msgstr "Avaa edellinen editori" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "Luodaan mallien esikatseluita" +msgstr "Luodaan meshien esikatseluita" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Pienoiskuva..." #: editor/editor_plugin_settings.cpp @@ -2369,13 +2313,12 @@ msgid "Start Profiling" msgstr "Aloita profilointi" #: editor/editor_profiler.cpp -#, fuzzy msgid "Measure:" -msgstr "Mittayksikkö:" +msgstr "Mittaa:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "Framen aika (sek)" +msgstr "Kuvaruudun aika (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" @@ -2383,12 +2326,11 @@ msgstr "Keskimääräinen aika (sek)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "Frame %" +msgstr "Kuvaruutujen %" #: editor/editor_profiler.cpp -#, fuzzy msgid "Physics Frame %" -msgstr "Kiinteä Frame %" +msgstr "Fysiikkaruutujen %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2396,7 +2338,7 @@ msgstr "Aika:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "Sisältävä" #: editor/editor_profiler.cpp msgid "Self" @@ -2407,14 +2349,12 @@ msgid "Frame #:" msgstr "Ruutu #:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "Aika:" +msgstr "Aika" #: editor/editor_profiler.cpp -#, fuzzy msgid "Calls" -msgstr "Kutsu" +msgstr "Kutsuja" #: editor/editor_run_native.cpp msgid "Select device from the list" @@ -2426,15 +2366,15 @@ msgid "" "Please add a runnable preset in the export menu." msgstr "" "Käynnistettävää vientipohjaa ei löytynyt tälle alustalle.\n" -"Lisää sellainen vienti-valikosta." +"Lisää sellainen vientivalikosta." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "Kirjoita logiikka _run() -metodiin." +msgstr "Kirjoita logiikka _run() metodiin." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "Muokattu Scene on jo olemassa." +msgstr "Muokattu skene on jo olemassa." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -2442,7 +2382,7 @@ msgstr "Ei voitu luoda instanssia skriptistä:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "Unohditko 'tool' hakusanan?" +msgstr "Unohditko 'tool' avainsanan?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2450,7 +2390,7 @@ msgstr "Skriptiä ei voitu suorittaa:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "Unohditko '_run' -metodin?" +msgstr "Unohditko '_run' metodin?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" @@ -2458,15 +2398,15 @@ msgstr "Oletus (sama kuin editori)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Valitse tuotava(t) node(t)" +msgstr "Valitse tuotavat solmut" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "Scenen polku:" +msgstr "Skenen polku:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "Tuo Nodesta:" +msgstr "Tuo solmusta:" #: editor/export_template_manager.cpp msgid "Re-Download" @@ -2493,7 +2433,7 @@ msgid "(Current)" msgstr "(Nykyinen)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Noudetaan peilipalvelimia, hetkinen..." #: editor/export_template_manager.cpp @@ -2502,24 +2442,23 @@ msgstr "Poista mallin versio '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "Vientipohjien zip-tiedostoa ei voitu avata." +msgstr "Vientimallien zip-tiedostoa ei voitu avata." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "Paketti sisältää viallisen version.txt tiedoston." +msgstr "Vientimalli sisältää virheellisen version.txt tiedoston." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "version.txt -tiedostoa ei löytynyt." +msgstr "Vientimalleista ei löytynyt version.txt tiedostoa." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "Virhe luotaessa polkua mallille:\n" +msgstr "Virhe luotaessa polkua malleille:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "Puretaan vientipohjia." +msgstr "Puretaan vientimalleja" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2550,7 +2489,6 @@ msgstr "Ei vastausta." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." msgstr "Pyyntö epäonnistui." @@ -2565,29 +2503,24 @@ msgid "Failed:" msgstr "Epäonnistui:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." -msgstr "Lataa" +msgstr "Lataus valmis." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting url: " -msgstr "Virhe tallennettaessa atlas-kuvaa:" +msgstr "Virhe pyydettäessä osoitetta: " #: editor/export_template_manager.cpp -#, fuzzy -msgid "Connecting to Mirror.." -msgstr "Yhdistä..." +msgid "Connecting to Mirror..." +msgstr "Yhdistetään peilipalvelimeen..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Disconnected" -msgstr "Katkaise yhteys" +msgstr "Yhteys katkaistu" #: editor/export_template_manager.cpp -#, fuzzy msgid "Resolving" -msgstr "Tallennetaan..." +msgstr "Selvitetään" #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2595,29 +2528,25 @@ msgstr "Yhdistäminen epäonnistui" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Yhdistä..." +msgid "Connecting..." +msgstr "Yhdistetään..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" msgstr "Ei voitu yhdistää" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" -msgstr "Yhdistä" +msgstr "Yhdistetty" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Pyydetään..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Downloading" -msgstr "Lataa" +msgstr "Ladataan" #: editor/export_template_manager.cpp msgid "Connection Error" @@ -2648,14 +2577,12 @@ msgid "Select template file" msgstr "Valitse mallin tiedosto" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" msgstr "Vientimallien hallinta" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Poista malli" +msgstr "Lataa mallit" #: editor/export_template_manager.cpp msgid "Select mirror from list: " @@ -2665,7 +2592,7 @@ msgstr "Valitse peilipalvelin listasta: " msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" "Tiedostoa file_type_cache.cch ei voitu avata kirjoittamista varten. " -"Välimuistia ei tallenneta. " +"Välimuistia ei tallenneta!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -2682,79 +2609,65 @@ msgid "View items as a list" msgstr "Listanäkymä" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"\n" -"Tila: Tuonti epäonnistui. Ole hyvä, korjaa tiedosto, ja tuo uudelleen." +"Tila: Tuonti epäonnistui. Ole hyvä, korjaa tiedosto ja tuo se uudelleen." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." msgstr "Ei voitu siirtää/nimetä uudelleen resurssien päätasoa." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move a folder into itself." -msgstr "Hakemistoa ei voi siirtää itsensä sisään.\n" +msgstr "Kansiota ei voi siirtää itsensä sisään." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Virhe tuotaessa:" +msgstr "Virhe siirrettäessä:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Virhe ladatessa:" +msgstr "Virhe kahdennettaessa:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" +msgstr "Ei voida päivittää riippuvuuksia:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "No name provided" msgstr "Nimeä ei annettu" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Provided name contains invalid characters" -msgstr "Annettu nimi sisältää laittomia kirjaimia" +msgstr "Annettu nimi sisältää virheellisiä kirjainmerkkejä" #: editor/filesystem_dock.cpp -#, fuzzy msgid "No name provided." -msgstr "Nimeä uudelleen tai siirrä..." +msgstr "Nimeä ei annettu." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Name contains invalid characters." -msgstr "Kelvolliset merkit:" +msgstr "Nimi sisältää virheellisiä kirjainmerkkejä." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." msgstr "Tällä nimellä löytyy jo kansio tai tiedosto." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Nimeä muuttuja uudelleen" +msgstr "Nimetään tiedosto uudelleen:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming folder:" -msgstr "Nimeä Node uudelleen" +msgstr "Nimetään kansio uudelleen:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Monista" +msgstr "Kahdennetaan tiedosto:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "Nimeä Node uudelleen" +msgstr "Kahdennetaan kansio:" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2765,35 +2678,32 @@ msgid "Collapse all" msgstr "Pienennä kaikki" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Rename.." -msgstr "Nimeä uudelleen" +msgid "Rename..." +msgstr "Nimeä uudelleen..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Siirrä..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" -msgstr "Avaa scene" +msgstr "Avaa skene tai skenejä" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "Instanssi" +msgstr "Luo ilmentymä" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Muokkaa riippuvuuksia..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Tarkastele omistajia..." #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate.." -msgstr "Monista" +msgid "Duplicate..." +msgstr "Kahdenna..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2805,7 +2715,7 @@ msgstr "Seuraava hakemisto" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Skannaa tiedostojärjestelmä uudelleen" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" @@ -2813,16 +2723,15 @@ msgstr "Merkitse kansio suosikkeihin" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Luo valituista skeneistä instanssi valitun noden alle." +msgstr "Luo valituista skeneistä ilmentymä valitun solmun alle." #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Selataan tiedostoja,\n" -"Hetkinen..." +"Hetkinen…" #: editor/filesystem_dock.cpp msgid "Move" @@ -2842,49 +2751,40 @@ msgid "Remove from Group" msgstr "Poista ryhmästä" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Tuodaan Scene..." +msgstr "Tuo yhtenä skenenä" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" -msgstr "Tuo animaatiot..." +msgstr "Tuo erillisten animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials" msgstr "Tuo erillisten materiaalien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects" msgstr "Tuo erillisten objektien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials" msgstr "Tuo erillisten objektien ja materiaalien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Animations" msgstr "Tuo erillisten objektien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials+Animations" msgstr "Tuo erillisten materiaalien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials+Animations" msgstr "Tuo erillisten objektien, materiaalien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes" -msgstr "Tuo 3D Scene" +msgstr "Tuo useina skeneinä" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" @@ -2893,49 +2793,48 @@ msgstr "Tuo useina skeneinä ja materiaaleina" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "Tuo Scene" +msgstr "Tuo skene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Tuodaan Scene..." +msgid "Importing Scene..." +msgstr "Tuodaan skene..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating Lightmaps" -msgstr "Muunna Lightmapiksi:" +msgstr "Luodaan Lightmappeja" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh: " -msgstr "Luo AABB" +msgstr "Luodaan meshille: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Suorita valitsemasi skripti..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "Ei voitu ladata tuonnin jälkeistä skriptiä: " +msgstr "Ei voitu ladata tuonnin jälkeistä skriptiä:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "Viallinen tuonnin jälkeinen skripti (tarkista konsoli) : " +msgstr "" +"Virheellinen tai viallinen tuonnin jälkeinen skripti (tarkista konsoli):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "Virhe ajettaessa tuonnin jälkeistä skriptiä: " +msgstr "Virhe ajettaessa tuonnin jälkeistä skriptiä:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Tallennetaan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Aseta oletus valinnalle '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Poista oletus valinnalta '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2946,7 +2845,7 @@ msgid "Import As:" msgstr "Tuo nimellä:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Esiasetus..." #: editor/import_dock.cpp @@ -2955,7 +2854,7 @@ msgstr "Tuo uudelleen" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Aseta usealle solmulle" #: editor/node_dock.cpp msgid "Groups" @@ -2963,7 +2862,7 @@ msgstr "Ryhmät" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Valitse node jonka signaaleja ja ryhmiä haluat muokata." +msgstr "Valitse solmu, jonka signaaleja ja ryhmiä haluat muokata." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3055,11 +2954,11 @@ msgstr "Lisää animaatio" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "Sekoita seuraavaan vaihdettu" +msgstr "Sulauta seuraavaan vaihdettu" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Muuta sulautusaikaa" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -3111,11 +3010,11 @@ msgstr "Toista valittu animaatio nykyisestä kohdasta. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "Animaation sijainti (sekunneissa)." +msgstr "Animaation kohta (sekunneissa)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Skaalaa animaation toistoa globaalisti solmulle." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." @@ -3139,11 +3038,11 @@ msgstr "Näytä lista animaatioista soittimessa." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "Toista automaattisesti" +msgstr "Toista automaattisesti ladattaessa" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Muokkaa kohteen sulautusaikoja" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -3159,7 +3058,7 @@ msgstr "Onion skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "Käytä Onion skinningiä" +msgstr "Käytä onion skinningiä" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -3199,7 +3098,7 @@ msgstr "Pakota valkoisen modulaatio" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Näytä 3D-muokkaimet" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3260,7 +3159,7 @@ msgstr "Sulauta" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "Sekoitus" +msgstr "Sekoita" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" @@ -3309,11 +3208,11 @@ msgstr "Lisää syöte" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "" +msgstr "Poista automaattinen eteneminen" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Aseta automaattinen eteneminen" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" @@ -3329,56 +3228,55 @@ msgstr "Animaatiopuu ei ole kelvollinen." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Animaationode" +msgstr "Animaatiosolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "OneShot node" +msgstr "Vaiheistussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Mix Node" +msgstr "Sekoitussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "Sulautus2 node" +msgstr "2-sulautussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "3-sulautussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "4-sulautussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Ajanskaalaussolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Ajanhakusolmu" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Siirtymänode" +msgstr "Siirtymäsolmu" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Tuo animaatiot..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Muokkaa noden suodattimia" +msgstr "Muokkaa solmun suodattimia" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Suodattimet..." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Animaatio" +msgstr "Animaatiopuu" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" @@ -3389,9 +3287,8 @@ msgid "Contents:" msgstr "Sisällöt:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "View Files" -msgstr " Tiedostot" +msgstr "Näytä tiedostot" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -3402,18 +3299,16 @@ msgid "Connection error, please try again." msgstr "Yhteysvirhe, ole hyvä ja yritä uudelleen." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect to host:" -msgstr "Yhdistä Nodeen:" +msgstr "Isäntään yhdistäminen epäonnistui:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "Ei vastausta isännältä: " +msgstr "Ei vastausta isännältä:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, return code:" -msgstr "Pyydetty tiedostomuoto tuntematon:" +msgstr "Pyyntö epäonnistui, virhekoodi:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -3444,14 +3339,12 @@ msgid "Fetching:" msgstr "Noudetaan:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Tallennetaan..." +msgid "Resolving..." +msgstr "Selvitetään..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "Virhe tallennettaessa resurssia!" +msgstr "Virhe pyynnön luonnissa" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3462,9 +3355,8 @@ msgid "Retry" msgstr "Yritä uudelleen" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Download Error" -msgstr "Lataa" +msgstr "Latausvirhe" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" @@ -3514,7 +3406,7 @@ msgid "Site:" msgstr "Sivu:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Tuki..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3522,7 +3414,6 @@ msgid "Official" msgstr "Virallinen" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Testing" msgstr "Testaus" @@ -3536,21 +3427,27 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Lightmap-kuvien tallennuspolun määrittäminen ei onnistu.\n" +"Tallenna skenesi (jotta kuvat tallentuisivat samaan hakemistoon), tai " +"valitse tallennuspolku BakedLightmapin asetuksista." #: 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 "" +"Ei meshejä kehitettävänä. Varmista, että ne sisältävät UV2-kanavan, ja että " +"'Bake Light' asetus on päällä." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Lightmap-kuvien luonti epäonnistui, varmista, että polku on " +"kirjoituskelpoinen." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Muunna Lightmapiksi:" +msgstr "Kehitä Lightmapit" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3585,36 +3482,31 @@ msgstr "Siirrä keskikohtaa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "Siirrä " +msgstr "Siirrä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" msgstr "Siirrä pystysuuntaista apuviivaa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new vertical guide" -msgstr "Luo uusi skripti" +msgstr "Luo uusi pystysuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove vertical guide" -msgstr "Poista muuttuja" +msgstr "Poista pystysuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move horizontal guide" -msgstr "Siirrä pistettä käyrällä" +msgstr "Siirrä vaakasuoraa apuviivaa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new horizontal guide" -msgstr "Luo uusi skripti" +msgstr "Luo uusi vaakasuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove horizontal guide" -msgstr "Poista virheelliset avaimet" +msgstr "Poista vaakasuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" @@ -3629,14 +3521,12 @@ msgid "Edit CanvasItem" msgstr "Muokkaa CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Anchors only" -msgstr "Ankkuri" +msgstr "Vain ankkurit" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Anchors and Margins" -msgstr "Muuta ankkureita" +msgstr "Muuta ankkureita ja marginaaleja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3666,7 +3556,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt + Hiiren oikea painike: Syvyyslistan valinta" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3682,6 +3572,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Näytä lista kaikista napsautetussa kohdassa olevista objekteista\n" +"(sama kuin Alt + Hiiren oikea painike valintatilassa)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -3689,7 +3581,7 @@ msgstr "Klikkaa vaihtaaksesi objektin kääntökeskiötä." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Panorointitila" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" @@ -3700,9 +3592,8 @@ msgid "Use Snap" msgstr "Käytä tarttumista" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping options" -msgstr "Animaation asetukset" +msgstr "Tarttumisen asetukset" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -3713,6 +3604,7 @@ msgid "Use Rotation Snap" msgstr "Tartu käännettäessä" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Määrittele tarttuminen..." @@ -3729,28 +3621,24 @@ msgid "Smart snapping" msgstr "Älykäs tarttuminen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to parent" -msgstr "Laajenna Parentiin" +msgstr "Tartu isäntään" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "Tartu noden ankkuriin" +msgstr "Tartu solmun ankkuriin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node sides" -msgstr "Tartu noden sivustoihin" +msgstr "Tartu solmun reunoihin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to other nodes" -msgstr "Tartu muihin nodeihin" +msgstr "Tartu muihin solmuihin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to guides" -msgstr "Laajenna Parentiin" +msgstr "Tartu apuviivoihin" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3768,7 +3656,7 @@ msgstr "Varmistaa ettei objektin lapsia voi valita." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Palauttaa objektin aliobjektien mahdollisuuden tulla valituksi." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3792,9 +3680,8 @@ msgstr "Tyhjennä IK ketju" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View" -msgstr "Näytä/Tarkastele" +msgstr "Näytä" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3802,9 +3689,8 @@ msgid "Show Grid" msgstr "Näytä ruudukko" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Helpers" -msgstr "Näytä luut" +msgstr "Näytä avustimet" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -3815,14 +3701,12 @@ 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" +msgstr "Näytä näyttöikkuna" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3838,7 +3722,7 @@ msgstr "Asettelu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" -msgstr "Lisää keyframeja" +msgstr "Lisää avainruutuja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" @@ -3846,7 +3730,7 @@ msgstr "Lisää keyframe" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Lisää keyframe (olemassaolevalle raidalle)" +msgstr "Lisää avainruutu (olemassa olevat raidat)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -3857,9 +3741,8 @@ msgid "Clear Pose" msgstr "Tyhjennä asento" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Drag pivot from mouse position" -msgstr "Rahaa pistettä hiiren sijainnista" +msgstr "Vedä keskipistettä hiiren sijainnista" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set pivot at mouse position" @@ -3883,21 +3766,21 @@ msgstr "Lisätään %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 "Ei voida luoda ilmentymiä useasta solmusta ilman juurta." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "Luo Node" +msgstr "Luo solmu" #: 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 "Virhe luotaessa instanssia kohteesta %s" +msgstr "Virhe luotaessa ilmentymää kohteesta %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change default type" @@ -3908,8 +3791,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"Vedä & pudota + Shift: Lisää Node sisarena\n" -"Vedä & pudota + Alt: Muuta Noden tyyppiä" +"Vedä & pudota + Shift: Lisää solmu sisarena\n" +"Vedä & pudota + Alt: Muuta solmun tyyppiä" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -3921,48 +3804,45 @@ msgstr "Aseta kahva" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "Poistetaanko kohde %d?" #: editor/plugins/cube_grid_theme_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Item" -msgstr "Lisää" +msgstr "Lisää kohde" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -#, fuzzy msgid "Remove Selected Item" -msgstr "Poista valitut" +msgstr "Poista valitut kohteet" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "Tuo Scenestä" +msgstr "Tuo skenestä" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "Päivitä Scenestä" +msgstr "Päivitä skenestä" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Tasainen0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Tasainen1" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease in" -msgstr "Framen valinta" +msgstr "Kiihdytä alussa" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "" +msgstr "Hidasta lopussa" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Pehmeä askellus" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" @@ -4002,7 +3882,7 @@ msgstr "Poista käyrän piste" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Aseta käyrälle lineaarinen tangentti" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" @@ -4010,7 +3890,7 @@ msgstr "Pidä shift pohjassa muokataksesi tangentteja yksitellen" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Kehitä GI Probe" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4023,27 +3903,27 @@ msgstr "Muokkaa väriliukumaa" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "Kohde %d" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" -msgstr "" +msgstr "Sisältö" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Sisällön muokkaus" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" -"Tälle nodelle ei ole OccluderPolygon2D:tä.\n" -"Luodaanko sellainen?" +"Tälle solmulle ei ole OccluderPolygon2D resurssia.\n" +"Luodaanko ja asetetaanko sellainen?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "Luo Occluder polygooni" +msgstr "Luo peittävä polygoni" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." @@ -4059,7 +3939,7 @@ msgstr "VHP: Siirrä pistettä." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "Ctrl+Vasen hiirennappi: Puolita osa" +msgstr "Ctrl+Vasen hiirennappi: Puolita osa." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." @@ -4067,60 +3947,59 @@ msgstr "OHP: Pyyhi piste." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Mesh on tyhjä!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Luo konveksi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "This doesn't work on scene root!" -msgstr "Tämä ei toimi root-Scenessä!" +msgstr "Tämä ei toimi skenen juuressa!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Luo konkaavi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "Luo konveksi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Luo navigointiverkko" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "" +msgstr "Sisällytetty Mesh ei ole tyyppiä ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "UV-aukaisu epäonnistui, mesh ei ehkä ole jaettavissa osiin?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "" +msgstr "Ei meshiä debugattavaksi." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "Mallilla ei ole UV-kanavaa tällä kerroksella" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "" +msgstr "MeshInstance solmulta puuttuu Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "" +msgstr "Meshillä ei ole pintaa, josta ääriviivat voitaisiin luoda!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Meshin primitiivityyppi ei ole PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4132,90 +4011,89 @@ msgstr "Luo ääriviivat" #: 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 "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "" +msgstr "Luo konveksi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Luo konkaavi törmäysmuoto sisareksi" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Luo konveksi törmäysmuoto sisareksi" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "" +msgid "Create Outline Mesh..." +msgstr "Luo reunoista Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV1" -msgstr "Näytä/Tarkastele" +msgstr "Näytä UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV2" -msgstr "Näytä/Tarkastele" +msgstr "Näytä UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "Aukaise UV2 Lightmapille tai AO:lle" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "" +msgstr "Luo reunoista Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" msgstr "Ääriviivojen koko:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "Mesh:in lähdettä ei määritetty" +msgstr "" +"Meshin lähdettä ei ole määritetty (ja MultiMesh ei ole asetettu solmulle)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." msgstr "" +"Meshin lähdettä ei ole määritetty (ja MultiMesh ei sisällä Mesh solmua)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "Virheellinen Mesh:in lähde (virheellinen polku)." +msgstr "Meshin lähde on virheellinen (virheellinen polku)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Meshin lähde on virheellinen (ei MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "Meshin lähde on virheellinen (ei sisällä Mesh resurssia)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Pinnan lähdettä ei ole määritelty." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (virheellinen polku)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (geometria puuttuu)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (tahkot puuttuvat)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "Lähteellä ei ole kiinteitä tahkoja täytettäväksi." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." @@ -4223,27 +4101,27 @@ msgstr "Aluetta ei voitu kartoittaa." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Valitse lähdemesh:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Valitse kohdepinta:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Täytä pinta" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "" +msgstr "Täytä MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Kohdepinta:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Lähde Mesh:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -4259,7 +4137,7 @@ msgstr "Z-akseli" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "" +msgstr "Meshin ylös-akseli:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -4275,19 +4153,19 @@ msgstr "Satunnainen skaalaus:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "" +msgstr "Täytä" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" -msgstr "" +msgstr "Kehitä!" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake the navigation mesh." -msgstr "" +msgstr "Kehitä navigointiverkko." #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Tyhjennä navigointiverkko." #: editor/plugins/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -4299,45 +4177,43 @@ msgstr "Lasketaan ruudukon kokoa..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Luodaan korkeuskenttää..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Marking walkable triangles..." -msgstr "Varastoidaan paikalliset muutokset..." +msgstr "Merkitään kuljettavat kolmiot..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Rakennetaan tiivistä korkeuskenttää..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Syövytetään kuljettavaa aluetta..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Partitioning..." -msgstr "Varoitus" +msgstr "Ositetaan..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Luodaan korkeuskäyriä..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Luodaan polymesh..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Muunnetaan alkuperäiseksi navigointiverkoksi..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Navigointiverkon generaattorin asetukset:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Jäsentää geometriaa…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4345,29 +4221,29 @@ msgstr "Valmis!" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "Luo navigointipolygoni" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generating AABB" -msgstr "Luo AABB" +msgstr "Luodaan AABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" msgstr "" +"Piste voidaan asettaa ainoastaan ParticlesMaterial käsittelyn materiaaliin" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" msgstr "Virhe ladattaessa kuvaa:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgid "No pixels with transparency > 128 in image..." +msgstr "Kuvassa ei ole pikseleitä, joiden läpinäkyvyys on enemmän kuin 128…" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Kartoita näkyvä alue" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -4375,7 +4251,7 @@ msgstr "Lataa emissiomaski" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Tyhjennä emissiomaski" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4388,18 +4264,16 @@ msgstr "Luotujen pisteiden määrä:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generation Time (sec):" -msgstr "Keskimääräinen aika (sek)" +msgstr "Luontiaika (s):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" msgstr "Emission maski" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Capture from Pixel" -msgstr "Luo Scenestä" +msgstr "Nappaa pikselistä" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" @@ -4407,15 +4281,15 @@ msgstr "Emission väri" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "Node ei sisällä geometriaa." +msgstr "Solmu ei sisällä geometriaa." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "Solmulta puuttuu geometria (tahkot)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Tarvitaan 'ParticlesMaterial' tyyppinen prosessorimateriaali." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" @@ -4431,14 +4305,13 @@ msgstr "Luo AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Luo säteilypisteet meshistä" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Luo säteilypisteet solmusta" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emitter" msgstr "Luo säteilijä/lähetin" @@ -4460,26 +4333,23 @@ msgstr "Äänenvoimakkuus" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "Emission lähde:" +msgstr "Emission lähde: " #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility AABB" -msgstr "Luo AABB" +msgstr "Kartoita näkyvä alue" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" msgstr "Poista pisteet käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control from Curve" -msgstr "Poista pisteet käyrästä" +msgstr "Poista lähtöohjain käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control from Curve" -msgstr "Poista pisteet käyrästä" +msgstr "Poista tulo-ohjain käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4492,11 +4362,11 @@ msgstr "Siirrä pistettä käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Siirrä tulo-ohjainta käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Siirrä lähtöohjainta käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4547,19 +4417,16 @@ msgid "Curve Point #" msgstr "Käyrän piste #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyräpisteen sijainti" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyrän aloitussijainti" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyrän lopetussijainti" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4570,14 +4437,12 @@ msgid "Remove Path Point" msgstr "Poista polun piste" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Poista polygoni ja piste" +msgstr "Poista lähtöohjaimen piste" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control Point" -msgstr "Poista polygoni ja piste" +msgstr "Poista tulo-ohjaimen piste" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4589,16 +4454,15 @@ msgstr "Muunna UV kartta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "Polygon 2D UV-editori" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" msgstr "Siirrä pistettä" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Ctrl: Rotate" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Ctrl: Kierrä" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" @@ -4614,7 +4478,7 @@ msgstr "Siirrä polygonia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "Käännä polygonia" +msgstr "Kierrä polygonia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" @@ -4630,11 +4494,11 @@ msgstr "Muokkaa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "Polygooni->UV" +msgstr "Polygoni->UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "UV->Polygooni" +msgstr "UV->Polygoni" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -4682,7 +4546,7 @@ msgstr "Avaa editorissa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "" +msgstr "Ilmentymä:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp @@ -4703,21 +4567,16 @@ msgid "Paste" msgstr "Liitä" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Resurssi" +msgstr "Resurssien esilataaja" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Files" -msgstr "Tyhjennä luut" +msgstr "Tyhjennä viimeisimpien tiedostojen luettelo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close and save changes?" -msgstr "" -"Sulje ja tallenna muutokset?\n" -"\"" +msgstr "Sulje ja tallenna muutokset?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4740,7 +4599,7 @@ msgid "Import Theme" msgstr "Tuo teema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Tallenna teema nimellä..." #: editor/plugins/script_editor_plugin.cpp @@ -4748,9 +4607,8 @@ msgid " Class Reference" msgstr " Luokan referenssi" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Lajittele:" +msgstr "Lajittele" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp @@ -4786,15 +4644,13 @@ msgstr "Tallenna kaikki" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Lataa skripti uudelleen kevyesti" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Kopioi polku" +msgstr "Kopioi skriptin polku" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" msgstr "Näytä tiedostojärjestelmässä" @@ -4840,7 +4696,7 @@ msgstr "Näytä/piilota skriptipaneeli" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Etsi..." #: editor/plugins/script_editor_plugin.cpp @@ -4849,13 +4705,12 @@ msgid "Find Next" msgstr "Etsi seuraava" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Step Over" -msgstr "Ohita" +msgstr "Siirry seuraavaan" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "Siirry" +msgstr "Siirry sisään" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" @@ -4880,7 +4735,7 @@ msgstr "Avaa Godotin online-dokumentaatio" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." -msgstr "Etsi luokkahierarkia." +msgstr "Etsi luokkahierarkiasta." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -4926,21 +4781,20 @@ msgstr "Debuggeri" msgid "" "Built-in scripts can only be edited when the scene they belong to is loaded" msgstr "" -"Sisäänrakennettuja skriptejä voi muokata ainoastaan kun Scene, johon ne " +"Sisäänrakennettuja skriptejä voi muokata ainoastaan, kun skene, johon ne " "kuuluvat, on ladattu" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Vain tiedostojärjestelmän resursseja voi raahata ja pudottaa." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" msgstr "Poimi väri" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Case" -msgstr "Muunnetaan kuvia" +msgstr "Muunna aakkoslaji" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4952,7 +4806,7 @@ msgstr "Pienet kirjaimet" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Isot alkukirjaimet" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4971,9 +4825,8 @@ msgid "Select All" msgstr "Valitse kaikki" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Poista piste" +msgstr "Poista rivi" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -4988,9 +4841,8 @@ msgid "Toggle Comment" msgstr "Näytä/Piilota kommentit" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Avaa rivi" +msgstr "Laskosta tai avaa rivi" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -5010,7 +4862,7 @@ msgstr "Täydennä symbooli" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "" +msgstr "Poista välilyönnit lopusta" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" @@ -5027,7 +4879,7 @@ msgstr "Automaattinen sisennys" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "" +msgstr "Aseta tai poista breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" @@ -5042,106 +4894,104 @@ msgid "Goto Previous Breakpoint" msgstr "Mene edelliseen breakpointiin" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Uppercase" -msgstr "Muunna..." +msgstr "Muunna isoiksi kirjaimiksi" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Lowercase" -msgstr "Muunna..." +msgstr "Muunna pieniksi kirjaimiksi" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Etsi edellinen" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Korvaa..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Mene funktioon..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Mene riville..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "Asiayhteydellinen ohje" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Sävytin" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" -msgstr "" +msgstr "Muuta skalaarivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Constant" -msgstr "" +msgstr "Muuta vektorivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Constant" -msgstr "" +msgstr "Muuta RGB-värivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Operator" -msgstr "" +msgstr "Muuta skalaarioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Operator" -msgstr "" +msgstr "Muuta vektorioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" -msgstr "" +msgstr "Muuta vektori- ja skalaarioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" -msgstr "" +msgstr "Muuta RGB-värioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "" +msgstr "Vain kierto" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" -msgstr "" +msgstr "Muuta skalaarifunktiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Muuta vektorifunktiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Muuta skalaariuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Muuta vektoriuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Muuta RGB-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Muuta oletusarvoa" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" -msgstr "" +msgstr "Muuta XForm-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Texture Uniform" -msgstr "" +msgstr "Muuta tekstuuriuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Cubemap Uniform" -msgstr "" +msgstr "Muuta Cubemap-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" @@ -5149,15 +4999,15 @@ msgstr "Vaihda kommenttia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" -msgstr "" +msgstr "Lisää tai poista väriluiskalta" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "Lisää tai poista käyräkartalta" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" -msgstr "" +msgstr "Muokkaa käyräkarttaa" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Input Name" @@ -5165,39 +5015,39 @@ msgstr "Vaihda syötteen nimi" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "" +msgstr "Yhdistä graafin solmut" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "" +msgstr "Erota graafin solmut" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "" +msgstr "Poista sävytingraafin solmu" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "" +msgstr "Siirrä sävytingraafin solmua" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" -msgstr "" +msgstr "Kahdenna graafin solmut(t)" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "" +msgstr "Poista sävytingraafin solmuja" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "" +msgstr "Virhe: syklinen kytkentä" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "Virhe: syöteliitännät puuttuvat" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" -msgstr "" +msgstr "Lisää sävytingraafin solmu" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5213,29 +5063,27 @@ msgstr "Muunnos keskeytetty." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "X-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "Y-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "Z-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Näkymätason muunnos." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " -msgstr "Skaalaus:" +msgstr "Skaalataan: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Siirtymä" +msgstr "Siirretään: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -5243,7 +5091,7 @@ msgstr "Kierto %s astetta." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "" +msgstr "Animaation avainnus on pois päältä (avainta ei lisätty)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." @@ -5251,35 +5099,31 @@ msgstr "Animaatioavain lisätty." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Objekteja piirretty" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" -msgstr "Päivitä muutokset" +msgstr "Materiaalimuutokset" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Päivitä muutokset" +msgstr "Sävytinmuutokset" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "Päivitä muutokset" +msgstr "Pintamuutokset" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "" +msgstr "Piirtokutsuja" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" -msgstr "Ominaisuudet:" +msgstr "Kärkipisteet" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -5322,9 +5166,8 @@ msgid "Rear View." msgstr "Takanäkymä." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear" -msgstr "Taka/perä" +msgstr "Taka" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" @@ -5336,11 +5179,11 @@ msgstr "Asia kunnossa :(" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Isäntää, jonka alle ilmentymä luodaan, ei ole valittu." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "Tämä toiminto vaatii yhden valitun noden." +msgstr "Tämä toiminto vaatii yhden valitun solmun." #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -5352,85 +5195,75 @@ msgstr "Näytä rautalankamalli" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Näytä ylipiirto" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Display Unshaded" -msgstr "Näytä varjoton" +msgstr "Näytä sävyttämätön" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Ympäristö" +msgstr "Näytä ympäristö" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" -msgstr "Näytä ruudukko" +msgstr "Näytä muokkaimet" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" msgstr "Näytä tiedot" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr " Tiedostot" +msgstr "Näytä FPS" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Half Resolution" -msgstr "Skaalaa valintaa" +msgstr "Puolikas näyttötarkkuus" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Äänikuuntelija" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Ota käyttöön" +msgstr "Doppler käytössä" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "Liiku vasemmalle" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "Liiku oikealle" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Mene eteenpäin" +msgstr "Liiku eteenpäin" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Taaksepäin" +msgstr "Liiku taaksepäin" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "Liiku ylös" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Rulla alas." +msgstr "Liiku alas" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Liikkumisen nopeussäädin" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "XForm-ikkuna" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Valitse tila" +msgstr "Valintatila (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -5438,6 +5271,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Vedä: Kierrä\n" +"Alt + Vedä: Siirrä\n" +"Alt + Hiiren oikea painike: Syvyyslistan valinta" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5456,14 +5292,12 @@ msgid "Local Coords" msgstr "Paikalliset koordinaatit" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Local Space Mode (%s)" -msgstr "Skaalaustila (R)" +msgstr "Paikallisavaruuden tila (%s)" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Mode (%s)" -msgstr "Tarttumisen tila:" +msgstr "Tarttumisen tila (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -5510,41 +5344,32 @@ msgid "Align Selection With View" msgstr "Kohdista valinta näkymään" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Valitse" +msgstr "Valintatyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "Siirrä" +msgstr "Siirtotyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Kiertotyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "Skaalaus:" +msgstr "Skaalaustyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" -msgstr "Siirry koko näytön tilaan" +msgstr "Kytke liikkuminen päälle/pois" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "Muunna" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Määrittele tarttuminen..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "" +msgid "Transform Dialog..." +msgstr "Muunnosikkuna..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5585,7 +5410,7 @@ msgstr "Asetukset" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" -msgstr "" +msgstr "Luurankomuokkaimen näkyvyys" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -5613,19 +5438,19 @@ msgstr "Näkökentän perspektiivi (ast.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "Minimi etäisyys:" +msgstr "Pienin etäisyys:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "Maksimi etäisyys:" +msgstr "Suurin etäisyys:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Muunnoksen muutos" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "Käännä:" +msgstr "Siirrä:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" @@ -5637,7 +5462,7 @@ msgstr "Skaalaa (kuvasuhde):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "Muunnoksen tyyppi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" @@ -5657,7 +5482,7 @@ msgstr "Lisää frame" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "" +msgstr "Resurssileikepöytä on tyhjä tai ei sisällä tekstuuria!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -5688,9 +5513,8 @@ msgid "Speed (FPS):" msgstr "Nopeus (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Loop" -msgstr "Toisto" +msgstr "Toista" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" @@ -5705,33 +5529,28 @@ msgid "Insert Empty (After)" msgstr "Syötä tyhjä (jälkeen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Poista Node(t)" +msgstr "Siirrä (ennen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (After)" -msgstr "Siirry vasemmalle" +msgstr "Siirrä (jälkeen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "SpriteFrames" -msgstr "Pinoa Framet" +msgstr "SpriteFrames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" -msgstr "StyleBox:in esikatselu:" +msgstr "StyleBoxin esikatselu:" #: editor/plugins/style_box_editor_plugin.cpp -#, fuzzy msgid "StyleBox" -msgstr "Tyyli" +msgstr "StyleBox" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "Tekstuurialue" +msgstr "Aseta alueen suorakulmio" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5781,7 +5600,6 @@ msgid "Can't save theme to file:" msgstr "Teemaa ei voi tallentaa tiedostoon:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add All Items" msgstr "Lisää kaikki" @@ -5795,29 +5613,28 @@ msgid "Remove Item" msgstr "Poista" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Poista valitut" +msgstr "Poista kaikki" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All" msgstr "Poista kaikki" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Muokkaa teemaa..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." -msgstr "Teeman muokkaus." +msgstr "Teeman muokkausvalikko." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "Lisää luokka" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Poista luokka" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" @@ -5833,15 +5650,15 @@ msgstr "Luo nykyisestä editorin teemasta" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "Valintaruudun valinta 1" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "Valintaruudun valinta 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Osanen" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -5852,32 +5669,28 @@ msgid "Checked Item" msgstr "Valittu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Lisää" +msgstr "Valintapainike" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Valittu" +msgstr "Valittu valintapainike" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" msgstr "On" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Many" -msgstr "Moni(a)/Monta" +msgstr "Useita" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "Asetukset" +msgstr "Asetuksia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy -msgid "Have,Many,Several,Options!" -msgstr "On,Monia,Useita,Asetuksia" +msgid "Has,Many,Options" +msgstr "On,Useita,Asetuksia" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5916,13 +5729,12 @@ msgid "Theme" msgstr "Teema" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Framen valinta" +msgstr "Tyhjennä valittu alue" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Täytä ruudukko" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -5930,7 +5742,7 @@ msgstr "Viivan piirto" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Suorakaidetäyttö" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -5938,19 +5750,19 @@ msgstr "Täyttö" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" -msgstr "" +msgstr "Tyhjennä ruudukko" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" -msgstr "" +msgstr "Tyhjennä valinta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" -msgstr "Etsi tile" +msgstr "Etsi ruutu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "" +msgstr "Transponoi" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" @@ -5961,13 +5773,12 @@ msgid "Mirror Y" msgstr "Peilaa Y" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Paint Tile" -msgstr "Poimi tile" +msgstr "Maalaa ruutu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Poimi tile" +msgstr "Poimi ruutu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" @@ -5987,7 +5798,7 @@ msgstr "Käännä 270 astetta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" -msgstr "Tileä ei löytynyt:" +msgstr "Ruutua ei löytynyt:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" @@ -6002,9 +5813,8 @@ msgid "Merge from scene?" msgstr "Yhdistä skenestä?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Set" -msgstr "Vie tileset" +msgstr "Ruutuvalikoima" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6012,37 +5822,39 @@ msgstr "Luo skenestä" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Yhdistä skenestä" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" msgstr "Virhe" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Autotiles" -msgstr "Jaa automaattisesti" +msgstr "Automaattiruudutus" #: 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 "" +"Valitse aliruutu, jota käytetään ikonina ja myös virheellisten " +"automaattiruudutusten ilmaisemiseen." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" +"Hiiren vasen: aseta bitti päälle.\n" +"Hiiren oikea: aseta bitti pois päältä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "Tallenna tällä hetkellä muokattu resurssi." +msgstr "Valitse muokattavana oleva aliruutu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "" +msgstr "Valitse aliruutu muuttaaksesi sen tärkeyttä." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" @@ -6054,7 +5866,7 @@ msgstr "Suoritettava" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" -msgstr "" +msgstr "Poista päivitys '%s' listasta?" #: editor/project_export.cpp msgid "Delete preset '%s'?" @@ -6062,14 +5874,14 @@ msgstr "Poista esiasetus '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " -msgstr "" +msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia: " #: editor/project_export.cpp msgid "Presets" msgstr "Esiasetukset" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Lisää..." #: editor/project_export.cpp @@ -6082,7 +5894,7 @@ msgstr "Vie kaikki projektin resurssit" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "Vie valitut Scenet (ja riippuvuudet)" +msgstr "Vie valitut skenet (ja riippuvuudet)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" @@ -6112,25 +5924,23 @@ msgstr "" #: editor/project_export.cpp msgid "Patches" -msgstr "" +msgstr "Päivitykset" #: editor/project_export.cpp msgid "Make Patch" -msgstr "Tee patchi" +msgstr "Luo päivitys" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Tekstuuri" +msgstr "Ominaisuudet" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Mukautettu (pilkulla erotettu):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Metodilista:" +msgstr "Ominaisuuslista:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6142,7 +5952,7 @@ msgstr "Tälle alustalle ei löytynyt vientipohjia:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "" +msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia:" #: editor/project_export.cpp msgid "Export With Debug" @@ -6157,22 +5967,24 @@ msgid "Please choose a 'project.godot' file." msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." +msgstr "Ole hyvä ja valitse tyhjä kansio." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Tuotu projekti" #: editor/project_manager.cpp -#, fuzzy +msgid "Invalid Project Name." +msgstr "Virheellinen projektin nimi." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Kansiota ei voitu luoda." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Polusta löytyy jo kansio annetulla nimellä." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6183,21 +5995,20 @@ msgid "Invalid project path (changed anything?)." msgstr "Virheellinen projektin polku (muuttuiko mikään?)." #: editor/project_manager.cpp -#, fuzzy 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." +msgstr "" +"Tiedoston project.godot lataus projektin polusta epäonnistui (virhe %d). Se " +"saattaa puuttua tai olla vioittunut." #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't edit project.godot in project path." -msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." +msgstr "Ei voitu muokata project.godot tiedostoa projektin polussa." #: editor/project_manager.cpp -#, fuzzy msgid "Couldn't create project.godot in project path." -msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." +msgstr "Tiedoston project.godot luonti projektin polkuun epäonnistui." #: editor/project_manager.cpp msgid "The following files failed extraction from package:" @@ -6216,34 +6027,30 @@ msgid "Import Existing Project" msgstr "Tuo olemassaoleva projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Tuo & Avaa" +msgstr "Tuo ja muokkaa" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Luo uusi projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Luo säteilijä/lähetin" +msgstr "Luo ja muokkaa" #: editor/project_manager.cpp msgid "Install Project:" msgstr "Asenna projekti:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Asenna" +msgstr "Asenna ja muokkaa" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Projektin nimi:" #: editor/project_manager.cpp -#, fuzzy msgid "Create folder" msgstr "Luo kansio" @@ -6273,9 +6080,9 @@ msgid "" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"Projektia ei voida suorittaa: pääsceneä ei ole määritetty.\n" -"Ole hyvä ja muokkaa projektia ja aseta pääscene projektin asetuksista " -"\"Application\" -kategoriasta." +"Projektia ei voida suorittaa: pääskeneä ei ole määritetty.\n" +"Ole hyvä ja muokkaa projektia ja aseta pääskene projektin asetuksista " +"\"Application\"-kategoriasta." #: editor/project_manager.cpp msgid "" @@ -6337,14 +6144,12 @@ msgid "Exit" msgstr "Poistu" #: editor/project_manager.cpp -#, fuzzy msgid "Restart Now" -msgstr "Käynnistä uudelleen (s):" +msgstr "Käynnistä uudelleen nyt" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Yhdistä..." +msgstr "Projektia ei voida käynnistää" #: editor/project_manager.cpp msgid "" @@ -6356,7 +6161,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "Näppäin... " +msgstr "Näppäin " #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -6372,9 +6177,11 @@ msgstr "Hiiren painike" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Virheellinen toiminnon nimi. Se ei voi olla tyhjä eikä voi sisältää merkkejä " +"'/', ':', '=', '\\' tai '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6382,11 +6189,11 @@ msgstr "Tapahtuma '%s' on jo olemassa!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "Nimeä syöttötapahtuma uudelleen" +msgstr "Nimeä syötetoiminto uudelleen" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "Lisää syöttötapahtuma" +msgstr "Lisää syötetoiminnon tapahtuma" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Shift+" @@ -6401,7 +6208,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Paina näppäintä..." #: editor/project_settings_editor.cpp @@ -6457,18 +6264,16 @@ msgid "Joypad Button Index:" msgstr "Ohjaimen painikkeen indeksi:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Tyhjennä syöttötapahtuma" +msgstr "Tyhjennä syötetoiminto" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "Tyhjennä syöttötapahtuma" +msgstr "Tyhjennä syötetoiminnon tapahtuma" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Event" -msgstr "Lisää tyhjä" +msgstr "Lisää tapahtuma" #: editor/project_settings_editor.cpp msgid "Device" @@ -6504,7 +6309,7 @@ msgstr "Lisää yleinen ominaisuus" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "Valitse asetus ensin!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -6512,12 +6317,11 @@ msgstr "Ominaisuutta '%s' ei löytynyt." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "Asetus '%s' on sisäinen, eikä sitä voi poistaa." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Poista syöte" +msgstr "Poista kohde" #: editor/project_settings_editor.cpp msgid "Already existing" @@ -6525,7 +6329,7 @@ msgstr "On jo olemassa" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "Lisää syöttötapahtuma" +msgstr "Lisää syötetapahtuma" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6537,7 +6341,7 @@ msgstr "Asetukset tallennettu onnistuneesti." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Ominaisuuden ohitus" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6549,53 +6353,51 @@ msgstr "Poista käännös" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Lisää korvaavuuspolku" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Lisää resurssin korvaavuus" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Vaihda resurssin korvaavuuskieli" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Poista resurssin korvaavuus" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Poista resurssin korvaavuusvalinta" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Muuta kameran kokoa" +msgstr "Vaihdettu kielisuodatin" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "" +msgstr "Vaihdettu kielisuodattimen tila" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Project Settings (project.godot)" -msgstr "Projektin asetukset" +msgstr "Projektin asetukset (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Yleinen" +msgstr "Yleistä" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "Ominaisuus:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "" +msgid "Override For..." +msgstr "Ohita alustalle..." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Syötekartta" #: editor/project_settings_editor.cpp msgid "Action:" @@ -6623,7 +6425,7 @@ msgstr "Käännökset:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "" +msgstr "Korvaavuudet" #: editor/project_settings_editor.cpp msgid "Resources:" @@ -6631,11 +6433,11 @@ msgstr "Resurssit:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Korvaavuudet kielikohtaisesti:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Kieli" +msgstr "Kielialue" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -6659,7 +6461,7 @@ msgstr "Kielet:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "Lataa automaattisesti" +msgstr "Automaattilataus" #: editor/property_editor.cpp msgid "Pick a Viewport" @@ -6667,40 +6469,39 @@ msgstr "Valitse näyttöruutu" #: editor/property_editor.cpp msgid "Ease In" -msgstr "" +msgstr "Kiihdytä alussa" #: editor/property_editor.cpp msgid "Ease Out" -msgstr "" +msgstr "Hidasta lopussa" #: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "Nolla" #: editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "Helpotus sisään-ulos" #: editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "Helpotus ulos-sisään" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Tiedosto..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Hakemisto..." #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "Aseta" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Valitse Node" +msgstr "Valitse solmu" #: editor/property_editor.cpp msgid "New Script" @@ -6711,9 +6512,8 @@ msgid "New %s" msgstr "Uusi %s" #: editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "Tee luut" +msgstr "Tee yksilölliseksi" #: editor/property_editor.cpp msgid "Show in File System" @@ -6728,26 +6528,24 @@ msgid "Error loading file: Not a resource!" msgstr "Virhe ladattaessa tiedostoa: Ei ole resurssi!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Valitse tuotava(t) node(t)" +msgstr "Valittu solmu ei ole Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "Poimi node" +msgstr "Poimi solmu" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bitti %d, arvo %d." #: editor/property_editor.cpp msgid "On" msgstr "Päällä" #: editor/property_editor.cpp -#, fuzzy msgid "[Empty]" -msgstr "Lisää tyhjä" +msgstr "[Tyhjä]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" @@ -6771,15 +6569,15 @@ msgstr "Valitse metodi" #: editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" -msgstr "" +msgstr "PVRTC-työkalun suoritus ei onnistunut:" #: editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" -msgstr "" +msgstr "Muunnettua kuva ei voitu ladata takaisin PVRTC-työkalulla:" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "Vaihda noden isäntää" +msgstr "Vaihda solmun isäntää" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" @@ -6787,7 +6585,7 @@ msgstr "Valitse uusi isäntä:" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Pidä globaali muunnos" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" @@ -6795,7 +6593,7 @@ msgstr "Uusi isäntä" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Käynnistystila:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -6811,74 +6609,76 @@ msgstr "Pääskenen argumentit:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "Scenen suorittamisasetukset" +msgstr "Skenen suorittamisasetukset" #: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp #: scene/gui/dialogs.cpp msgid "OK" -msgstr "" +msgstr "OK" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "" +msgstr "Solmua, jonka alle skenen ilmentymä luodaan, ei ole valittu." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Virhe ladattaessa skeneä paikasta %s" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Skenestä '%s' ei voida luoda ilmentymää, koska nykyinen skene on olemassa " +"jossakin sen solmuista." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "" +msgstr "Luo ilmentymä skenestä tai skeneistä" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +msgstr "Tätä toimenpidettä ei voi tehdä puun juurelle." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Siirrä solmu isännän alle" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Siirrä solmut isännän alle" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "Monista node(t)" +msgstr "Kahdenna solmu(t)" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "Poista Node(t)?" +msgstr "Poista solmu(t)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Ei voi tehdä juurisolmulle." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Tätä toimintoa ei voi tehdä skenejen ilmentymille." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Tallenna uusi scene nimellä..." +msgid "Save New Scene As..." +msgstr "Tallenna uusi skene nimellä..." #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "Muokattavat alisolmut" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Lataa paikanpitäjäksi" #: editor/scene_tree_dock.cpp msgid "Discard Instancing" -msgstr "" +msgstr "Hylkää ilmentymä" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" @@ -6886,50 +6686,51 @@ msgstr "Käy järkeen!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "Ei voida käyttää ulkopuolisen scenen nodeja!" +msgstr "Ei voida käyttää ulkopuolisen skenen solmuja!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "Ei voida käyttää nodeja, jotka periytyvät nykyisestä scenestä!" +msgstr "Ei voida käyttää solmuja, joista nykyinen skene periytyy!" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Poista Node(t)" +msgstr "Poista solmu(t)" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Skeneä ei voitu tallentaa. Mahdollisia riippuvuuksia (ilmentymiä) ei voida " +"toteuttaa." #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "Virhe tallennettaessa sceneä." +msgstr "Virhe tallennettaessa skeneä." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Virhe kahdennettaessa skeneä sen tallentamiseksi." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" -msgstr "Resurssit" +msgstr "Aliresurssit" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Poista perintä" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Poista Node(t)" +msgstr "Poista solmu(t)" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Lisää lapsinode" +msgstr "Lisää alisolmu" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Luo aliskenen ilmentymä" #: editor/scene_tree_dock.cpp msgid "Change Type" @@ -6945,15 +6746,15 @@ msgstr "Tyhjennä skripti" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Yhdistä scenestä" +msgstr "Yhdistä skenestä" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Tallenna haara skenenä" #: editor/scene_tree_dock.cpp msgid "Copy Node Path" -msgstr "Kopioi Noden polku" +msgstr "Kopioi solmun polku" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -6961,40 +6762,39 @@ msgstr "Poista (ei varmistusta)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "Lisää/Luo uusi Node" +msgstr "Lisää/Luo uusi solmu" #: editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Luo skenetiedostosta ilmentymän solmuksi. Luo periytetyn skenen jos " +"juurisolmua ei ole olemassa." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Suodattimet" +msgstr "Suodata solmuja" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "Liitä uusi tai olemassa oleva skripti valitulle solmulle." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "Poista skripti valitulta solmulta." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "Poista" +msgstr "Etäinen" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Local" -msgstr "Skaalaus:" +msgstr "Paikallinen" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Poistetaanko perintä? (Ei voi perua!)" #: editor/scene_tree_dock.cpp msgid "Clear!" @@ -7002,84 +6802,91 @@ msgstr "Tyhjennä!" #: editor/scene_tree_editor.cpp msgid "Toggle Spatial Visible" -msgstr "" +msgstr "Aseta Spatial näkyvyys päälle/pois" #: editor/scene_tree_editor.cpp msgid "Toggle CanvasItem Visible" -msgstr "" +msgstr "Aseta CanvasItem näkyvyys päälle/pois" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Solmun konfiguroinnin varoitus:" #: editor/scene_tree_editor.cpp msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"Solmulla on liitäntöjä ja ryhmiä\n" +"Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp msgid "" "Node has connections.\n" "Click to show signals dock." msgstr "" +"Solmulla on liitäntöjä.\n" +"Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp msgid "" "Node is in group(s).\n" "Click to show groups dock." msgstr "" +"Solmu kuuluu ryhmään.\n" +"Napsauta näyttääksesi ryhmätelakan." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" -msgstr "Seuraava skripti" +msgstr "Avaa skripti" #: editor/scene_tree_editor.cpp msgid "" "Node is locked.\n" "Click to unlock" msgstr "" +"Solmu on lukittu.\n" +"Napsauta lukituksen avaamiseksi" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"Alisolmut eivät ole valittavissa.\n" +"Napsauta niiden tekemiseksi valittavaksi" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Aseta näkyvyys" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "" +msgstr "Virheellinen solmun nimi, seuraavat merkit eivät ole sallittuja:" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "Nimeä Node uudelleen" +msgstr "Nimeä solmu uudelleen" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Skenepuu (solmut):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Solmun konfigurointivaroitus!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "Valitse Node" +msgstr "Valitse solmu" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Virhe ladattaessa kuvaa:" +msgstr "Virhe ladattaessa mallia '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Ei voitu luoda skriptiä tiedostojärjestelmään." +msgstr "Virhe - Ei voitu luoda skriptiä tiedostojärjestelmään." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -7087,7 +6894,7 @@ msgstr "Virhe ladattaessa skripti %s:stä" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "Ei mitään" #: editor/script_create_dialog.cpp msgid "Path is empty" @@ -7099,16 +6906,15 @@ msgstr "Polku ei ole paikallinen" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Virheellinen kantapolku" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" msgstr "Samanniminen hakemisto on jo olemassa" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Tiedosto on jo olemassa, korvaa?" +msgstr "Tiedosto on jo olemassa, käytetään uudelleen" #: editor/script_create_dialog.cpp msgid "Invalid extension" @@ -7116,12 +6922,11 @@ msgstr "Virheellinen laajennus" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Valittu väärä tiedostopääte" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Virheellinen polku." +msgstr "Virheellinen polku" #: editor/script_create_dialog.cpp msgid "Invalid class name" @@ -7129,62 +6934,55 @@ msgstr "Virheellinen luokan nimi" #: editor/script_create_dialog.cpp msgid "Invalid inherited parent name or path" -msgstr "" +msgstr "Virheellinen peritty isännän nimi tai polku" #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Skripti kelpaa" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Sallittu: a-z, A-Z, 0-9 ja _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Sisäänrakennettu skripti (skenetiedostoon)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Luo uusi skripti" +msgstr "Luo uusi skriptitiedosto" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load existing script file" -msgstr "Lataa olemassaoleva skripti" +msgstr "Lataa olemassaoleva skriptitiedosto" #: editor/script_create_dialog.cpp msgid "Language" msgstr "Kieli" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Perii:" +msgstr "Perii" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Luokan nimi:" +msgstr "Luokan nimi" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Poista malli" +msgstr "Malli" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script" msgstr "Sisäänrakennettu skripti" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "Liitä Noden skripti" +msgstr "Liitä solmun skripti" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Poista" +msgstr "Etäinen " #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7208,7 +7006,7 @@ msgstr "Funktio:" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgstr "Valitse yksi tai useampi kohde listasta näyttääksesi graafin." #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" @@ -7216,20 +7014,19 @@ msgstr "Virheet" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" -msgstr "Lapsiprosessi yhdistetty" +msgstr "Aliprosessi yhdistetty" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Lataa virheet" +msgstr "Kopiointivirhe" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "Tarkastele edellistä instanssia" +msgstr "Tarkastele edellistä ilmentymää" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "Tarkastele seuraavaa instanssia" +msgstr "Tarkastele seuraavaa ilmentymää" #: editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -7245,15 +7042,15 @@ msgstr "Virheet:" #: editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" -msgstr "" +msgstr "Metodipino (jos soveltuva):" #: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profiloija" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Monitoroija" #: editor/script_editor_debugger.cpp msgid "Value" @@ -7261,11 +7058,11 @@ msgstr "Arvo" #: editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Monitoroijat" #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Lista näyttömuistin käytöstä resurssikohtaisesti:" #: editor/script_editor_debugger.cpp msgid "Total:" @@ -7273,11 +7070,11 @@ msgstr "Yhteensä:" #: editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "" +msgstr "Näyttömuisti" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Resurssipolku" #: editor/script_editor_debugger.cpp msgid "Type" @@ -7293,23 +7090,23 @@ msgstr "Käyttö" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Sekalaista" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Napsautettu kontrolli:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Napsautetun kontrollin tyyppi:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Juuren suora muokkaus:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "Aseta puusta" #: editor/settings_config_dialog.cpp msgid "Shortcuts" @@ -7317,7 +7114,7 @@ msgstr "Pikakuvakkeet" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Sidonta" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -7325,7 +7122,7 @@ msgstr "Muuta valon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Muuta AudioStreamPlayer3D solmun suuntausta" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7337,19 +7134,19 @@ msgstr "Muuta kameran kokoa" #: editor/spatial_editor_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "Muuta pallon sädettä" +msgstr "Muuta pallomuodon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "" +msgstr "Muuta laatikkomuodon ulottuvuuksia" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Muuta kapselimuodon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Muuta kapselimuodon korkeutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" @@ -7357,32 +7154,31 @@ msgstr "Vaihda säteen muodon pituutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier Extents" -msgstr "" +msgstr "Muuta ilmoittajan kattavuutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Muuta partikkelien AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "" +msgstr "Muuta Proben ulottuvuuksia" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Valitse dynaaminen kirjasto tälle kohteelle" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Valitse kirjaston riippuvuudet tälle kohteelle" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Poista käyrän piste" +msgstr "Poista nykyinen kohde" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Kaksoisnapsauta luodaksesi uuden kohteen" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -7393,28 +7189,24 @@ msgid "Platform" msgstr "Alusta" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dynamic Library" -msgstr "Vie kirjasto" +msgstr "Dynaaminen kirjasto" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Lisää arkkitehtuurikohde" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "GDNativeLibrary" -msgstr "Vie kirjasto" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Library" -msgstr "Vie kirjasto" +msgstr "Kirjasto" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Status" -msgstr "Tila:" +msgstr "Tila" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " @@ -7422,113 +7214,110 @@ msgstr "Kirjastot: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" +"Virheellinen tyyppiargumentti convert() metodille, käytä TYPE_* vakioita." #: 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 "Ei tarpeeksi tavuja tavujen purkamiseksi tai virheellinen formaatti." #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "" +msgstr "askeleen argumentti on nolla!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "Ei ole skripti, jolla on ilmentymä" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Ei pohjaudu skriptiin" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a resource file" -msgstr "" +msgstr "Ei pohjaudu resurssitiedostoon" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Virheellinen ilmentymän sanakirjaformaatti (puuttuu @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" +"Virheellinen ilmentymän sanakirjaformaatti (ei voida ladata skriptiä polusta " +"@path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" msgstr "" +"Virheellinen ilmentymän sanakirjaformaatti (virheellinen skripti kohdassa " +"@path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "" +msgstr "Virheellinen ilmentymän sanakirja (virheelliset aliluokat)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objektille ei voida määrittää pituutta." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "Seuraava välilehti" +msgstr "Seuraava taso" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Edellinen välilehti" +msgstr "Edellinen taso" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "Taso:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "" +msgstr "Seuraava kerros" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Floor" -msgstr "Edellinen välilehti" +msgstr "Edellinen kerros" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" -msgstr "" +msgstr "Kerros:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Poista valitut" +msgstr "Poista valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Monista valinta" +msgstr "Kahdenna valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Grid Map" msgstr "Ruudukko" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Huippunäkymä" +msgstr "Tartu näkymään" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Poistettu käytöstä" +msgstr "Leikkaus pois käytöstä" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Leikkaa yläpuolelta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Leikkaa alapuolelta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" @@ -7543,166 +7332,156 @@ msgid "Edit Z Axis" msgstr "Muokkaa Z-akselia" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Kierrä kohdistinta X-akselilla" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Kierrä kohdistinta Y-akselilla" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Kierrä kohdistinta Z-akselilla" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Kierrä kohdistinta X-akselilla takaperin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Kierrä kohdistinta Y-akselilla takaperin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Kierrä kohdistinta Z-akselilla takaperin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Poista kohdistimen kierto" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Luo uusi" +msgstr "Luo alue" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Luo uusi projekti" +msgstr "Luo ulkoliitin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Erase Area" -msgstr "" +msgstr "Tyhjennä alue" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Valinta keskikohtaan" +msgstr "Tyhjennä valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Näyttöruudun asetukset" +msgstr "Ruudukon asetukset" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Poimi tile" +msgstr "Poimintaetäisyys:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Luokan nimi ei voi olla varattu avainsana" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "" +msgstr "Luodaan ratkaisua..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." msgstr "Luodaan C# projekti..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." -msgstr "Ääriviivoja ei voitu luoda!" +msgstr "Ratkaisun luonti epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." -msgstr "Resurssin lataaminen epäonnistui." +msgstr "Ratkaisun tallennus epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Done" -msgstr "Valmis!" +msgstr "Valmis" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create C# project." -msgstr "Resurssin lataaminen epäonnistui." +msgstr "C# projektin luonti epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "Lisätietoja C# tuesta" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Create C# solution" -msgstr "Luo ääriviivat" +msgstr "Luo C# ratkaisu" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" -msgstr "" +msgstr "Käännökset" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Build Project" -msgstr "Uusi projekti" +msgstr "Käännä projekti" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Warnings" -msgstr "Varoitus" +msgstr "Varoitukset" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "Sisemmän poikkeuksen kutsupinon loppu" #: modules/visual_script/visual_script.cpp msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" +"Solmu väisti ilman työmuistia, ole hyvä ja lue dokumentaatiosta kuinka " +"väistö (yield) on tehtävä!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" +"Solmu väisti (yield), mutta ei palauttanut funktion tilaa ensimmäiselle " +"työmuistille." #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" +"Paluuarvo täytyy sijoittaa työmuistin ensimmäiselle elementille! Ole hyvä ja " +"korjaa solmusi." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "" +msgstr "Solmu palautti virheellisen jakson tulosteen: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "" +msgstr "Jaksobitti löytyi, mutta solmua ei löydy pinosta, raportoi bugi!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " -msgstr "" +msgstr "Pinon ylivuoto pinosyvyydellä: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "" +msgstr "Muuta signaalin argumentit" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Vaihda taulukon arvon tyyppiä" +msgstr "Vaihda argumentin tyyppiä" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" @@ -7710,12 +7489,11 @@ msgstr "Vaihda argumentin nimi" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "" +msgstr "Aseta muuttujan oletusarvo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Muokkaa muuttujaa:" +msgstr "Aseta muuttujan tyyppi" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7763,76 +7541,76 @@ msgstr "Vaihda lauseketta" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "Lisää Node" +msgstr "Lisää solmu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Poista virheelliset avaimet" +msgstr "Poista VisualScript solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "" +msgstr "Kahdenna VisualScript solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" +"Pidä %s pohjassa pudottaaksesi Getterin. Pidä Shift pohjassa pudottaaksesi " +"yleisen tunnisteen." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" +"Pidä Ctrl pohjassa pudottaaksesi Getterin. Pidä Shift pohjassa pudottaaksesi " +"yleisen tunnisteen." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "" +msgstr "Pidä %s pohjassa pudottaaksesi yksinkertaisen viittauksen solmuun." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "" +msgstr "Pidä Ctrl pohjassa pudottaaksesi yksinkertaisen viittauksen solmuun." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "" +msgstr "Pidä %s pohjassa pudottaaksesi muuttujan asettajan (Variable Setter)." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." msgstr "" +"Pidä Ctrl pohjassa pudottaaksesi muuttujan asettajan (Variable Setter)." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "" +msgstr "Lisää esiladattu solmu" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "Lisää Nodet puusta" +msgstr "Lisää solmut puusta" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "" +msgstr "Lisää palauttajaominaisuus" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "" +msgstr "Lisää asettajaominaisuus" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Muuta tyyppiä" +msgstr "Muuta kantatyyppiä" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Poista Node(t)" +msgstr "Siirrä solmu(t)" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Poista muuttuja" +msgstr "Poista VisualScript solmu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Yhdistä Nodeen:" +msgstr "Kytke solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7840,19 +7618,19 @@ msgstr "Ehtolause" #: modules/visual_script/visual_script_editor.cpp msgid "Sequence" -msgstr "" +msgstr "Sarja" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" -msgstr "" +msgstr "Valinta (Switch)" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" -msgstr "" +msgstr "Iteraattori" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "" +msgstr "Kun (While)" #: modules/visual_script/visual_script_editor.cpp msgid "Return" @@ -7864,48 +7642,43 @@ msgstr "Kutsu" #: modules/visual_script/visual_script_editor.cpp msgid "Get" -msgstr "" +msgstr "Get" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "" +msgstr "Skriptillä on jo funktio '%s'" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Input Value" -msgstr "Vaihda syötteen nimi" +msgstr "Vaihda syötteen arvo" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Ei voida kopioida funktiosolmua." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Resurssien leikepöytä on tyhjä!" +msgstr "Leikepöytä on tyhjä!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Liitä Nodet" +msgstr "Liitä VisualScript solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Poista funktio" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Muokkaa muuttujaa:" +msgstr "Muokkaa muuttujaa" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Poista muuttuja" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Muokataan signaalia:" +msgstr "Muokkaa signaalia" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7921,19 +7694,19 @@ msgstr "Muokataan signaalia:" #: modules/visual_script/visual_script_editor.cpp msgid "Base Type:" -msgstr "" +msgstr "Kantatyyppi:" #: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" -msgstr "Saatavilla olevat Nodet:" +msgstr "Saatavilla olevat solmut:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" -msgstr "" +msgstr "Valitse tai luo funktio graafin muokkaamiseksi" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal Arguments:" -msgstr "" +msgstr "Muokkaa signaalin argumentteja:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" @@ -7945,51 +7718,51 @@ msgstr "Poista valitut" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Etsi Noden tyyppi" +msgstr "Etsi solmun tyyppi" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "Kopioi Nodet" +msgstr "Kopioi solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "Leikkaa Nodet" +msgstr "Leikkaa solmut" #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "Liitä Nodet" +msgstr "Liitä solmut" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " -msgstr "" +msgstr "Syötetyyppi ei ole iteroitavissa: " #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" -msgstr "" +msgstr "Iteraattori muuttui epäkelvoksi" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid: " -msgstr "" +msgstr "Iteraattori muuttui epäkelvoksi: " #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name." -msgstr "" +msgstr "Virheellinen osoitinominaisuuden nimi." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "" +msgstr "Kantaobjekti ei ole solmu!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "Polku ei vie Nodeen!" +msgstr "Polku ei johda solmuun!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "" +msgstr "Virheellinen osoitinominaisuuden nimi '%s' solmussa %s." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr "" +msgstr ": Virheellinen argumentti tyyppiä: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " @@ -7997,21 +7770,24 @@ msgstr ": Virheelliset argumentit: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "" +msgstr "VariableGet ei löytynyt skriptistä: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "" +msgstr "VariableSet ei löytynyt skriptistä: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." msgstr "" +"Mukautetulla solmulla ei ole _step() metodia, graafia ei voida käsitellä." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" +"Virheellinen paluuarvo _step() metodilta, täytyy olla kokonaisluku (seq out) " +"tai merkkijono (virhe)." #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8022,46 +7798,44 @@ msgid "Run exported HTML in the system's default browser." msgstr "Suorita viety HTML järjestelmän oletusselaimessa." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Ei voitu kirjoittaa tiedostoa:\n" +msgstr "Ei voitu kirjoittaa tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Kansiota ei voitu luoda." +msgstr "Mallin avaus vientiin epäonnistui:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Hallitse vietäviä Templateja" +msgstr "Virheellinen vientimalli:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Ei voitu lukea mukautettua HTML tulkkia:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Ei voitu lukea käynnistyskuvan tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Käytetään oletuskäynnistyskuvaa." #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" +"SpriteFrames resurssi on luotava tai asetettava 'Frames' ominaisuudelle, " +"jotta AnimatedSprite voi näyttää ruutuja." #: 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 "" +"Vain yksi CanvasModulate on sallittu per skene (tai per skeneilmentymien " +"joukko). Ensimmäisenä luotu toimii ja loput jätetään huomioimatta." #: scene/2d/collision_object_2d.cpp msgid "" @@ -8069,6 +7843,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Tämän solmun alaisuudessa ei ole muotoja, joten se ei voi olla " +"vuorovaikutuksessa avaruuden kanssa.\n" +"Harkitse CollisionShape2D tai CollisionPolygon2D solmun lisäämistä " +"alisolmuksi muodon määrittämiseksi." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8076,10 +7854,13 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D toimii törmäysmuotona ainoastaan CollisionObject2D " +"solmusta perityille solmuille. Käytä sitä ainoastaan Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, jne. alla antaaksesi niille muodon." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "Tyhjällä CollisionPolygon2D:llä ei ole vaikutusta törmäyksessä." +msgstr "Tyhjällä CollisionPolygon2D solmulla ei ole vaikutusta törmäyksessä." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -8087,56 +7868,73 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionShape2D toimii törmäysmuotona ainoastaan CollisionObject2D solmusta " +"perityille solmuille. Käytä sitä ainoastaan Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, jne. alla antaaksesi niille muodon." #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" +"CollisionShape2D solmulla täytyy olla muoto, jotta se toimisi. Ole hyvä ja " +"luo sille muotoresurssi!" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." msgstr "" +"Tekstuuri, jolta löytyy valon muoto, täytyy antaa 'texture' ominaisuudella." #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" +"Toimimiseksi tälle peittäjälle on asetettava (tai piirrettävä) peittävä " +"monikulmio." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" msgstr "" +"Peittävä monikulmio tälle peittäjälle on tyhjä. Ole hyvä ja piirrä " +"monikulmio!" #: 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 "" +"Tälle solmulle on asetettava tai luotava NavigationPolygon resurssi, jotta " +"se toimisi. Ole hyvä ja aseta ominaisuus tai piirrä monikulmio." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" +"NavigationPolygonInstance solmun täytyy olla Navigation2D solmun " +"alaisuudessa. Se tarjoaa vain navigointidataa." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" +"ParallaxLayer solmu toimii ainoastaan, jos se on ParallaxBackground solmun " +"alla." #: 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 "" +"Materiaalia partikkeleiden käsittelemiseksi ei ole määritetty, joten mitään " +"ei tapahdu." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D toimii ainoastaan ollessaan asetettuna Path2D Node:n " -"lapsiolioksi." +"PathFollow2D toimii ainoastaan ollessaan asetettuna Path2D solmun alle." #: scene/2d/physics_body_2d.cpp msgid "" @@ -8144,68 +7942,78 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Fysiikkamoottori ylikirjoittaa RigidBody2D kokomuutokset (hahmo- tai " +"jäykkätila) ajon aikana.\n" +"Muuta sen sijaan solmun alla olevia törmäysmuotoja." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "Polku täytyy olla määritetty toimivaan Node2D solmuun toimiakseen." +msgstr "" +"Polkuominaisuuden täytyy osoittaa kelvolliseen Node2D solmuun toimiakseen." #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D toimii parhaiten, kun sitä käytetään suoraan muokatun " +"skenen juuren isäntänä." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera solmun isännän täytyy olla ARVROrigin solmu" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController solmun isännän täytyy olla ARVROrigin solmu" #: 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 "" +"Ohjaimen tunnus ei saa olla 0, tai tämä ohjain ei ole sidottu oikeaan " +"ohjaimeen" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor solmun isännän täytyy olla ARVROrigin solmu" #: 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 "" +"Ankkurin tunnus ei saa olla 0, tai tämä ankkuri ei ole sidottu oikeaan " +"ankkuriin" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin solmu tarvitsee ARVRCamera alisolmun" #: scene/3d/baked_lightmap.cpp msgid "%d%%" -msgstr "" +msgstr "%d%%" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(Aikaa jäljellä: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "" +msgstr "Piirretään meshejä: " #: scene/3d/baked_lightmap.cpp msgid "Plotting Lights:" -msgstr "" +msgstr "Piirretään valoja:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "" +msgstr "Viimeistellään piirto" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " -msgstr "" +msgstr "Valaistaan meshejä: " #: scene/3d/collision_object.cpp msgid "" @@ -8213,6 +8021,10 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon children nodes to define " "its shape." msgstr "" +"Tällä solmulla ei ole alimuotoja, joten se ei voi olla vuorovaikutuksessa " +"avaruuden kanssa.\n" +"Harkitse CollisionShape tai CollisionPolygon solmun lisäämistä sen " +"alisolmuksi määritelläksesi sen muodon." #: scene/3d/collision_polygon.cpp msgid "" @@ -8220,10 +8032,13 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" +"CollisionPolygon solmu antaa ainoastaan törmäysmuodon CollisionObject " +"solmusta periytyville solmuille. Käytä sitä Area, StaticBody, RigidBody, " +"KinematicBody, jne. solmujen alla antaaksesi niille muodon." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "Tyhjällä CollisionPolygon:illa ei ole vaikutusta törmäyksessä." +msgstr "Tyhjällä CollisionPolygon solmulla ei ole vaikutusta törmäyksessä." #: scene/3d/collision_shape.cpp msgid "" @@ -8231,31 +8046,42 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" +"CollisionShape solmu antaa ainoastaan törmäysmuodon CollisionObject solmusta " +"periytyville solmuille. Käytä sitä Area, StaticBody, RigidBody, " +"KinematicBody, jne. solmujen alla antaaksesi niille muodon." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" +"CollisionShape solmulle täytyy antaa muoto, jotta se toimisi. Ole hyvä ja " +"luo sille muotoresurssi!" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "" +msgstr "Piirretään meshejä" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" +"Tälle solmulle täytyy asettaa tai luoda NavigationMesh resurssi, jotta se " +"toimisi." #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" +"NavigationMeshInstance solmun täytyy olla Navigation solmun alaisuudessa. Se " +"tarjoaa vain navigointidataa." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Mitään ei näy, koska mesheille ei ole asetettu piirtopyyhkäisyjä (draw " +"passes)." #: scene/3d/physics_body.cpp msgid "" @@ -8263,42 +8089,53 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Fysiikkamoottori ylikirjoittaa RigidBody kokomuutokset (hahmo- tai " +"jäykkätilassa) ajon aikana.\n" +"Muuta sen sijaan solmun alla olevia törmäysmuotoja." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." -msgstr "" +msgstr "Polkuominaisuuden täytyy osoittaa Spatial solmuun toimiakseen." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment tarvitsee Environment resurssin." #: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +"Vain yksi WorldEnvironment on sallittu per skene (tai per skeneilmentymien " +"joukko)." #: 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 "" +"Tämä WorldEnvironment jätetään huomioimatta. Lisää joko Camera (3D-" +"skeneille) tai aseta tälle ympäristölle Background Mode asetukseksi Canvas " +"(2D-skeneille)." #: 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 "" +"AnimatedSprite3D solmulle täytyy luoda tai asettaa 'Frames' ominaisuudeksi " +"SpriteFrames resurssi ruutujen näyttämiseksi." #: scene/3d/vehicle_body.cpp msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" +"VehicleWheel solmu tarjoaa rengasjärjestelmän VehicleBody solmulle. Ole hyvä " +"ja käytä sitä VehicleBody solmun alla." #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Kääntötila" +msgstr "Raakatila" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" @@ -8313,9 +8150,8 @@ msgid "Please Confirm..." msgstr "Ole hyvä ja vahvista..." #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "Valitse metodi" +msgstr "Valitse tämä kansio" #: scene/gui/popup.cpp msgid "" @@ -8342,13 +8178,12 @@ msgid "(Other)" msgstr "(Muu)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"Projektin asetuksissa määriteltyä oletusympäristöä (Renderöinti -> Näkymä -" -"> Oletusympäristö) ei voitu ladata." +"Projektin asetuksissa määriteltyä oletusympäristöä (Rendering -> " +"Environment -> Default Environment) ei voitu ladata." #: scene/main/viewport.cpp msgid "" @@ -8357,14 +8192,14 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Tätä näyttöruutua ei ole asetettu renderöitäväksi. Jos haluat sen näyttävän " -"sisältöä suoraan näytölle, tee sitä Control:in lapsi, jotta se voi saada " -"koon. Muutoin tee siitä RenderTarget ja aseta sen sisäinen tekstuuri " -"johonkin Nodeen näkyväksi." +"Tätä näyttöikkunaa ei ole asetettu renderöitäväksi. Jos haluat sen näyttävän " +"sisältöä suoraan näytölle, tee sitä Control solmun alisolmu, jotta se voi " +"saada koon. Muutoin tee siitä RenderTarget ja aseta sen sisäinen tekstuuri " +"johonkin solmuun näkyväksi." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." -msgstr "Virhe FreetType:n alustamisessa." +msgstr "Virhe FreeType:n alustamisessa." #: scene/resources/dynamic_font.cpp msgid "Unknown font format." @@ -8378,6 +8213,13 @@ msgstr "Virhe fontin latauksessa." msgid "Invalid font size." msgstr "Virheellinen fonttikoko." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Edellinen välilehti" + +#~ msgid "Next" +#~ msgstr "Seuraava" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Virheellinen tapahtuma (muut käy, paitsi '/' tai ':')." @@ -8408,9 +8250,6 @@ msgstr "Virheellinen fonttikoko." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." -#~ msgid "Next" -#~ msgstr "Seuraava" - #~ msgid "Not found!" #~ msgstr "Ei löytynyt!" @@ -8564,7 +8403,7 @@ msgstr "Virheellinen fonttikoko." #~ msgid "Info" #~ msgstr "Tietoja" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Tuo uudelleen..." #~ msgid "Target path is empty." @@ -8816,13 +8655,13 @@ msgstr "Virheellinen fonttikoko." #~ msgid "Zoom (%):" #~ msgstr "Lähennä (%):" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Luuranko..." #~ msgid "Zoom Reset" #~ msgstr "Palauta lähennys" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Aseta Zoomaus..." #~ msgid "Set a Value" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 56969fe974..ee1d7b2cad 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -2,7 +2,6 @@ # 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. -# # Antoine Carrier <ac.g392@gmail.com>, 2017-2018. # ARocherVj <a.rocher.vj@gmail.com>, 2017. # Arthur Templé <tuturtemple@gmail.com>, 2018. @@ -13,18 +12,23 @@ # finkiki <specialpopol@gmx.fr>, 2016. # Gilles Roudiere <gilles.roudiere@gmail.com>, 2017-2018. # Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2018. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # John Bernier <john.bp@unknit.net>, 2018. -# Kanabenki <lucien.menassol@gmail.com>, 2017. +# Kanabenki <lucien.menassol@gmail.com>, 2017, 2018. # 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. +# Marc-Andre Belisle <belisle.ma@gmail.com>, 2018. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2017. +# Nathan Vallet <nathanvalletmarseille@gmail.com>, 2018. # Nicolas <flaithotw@gmail.com>, 2017. # Nicolas Lehuen <nicolas@lehuen.com>, 2016. # Nobelix <noe.le.cam@laposte.net>, 2017. -# Omicron <tritonic.dev@gmail.com>, 2016, 2018. +# Nocta Senestra <nocta@net-c.com>, 2018. +# Omicron <omicron666.dev@gmail.com>, 2016, 2018. # Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016. +# Philippe Gervaise <blah@malvese.org>, 2018. # Przemyslaw Gasinski <gasinski.przemek@protonmail.ch>, 2017. # rafeu <duchainer@gmail.com>, 2016-2017. # rawida <rawida@tempinbox.com>, 2018. @@ -36,13 +40,12 @@ # 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-05-02 21:48+0000\n" -"Last-Translator: Omicron <omicron666.dev@gmail.com>\n" +"PO-Revision-Date: 2018-06-12 16:38+0000\n" +"Last-Translator: Philippe Gervaise <blah@malvese.org>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -50,7 +53,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -532,7 +535,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Déconnecter « %s » de « %s »" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Connecter…" #: editor/connections_dialog.cpp @@ -858,19 +861,19 @@ msgstr "Ajouter effet" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Renommer bus audio" +msgstr "Renommer le bus audio" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "Modifier le volume audio du bus" +msgstr "Modifier le volume du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Activer/désactiver le mode solo pour le bus audio" +msgstr "Activer/désactiver le mode solo du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Activer/désactiver le mode muet pour le bus audio" +msgstr "Activer/désactiver le mode muet du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" @@ -878,11 +881,11 @@ msgstr "Activer/désactiver le contournement du bus audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Sélectionner l'envoi de tranport audio" +msgstr "Sélectionner l'envoi du bus audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Ajouter effet de tranport audio" +msgstr "Ajouter un effet bus audio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -894,7 +897,7 @@ msgstr "Supprimer l'effet de transport" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Transport audio, glisser-déposer pour réorganiser." +msgstr "Bus audio, glisser-déposer pour réorganiser." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -931,19 +934,19 @@ msgstr "Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "Ajouter un transport audio" +msgstr "Ajouter un bus audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "Le transport maître ne peut pas être supprimé !" +msgstr "Le bus maître ne peut pas être supprimé !" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "Supprimer le transport audio" +msgstr "Supprimer le bus audio" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "Dupliquer le transport audio" +msgstr "Dupliquer le bus audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" @@ -951,19 +954,19 @@ msgstr "Réinitialiser le volume de bus" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Déplacer le transport audio" +msgstr "Déplacer le bus audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Enregistrer l'agencement du transport audio sous.." +msgid "Save Audio Bus Layout As..." +msgstr "Enregistrer la disposition des bus audio sous…" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Emplacement du nouvel agencement.." +msgid "Location for New Layout..." +msgstr "Emplacement du nouvel agencement..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Ouvrir agencement de transport audio" +msgstr "Ouvrir une disposition de bus audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -971,11 +974,11 @@ msgstr "Il n'existe aucun 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "Fichier invalide, pas un agencement de transport audio." +msgstr "Fichier invalide, pas une disposition de bus audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "Ajouter un transport" +msgstr "Ajouter un bus" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." @@ -1100,11 +1103,11 @@ msgid "Updating Scene" msgstr "Mise à jour de la scène" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Stockage des modifications locales…" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Mise à jour de la scène…" #: editor/editor_data.cpp @@ -1173,8 +1176,8 @@ msgid "Show In File Manager" msgstr "Montrer dans le gestionnaire de fichiers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nouveau dossier.." +msgid "New Folder..." +msgstr "Nouveau dossier..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1435,19 +1438,19 @@ msgstr "Effacer la sortie" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "L'export du projet a échoué avec le code erreur %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erreur d'enregistrement de la ressource !" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Enregistrer la ressource sous…" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Je vois…" #: editor/editor_node.cpp @@ -1520,11 +1523,11 @@ msgstr "Erreur d'enregistrement de la MeshLibrary !" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Impossible de charger la TileSet pour fusion !" +msgstr "Impossible de charger le TileSet pour fusion !" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "Erreur d'enregistrement de la TileSet !" +msgstr "Erreur d'enregistrement du TileSet !" #: editor/editor_node.cpp msgid "Error trying to save layout!" @@ -1682,11 +1685,11 @@ msgid "Open Base Scene" msgstr "Ouvrir scène de base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Ouvrir une scène rapidement…" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Ouvrir un script rapidement…" #: editor/editor_node.cpp @@ -1698,7 +1701,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Sauvegarder modifications de '%s' avant de quitter ?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Enregistrer la scène sous…" #: editor/editor_node.cpp @@ -1724,11 +1727,11 @@ 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 noeud parent." +msgstr "Cette opération ne peut être réalisée sans nœud racine." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Exporter un ensemble de tuiles" +msgstr "Exporter le TileSet" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." @@ -1751,7 +1754,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Cette action ne peut être annulée. Réinitialiser quand même ?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Lancer une scène rapidement…" #: editor/editor_node.cpp @@ -1918,8 +1921,8 @@ msgid "Previous tab" msgstr "Onglet precedent" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer Fichiers.." +msgid "Filter Files..." +msgstr "Filtrer Fichiers..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1930,11 +1933,11 @@ msgid "New Scene" msgstr "Nouvelle scène" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nouvelle scène héritée…" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Ouvrir une scène…" #: editor/editor_node.cpp @@ -1954,15 +1957,15 @@ msgid "Open Recent" msgstr "Fichiers récents" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Convertir vers…" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary…" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet…" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2025,7 +2028,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Petit déploiement avec le réseau" +msgstr "Déploiement minime avec système de fichier réseau" #: editor/editor_node.cpp msgid "" @@ -2228,7 +2231,7 @@ msgid "Save the currently edited resource." msgstr "Enregistrer la ressource actuellement modifiée." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Enregistrer sous…" #: editor/editor_node.cpp @@ -2337,7 +2340,7 @@ msgid "Creating Mesh Previews" msgstr "Création des prévisualisations des maillages" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Aperçu…" #: editor/editor_plugin_settings.cpp @@ -2490,8 +2493,8 @@ msgid "(Current)" msgstr "(Actuel)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Récupération des miroirs, veuillez patienter.." +msgid "Retrieving mirrors, please wait..." +msgstr "Récupération des miroirs, veuillez patienter..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2568,8 +2571,8 @@ msgid "Error requesting url: " msgstr "Erreur lors de la requête de l’URL : " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Connexion au miroir" +msgid "Connecting to Mirror..." +msgstr "Connexion au Miroir..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2585,8 +2588,8 @@ msgstr "Impossible à résoudre" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connexion en cours.." +msgid "Connecting..." +msgstr "Connexion en cours..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2598,8 +2601,8 @@ msgstr "Connecté" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Envoi d'une requête.." +msgid "Requesting..." +msgstr "Envoi d'une requête..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2736,11 +2739,11 @@ msgid "Collapse all" msgstr "Réduire tout" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renommer.." +msgid "Rename..." +msgstr "Renommer..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Déplacer vers…" #: editor/filesystem_dock.cpp @@ -2752,15 +2755,15 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Modifier les dépendances…" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Voir les propriétaires…" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Dupliquer…" #: editor/filesystem_dock.cpp @@ -2788,7 +2791,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Analyse des fichiers en cours,\n" "Veuillez patienter..." @@ -2856,7 +2859,7 @@ msgid "Import Scene" msgstr "Importer une scène" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Importation de la scène…" #: editor/import/resource_importer_scene.cpp @@ -2865,10 +2868,10 @@ msgstr "Génération des lightmaps :" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "Généreration pour le Mesh : " +msgstr "Génération pour le Mesh : " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Lancement du script personnalisé…" #: editor/import/resource_importer_scene.cpp @@ -2885,7 +2888,7 @@ msgid "Error running post-import script:" msgstr "Erreur d'exécution du script de post-importation :" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Enregistrement…" #: editor/import_dock.cpp @@ -2905,7 +2908,7 @@ msgid "Import As:" msgstr "Importer comme :" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Pré-réglage…" #: editor/import_dock.cpp @@ -3324,7 +3327,7 @@ msgid "Transition Node" msgstr "Nœud Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importer des animations…" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3332,7 +3335,7 @@ msgid "Edit Node Filters" msgstr "Modifier les filtres de nœud" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtres…" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3400,8 +3403,8 @@ msgid "Fetching:" msgstr "Récupération:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Résolution.." +msgid "Resolving..." +msgstr "Résolution..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3467,7 +3470,7 @@ msgid "Site:" msgstr "Site :" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Support…" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3666,6 +3669,7 @@ msgid "Use Rotation Snap" msgstr "Rotation alignée" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configurer le magnétisme…" @@ -3759,17 +3763,15 @@ msgstr "Afficher les règles" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Guides" -msgstr "Montrer les guides" +msgstr "Afficher 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" +msgstr "Afficher la Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4062,7 +4064,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Le type de maillage primitif n'est pas PRIMITIVE_TRIANGLES !" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4093,7 +4095,7 @@ msgid "Create Convex Collision Sibling" msgstr "Créer une collision convexe" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Créer un maillage de contour…" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4263,7 +4265,7 @@ msgstr "Partitionnement..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "Création des coutours..." +msgstr "Création des contours..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." @@ -4304,8 +4306,8 @@ msgid "Error loading image:" msgstr "Erreur de chargement d'image :" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Pas de pixels avec transparence > 128 dans l'image.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Pas de pixels avec transparence > 128 dans l'image..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4556,7 +4558,7 @@ msgstr "Mettre à l'échelle le polygone" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Modifier" +msgstr "Édition" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -4665,7 +4667,7 @@ msgid "Import Theme" msgstr "Importer un thème" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Enregistrer le thème sous…" #: editor/plugins/script_editor_plugin.cpp @@ -4758,11 +4760,11 @@ msgstr "Lancer" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Afficher/Cacher la panneau des scripts" +msgstr "Afficher/Cacher le panneau des scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Trouver…" #: editor/plugins/script_editor_plugin.cpp @@ -4860,7 +4862,7 @@ msgstr "Prélever une couleur" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" -msgstr "Cas de conversion" +msgstr "Modifier la casse" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4969,18 +4971,18 @@ msgstr "Convertir en minuscule" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "trouver précédente" +msgstr "Trouver le précédent" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Remplacer…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Aller à la fonction…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Aller à la ligne…" #: editor/plugins/script_text_editor.cpp @@ -5436,11 +5438,7 @@ msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurer la grille…" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Dialogue de transformation…" #: editor/plugins/spatial_editor_plugin.cpp @@ -5693,7 +5691,7 @@ msgid "Remove All" msgstr "Supprimer tout" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Éditer le thème..." #: editor/plugins/theme_editor_plugin.cpp @@ -5741,14 +5739,12 @@ msgid "Checked Item" msgstr "Item coché" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Ajouter un item" +msgstr "Item radio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item coché" +msgstr "Item radio coché" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5763,8 +5759,8 @@ msgid "Options" msgstr "Options" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Ont,Plusieurs,Possibilités,D'options !" +msgid "Has,Many,Options" +msgstr "Possède,Plusieurs,Options" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5832,7 +5828,7 @@ msgstr "Supprimer la sélection" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" -msgstr "Chercher une case" +msgstr "Trouver une tuile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -5888,7 +5884,7 @@ msgstr "Fusionner depuis la scène ?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" -msgstr "Ensemble de cases" +msgstr "Jeu de tuiles" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5904,31 +5900,31 @@ msgstr "Erreur" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" -msgstr "Coupe automatique" +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 "" -"Sélectionne une ressource à utiliser comme icône, celle-ci sera aussi " -"utilisée sur les liaisons autotile invalides." +"Sélectionner une sous-tuile à utiliser comme icône, celle-ci sera aussi " +"utilisée pour les liaisons de tuiles automatiques 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" +"Clic-gauche : Activer\n" +"Clic-droit : Désactiver" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select current edited sub-tile." -msgstr "Enregistrer la ressource en cours de modification." +msgstr "Sélectionner la sous-tuile en cours d'édition." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "Sélectionner une sous-case pour changer sa priorité." +msgstr "Sélectionner une sous-tuile pour changer sa priorité." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" @@ -5955,7 +5951,7 @@ msgid "Presets" msgstr "Pré-réglages" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Ajouter…" #: editor/project_export.cpp @@ -6049,6 +6045,10 @@ msgid "Imported Project" msgstr "Projet importé" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nom du Projet Invalide." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Impossible de créer le dossier." @@ -6252,9 +6252,11 @@ msgstr "Bouton de souris" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nom d'action invalide. Il ne peux être vide ou contenir '/', ':', '=', '\\' " +"ou '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6281,7 +6283,7 @@ msgid "Control+" msgstr "Contrôle+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Appuyez sur une touche…" #: editor/project_settings_editor.cpp @@ -6414,7 +6416,7 @@ msgstr "Paramètres enregistrés avec succès." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "Remplacement de fonctionnalité" +msgstr "Écrasement d'un paramètre, dédié à un tag de fonctionnalité" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6465,8 +6467,8 @@ msgid "Property:" msgstr "Propriété :" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Remplacement pour.." +msgid "Override For..." +msgstr "Écraser pour…" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6561,11 +6563,11 @@ msgid "Easing Out-In" msgstr "Ease out-in" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Fichier…" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Répertoire…" #: editor/property_editor.cpp @@ -6739,7 +6741,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Cette opération ne peut être réalisée sur des scènes instanciées." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Enregistrer la nouvelle scène sous…" #: editor/scene_tree_dock.cpp @@ -7170,11 +7172,11 @@ msgstr "Divers" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Control cliqué :" +msgstr "Contrôle cliqué :" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Type de Control cliqué :" +msgstr "Type de contrôle cliqué :" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -7461,7 +7463,7 @@ msgstr "Choisissez distance :" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Le nom de la classe ne peut pas être un mot clé réservé" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7469,7 +7471,7 @@ msgstr "Génération de la solution en cours..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "Création du projet C# ..." +msgstr "Création du projet C#..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create solution." @@ -8178,7 +8180,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "L'environnement mondial a besoin d'une ressource environnementale." #: scene/3d/scenario_fx.cpp msgid "" @@ -8192,6 +8194,9 @@ 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 "" +"Cet WorldEnvironment est ignoré. Ajoutez une caméra (pour les scènes 3D) ou " +"définissez le mode Background Mode de cet environnement sur Canvas (pour les " +"scènes 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8290,6 +8295,13 @@ msgstr "Erreur lors du chargement de la police." msgid "Invalid font size." msgstr "Taille de police invalide." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Onglet precedent" + +#~ msgid "Next" +#~ msgstr "Suivant" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Action invalide (tout passe, sauf « / » ou « : »)." @@ -8319,9 +8331,6 @@ msgstr "Taille de police invalide." #~ msgstr "" #~ "Impossible de trouver le fichier project.godot dans le chemin du projet." -#~ msgid "Next" -#~ msgstr "Suivant" - #~ msgid "Not found!" #~ msgstr "Non trouvé !" @@ -8469,7 +8478,7 @@ msgstr "Taille de police invalide." #~ msgid "Exporting for %s" #~ msgstr "Exportation pour %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Configuration…" #~ msgid "Error loading scene." @@ -8532,7 +8541,7 @@ msgstr "Taille de police invalide." #~ msgid "Info" #~ msgstr "Information" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Ré-importer…" #~ msgid "No bit masks to import!" @@ -8929,13 +8938,13 @@ msgstr "Taille de police invalide." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%) :" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Squelette…" #~ msgid "Zoom Reset" #~ msgstr "Réinitialiser le zoom" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Définir le zoom…" #~ msgid "Set a Value" @@ -9413,7 +9422,7 @@ msgstr "Taille de police invalide." #~ msgid "Export Project PCK" #~ msgstr "Exporter le PCK du projet" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exporter…" #~ msgid "Project Export" @@ -9508,7 +9517,7 @@ msgstr "Taille de police invalide." #~ msgid "Method In Node:" #~ msgstr "Méthode dans le nœud :" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "Modifier les connexions..." #~ msgid "Set Params" @@ -9563,5 +9572,5 @@ msgstr "Taille de police invalide." #~ "modifiez les options d'exportation par la suite. Vous pouvez également " #~ "générer des atlas à l'exportation." -#~ msgid "Merging.." +#~ msgid "Merging..." #~ msgstr "Fusion..." diff --git a/editor/translations/he.po b/editor/translations/he.po index ee0a66cec1..0f1881211f 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -498,7 +498,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -908,11 +908,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 @@ -1048,11 +1048,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 @@ -1121,7 +1121,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 @@ -1383,12 +1383,12 @@ 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 @@ -1597,11 +1597,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 @@ -1613,7 +1613,7 @@ msgid "Save changes to '%s' before closing?" msgstr "לשמור את השינויים ל־‚%s’ לפני הסגירה?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "שמירת סצנה בשם…" #: editor/editor_node.cpp @@ -1665,7 +1665,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 @@ -1812,7 +1812,7 @@ msgid "Previous tab" msgstr "הלשונית הקודמת" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,11 +1824,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 @@ -1848,15 +1848,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 @@ -2103,7 +2103,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 @@ -2212,7 +2212,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "תמונה ממוזערת…" #: editor/editor_plugin_settings.cpp @@ -2363,7 +2363,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 @@ -2439,7 +2439,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 @@ -2456,7 +2456,7 @@ msgstr "לא ניתן לפתור" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "מתבצעת התחברות…" #: editor/export_template_manager.cpp @@ -2469,7 +2469,7 @@ msgstr "מחובר" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "מוגשת בקשה…" #: editor/export_template_manager.cpp @@ -2602,11 +2602,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 @@ -2618,15 +2618,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 @@ -2652,7 +2652,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "הקבצים נסרקים,\n" "נא להמתין…" @@ -2720,7 +2720,7 @@ msgid "Import Scene" msgstr "ייבוא סצנה" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "סצנה מיובאת…" #: editor/import/resource_importer_scene.cpp @@ -2732,7 +2732,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 @@ -2748,7 +2748,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "שמירה…" #: editor/import_dock.cpp @@ -2768,7 +2768,7 @@ msgid "Import As:" msgstr "ייבוא בתור:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "ערכה מוגדרת…" #: editor/import_dock.cpp @@ -3182,7 +3182,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 @@ -3190,7 +3190,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 @@ -3258,7 +3258,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3325,7 +3325,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3512,8 +3512,9 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "הגדרת הצמדה…" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3933,7 +3934,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 @@ -4138,7 +4139,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 @@ -4499,7 +4500,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 @@ -4596,7 +4597,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 @@ -4804,15 +4805,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 @@ -5266,11 +5267,7 @@ msgid "Transform" msgstr "התמרה" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "הגדרת הצמדה…" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5523,7 +5520,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5591,7 +5588,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5779,7 +5776,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5869,6 +5866,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "שם שגוי." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6057,8 +6059,8 @@ msgstr "כפתור עכבר" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6086,7 +6088,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 @@ -6270,7 +6272,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6366,11 +6368,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 @@ -6541,7 +6543,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 @@ -7975,12 +7977,16 @@ msgstr "שגיאה בטעינת הגופן." msgid "Invalid font size." msgstr "גודל הגופן שגוי." -#~ msgid "Can't write file." -#~ msgstr "לא ניתן לכתוב קובץ." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "הלשונית הקודמת" #~ msgid "Next" #~ msgstr "הבא" +#~ msgid "Can't write file." +#~ msgstr "לא ניתן לכתוב קובץ." + #~ msgid "Not found!" #~ msgstr "לא נמצא!" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index e017935860..3340f13471 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -511,8 +511,8 @@ msgstr "जुडिये '%s' to '%s'" #: editor/connections_dialog.cpp #, fuzzy -msgid "Connect.." -msgstr "जुडिये.." +msgid "Connect..." +msgstr "जुडिये..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -946,11 +946,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 @@ -1086,11 +1086,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 @@ -1159,7 +1159,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 @@ -1421,12 +1421,12 @@ 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 @@ -1631,11 +1631,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 @@ -1647,7 +1647,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 @@ -1699,7 +1699,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 @@ -1844,7 +1844,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1856,11 +1856,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 @@ -1880,15 +1880,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 @@ -2133,7 +2133,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 @@ -2242,7 +2242,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2393,7 +2393,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 @@ -2469,7 +2469,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 @@ -2486,7 +2486,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2500,7 +2500,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2637,11 +2637,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 @@ -2653,16 +2653,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "प्रतिलिपि" #: editor/filesystem_dock.cpp @@ -2688,7 +2688,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2754,7 +2754,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2766,7 +2766,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 @@ -2782,7 +2782,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2802,7 +2802,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3217,7 +3217,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 @@ -3225,7 +3225,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 @@ -3293,7 +3293,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3360,7 +3360,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3547,6 +3547,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3968,7 +3969,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 @@ -4173,7 +4174,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 @@ -4535,7 +4536,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 @@ -4632,7 +4633,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 @@ -4838,15 +4839,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 @@ -5297,11 +5298,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5554,7 +5551,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5622,7 +5619,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5810,7 +5807,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5900,6 +5897,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "गलत फॉण्ट का आकार |" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6088,8 +6090,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6117,7 +6119,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 @@ -6301,7 +6303,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6397,11 +6399,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 @@ -6572,7 +6574,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 diff --git a/editor/translations/hu.po b/editor/translations/hu.po index b6151574e9..b04dd073df 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -2,23 +2,22 @@ # 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. -# +# Árpád Horváth <horvatha4@googlemail.com>, 2018. # Nagy Lajos <neutron9707@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-04-03 06:36+0000\n" -"Last-Translator: Sandor Domokos <sandor.domokos@gmail.com>\n" +"PO-Revision-Date: 2018-06-17 07:39+0000\n" +"Last-Translator: Árpád Horváth <horvatha4@googlemail.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.20-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -34,7 +33,7 @@ msgstr "Animáció kulcsképkocka idő változtatás" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Animáció átmenet változtatás" +msgstr "Animáció átmenet változtatása" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -236,7 +235,7 @@ 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ás" +msgstr "Animációhoz hívási nyomvonal hozzáadása" #: editor/animation_editor.cpp msgid "Animation zoom." @@ -500,7 +499,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' Lecsatlakoztatása '%s'-ról" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Kapcsolás..." #: editor/connections_dialog.cpp @@ -920,12 +919,12 @@ msgid "Move Audio Bus" msgstr "Hangbusz Áthelyezése" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Hangbusz Elrendezés Mentése Másként.." +msgid "Save Audio Bus Layout As..." +msgstr "Hangbusz Elrendezés Mentése Másként..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Új Elrendezés Helye.." +msgid "Location for New Layout..." +msgstr "Új Elrendezés Helye..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1061,12 +1060,12 @@ msgid "Updating Scene" msgstr "Scene Frissítése" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Helyi módosítások eltárolása.." +msgid "Storing local changes..." +msgstr "Helyi módosítások eltárolása..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scene frissítése.." +msgid "Updating scene..." +msgstr "Scene frissítése..." #: editor/editor_data.cpp msgid "[empty]" @@ -1134,8 +1133,8 @@ msgid "Show In File Manager" msgstr "Mutat Fájlkezelőben" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Új Mappa.." +msgid "New Folder..." +msgstr "Új Mappa..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1396,20 +1395,20 @@ msgstr "Kimenet Törlése" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt export nem sikerült, hibakód %d." #: 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!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Erőforrás Mentése Másként.." +msgid "Save Resource As..." +msgstr "Erőforrás Mentése Másként..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Értem.." +msgid "I see..." +msgstr "Értem..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1645,12 +1644,12 @@ msgid "Open Base Scene" msgstr "Alap Scene megnyitás" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Scene gyors megnyitás" +msgid "Quick Open Scene..." +msgstr "Jelenet gyors megnyitása..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Szkript gyors megnyitás" +msgid "Quick Open Script..." +msgstr "Szkript gyors megnyitás..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1661,8 +1660,8 @@ msgid "Save changes to '%s' before closing?" 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 "Scene mentés másként" +msgid "Save Scene As..." +msgstr "Scene mentés másként..." #: editor/editor_node.cpp msgid "No" @@ -1713,8 +1712,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Ez a művelet nem vonható vissza. Visszaállítja mindenképp?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Scene gyors futtatás" +msgid "Quick Run Scene..." +msgstr "Scene gyors futtatás..." #: editor/editor_node.cpp msgid "Quit" @@ -1860,7 +1859,7 @@ msgstr "Hozzáad egy új jelenetet." #: editor/editor_node.cpp msgid "Scene" -msgstr "Scene" +msgstr "Jelenet" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -1875,8 +1874,8 @@ msgid "Previous tab" msgstr "Előző fül" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Fájlok Szűrése.." +msgid "Filter Files..." +msgstr "Fájlok Szűrése..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1887,12 +1886,12 @@ msgid "New Scene" msgstr "Új Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Új örökölt Scene" +msgid "New Inherited Scene..." +msgstr "Új örökölt Jelenet..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Scene megnyitása" +msgid "Open Scene..." +msgstr "Jelenet megnyitása..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1911,16 +1910,16 @@ msgid "Open Recent" msgstr "Legutóbbi Megnyitása" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Átkonvertálás.." +msgid "Convert To..." +msgstr "Átkonvertálás..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary-ra.." +msgid "MeshLibrary..." +msgstr "MeshLibrary-ra..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet-re.." +msgid "TileSet..." +msgstr "TileSet-re..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1982,7 +1981,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Kis Telepítés Hálózati FR-rel" +msgstr "Kis Telepítés Hálózati FS-sel" #: editor/editor_node.cpp msgid "" @@ -2026,7 +2025,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "Scene változtatások szinkronizálás" +msgstr "Jelenet változtatások szinkronizálása" #: editor/editor_node.cpp msgid "" @@ -2184,8 +2183,8 @@ msgid "Save the currently edited resource." msgstr "A jelenleg szerkesztett erőforrás elmentése." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Mentés Másként.." +msgid "Save As..." +msgstr "Mentés Másként..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2293,8 +2292,8 @@ msgid "Creating Mesh Previews" msgstr "Háló Előnézetek Létrehozása" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Indexkép.." +msgid "Thumbnail..." +msgstr "Indexkép..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2446,8 +2445,8 @@ msgid "(Current)" msgstr "(Jelenlegi)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Tükrök letöltése, kérjük várjon.." +msgid "Retrieving mirrors, please wait..." +msgstr "Tükrök letöltése, kérjük várjon..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2524,8 +2523,8 @@ msgid "Error requesting url: " msgstr "Hiba történt az url lekérdezésekor: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Csatlakozás Tükörhöz.." +msgid "Connecting to Mirror..." +msgstr "Csatlakozás Tükörhöz..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2541,8 +2540,8 @@ msgstr "Nem Megoldható" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Csatlakozás.." +msgid "Connecting..." +msgstr "Csatlakozás..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2554,8 +2553,8 @@ msgstr "Csatlakozva" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Lekérdezés.." +msgid "Requesting..." +msgstr "Lekérdezés..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2690,12 +2689,12 @@ msgid "Collapse all" msgstr "Összes összecsukása" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Átnevezés.." +msgid "Rename..." +msgstr "Átnevezés..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Áthelyezés.." +msgid "Move To..." +msgstr "Áthelyezés..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2706,16 +2705,16 @@ msgid "Instance" msgstr "Példány" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Függőségek Szerkesztése.." +msgid "Edit Dependencies..." +msgstr "Függőségek Szerkesztése..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Tulajdonosok Megtekintése.." +msgid "View Owners..." +msgstr "Tulajdonosok Megtekintése..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Megkettőzés.." +msgid "Duplicate..." +msgstr "Megkettőzés..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2740,10 +2739,10 @@ msgstr "Kiválasztott Scene(k) példányosítása a kiválasztott Node gyermekek #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Fájlok Vizsgálata,\n" -"Kérem Várjon.." +"Kérem Várjon..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2808,8 +2807,8 @@ msgid "Import Scene" msgstr "Scene importálás" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Scene importálás" +msgid "Importing Scene..." +msgstr "Jelenet importálása..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2820,8 +2819,8 @@ msgid "Generating for Mesh: " msgstr "Létrehozás a Következő Hálóhoz: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Tetszőleges Szkript Futtatása.." +msgid "Running Custom Script..." +msgstr "Tetszőleges Szkript Futtatása..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,8 +2836,8 @@ msgid "Error running post-import script:" msgstr "Hiba történt az importálás utána szkript futtatásakor:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Mentés.." +msgid "Saving..." +msgstr "Mentés..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2857,8 +2856,8 @@ msgid "Import As:" msgstr "Importálás Mint:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Beépített Beállítások.." +msgid "Preset..." +msgstr "Beépített Beállítások..." #: editor/import_dock.cpp msgid "Reimport" @@ -3276,16 +3275,16 @@ msgid "Transition Node" msgstr "Átmenet Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animációk Importálása.." +msgid "Import Animations..." +msgstr "Animációk Importálása..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Node szűrők szerkesztés" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Szűrők.." +msgid "Filters..." +msgstr "Szűrők..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3354,8 +3353,8 @@ msgid "Fetching:" msgstr "Lekérés:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Megoldás.." +msgid "Resolving..." +msgstr "Megoldás..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3421,8 +3420,8 @@ msgid "Site:" msgstr "Oldal:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Támogatás.." +msgid "Support..." +msgstr "Támogatás..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3430,7 +3429,7 @@ msgstr "Hivatalos" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Tesztelés Alatt" +msgstr "Tesztelés" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -3621,6 +3620,7 @@ msgid "Use Rotation Snap" msgstr "Forgatási Illesztés Használata" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Illesztés Beállítása..." @@ -3717,14 +3717,12 @@ 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" +msgstr "Origó Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Segítők Megjelenítése" +msgstr "Nézet Megjelenítése" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4018,7 +4016,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "A Háló-primitív típusa nem háromszög (PRIMITIVE_TRIANGLES)!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4049,8 +4047,8 @@ msgid "Create Convex Collision Sibling" msgstr "Konvex Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Körvonalháló Létrehozása.." +msgid "Create Outline Mesh..." +msgstr "Körvonalháló Létrehozása..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4255,8 +4253,8 @@ msgid "Error loading image:" msgstr "Hiba a kép betöltésekor:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Nem létezik egyetlen pixel sem >128-as átlátszósággal a képben.." +msgid "No pixels with transparency > 128 in image..." +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" @@ -4616,8 +4614,8 @@ msgid "Import Theme" msgstr "Téma Importálása" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Téma Mentése Másként.." +msgid "Save Theme As..." +msgstr "Téma Mentése Másként..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4713,8 +4711,8 @@ msgstr "Szkript Panel Megjelenítése" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Keresés.." +msgid "Find..." +msgstr "Keresés..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4923,16 +4921,16 @@ msgid "Find Previous" msgstr "Előző Keresése" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Csere.." +msgid "Replace..." +msgstr "Csere..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ugrás Funkcióra.." +msgid "Goto Function..." +msgstr "Ugrás Funkcióra..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ugrás Sorra.." +msgid "Goto Line..." +msgstr "Ugrás Sorra..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -4964,7 +4962,7 @@ msgstr "Vec kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" -msgstr "" +msgstr "Vektor skalár kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" @@ -4972,31 +4970,31 @@ msgstr "RGB kezelő változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "" +msgstr "Csak vörös kapcsolása" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" -msgstr "" +msgstr "Skalár-függvény változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Vektor-függvény változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Egységes-skalár változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Egységes-vektor változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Egységes-RGB változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Alapérték változtatás" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" @@ -5092,7 +5090,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Megnéz a Síklap transzformációját." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5244,7 +5242,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Doppler Enable" -msgstr "" +msgstr "Doppler engedélyezése" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5382,11 +5380,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5639,7 +5633,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5687,9 +5681,8 @@ msgid "Checked Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Elem Hozzáadása" +msgstr "Rádió Elem" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Radio Item" @@ -5708,7 +5701,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5896,7 +5889,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5986,6 +5979,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Érvénytelen projektnév." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6172,8 +6169,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6201,7 +6198,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 @@ -6378,14 +6375,14 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Általános" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6481,11 +6478,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 @@ -6656,7 +6653,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 @@ -7242,7 +7239,7 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" -msgstr "Következő Sík" +msgstr "Következő Síklap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Plane" @@ -7722,7 +7719,7 @@ msgstr "" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "" +msgstr "Az út nem vezeti a csomópontot!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." @@ -8100,6 +8097,13 @@ msgstr "Hiba a betűtípus betöltésekor." msgid "Invalid font size." msgstr "Érvénytelen betűtípus méret." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Előző fül" + +#~ msgid "Next" +#~ msgstr "Következő" + #~ msgid "" #~ "Invalid version.txt format inside templates. Revision is not a valid " #~ "identifier." @@ -8110,9 +8114,6 @@ msgstr "Érvénytelen betűtípus méret." #~ msgid "Can't write file." #~ msgstr "Nem lehet fájlt írni." -#~ msgid "Next" -#~ msgstr "Következő" - #~ msgid "Not found!" #~ msgstr "Nincs Találat!" diff --git a/editor/translations/id.po b/editor/translations/id.po index 21d333009f..3956378ce7 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -2,31 +2,31 @@ # 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. -# # Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016. # Andevid Dynmyn <doyan4forum@gmail.com>, 2016. # Andinawan Asa <asaandinawan@gmail.com>, 2016. # Damar Inderajati <damarind@gmail.com>, 2017. # Damar S. M <the.last.walla@gmail.com>, 2017. +# Fajar Ru <kzofajar@gmail.com>, 2018. # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. +# Reza Hidayat Bayu Prabowo <rh.bayu.prabowo@gmail.com>, 2018. # Romi Kusuma Bakti <romikusumab@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: 2018-04-18 16:38+0000\n" -"Last-Translator: Tito <ijavadroid@gmail.com>\n" +"PO-Revision-Date: 2018-06-22 08:30+0000\n" +"Last-Translator: Fajar Ru <kzofajar@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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -506,8 +506,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Memutuskan '%s' dari '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Menyambungkan.." +msgid "Connect..." +msgstr "Menyambungkan..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -701,9 +701,8 @@ msgid "Change Dictionary Key" msgstr "Ubah Kunci Kamus" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" -msgstr "Ubah Nilai Dictionary" +msgstr "Ubah Nilai Kamus" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -931,12 +930,12 @@ msgid "Move Audio Bus" msgstr "Pindahkan Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Simpan Layout Suara Bus Ke.." +msgid "Save Audio Bus Layout As..." +msgstr "Simpan Layout Suara Bus Ke..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Lokasi untuk Layout Baru.." +msgid "Location for New Layout..." +msgstr "Lokasi untuk Layout Baru..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1074,12 +1073,12 @@ msgid "Updating Scene" msgstr "Memperbaharui Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Menyimpan perubahan-perubahan lokal.." +msgid "Storing local changes..." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Memperbaharui scene.." +msgid "Updating scene..." +msgstr "Memperbaharui scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1147,7 +1146,7 @@ msgid "Show In File Manager" msgstr "Tampilkan di Manajer Berkas" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Buat Direktori..." #: editor/editor_file_dialog.cpp @@ -1411,21 +1410,21 @@ msgstr "Bersihkan Luaran" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Ekspor proyek gagal dengan kode kesalahan% d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error menyimpan resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Simpan Resource Sebagai.." +msgid "Save Resource As..." +msgstr "Simpan Resource Sebagai..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "Aku tahu.." +msgid "I see..." +msgstr "Aku tahu..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1571,11 +1570,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "Perluas semua properti" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "Ciutkan semua properti" #: editor/editor_node.cpp msgid "Copy Params" @@ -1658,12 +1657,12 @@ msgid "Open Base Scene" msgstr "Buka Scene Dasar" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Buka Cepat Scene.." +msgid "Quick Open Scene..." +msgstr "Buka Cepat Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Buka Cepat Script.." +msgid "Quick Open Script..." +msgstr "Buka Cepat Script..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1674,8 +1673,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Simpan perubahan '%s' sebelum tutup?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Simpan Scene Sebagai.." +msgid "Save Scene As..." +msgstr "Simpan Scene Sebagai..." #: editor/editor_node.cpp msgid "No" @@ -1726,8 +1725,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Jalankan Cepat Scene.." +msgid "Quick Run Scene..." +msgstr "Jalankan Cepat Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1802,9 +1801,8 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Ugh" -msgstr "Wadoo" +msgstr "Duh" #: editor/editor_node.cpp msgid "" @@ -1885,8 +1883,8 @@ msgid "Previous tab" msgstr "Tab sebelumnya" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Saring berkas.." +msgid "Filter Files..." +msgstr "Saring berkas..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1897,12 +1895,12 @@ msgid "New Scene" msgstr "Scene Baru" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Scene Turunan Baru.." +msgid "New Inherited Scene..." +msgstr "Scene Turunan Baru..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Buka Scene.." +msgid "Open Scene..." +msgstr "Buka Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1921,16 +1919,16 @@ msgid "Open Recent" msgstr "Buka baru-baru ini" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Ubah ke.." +msgid "Convert To..." +msgstr "Ubah ke..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "" +msgid "MeshLibrary..." +msgstr "PerpustakaanMesh..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1976,7 +1974,7 @@ msgstr "Keluar ke daftar proyek" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "" +msgstr "\"Debug\"" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -2193,8 +2191,8 @@ msgid "Save the currently edited resource." msgstr "Simpan sumber yang sedang diatur." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Simpan Sebagai.." +msgid "Save As..." +msgstr "Simpan Sebagai..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2223,7 +2221,7 @@ msgstr "Impor" #: editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Node" #: editor/editor_node.cpp msgid "FileSystem" @@ -2302,8 +2300,8 @@ msgid "Creating Mesh Previews" msgstr "Buat Pratinjau Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" +msgid "Thumbnail..." +msgstr "Thumbnail..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2348,7 +2346,7 @@ msgstr "Waktu Rata-rata (sec)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Bingkai %" #: editor/editor_profiler.cpp msgid "Physics Frame %" @@ -2455,8 +2453,8 @@ msgid "(Current)" msgstr "(Kondisi Saat Ini)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Mendapatkan informasi cermin, silakan tunggu.." +msgid "Retrieving mirrors, please wait..." +msgstr "Mendapatkan informasi cermin, silakan tunggu..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2516,8 +2514,9 @@ msgstr "Permintaan Gagal." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Redirect Loop." -msgstr "" +msgstr "Mengarahkan Loop" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2533,8 +2532,8 @@ msgid "Error requesting url: " msgstr "Kesalahan saat meminta url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Menyambungkan.." +msgid "Connecting to Mirror..." +msgstr "Menyambungkan..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2542,16 +2541,16 @@ msgstr "Terputus" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "Menyelesaikan" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Tidak Bisa Menyelesaikan" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Menyambungkan.." +msgid "Connecting..." +msgstr "Menyambungkan..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2563,8 +2562,8 @@ msgstr "Terhubung" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Melakukan permintaan.." +msgid "Requesting..." +msgstr "Melakukan permintaan..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2693,19 +2692,19 @@ msgstr "Menggandakan folder:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "Perluas semua" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Ciutkan semua" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Ubah Nama.." +msgid "Rename..." +msgstr "Ubah Nama..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Pindahkan ke.." +msgid "Move To..." +msgstr "Pindahkan ke..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2716,16 +2715,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Sunting Dependensi.." +msgid "Edit Dependencies..." +msgstr "Sunting Dependensi..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Tampilkan Pemilik Berkas.." +msgid "View Owners..." +msgstr "Tampilkan Pemilik Berkas..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Gandakan.." +msgid "Duplicate..." +msgstr "Gandakan..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2750,10 +2749,10 @@ msgstr "Instance scene terpilih sebagai anak node saat ini." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Memindai Berkas,\n" -"Silakan Tunggu.." +"Silakan Tunggu..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2818,8 +2817,8 @@ msgid "Import Scene" msgstr "Impor Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Mengimpor scene.." +msgid "Importing Scene..." +msgstr "Mengimpor scene..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2832,8 +2831,8 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Running Custom Script.." -msgstr "Menjalankan Skrip Buatan.." +msgid "Running Custom Script..." +msgstr "Menjalankan Skrip Buatan..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2848,8 +2847,8 @@ msgid "Error running post-import script:" msgstr "Kesalahan saat menjalankan skrip post-import:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Menyimpan.." +msgid "Saving..." +msgstr "Menyimpan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2868,7 +2867,7 @@ msgid "Import As:" msgstr "Impor sebagai:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -2877,7 +2876,7 @@ msgstr "Impor ulang" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Set MultiNode" #: editor/node_dock.cpp msgid "Groups" @@ -2987,7 +2986,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Ubah Waktu Blend" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -3093,8 +3092,9 @@ msgid "Copy Animation" msgstr "Salin Animasi" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Onion Skinning" -msgstr "" +msgstr "Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" @@ -3306,8 +3306,8 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Impor Animasi.." +msgid "Import Animations..." +msgstr "Impor Animasi..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3315,8 +3315,8 @@ msgid "Edit Node Filters" msgstr "Sunting Filter Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Penyaring.." +msgid "Filters..." +msgstr "Penyaring..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3388,7 +3388,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3455,8 +3455,8 @@ msgid "Site:" msgstr "Situs:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Dukungan.." +msgid "Support..." +msgstr "Dukungan..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3654,6 +3654,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4086,7 +4087,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 @@ -4238,7 +4239,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "Menyimpan perubahan-perubahan lokal.." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4294,7 +4295,7 @@ msgid "Error loading image:" msgstr "Galat saat memuat gambar:" #: 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 @@ -4663,7 +4664,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 @@ -4764,8 +4765,8 @@ msgstr "Beralih Favorit" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Cari.." +msgid "Find..." +msgstr "Cari..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4976,15 +4977,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 @@ -5175,7 +5176,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Material Changes" -msgstr "Menyimpan perubahan-perubahan lokal.." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5448,11 +5449,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5709,8 +5706,8 @@ msgid "Remove All" msgstr "Hapus" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Sunting tema.." +msgid "Edit theme..." +msgstr "Sunting tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5779,7 +5776,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5908,7 +5905,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5975,7 +5972,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6070,6 +6067,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Nama Projek:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Tidak dapat membuat folder." @@ -6161,7 +6163,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "Menyambungkan.." +msgstr "Menyambungkan..." #: editor/project_manager.cpp #, fuzzy @@ -6242,7 +6244,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "Menyambungkan.." +msgstr "Menyambungkan..." #: editor/project_manager.cpp msgid "" @@ -6268,8 +6270,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6297,7 +6299,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 @@ -6480,14 +6482,14 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Umum" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6584,11 +6586,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Berkas.." +msgid "File..." +msgstr "Berkas..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6769,7 +6771,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 @@ -6939,7 +6941,7 @@ msgstr "" #: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" -msgstr "Buka Cepat Script.." +msgstr "Buka Cepat Script..." #: editor/scene_tree_editor.cpp msgid "" @@ -8284,9 +8286,8 @@ msgid "Please Confirm..." msgstr "Mohon konfirmasi..." #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "Metode Publik:" +msgstr "Pilih Folder ini" #: scene/gui/popup.cpp msgid "" @@ -8307,7 +8308,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(Yang Lain)" #: scene/main/scene_tree.cpp #, fuzzy @@ -8319,7 +8320,6 @@ msgstr "" "> Lingkungan Baku) tidak dapat dimuat" #: scene/main/viewport.cpp -#, fuzzy msgid "" "This viewport is not set as render target. If you intend for it to display " "its contents directly to the screen, make it a child of a Control so it can " @@ -8328,9 +8328,9 @@ msgid "" msgstr "" "Viewport ini tidak diatur sebagai target render. Jika anda berniat untuk " "menampilkan konten-kontennya secara langsung ke layar, buatlah sebuah child " -"dari kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah " -"sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node " -"untuk ditampilkan." +"dari Kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah " +"sebuah RenderTarget dan tetapkan tekstur internal untuk beberapa node untuk " +"ditampilkan." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8349,6 +8349,13 @@ msgid "Invalid font size." msgstr "Ukuran font tidak sah." #, fuzzy +#~ msgid "Previous" +#~ msgstr "Tab sebelumnya" + +#~ msgid "Next" +#~ msgstr "Berikutnya" + +#, fuzzy #~ msgid "Can't contain '/' or ':'" #~ msgstr "Sambungkan Ke Node:" @@ -8363,9 +8370,6 @@ msgstr "Ukuran font tidak sah." #~ msgid "Can't write file." #~ msgstr "Tidak dapat membuat folder." -#~ msgid "Next" -#~ msgstr "Berikutnya" - #~ msgid "Not found!" #~ msgstr "Tidak ditemukan!" @@ -8410,7 +8414,7 @@ msgstr "Ukuran font tidak sah." #, fuzzy #~ msgid "Setting '" -#~ msgstr "Mengatur.." +#~ msgstr "Mengatur..." #, fuzzy #~ msgid "Selection -> Duplicate" @@ -8459,8 +8463,8 @@ msgstr "Ukuran font tidak sah." #~ msgid "Exporting for %s" #~ msgstr "Mengekspor untuk %s" -#~ msgid "Setting Up.." -#~ msgstr "Mengatur.." +#~ msgid "Setting Up..." +#~ msgstr "Mengatur..." #~ msgid "Error loading scene." #~ msgstr "Gagal memuat scene." @@ -8484,8 +8488,8 @@ msgstr "Ukuran font tidak sah." #~ msgid "No files selected!" #~ msgstr "Tidak ada berkas dipilih!" -#~ msgid "Re-Import.." -#~ msgstr "Impor Ulang.." +#~ msgid "Re-Import..." +#~ msgstr "Impor Ulang..." #, fuzzy #~ msgid "Root Node Name:" diff --git a/editor/translations/is.po b/editor/translations/is.po index eb4f29126c..98a376edca 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -4,138 +4,165 @@ # This file is distributed under the same license as the Godot source code. # # Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017. +# Kaan Gül <qaantum@hotmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-05 21:47+0000\n" -"Last-Translator: Jóhannes G. Þorsteinsson <johannesg@johannesg.com>\n" +"PO-Revision-Date: 2018-06-05 05:39+0000\n" +"Last-Translator: Kaan Gül <qaantum@hotmail.com>\n" "Language-Team: Icelandic <https://hosted.weblate.org/projects/godot-engine/" "godot/is/>\n" "Language: is\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\n" #: editor/animation_editor.cpp +#, fuzzy msgid "Disabled" msgstr "Óvirkt" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Allt Val" +msgstr "Allt úrvalið" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Hreyfimynd Breyta Gildi" +msgstr "Anim breyta lyklagrind tími" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Transition" -msgstr "Hreyfimynd Breyta Stöðuskiptum" +msgstr "Anim breyting umskipti" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Transform" -msgstr "Hreyfimynd Breyta Ummyndun" +msgstr "Breyta umbreytingu" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Hreyfimynd Breyta Gildi" +msgstr "Anim breyta lyklagrind gildi" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Call" -msgstr "Hreyfimynd Breyta Kalli" +msgstr "Útkall breyting símtal" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Add Track" -msgstr "Hreyfimynd Bæta Við Rás" +msgstr "Anim bæta við lag" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Duplicate Keys" -msgstr "Hreyfimynd Tvöfalda Lykla" +msgstr "Tvíteknir lyklar" #: editor/animation_editor.cpp +#, fuzzy msgid "Move Anim Track Up" -msgstr "Færa Hreyfimynda Rás Upp" +msgstr "Færa Anim track upp" #: editor/animation_editor.cpp +#, fuzzy msgid "Move Anim Track Down" -msgstr "Færa Hreyfimynda Rás Niður" +msgstr "Færa Anim track niður" #: editor/animation_editor.cpp +#, fuzzy msgid "Remove Anim Track" -msgstr "Fjarlægja Hreyfimynda Rás" +msgstr "Fjarlægja Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Set Transitions to:" -msgstr "Sitja Stöðuskipti á:" +msgstr "Stillið breyting á:" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Rename" -msgstr "Endurnefna Hreyfimyndarás" +msgstr "Endurnefning Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Interpolation" -msgstr "Breyta Brúun á Hreyfimyndarás" +msgstr "Breytingar á Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Breyta gildisstilling í Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "Anim track breyta hulum ham" #: editor/animation_editor.cpp +#, fuzzy msgid "Edit Node Curve" -msgstr "" +msgstr "Breyta hnútnum Ferill" #: editor/animation_editor.cpp +#, fuzzy msgid "Edit Selection Curve" -msgstr "" +msgstr "Breyta valferil" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Delete Keys" -msgstr "" +msgstr "Anim DELETE-lyklar" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Duplicate Selection" -msgstr "" +msgstr "Afrita val" #: editor/animation_editor.cpp +#, fuzzy msgid "Duplicate Transposed" -msgstr "" +msgstr "Tvískipt transposed" #: editor/animation_editor.cpp +#, fuzzy msgid "Remove Selection" -msgstr "" +msgstr "Fjarlægja val" #: editor/animation_editor.cpp +#, fuzzy msgid "Continuous" -msgstr "" +msgstr "Samfellt" #: editor/animation_editor.cpp +#, fuzzy msgid "Discrete" -msgstr "" +msgstr "Afmarkað" #: editor/animation_editor.cpp +#, fuzzy msgid "Trigger" -msgstr "" +msgstr "Kveikja:" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Add Key" -msgstr "" +msgstr "Anim bæta við lykli" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Move Keys" -msgstr "" +msgstr "Færa lykla af Anim" #: editor/animation_editor.cpp +#, fuzzy msgid "Scale Selection" -msgstr "" +msgstr "Val á kvarða" #: editor/animation_editor.cpp msgid "Scale From Cursor" @@ -496,7 +523,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -906,11 +933,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 @@ -1046,11 +1073,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 @@ -1119,7 +1146,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 @@ -1381,12 +1408,12 @@ 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 @@ -1591,11 +1618,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 @@ -1607,7 +1634,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 @@ -1659,7 +1686,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 @@ -1804,7 +1831,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1816,11 +1843,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 @@ -1840,15 +1867,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 @@ -2093,7 +2120,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 @@ -2202,7 +2229,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2353,7 +2380,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 @@ -2429,7 +2456,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 @@ -2446,7 +2473,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2459,7 +2486,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2591,11 +2618,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 @@ -2607,16 +2634,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Hreyfimynd Tvöfalda Lykla" #: editor/filesystem_dock.cpp @@ -2642,7 +2669,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2708,7 +2735,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2720,7 +2747,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 @@ -2736,7 +2763,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2756,7 +2783,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3170,7 +3197,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 @@ -3178,7 +3205,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 @@ -3246,7 +3273,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3313,7 +3340,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3500,6 +3527,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3921,7 +3949,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 @@ -4126,7 +4154,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 @@ -4487,7 +4515,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 @@ -4584,7 +4612,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 @@ -4790,15 +4818,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 @@ -5249,11 +5277,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5506,7 +5530,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5574,7 +5598,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5762,7 +5786,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5852,6 +5876,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6038,8 +6066,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6067,7 +6095,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 @@ -6251,7 +6279,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,11 +6375,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 @@ -6522,7 +6550,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 diff --git a/editor/translations/it.po b/editor/translations/it.po index 85f4e665a1..2d566fe163 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.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. # +# Alessio Corridori <alessiocorridori@hotmail.com>, 2018. # Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017. # Dario D'Ambra <legione0@gmail.com>, 2017. # dariocavada <cavada@ectrlsolutions.com>, 2017. @@ -19,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-05-02 10:38+0000\n" -"Last-Translator: Samuele Zolfanelli <samdazel@gmail.com>\n" +"PO-Revision-Date: 2018-05-18 16:39+0000\n" +"Last-Translator: Alessio Corridori <alessiocorridori@hotmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -511,8 +512,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Disconnetti '%s' da '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Connetti.." +msgid "Connect..." +msgstr "Connetti..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -934,12 +935,12 @@ msgid "Move Audio Bus" msgstr "Sposta bus audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Salva Layout Bus Audio Come..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Posizione per Nuovo Layout.." +msgid "Location for New Layout..." +msgstr "Posizione per Nuovo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1080,12 +1081,12 @@ msgid "Updating Scene" msgstr "Aggiornamento Scena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Memorizzando i cambiamenti locali.." +msgid "Storing local changes..." +msgstr "Memorizzando i cambiamenti locali..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aggiornando la scena.." +msgid "Updating scene..." +msgstr "Aggiornando la scena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1154,8 +1155,8 @@ msgid "Show In File Manager" msgstr "Mostra nel File Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nuova Cartella.." +msgid "New Folder..." +msgstr "Nuova Cartella..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1424,13 +1425,13 @@ msgid "Error saving resource!" msgstr "Errore salvando la Risorsa!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Salva Risorsa Come.." +msgid "Save Resource As..." +msgstr "Salva Risorsa Come..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Capisco.." +msgid "I see..." +msgstr "Capisco..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1666,12 +1667,12 @@ msgid "Open Base Scene" msgstr "Apri Scena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Apri scena rapido.." +msgid "Quick Open Scene..." +msgstr "Apri scena rapido..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Apri Script Rapido.." +msgid "Quick Open Script..." +msgstr "Apri Script Rapido..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1682,8 +1683,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Salvare le modifiche a '%s' prima di chiudere?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Salva Scena Come.." +msgid "Save Scene As..." +msgstr "Salva Scena Come..." #: editor/editor_node.cpp msgid "No" @@ -1734,8 +1735,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Questa azione non può essere annullata. Ripristinare comunque?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Esegui Scena Rapido.." +msgid "Quick Run Scene..." +msgstr "Esegui Scena Rapido..." #: editor/editor_node.cpp msgid "Quit" @@ -1895,8 +1896,8 @@ msgid "Previous tab" msgstr "Scheda precedente" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtra Files.." +msgid "Filter Files..." +msgstr "Filtra Files..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1907,12 +1908,12 @@ msgid "New Scene" msgstr "Nuova scena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nuova Scena Ereditata.." +msgid "New Inherited Scene..." +msgstr "Nuova Scena Ereditata..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Apri Scena.." +msgid "Open Scene..." +msgstr "Apri Scena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1931,16 +1932,16 @@ msgid "Open Recent" msgstr "Apri Recente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Converti In.." +msgid "Convert To..." +msgstr "Converti In..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2203,8 +2204,8 @@ msgid "Save the currently edited resource." msgstr "Salva la risorsa in modifica." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Salva Come.." +msgid "Save As..." +msgstr "Salva Come..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2312,8 +2313,8 @@ msgid "Creating Mesh Previews" msgstr "Creazione Anteprime Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2468,7 +2469,7 @@ msgid "(Current)" msgstr "(Corrente)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Recupero dei mirror, attendi..." #: editor/export_template_manager.cpp @@ -2547,8 +2548,8 @@ msgid "Error requesting url: " msgstr "Errore di connessione all'URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Connessione al mirror in corso.." +msgid "Connecting to Mirror..." +msgstr "Connessione al mirror in corso..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2564,8 +2565,8 @@ msgstr "Impossibile risolvere" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connettendo.." +msgid "Connecting..." +msgstr "Connettendo..." #: editor/export_template_manager.cpp #, fuzzy @@ -2578,8 +2579,8 @@ msgstr "Connesso" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Richiedendo.." +msgid "Requesting..." +msgstr "Richiedendo..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2718,12 +2719,12 @@ msgid "Collapse all" msgstr "Comprimi tutto" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Rinomina.." +msgid "Rename..." +msgstr "Rinomina..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Sposta in.." +msgid "Move To..." +msgstr "Sposta in..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2735,16 +2736,16 @@ msgid "Instance" msgstr "Istanza" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifica Dipendenze.." +msgid "Edit Dependencies..." +msgstr "Modifica Dipendenze..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vedi Proprietari.." +msgid "View Owners..." +msgstr "Vedi Proprietari..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplica.." +msgid "Duplicate..." +msgstr "Duplica..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2769,10 +2770,10 @@ msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Scansione File,\n" -"Si prega di attendere.." +"Si prega di attendere..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2837,8 +2838,8 @@ msgid "Import Scene" msgstr "Importa Scena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando Scena.." +msgid "Importing Scene..." +msgstr "Importando Scena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2850,8 +2851,8 @@ msgid "Generating for Mesh: " msgstr "Generando per Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Eseguendo Script Personalizzato.." +msgid "Running Custom Script..." +msgstr "Eseguendo Script Personalizzato..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2866,8 +2867,8 @@ msgid "Error running post-import script:" msgstr "Errore di esecuzione dello script di post-import:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Salvataggio.." +msgid "Saving..." +msgstr "Salvataggio..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2886,8 +2887,8 @@ msgid "Import As:" msgstr "Importa Come:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "Preset..." #: editor/import_dock.cpp msgid "Reimport" @@ -3308,16 +3309,16 @@ msgid "Transition Node" msgstr "Nodo Transizione" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importa animazioni.." +msgid "Import Animations..." +msgstr "Importa animazioni..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Modifica Filtri Nodi" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtri.." +msgid "Filters..." +msgstr "Filtri..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3385,8 +3386,8 @@ msgid "Fetching:" msgstr "Recupero:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Risolvendo.." +msgid "Resolving..." +msgstr "Risolvendo..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3452,8 +3453,8 @@ msgid "Site:" msgstr "Sito:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Supporta.." +msgid "Support..." +msgstr "Supporta..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3652,6 +3653,7 @@ msgid "Use Rotation Snap" msgstr "Usa lo Snap di Rotazione" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configura Snap..." @@ -4100,8 +4102,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crea Fratello di Collisione Convessa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crea Mesh di Outline.." +msgid "Create Outline Mesh..." +msgstr "Crea Mesh di Outline..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4258,7 +4260,7 @@ msgstr "Creazione Octree Luci" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "Stringhe Traducibili.." +msgstr "Stringhe Traducibili..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4280,7 +4282,7 @@ msgstr "Creazione Octree Texture" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "Crea Mesh di Outline.." +msgstr "Crea Mesh di Outline..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4321,8 +4323,8 @@ msgid "Error loading image:" msgstr "Errore di caricamento immagine:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Nessun pixel con trasparenza >128 nell'immagine.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Nessun pixel con trasparenza >128 nell'immagine..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4688,8 +4690,8 @@ msgid "Import Theme" msgstr "Importa Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Salva Tema Come.." +msgid "Save Theme As..." +msgstr "Salva Tema Come..." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4791,8 +4793,8 @@ msgstr "Attiva Preferito" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Trova.." +msgid "Find..." +msgstr "Trova..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5006,16 +5008,16 @@ msgid "Find Previous" msgstr "Trova Precedente" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Rimpiazza.." +msgid "Replace..." +msgstr "Rimpiazza..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Vai a Funzione.." +msgid "Goto Function..." +msgstr "Vai a Funzione..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Vai a Linea.." +msgid "Goto Line..." +msgstr "Vai a Linea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5475,12 +5477,8 @@ msgid "Transform" msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configura Snap..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Finestra di Transform.." +msgid "Transform Dialog..." +msgstr "Finestra di Transform..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5739,7 +5737,7 @@ msgid "Remove All" msgstr "Rimuovi" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Modifica Tema…" #: editor/plugins/theme_editor_plugin.cpp @@ -5810,7 +5808,8 @@ msgid "Options" msgstr "Opzioni" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Ha, Molte, Diverse, Opzioni!" #: editor/plugins/theme_editor_plugin.cpp @@ -5940,7 +5939,7 @@ msgstr "Unisci da scena?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6007,7 +6006,7 @@ msgid "Presets" msgstr "Presets" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Aggiungi..." #: editor/project_export.cpp @@ -6108,6 +6107,11 @@ msgstr "Progetto Importato" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Nome Progetto:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Impossibile creare cartella." @@ -6318,8 +6322,8 @@ msgstr "Pulsante Mouse" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,8 +6351,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Premi un tasto.." +msgid "Press a Key..." +msgstr "Premi un tasto..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6530,15 +6534,15 @@ msgstr "Impostazioni Progetto (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Generali" +msgstr "Informazioni Generali" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "Proprietà:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sovrascrivi Per.." +msgid "Override For..." +msgstr "Sovrascrivi Per..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6637,12 +6641,12 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." -msgstr "File.." +msgid "File..." +msgstr "File..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Dir.." +msgid "Dir..." +msgstr "Dir..." #: editor/property_editor.cpp msgid "Assign" @@ -6673,7 +6677,7 @@ msgstr "Mostra nel File System" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "Converti In.." +msgstr "Converti In..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6820,8 +6824,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Questa operazione no può essere eseguita su scene istanziate." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Salva Nuova Scena Come.." +msgid "Save New Scene As..." +msgstr "Salva Nuova Scena Come..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7353,12 +7357,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "Copia A Piattaforma.." +msgstr "Copia A Piattaforma..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7372,7 +7376,7 @@ msgstr "GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -8445,6 +8449,13 @@ msgstr "Errore caricamento font." msgid "Invalid font size." msgstr "Dimensione font Invalida." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Scheda precedente" + +#~ msgid "Next" +#~ msgstr "Successivo" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Azione invalida (va bene tutto a parte '/' o ':')." @@ -8475,9 +8486,6 @@ msgstr "Dimensione font Invalida." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Impossibile creare project.godot nel percorso di progetto." -#~ msgid "Next" -#~ msgstr "Successivo" - #~ msgid "Not found!" #~ msgstr "Non trovato!" @@ -8623,8 +8631,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Exporting for %s" #~ msgstr "Esportando per %s" -#~ msgid "Setting Up.." -#~ msgstr "Impostando.." +#~ msgid "Setting Up..." +#~ msgstr "Impostando..." #~ msgid "Error loading scene." #~ msgstr "Errore di caricamento della scena." @@ -8688,8 +8696,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Re-Importa.." +#~ msgid "Re-Import..." +#~ msgstr "Re-Importa..." #~ msgid "No bit masks to import!" #~ msgstr "Nessuna bit mask da importare!" @@ -9084,14 +9092,14 @@ msgstr "Dimensione font Invalida." #~ msgid "Zoom (%):" #~ msgstr "Zoom(%):" -#~ msgid "Skeleton.." -#~ msgstr "Scheletro.." +#~ msgid "Skeleton..." +#~ msgstr "Scheletro..." #~ msgid "Zoom Reset" #~ msgstr "Zoom Reset" -#~ msgid "Zoom Set.." -#~ msgstr "Imposta Zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Imposta Zoom..." #~ msgid "Set a Value" #~ msgstr "Imposta un Valore" @@ -9566,8 +9574,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Export Project PCK" #~ msgstr "Esporta Progetto PCK" -#~ msgid "Export.." -#~ msgstr "Esporta.." +#~ msgid "Export..." +#~ msgstr "Esporta..." #~ msgid "Project Export" #~ msgstr "Esportazione Progetto" @@ -9687,8 +9695,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Ricarica Tool Script (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Modifica Connessioni.." +#~ msgid "Edit Connections..." +#~ msgstr "Modifica Connessioni..." #~ msgid "Set Params" #~ msgstr "Imposta parametri" @@ -9742,5 +9750,5 @@ msgstr "Dimensione font Invalida." #~ msgid "Next Time:" #~ msgstr "Prossima Volta:" -#~ msgid "Merging.." -#~ msgstr "Unione.." +#~ msgid "Merging..." +#~ msgstr "Unione..." diff --git a/editor/translations/ja.po b/editor/translations/ja.po index e05530b258..5ce73d0442 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -2,30 +2,31 @@ # 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. -# # akirakido <achts.y@gmail.com>, 2016-2017. -# D_first <dntk.daisei@gmail.com>, 2017. -# Daisuke Saito <d.saito@coriginate.com>, 2017. +# D_first <dntk.daisei@gmail.com>, 2017, 2018. +# Daisuke Saito <d.saito@coriginate.com>, 2017, 2018. # h416 <shinichiro.hirama@gmail.com>, 2017. -# hopping tappy (たっぴさん) <hopping.tappy@gmail.com>, 2016-2017. -# Jun Shiozawa <haresecret@gmail.com>, 2017. +# hopping tappy (たっぴさん) <hopping.tappy@gmail.com>, 2016-2017, 2018. +# Jun Shiozawa <haresecret@gmail.com>, 2017, 2018. # Lexi Grafen <shfeedly@gmail.com>, 2017. # NoahDigital <taku_58@hotmail.com>, 2017. +# Shinsuke Masuda <shinsuke.masuda@gmail.com>, 2018. # Tetsuji Ochiai <ochiaixp@gmail.com>, 2017. # Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>, 2017-2018. -# +# yu tang <0011solo@gmail.com>, 2018. +# zukkun <zukkun@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-02 08:38+0000\n" -"Last-Translator: Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>\n" +"PO-Revision-Date: 2018-06-15 22:40+0000\n" +"Last-Translator: yu tang <0011solo@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.20-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -41,14 +42,12 @@ msgid "Anim Change Keyframe Time" msgstr "Anim 値を変更" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transition" -msgstr "Anim 遷移(トランジション)" +msgstr "アニメーション 変化とその移り変わり(トランジション)" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transform" -msgstr "Anim 変形(トランスフォーム)" +msgstr "アニメーションのトランスフォーム(変形)" #: editor/animation_editor.cpp #, fuzzy @@ -66,9 +65,8 @@ msgid "Anim Add Track" msgstr "Anim トラックを追加" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Duplicate Keys" -msgstr "Anim キーを複製" +msgstr "アニメーションのキーフレームを複製" #: editor/animation_editor.cpp msgid "Move Anim Track Up" @@ -84,7 +82,7 @@ msgstr "Anim トラックを削除" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "これにトランジションを設定:" +msgstr "トランジションを設定:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -114,7 +112,7 @@ msgstr "選択曲線を編集" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Anim キー削除" +msgstr "アニメーションのキーフレームを削除" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -536,8 +534,8 @@ msgstr "'%s' を '%s' に接続" #: editor/connections_dialog.cpp #, fuzzy -msgid "Connect.." -msgstr "接続.." +msgid "Connect..." +msgstr "接続..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -580,7 +578,6 @@ msgstr "最近の:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp -#, fuzzy msgid "Search:" msgstr "検索:" @@ -639,7 +636,6 @@ msgstr "リソース" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path" msgstr "パス" @@ -855,14 +851,12 @@ msgstr "" "ポーネントの著作権およびライセンス条項の完全なリストです。" #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "コンテンツ:" +msgstr "すべてのコンポーネント(構成部分)" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "コンテンツ:" +msgstr "コンポーネント(構成部分)" #: editor/editor_about.cpp #, fuzzy @@ -870,9 +864,8 @@ msgid "Licenses" msgstr "ライセンス" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in zip format." -msgstr "zip形式でないためパッケージをファイルを開く際にエラーが発生しました。" +msgstr "パッケージファイルを開けませんでした。 zip 形式ではありません。" #: editor/editor_asset_installer.cpp #, fuzzy @@ -896,9 +889,8 @@ msgid "Install" msgstr "インストール" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Installer" -msgstr "パッケージインストール成功!" +msgstr "パッケージインストーラー" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -922,24 +914,23 @@ msgstr "オーディオバスをソロに切り替え" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "オーディオバスをミュートに切り替え" +msgstr "オーディオバスをミュート(無音)に切り替え" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "オーディオバスのバイパスエフェクト切り替え" +msgstr "オーディオバスのバイパスエフェクトの切り替え" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "オーディオバスの送信先を選択" +msgstr "オーディオバスの出力先の選択" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" msgstr "オーディオバスエフェクトを追加" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Bus Effect" -msgstr "バスエフェクトの移動" +msgstr "バスエフェクトを移動" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" @@ -951,11 +942,11 @@ msgstr "オーディオバスをドラッグ・アンド・ドロップで(再) #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "ソロ" +msgstr "ソロ(独立)" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "ミュート" +msgstr "ミュート(無音)" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -1009,12 +1000,12 @@ msgstr "オーディオバスを移動" #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "オーディオバスのレイアウトを別名で保存" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "新しいレイアウトの場所.." +msgid "Location for New Layout..." +msgstr "新しいレイアウトの場所..." #: editor/editor_audio_buses.cpp #, fuzzy @@ -1023,7 +1014,8 @@ msgstr "オーディオバスのレイアウトを開く" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "'res://default_bus_layout.tres' ファイルがありません." +msgstr "" +"リソースディレクトリに「res://default_bus_layout.tres」ファイルがありません!" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -1149,7 +1141,7 @@ msgstr "自動読み込みを組み替える" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "Path:" +msgstr "パス:" #: editor/editor_autoload_settings.cpp #, fuzzy @@ -1158,7 +1150,6 @@ msgstr "ノードの名前:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp -#, fuzzy msgid "Name" msgstr "名前" @@ -1173,12 +1164,12 @@ msgstr "シーンを更新" #: editor/editor_data.cpp #, fuzzy -msgid "Storing local changes.." -msgstr "ローカル環境の変更を保存する.." +msgid "Storing local changes..." +msgstr "ローカル環境の変更を保存する..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "シーンを更新しています.." +msgid "Updating scene..." +msgstr "シーンを更新しています..." #: editor/editor_data.cpp #, fuzzy @@ -1187,7 +1178,7 @@ msgstr "(空)" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "(未保存)" #: editor/editor_dir_dialog.cpp #, fuzzy @@ -1202,7 +1193,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 "フォルダーを作成" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1241,9 +1232,8 @@ msgid "File Exists, Overwrite?" msgstr "ファイルが既に存在します。上書きしますか?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "フォルダを作成する" +msgstr "現在のフォルダーを選択" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1254,8 +1244,8 @@ msgid "Show In File Manager" msgstr "ファイルマネージャーで表示" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "フォルダを作成する.." +msgid "New Folder..." +msgstr "フォルダを作成する..." #: editor/editor_file_dialog.cpp #, fuzzy @@ -1376,7 +1366,6 @@ msgstr "アセットを(再)インポート" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Help" msgstr "ヘルプを検索" @@ -1555,7 +1544,7 @@ msgstr "出力" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "エラーコード %d により、プロジェクトのエクスポートに失敗しました。" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -1564,14 +1553,14 @@ msgstr "リソース保存エラー!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "~という名前でリソースを保存する" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "わかった.." +msgid "I see..." +msgstr "わかった..." #: editor/editor_node.cpp #, fuzzy @@ -1584,9 +1573,8 @@ msgid "Requested file format unknown:" msgstr "そのファイルは未知のフォーマットです:" #: editor/editor_node.cpp -#, fuzzy msgid "Error while saving." -msgstr "保存中にエラーが起きました." +msgstr "保存中にエラーが発生しました。" #: editor/editor_node.cpp #, fuzzy @@ -1594,9 +1582,8 @@ msgid "Can't open '%s'." msgstr "'..'を処理できません" #: editor/editor_node.cpp -#, fuzzy msgid "Error while parsing '%s'." -msgstr "保存中にエラーが起きました." +msgstr "「%s」の解析中にエラーが発生しました。" #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." @@ -1608,9 +1595,8 @@ msgid "Missing '%s' or its dependencies." msgstr "シーン'%s' は依存関係が壊れています:" #: editor/editor_node.cpp -#, fuzzy msgid "Error while loading '%s'." -msgstr "保存中にエラーが起きました." +msgstr "「%s」の読込中にエラーが発生しました。" #: editor/editor_node.cpp msgid "Saving Scene" @@ -1835,13 +1821,13 @@ msgid "Open Base Scene" msgstr "基本シーンを開く" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "シーンのクイックオープン.." +msgid "Quick Open Scene..." +msgstr "シーンのクイックオープン..." #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Script.." -msgstr "スクリプトのクイックオープン.." +msgid "Quick Open Script..." +msgstr "スクリプトのクイックオープン..." #: editor/editor_node.cpp #, fuzzy @@ -1854,7 +1840,7 @@ msgstr "終了する前に、'%s' への変更を保存しますか?" #: editor/editor_node.cpp #, fuzzy -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "~の名前でシーンを保存する" #: editor/editor_node.cpp @@ -1917,7 +1903,7 @@ msgstr "このアクションはundoできません. 元に戻しますか?" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "シーンをクイックランする" #: editor/editor_node.cpp @@ -1929,14 +1915,12 @@ msgid "Exit the editor?" msgstr "エディターを終了しますか?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "プロジェクトマネージャー" +msgstr "プロジェクトマネージャーを開きますか?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "ファイルを保存" +msgstr "ファイルを保存して終了" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -2096,8 +2080,8 @@ msgstr "以前のタブ" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "ファイルを絞り込む.." +msgid "Filter Files..." +msgstr "ファイルを絞り込む..." #: editor/editor_node.cpp #, fuzzy @@ -2111,13 +2095,13 @@ msgstr "新しいシーン" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "新しい継承したシーン.." +msgid "New Inherited Scene..." +msgstr "新しい継承したシーン..." #: editor/editor_node.cpp #, fuzzy -msgid "Open Scene.." -msgstr "シーンを開く.." +msgid "Open Scene..." +msgstr "シーンを開く..." #: editor/editor_node.cpp #, fuzzy @@ -2139,18 +2123,18 @@ msgstr "最近使ったファイルを開く" #: editor/editor_node.cpp #, fuzzy -msgid "Convert To.." -msgstr "~に変換する.." +msgid "Convert To..." +msgstr "~に変換する..." #: editor/editor_node.cpp #, fuzzy -msgid "MeshLibrary.." -msgstr "メッシュライブラリ.." +msgid "MeshLibrary..." +msgstr "メッシュライブラリ..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "タイルセット.." +msgid "TileSet..." +msgstr "タイルセット..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2199,7 +2183,7 @@ msgstr "ツール" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "終了してプロジェクトリストを開く" +msgstr "終了してプロジェクト一覧を開く" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -2339,7 +2323,6 @@ msgstr "クラス" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -#, fuzzy msgid "Search" msgstr "検索" @@ -2358,7 +2341,6 @@ msgid "Issue Tracker" msgstr "課題(バグ)管理システム" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Community" msgstr "コミュニティ" @@ -2456,8 +2438,8 @@ msgid "Save the currently edited resource." msgstr "現在編集中のリソースを保存する" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "名前を付けて保存.." +msgid "Save As..." +msgstr "名前を付けて保存..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2486,7 +2468,7 @@ msgstr "ベクトル定数を変更" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "インポート(取り込み)" +msgstr "インポート" #: editor/editor_node.cpp #, fuzzy @@ -2535,7 +2517,7 @@ msgstr "開いてスクリプトを実行する" #: editor/editor_node.cpp #, fuzzy msgid "New Inherited" -msgstr "新しい継承したシーン.." +msgstr "新しい継承したシーン..." #: editor/editor_node.cpp msgid "Load Errors" @@ -2574,8 +2556,8 @@ msgid "Creating Mesh Previews" msgstr "メッシュライブラリを生成" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "サムネイル.." +msgid "Thumbnail..." +msgstr "サムネイル..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2733,8 +2715,8 @@ msgid "(Current)" msgstr "(現在の)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "ミラーサイトを取得しています。しばらくお待ちください.." +msgid "Retrieving mirrors, please wait..." +msgstr "ミラーサイトを取得しています。しばらくお待ちください..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2817,8 +2799,8 @@ msgid "Error requesting url: " msgstr "urlの要求に失敗しました: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ミラーサイトに接続中.." +msgid "Connecting to Mirror..." +msgstr "ミラーサイトに接続中..." #: editor/export_template_manager.cpp #, fuzzy @@ -2835,8 +2817,8 @@ msgstr "解決できません" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "接続中.." +msgid "Connecting..." +msgstr "接続中..." #: editor/export_template_manager.cpp #, fuzzy @@ -2849,8 +2831,8 @@ msgstr "接続しました" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "リクエスト中.." +msgid "Requesting..." +msgstr "リクエスト中..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2914,7 +2896,7 @@ msgstr "サムネイル表示" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "リスト表示" +msgstr "リストでアイテムを見る" #: editor/filesystem_dock.cpp #, fuzzy @@ -2996,12 +2978,12 @@ msgid "Collapse all" msgstr "すべて折りたたむ" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "名前を変更する.." +msgid "Rename..." +msgstr "名前を変更する..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "~へ移動する.." +msgid "Move To..." +msgstr "~へ移動する..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3013,17 +2995,17 @@ msgid "Instance" msgstr "インスタンス" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "依存関係を編集.." +msgid "Edit Dependencies..." +msgstr "依存関係を編集..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "View Owners.." -msgstr "オーナーを見る.." +msgid "View Owners..." +msgstr "オーナーを見る..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製" #: editor/filesystem_dock.cpp @@ -3051,7 +3033,7 @@ msgstr "選択したノードの子として、選択したシーンをインス #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ファイルをスキャンしています\n" "しばらくお待ち下さい..." @@ -3064,7 +3046,7 @@ msgstr "移動" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "名前を変更する" +msgstr "名前の変更" #: editor/groups_editor.cpp #, fuzzy @@ -3079,12 +3061,12 @@ msgstr "グループから取り除く" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "シーンをインポート中.." +msgstr "シーンをインポート中..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "アニメーションをインポート.." +msgstr "アニメーションをインポート..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -3127,8 +3109,8 @@ msgstr "シーンをインポート" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Importing Scene.." -msgstr "シーンをインポート中.." +msgid "Importing Scene..." +msgstr "シーンをインポート中..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -3142,7 +3124,7 @@ msgstr "軸平行境界ボックス(AABB)を生成" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "カスタムスクリプトを実行中" #: editor/import/resource_importer_scene.cpp @@ -3163,8 +3145,8 @@ msgstr "インポート済みのスクリプト実行エラー" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Saving.." -msgstr "保存中.." +msgid "Saving..." +msgstr "保存中..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -3185,8 +3167,8 @@ msgid "Import As:" msgstr "~としてインポート:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "初期設定値.." +msgid "Preset..." +msgstr "初期設定値..." #: editor/import_dock.cpp #, fuzzy @@ -3670,8 +3652,8 @@ msgstr "トランジション(遷移)ノード" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Import Animations.." -msgstr "アニメーションをインポート.." +msgid "Import Animations..." +msgstr "アニメーションをインポート..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3679,8 +3661,8 @@ msgid "Edit Node Filters" msgstr "ノードフィルターの編集" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "フィルター.." +msgid "Filters..." +msgstr "フィルター..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3711,12 +3693,10 @@ msgid "Connection error, please try again." msgstr "接続失敗 再試行を" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect to host:" msgstr "ホストに接続できません:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "No response from host:" msgstr "ホストから応答がありません:" @@ -3762,8 +3742,8 @@ msgstr "取得中:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Resolving.." -msgstr "解決中.." +msgid "Resolving..." +msgstr "解決中..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3831,8 +3811,8 @@ msgid "Site:" msgstr "サイト:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "サポート.." +msgid "Support..." +msgstr "サポート..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4037,6 +4017,7 @@ msgid "Use Rotation Snap" msgstr "回転スナップ機能を使う" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Configure Snap..." msgstr "スナップ機能の設定" @@ -4516,8 +4497,8 @@ msgstr "凸型兄弟コリジョンを生成" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Outline Mesh.." -msgstr "アウトラインメッシュを生成.." +msgid "Create Outline Mesh..." +msgstr "アウトラインメッシュを生成..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4717,7 +4698,7 @@ msgstr "八分木テクスチャを生成" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "アウトラインメッシュを生成.." +msgstr "アウトラインメッシュを生成..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4758,8 +4739,8 @@ msgstr "イメージ読み込みエラー:" #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy -msgid "No pixels with transparency > 128 in image.." -msgstr "イメージ内に透明度>128のピクセルがありません.." +msgid "No pixels with transparency > 128 in image..." +msgstr "イメージ内に透明度>128のピクセルがありません..." #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -5179,8 +5160,8 @@ msgid "Import Theme" msgstr "テーマのインポート" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "テーマを名前をつけて保存.." +msgid "Save Theme As..." +msgstr "テーマを名前をつけて保存..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -5218,7 +5199,7 @@ msgstr "ファイル" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "新しい" +msgstr "新規作成" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5286,8 +5267,8 @@ msgstr "お気に入りを切り替える" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find.." -msgstr "検索.." +msgid "Find..." +msgstr "検索..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5508,18 +5489,18 @@ msgid "Find Previous" msgstr "前を検索" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "置き換え.." +msgid "Replace..." +msgstr "置き換え..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Function.." -msgstr "関数~に移動.." +msgid "Goto Function..." +msgstr "関数~に移動..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Line.." -msgstr "~行に移動.." +msgid "Goto Line..." +msgstr "~行に移動..." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6013,13 +5994,8 @@ msgstr "トランスフォーム" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Configure Snap.." -msgstr "スナップ機能の設定" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Transform Dialog.." -msgstr "トランスフォームのダイアログ.." +msgid "Transform Dialog..." +msgstr "トランスフォームのダイアログ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -6288,7 +6264,7 @@ msgid "Remove All" msgstr "削除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "テーマを編集..." #: editor/plugins/theme_editor_plugin.cpp @@ -6361,8 +6337,9 @@ msgid "Options" msgstr "オプション" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "オプション" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6496,7 +6473,7 @@ msgstr "シーンからマージしますか?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "タイルセット.." +msgstr "タイルセット..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6565,8 +6542,8 @@ msgid "Presets" msgstr "初期設定値" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "追加.." +msgid "Add..." +msgstr "追加..." #: editor/project_export.cpp msgid "Resources" @@ -6664,9 +6641,8 @@ msgid "Please choose a 'project.godot' file." msgstr "'project.godot' ファイルを選択してください." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "'project.godot' ファイルを選択してください." +msgstr "空のフォルダーを選択してください。" #: editor/project_manager.cpp msgid "Imported Project" @@ -6674,12 +6650,17 @@ msgstr "インポートされたプロジェクト" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "プロジェクト名:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "フォルダを作成できませんでした。" #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "このパスには、指定された名前のフォルダーが既に存在します。" #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6713,9 +6694,8 @@ msgid "The following files failed extraction from package:" msgstr "以下のファイルをパッケージから抽出できませんでした:" #: editor/project_manager.cpp -#, fuzzy msgid "Rename Project" -msgstr "名無しのプロジェクト" +msgstr "プロジェクト名の変更" #: editor/project_manager.cpp msgid "New Game Project" @@ -6732,12 +6712,11 @@ msgstr "インポートして開く" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "新しいプロジェクトを作る" +msgstr "新規プロジェクトを作成" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "発光物を生成" +msgstr "作成して編集" #: editor/project_manager.cpp msgid "Install Project:" @@ -6749,14 +6728,12 @@ msgid "Install & Edit" msgstr "インストール" #: editor/project_manager.cpp -#, fuzzy msgid "Project Name:" msgstr "プロジェクト名:" #: editor/project_manager.cpp -#, fuzzy msgid "Create folder" -msgstr "フォルダを作成する" +msgstr "フォルダを作成" #: editor/project_manager.cpp msgid "Project Path:" @@ -6764,16 +6741,15 @@ msgstr "プロジェクトパス:" #: editor/project_manager.cpp msgid "Browse" -msgstr "ブラウズ" +msgstr "参照…" #: editor/project_manager.cpp msgid "Unnamed Project" msgstr "名無しのプロジェクト" #: editor/project_manager.cpp -#, fuzzy msgid "Can't open project" -msgstr "接続失敗." +msgstr "プロジェクトを開けません" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -6801,19 +6777,17 @@ msgid "Are you sure to run more than one project?" msgstr "複数のプロジェクトを本当に実行しますか?" #: editor/project_manager.cpp -#, fuzzy 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 "" -"言語が変更されました.\n" -"エディタまたはプロジェクトマネジャー再開時にUIが更新されます." +"言語が変更されました。\n" +"エディターまたはプロジェクトマネージャー再起動後にUIが更新されます。" #: editor/project_manager.cpp msgid "" @@ -6827,7 +6801,7 @@ msgstr "プロジェクトマネージャー" #: editor/project_manager.cpp msgid "Project List" -msgstr "プロジェクトのリスト" +msgstr "プロジェクト一覧" #: editor/project_manager.cpp msgid "Scan" @@ -6839,34 +6813,31 @@ msgstr "スキャンするフォルダーを選択" #: editor/project_manager.cpp msgid "New Project" -msgstr "新しいプロジェクト" +msgstr "新規プロジェクト" #: editor/project_manager.cpp -#, fuzzy msgid "Templates" -msgstr "選択しているものを削除" +msgstr "テンプレート" #: editor/project_manager.cpp msgid "Exit" msgstr "終了" #: editor/project_manager.cpp -#, fuzzy msgid "Restart Now" -msgstr "アニメーションを最初から再生する :" +msgstr "今すぐ再起動" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "接続失敗." +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 "" -"あなたは現在どのプロジェクトも持っていません。\n" -"アセットライブラリで公式のサンプルプロジェクトを探しましょうか?" +"プロジェクトが何も登録されていません。\n" +"アセットライブラリで公式のサンプルプロジェクトをチェックしますか?" #: editor/project_settings_editor.cpp #, fuzzy @@ -6889,8 +6860,8 @@ msgstr "マウスボタン" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6920,8 +6891,8 @@ msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp #, fuzzy -msgid "Press a Key.." -msgstr "キーを押してください.." +msgid "Press a Key..." +msgstr "キーを押してください..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -7123,7 +7094,7 @@ msgid "Property:" msgstr "プロパティ:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -7226,12 +7197,12 @@ msgid "Easing Out-In" msgstr "イージング(Out-In)" #: editor/property_editor.cpp -msgid "File.." -msgstr "ファイル.." +msgid "File..." +msgstr "ファイル..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "ディレクトリ.." +msgid "Dir..." +msgstr "ディレクトリ..." #: editor/property_editor.cpp msgid "Assign" @@ -7262,7 +7233,7 @@ msgstr "ファイルシステム上で表示" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "~に変換する.." +msgstr "~に変換する..." #: editor/property_editor.cpp #, fuzzy @@ -7427,8 +7398,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "この処理にはインスタンス化されたシーンが必要です." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "新規シーンに名前を付けて保存.." +msgid "Save New Scene As..." +msgstr "新規シーンに名前を付けて保存..." #: editor/scene_tree_dock.cpp #, fuzzy @@ -8002,12 +7973,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "プラットフォームへコピー.." +msgstr "プラットフォームへコピー..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -8016,12 +7987,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "GDNativeLibrary" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -9054,7 +9025,7 @@ msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "確認してください。" +msgstr "確認" #: scene/gui/file_dialog.cpp #, fuzzy @@ -9072,15 +9043,14 @@ msgstr "" "らは実行時に非表示になります。" #: 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 "" -"スクロールコンテナは子コントロールが動作に必要です. VBox,HBoxなどのコンテナ" -"を子とするか、コントロールをカスタム最小サイズにマニュアルで指定して使用して" -"ください." +"ScrollContainerは単一の子コントロールで動作するように意図されています。コンテ" +"ナ(VBox, HBoxなど)を子として使用するか、コントロールを使用してカスタム最小サ" +"イズを手動で設定してください。" #: scene/gui/tree.cpp #, fuzzy @@ -9124,6 +9094,13 @@ msgstr "フォント読み込みエラー。" msgid "Invalid font size." msgstr "無効なフォント サイズです。" +#, fuzzy +#~ msgid "Previous" +#~ msgstr "以前のタブ" + +#~ msgid "Next" +#~ msgstr "次" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "不正なアクション( '/' と':'は不可です)." @@ -9152,9 +9129,6 @@ msgstr "無効なフォント サイズです。" #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "project.godotをプロジェクトパスに生成できませんでした" -#~ msgid "Next" -#~ msgstr "次" - #~ msgid "Not found!" #~ msgstr "見つかりません!" @@ -9306,8 +9280,8 @@ msgstr "無効なフォント サイズです。" #~ msgstr "%sにエクスポート中" #, fuzzy -#~ msgid "Setting Up.." -#~ msgstr "セットアップ中.." +#~ msgid "Setting Up..." +#~ msgstr "セットアップ中..." #, fuzzy #~ msgid "Error loading scene." @@ -9375,8 +9349,8 @@ msgstr "無効なフォント サイズです。" #~ msgstr "インフォーメーション" #, fuzzy -#~ msgid "Re-Import.." -#~ msgstr "再インポート.." +#~ msgid "Re-Import..." +#~ msgstr "再インポート..." #, fuzzy #~ msgid "No bit masks to import!" @@ -9871,15 +9845,15 @@ msgstr "無効なフォント サイズです。" #~ msgstr "ズーム (%):" #, fuzzy -#~ msgid "Skeleton.." -#~ msgstr "スケルトン.." +#~ msgid "Skeleton..." +#~ msgstr "スケルトン..." #~ msgid "Zoom Reset" #~ msgstr "ズームをリセット" #, fuzzy -#~ msgid "Zoom Set.." -#~ msgstr "ズームをセットする.." +#~ msgid "Zoom Set..." +#~ msgstr "ズームをセットする..." #~ msgid "Set a Value" #~ msgstr "値を設定する" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index c3fcfbbb72..be6b540a9a 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -2,20 +2,20 @@ # 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. -# # Ch <ccwpc@hanmail.net>, 2017. # paijai 송 (fivejobi) <xotjq237@gmail.com>, 2018. +# pgyage3263 <pgyage3263@naver.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. -# +# 송태섭 <xotjq237@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-18 15:39+0000\n" -"Last-Translator: Sun Kim <perplexingsun@gmail.com>\n" +"PO-Revision-Date: 2018-06-07 16:40+0000\n" +"Last-Translator: pgyage3263 <pgyage3263@naver.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -23,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 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -39,7 +39,7 @@ msgstr "애니메이션 키프레임 시간 변경" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "애니메이션 트랜지션 변경" +msgstr "애니메이션 전환 변경" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -75,7 +75,7 @@ msgstr "애니메이션 트랙 삭제" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "변화 설정:" +msgstr "전환 설정:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -181,7 +181,7 @@ msgstr "밖-안" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "변화" +msgstr "전환" #: editor/animation_editor.cpp msgid "Optimize Animation" @@ -322,7 +322,7 @@ msgstr "키" #: editor/animation_editor.cpp msgid "Transition" -msgstr "변화" +msgstr "전환" #: editor/animation_editor.cpp msgid "Scale Ratio:" @@ -504,8 +504,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s'와 '%s'의 연결 해제" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "연결하기.." +msgid "Connect..." +msgstr "연결하기..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -923,12 +923,12 @@ msgid "Move Audio Bus" msgstr "오디오 버스 이동" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "오디오 버스 레이아웃을 다른 이름으로 저장.." +msgid "Save Audio Bus Layout As..." +msgstr "오디오 버스 레이아웃을 다른 이름으로 저장..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "새 레이아웃을 저장할 장소.." +msgid "Location for New Layout..." +msgstr "새 레이아웃을 저장할 장소..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -966,7 +966,7 @@ msgstr "다른 이름으로 저장" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "이 버스 레이아웃을 파일로 저장합니다.." +msgstr "이 버스 레이아웃을 파일로 저장합니다..." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1065,12 +1065,12 @@ msgid "Updating Scene" msgstr "씬 업데이트 중" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "로컬 변경사항을 저장 중.." +msgid "Storing local changes..." +msgstr "로컬 변경사항을 저장 중..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "씬 업데이트 중.." +msgid "Updating scene..." +msgstr "씬 업데이트 중..." #: editor/editor_data.cpp msgid "[empty]" @@ -1138,8 +1138,8 @@ msgid "Show In File Manager" msgstr "파일 매니저에서 보기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "새 폴더.." +msgid "New Folder..." +msgstr "새 폴더..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1400,20 +1400,20 @@ msgstr "출력 지우기" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "프로젝트 내보내기가 오류 코드 %d 로 실패했습니다." #: 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 "리소스를 다른 이름으로 저장.." +msgid "Save Resource As..." +msgstr "리소스를 다른 이름으로 저장..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "알겠습니다.." +msgid "I see..." +msgstr "알겠습니다..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1437,7 +1437,7 @@ msgstr "'%s' 파싱 중 에러." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "예상치 못한 파일의 끝 '%s' 입니다.." +msgstr "예상치 못한 파일의 끝 '%s' 입니다..." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -1639,12 +1639,12 @@ msgid "Open Base Scene" msgstr "기본 씬 열기" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "빠른 씬 열기.." +msgid "Quick Open Scene..." +msgstr "빠른 씬 열기..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "빠른 스크립트 열기.." +msgid "Quick Open Script..." +msgstr "빠른 스크립트 열기..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1655,8 +1655,8 @@ msgid "Save changes to '%s' before closing?" msgstr "닫기 전에 '%s' 에 변경사항을 저장하시겠습니까?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "씬을 다른 이름으로 저장.." +msgid "Save Scene As..." +msgstr "씬을 다른 이름으로 저장..." #: editor/editor_node.cpp msgid "No" @@ -1707,8 +1707,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "이 행동은 취소가 불가능합니다. 무시하고 되돌리시겠습니까?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "빠른 씬 실행.." +msgid "Quick Run Scene..." +msgstr "빠른 씬 실행..." #: editor/editor_node.cpp msgid "Quit" @@ -1862,8 +1862,8 @@ msgid "Previous tab" msgstr "이전 탭" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "파일 필터링.." +msgid "Filter Files..." +msgstr "파일 필터링..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1874,12 +1874,12 @@ msgid "New Scene" msgstr "새 씬" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "새 상속 씬.." +msgid "New Inherited Scene..." +msgstr "새 상속 씬..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "씬 열기.." +msgid "Open Scene..." +msgstr "씬 열기..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1898,16 +1898,16 @@ msgid "Open Recent" msgstr "최근 열었던 항목" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "변환.." +msgid "Convert To..." +msgstr "변환..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "메시 라이브러리.." +msgid "MeshLibrary..." +msgstr "메시 라이브러리..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "타일 셋.." +msgid "TileSet..." +msgstr "타일 셋..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2171,8 +2171,8 @@ msgid "Save the currently edited resource." msgstr "현재 편집된 리소스 저장." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "다른 이름으로 저장.." +msgid "Save As..." +msgstr "다른 이름으로 저장..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2280,8 +2280,8 @@ msgid "Creating Mesh Previews" msgstr "메시 미리보기 생성 중" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "썸네일.." +msgid "Thumbnail..." +msgstr "썸네일..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2433,8 +2433,8 @@ msgid "(Current)" msgstr "(현재)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "미러를 가져오는 중입니다, 잠시만 기다리세요.." +msgid "Retrieving mirrors, please wait..." +msgstr "미러를 가져오는 중입니다, 잠시만 기다리세요..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2511,8 +2511,8 @@ msgid "Error requesting url: " msgstr "url 요청 에러: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "미러에 연결중.." +msgid "Connecting to Mirror..." +msgstr "미러에 연결중..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2528,8 +2528,8 @@ msgstr "해결할 수 없음" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "연결중.." +msgid "Connecting..." +msgstr "연결중..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2541,8 +2541,8 @@ msgstr "연결됨" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "요청중.." +msgid "Requesting..." +msgstr "요청중..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2674,12 +2674,12 @@ msgid "Collapse all" msgstr "모두 접기" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "이름 변경.." +msgid "Rename..." +msgstr "이름 변경..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "이동.." +msgid "Move To..." +msgstr "이동..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2690,16 +2690,16 @@ msgid "Instance" msgstr "인스턴스" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "종속 관계 편집.." +msgid "Edit Dependencies..." +msgstr "종속 관계 편집..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "소유자 보기.." +msgid "View Owners..." +msgstr "소유자 보기..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "복제.." +msgid "Duplicate..." +msgstr "복제..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2724,10 +2724,10 @@ msgstr "선택된 씬을 선택된 노드의 자식으로 인스턴스 합니다 #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "파일 스캔중,\n" -"잠시만 기다려주세요.." +"잠시만 기다려주세요..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2792,8 +2792,8 @@ msgid "Import Scene" msgstr "씬 가져오기" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "씬 가져오는 중.." +msgid "Importing Scene..." +msgstr "씬 가져오는 중..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2804,8 +2804,8 @@ msgid "Generating for Mesh: " msgstr "메시를 위해 생성 중: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "사용자 정의 스크립트 실행중.." +msgid "Running Custom Script..." +msgstr "사용자 정의 스크립트 실행중..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2821,8 +2821,8 @@ msgid "Error running post-import script:" msgstr "가져오기 후 실행할 스크립트 실행 중 에러:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "저장 중.." +msgid "Saving..." +msgstr "저장 중..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2841,8 +2841,8 @@ msgid "Import As:" msgstr "다음 형식으로 가져오기:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "프리셋.." +msgid "Preset..." +msgstr "프리셋..." #: editor/import_dock.cpp msgid "Reimport" @@ -3256,19 +3256,19 @@ msgstr "시간 탐색 노드" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "변화 노드" +msgstr "전환 노드" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "애니메이션 가져오기.." +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 "필터.." +msgid "Filters..." +msgstr "필터..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3335,8 +3335,8 @@ msgid "Fetching:" msgstr "가져오는 중:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "해결 중.." +msgid "Resolving..." +msgstr "해결 중..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3402,8 +3402,8 @@ msgid "Site:" msgstr "사이트:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "지원.." +msgid "Support..." +msgstr "지원..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3596,6 +3596,7 @@ msgid "Use Rotation Snap" msgstr "회전 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "스냅 설정..." @@ -3692,14 +3693,12 @@ 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개 뷰포트" +msgstr "뷰포트 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3992,7 +3991,7 @@ msgstr "메시에 외곽선을 만들기 위한 서피스가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "메시 기본 타입이 PRIMITIVE_TRIANGLES이 아닙니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4023,8 +4022,8 @@ msgid "Create Convex Collision Sibling" msgstr "Convex 충돌 형제 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "외곽선 메시 만들기.." +msgid "Create Outline Mesh..." +msgstr "외곽선 메시 만들기..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4228,8 +4227,8 @@ msgid "Error loading image:" msgstr "이미지 로드 에러:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "이미지에 투명도가 128보다 큰 픽셀이 없습니다.." +msgid "No pixels with transparency > 128 in image..." +msgstr "이미지에 투명도가 128보다 큰 픽셀이 없습니다..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4589,8 +4588,8 @@ msgid "Import Theme" msgstr "테마 가져오기" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "테마 다른 이름으로 저장.." +msgid "Save Theme As..." +msgstr "테마 다른 이름으로 저장..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4686,8 +4685,8 @@ msgstr "스크립트 패널 토글" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "찾기.." +msgid "Find..." +msgstr "찾기..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4894,16 +4893,16 @@ msgid "Find Previous" msgstr "이전 찾기" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "변경.." +msgid "Replace..." +msgstr "변경..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "함수로 이동.." +msgid "Goto Function..." +msgstr "함수로 이동..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "라인으로 이동.." +msgid "Goto Line..." +msgstr "라인으로 이동..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5356,12 +5355,8 @@ msgid "Transform" msgstr "변형" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "스냅 설정.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "변형 다이얼로그.." +msgid "Transform Dialog..." +msgstr "변형 다이얼로그..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5613,8 +5608,8 @@ msgid "Remove All" msgstr "모두 삭제" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "테마 편집.." +msgid "Edit theme..." +msgstr "테마 편집..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5661,14 +5656,12 @@ msgid "Checked Item" msgstr "항목 확인됨" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "항목 추가" +msgstr "라디오 항목" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "항목 확인됨" +msgstr "라디오 항목 확인됨" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5683,8 +5676,8 @@ msgid "Options" msgstr "옵션" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "가진다,많은,여러,옵션들!" +msgid "Has,Many,Options" +msgstr "가진다,많은,옵션들" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5875,8 +5868,8 @@ msgid "Presets" msgstr "프리셋" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "추가.." +msgid "Add..." +msgstr "추가..." #: editor/project_export.cpp msgid "Resources" @@ -5965,6 +5958,10 @@ msgid "Imported Project" msgstr "가져온 프로젝트" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "인식할수 없는 프로젝트 명입니다." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "폴더를 만들 수 없습니다." @@ -6163,9 +6160,11 @@ msgstr "마우스 버튼" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"인식할수 없는 액션 이름입니다. 공백이거나, '/' , ':', '=', '\\', '\"' 가 포함" +"되면 안 됩니다." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6192,8 +6191,8 @@ msgid "Control+" msgstr "컨트롤+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "키를 눌러주세요.." +msgid "Press a Key..." +msgstr "키를 눌러주세요..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6376,8 +6375,8 @@ msgid "Property:" msgstr "속성:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "재정의.." +msgid "Override For..." +msgstr "재정의..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6472,12 +6471,12 @@ msgid "Easing Out-In" msgstr "가속-감속" #: editor/property_editor.cpp -msgid "File.." -msgstr "파일.." +msgid "File..." +msgstr "파일..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "디렉토리.." +msgid "Dir..." +msgstr "디렉토리..." #: editor/property_editor.cpp msgid "Assign" @@ -6647,8 +6646,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "이 작업은 인스턴스된 씬에서는 불가합니다." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "새 씬을 다른 이름으로 저장.." +msgid "Save New Scene As..." +msgstr "새 씬을 다른 이름으로 저장..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7363,7 +7362,7 @@ msgstr "거리 선택:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "클래스 이름은 키워드가 될 수 없습니다" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8064,7 +8063,7 @@ msgstr "Path 속성은 유효한 Spatial 노드를 가리켜야 합니다." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment는 Environment 리소스가 필요합니다." #: scene/3d/scenario_fx.cpp msgid "" @@ -8076,6 +8075,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"이 WorldEnvironment는 무시됩니다. (3D 씬을 위해) Camera를 추가하거나 아니면 " +"(2D 씬을 위해) 이 환경의 배경 모드를 Canvas로 설정하세요." #: scene/3d/sprite_3d.cpp msgid "" @@ -8172,6 +8173,13 @@ msgstr "폰트 로딩 에러." msgid "Invalid font size." msgstr "유효하지 않은 폰트 크기." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "이전 탭" + +#~ msgid "Next" +#~ msgstr "다음" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "유효하지 않은 액션 ('/' 또는 ':' 문자 사용 불가)." @@ -8197,9 +8205,6 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "프로젝트 경로에 project.godot 파일을 찾을 수 없습니다." -#~ msgid "Next" -#~ msgstr "다음" - #~ msgid "Not found!" #~ msgstr "찾을 수 없음!" @@ -8333,8 +8338,8 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Exporting for %s" #~ msgstr "%s 내보내기" -#~ msgid "Setting Up.." -#~ msgstr "설정 중.." +#~ msgid "Setting Up..." +#~ msgstr "설정 중..." #~ msgid "Error loading scene." #~ msgstr "씬 로딩 중 에러." @@ -8388,8 +8393,8 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Info" #~ msgstr "정보" -#~ msgid "Re-Import.." -#~ msgstr "다시 가져오기.." +#~ msgid "Re-Import..." +#~ msgstr "다시 가져오기..." #~ msgid "No bit masks to import!" #~ msgstr "가져올 비트 마스크가 없습니다!" @@ -8781,14 +8786,14 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Zoom (%):" #~ msgstr "확대 (%):" -#~ msgid "Skeleton.." -#~ msgstr "스켈레톤.." +#~ msgid "Skeleton..." +#~ msgstr "스켈레톤..." #~ msgid "Zoom Reset" #~ msgstr "확대 초기화" -#~ msgid "Zoom Set.." -#~ msgstr "확대 설정.." +#~ msgid "Zoom Set..." +#~ msgstr "확대 설정..." #~ msgid "Set a Value" #~ msgstr "값 설정" @@ -9219,8 +9224,8 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Export Project PCK" #~ msgstr "프로젝트 PCK 내보내기" -#~ msgid "Export.." -#~ msgstr "내보내기.." +#~ msgid "Export..." +#~ msgstr "내보내기..." #~ msgid "Project Export" #~ msgstr "프로젝트 내보내기" @@ -9333,8 +9338,8 @@ msgstr "유효하지 않은 폰트 크기." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "툴 스크립트 다시 로드 (소프트)" -#~ msgid "Edit Connections.." -#~ msgstr "연결 편집.." +#~ msgid "Edit Connections..." +#~ msgstr "연결 편집..." #~ msgid "Set Params" #~ msgstr "속성 적용" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 6504e570f7..bf4443627a 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -2,14 +2,12 @@ # 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. -# # Ignas Kiela <ignaskiela@super.lt>, 2017. -# Kornelijus <kornelijus.github@gmail.com>, 2017. -# +# Kornelijus <kornelijus.github@gmail.com>, 2017, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-11-27 00:48+0000\n" +"PO-Revision-Date: 2018-06-12 09:40+0000\n" "Last-Translator: Kornelijus <kornelijus.github@gmail.com>\n" "Language-Team: Lithuanian <https://hosted.weblate.org/projects/godot-engine/" "godot/lt/>\n" @@ -18,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n%10>=2 && (n%100<10 || n" "%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -503,7 +501,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Prijungti '%s' prie '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -914,11 +912,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 @@ -1054,11 +1052,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 @@ -1127,7 +1125,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 @@ -1389,12 +1387,12 @@ 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 @@ -1599,11 +1597,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 @@ -1615,7 +1613,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 @@ -1667,7 +1665,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 @@ -1812,7 +1810,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,11 +1822,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 @@ -1848,15 +1846,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 @@ -2022,11 +2020,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Bendruomenė" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "Apie" #: editor/editor_node.cpp msgid "Play the project." @@ -2101,7 +2099,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 @@ -2210,8 +2208,8 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatūra.." +msgid "Thumbnail..." +msgstr "Miniatūra..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2362,7 +2360,7 @@ msgid "(Current)" msgstr "(Esama)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2439,7 +2437,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 @@ -2456,7 +2454,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2469,7 +2467,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2605,11 +2603,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 @@ -2621,16 +2619,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplikuoti" #: editor/filesystem_dock.cpp @@ -2656,7 +2654,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2722,7 +2720,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2734,7 +2732,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 @@ -2750,7 +2748,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2770,7 +2768,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3186,8 +3184,8 @@ msgid "Transition Node" msgstr "Transition Nodas" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importuoti Animacijas.." +msgid "Import Animations..." +msgstr "Importuoti Animacijas..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" @@ -3195,8 +3193,8 @@ msgstr "Redaguoti Nodų Filtrus" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Filters.." -msgstr "Filtrai.." +msgid "Filters..." +msgstr "Filtrai..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3264,7 +3262,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3331,7 +3329,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3518,6 +3516,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3939,7 +3938,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 @@ -4144,7 +4143,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 @@ -4505,7 +4504,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 @@ -4602,7 +4601,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 @@ -4808,15 +4807,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 @@ -5268,11 +5267,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5525,7 +5520,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5593,7 +5588,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5781,7 +5776,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5871,6 +5866,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Netinkamas šrifto dydis." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6060,8 +6060,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6089,7 +6089,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 @@ -6273,7 +6273,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6369,11 +6369,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 @@ -6544,7 +6544,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 diff --git a/editor/translations/ms.po b/editor/translations/ms.po new file mode 100644 index 0000000000..19d8b6b7d8 --- /dev/null +++ b/editor/translations/ms.po @@ -0,0 +1,7956 @@ +# Malay 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. +# +# Sam Vanguard <syafz119@gmail.com>, 2018. +# Shaqir Rafiq <moshamoradev@gmail.com>, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2018-06-05 19:27+0000\n" +"Last-Translator: Shaqir Rafiq <moshamoradev@gmail.com>\n" +"Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" +"ms/>\n" +"Language: ms\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 3.0\n" + +#: editor/animation_editor.cpp +msgid "Disabled" +msgstr "Tidak Aktif" + +#: editor/animation_editor.cpp +msgid "All Selection" +msgstr "Semua Pilihan" + +#: editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Keyframe Time" +msgstr "Anim Ubah Masa Keyframe" + +#: editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "Anim Ubah Peralihan" + +#: editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Anim Ubah Penukaran" + +#: editor/animation_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Anim Ubah Nilai Keyframe" + +#: editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "Anim Ubah Panggilan" + +#: editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Anim Tambah Trek" + +#: editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Anim Menduakan Kunci" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "Ubah Trek Anim Ke Atas" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "Ubah Trek Anim Ke Bawah" + +#: editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Buang Trek Anim" + +#: editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Set Peralihan ke:" + +#: editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Ubah Nama Trek Anim" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Wrap Mode" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: 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 "" + +#: editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: 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 +#: editor/plugins/spatial_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 "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 "Has,Many,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 "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "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/nb.po b/editor/translations/nb.po index 17123dc8fc..e76053150c 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -2,27 +2,27 @@ # 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. -# # Allan Nordhøy <epost@anotheragency.no>, 2017-2018. # Anonymous <GentleSaucepan@protonmail.com>, 2017. +# Elias <eliasnykrem@gmail.com>, 2018. # flesk <eivindkn@gmail.com>, 2017. +# Frank T. Rambol <frank@d-fect.com>, 2018. # Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>, 2016. # NicolaiF <nico-fre@hotmail.com>, 2017-2018. # Norwegian Disaster <stian.furu.overbye@gmail.com>, 2017. # passeride <lukas@passeride.com>, 2017. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-03-22 03:38+0000\n" -"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" +"PO-Revision-Date: 2018-06-22 08:31+0000\n" +"Last-Translator: Frank T. Rambol <frank@d-fect.com>\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.20-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -33,9 +33,8 @@ msgid "All Selection" msgstr "Alle valg" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Forandre Verdi" +msgstr "Anim Endre Nøkkelbildetid" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -46,9 +45,8 @@ msgid "Anim Change Transform" msgstr "Anim Forandre Omforming" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Forandre Verdi" +msgstr "Anim Endre Nøkkelbildeverdi" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -99,9 +97,8 @@ msgid "Edit Node Curve" msgstr "Forandre Nodekurve" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Selection Curve" -msgstr "Forandre utvalgskurve" +msgstr "Rediger utvalgskurve" #: editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -501,13 +498,12 @@ msgid "Connecting Signal:" msgstr "Kobler Til Signal:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "Koble '%s' til '%s'" +msgstr "Koble '%s' fra '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Koble Til.." +msgid "Connect..." +msgstr "Koble Til..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -519,9 +515,8 @@ msgid "Signals" msgstr "Signaler" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Endre standard type" +msgstr "Endre %s type" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -529,9 +524,8 @@ msgid "Change" msgstr "Forandre" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Lag Ny" +msgstr "Lag ny %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -598,7 +592,7 @@ msgstr "Ressurs" #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/script_create_dialog.cpp msgid "Path" -msgstr "Sti" +msgstr "Søkesti" #: editor/dependency_editor.cpp msgid "Dependencies:" @@ -642,9 +636,8 @@ msgstr "" "Fjern dem likevel? (kan ikke angres)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "Kan ikke fjerne:\n" +msgstr "Kan ikke fjerne:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -729,9 +722,8 @@ msgid "Lead Developer" msgstr "Utviklingsleder" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Prosjektleder" +msgstr "Prosjektleder " #: editor/editor_about.cpp msgid "Developers" @@ -840,9 +832,8 @@ msgid "Rename Audio Bus" msgstr "Gi nytt navn til Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Veksle Audio Bus Solo" +msgstr "Endre Lydbuss Volum" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -885,7 +876,6 @@ msgid "Mute" msgstr "Demp" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bypass" msgstr "Omgå" @@ -935,12 +925,12 @@ msgid "Move Audio Bus" msgstr "Flytt Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Lagre Audio Bus Oppsett som..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Plassering for nytt oppsett.." +msgid "Location for New Layout..." +msgstr "Plassering for nytt oppsett..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1078,12 +1068,12 @@ msgid "Updating Scene" msgstr "Oppdaterer Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Lagrer lokale endringer.." +msgid "Storing local changes..." +msgstr "Lagrer lokale endringer..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Oppdaterer scene.." +msgid "Updating scene..." +msgstr "Oppdaterer scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1131,9 +1121,8 @@ msgid "Packing" msgstr "Pakking" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Malfil ble ikke funnet:\n" +msgstr "Malfil ble ikke funnet:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" @@ -1152,8 +1141,8 @@ msgid "Show In File Manager" msgstr "Vis I Filutforsker" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Ny Mappe.." +msgid "New Folder..." +msgstr "Ny Mappe..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1344,19 +1333,18 @@ msgid "Description" msgstr "Beskrivelse" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentasjon" +msgstr "Online dokumentasjon:" #: 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 "" -"Det finnes i øyeblikket ingen beskrivelse av denne metoden. Hjelp til ved å " -"[colour=$color][url=$url]bidra med en[/url][/color]!" +"Det finnes i øyeblikket ingen beskrivelse av denne metoden, men du kan " +"[colour=$color][url=$url]bidra med en[/url][/color] eller [color=$color][url=" +"$url2]be om en[/url][/color]." #: editor/editor_help.cpp msgid "Properties" @@ -1410,27 +1398,25 @@ msgid "Clear" msgstr "Tøm" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Output" +msgstr "Nullstill resultat" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Eksport av prosjektet mislyktes med feilkode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Feil ved lagring av ressurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Lagre Ressurs Som.." +msgid "Save Resource As..." +msgstr "Lagre Ressurs Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -#, fuzzy -msgid "I see.." -msgstr "Jeg ser.." +msgid "I see..." +msgstr "Jeg forstår..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1453,9 +1439,8 @@ msgid "Error while parsing '%s'." msgstr "Error ved parsing av '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unexpected end of file '%s'." -msgstr "Uventet ende av fil '%s'." +msgstr "Uventet slutt på fil '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -1482,13 +1467,12 @@ msgid "This operation can't be done without a tree root." msgstr "Denne operasjonen kan ikke gjennomføres uten en trerot." #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Kunne ikke lagre scene. Sannsynligvis avhengigheter (instanser) ikke kunne " -"oppfylles." +"Kunne ikke lagre scene. Sannsynligvis kunne ikke avhengigheter (instanser " +"eller arvinger) oppfylles." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1600,14 +1584,12 @@ msgid "Copy Resource" msgstr "Kopier Ressurs" #: editor/editor_node.cpp -#, fuzzy msgid "Make Built-In" -msgstr "Lag Innebygd" +msgstr "Lag innebygget" #: editor/editor_node.cpp -#, fuzzy msgid "Make Sub-Resources Unique" -msgstr "Gjør Underressurs Unik" +msgstr "Lag underressurser unike" #: editor/editor_node.cpp msgid "Open in Help" @@ -1628,14 +1610,13 @@ msgstr "" "'applikasjon'." #: editor/editor_node.cpp -#, fuzzy 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 "" -"Valgte scene '%s' finnes ikke, velg en gyldig en?\n" -"Du kan endre dette senere under \"Prosjekt Innstillinger\" under kategorien " +"Den valgte scenen '%s' finnes ikke. Vil du velge en gyldig scene?\n" +"Du kan endre dette senere i \"Prosjektinnstillinger\" under kategorien " "'applikasjon'." #: editor/editor_node.cpp @@ -1665,12 +1646,12 @@ msgid "Open Base Scene" msgstr "Åpne Base Scene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Hurtigåpne Scene.." +msgid "Quick Open Scene..." +msgstr "Hurtigåpne Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Hurtigåpne Skript.." +msgid "Quick Open Script..." +msgstr "Hurtigåpne Skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1681,8 +1662,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Lagre endringer til '%s' før lukking?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Lagre Scene Som.." +msgid "Save Scene As..." +msgstr "Lagre Scene Som..." #: editor/editor_node.cpp msgid "No" @@ -1733,8 +1714,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Denne handlingen kan ikke angres. Gå tilbake likevel?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hurtigkjør Scene.." +msgid "Quick Run Scene..." +msgstr "Hurtigkjør Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1887,8 +1868,8 @@ msgid "Previous tab" msgstr "Forrige fane" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer Filer.." +msgid "Filter Files..." +msgstr "Filtrer Filer..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1899,12 +1880,12 @@ msgid "New Scene" msgstr "Ny Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Ny Arvet Scene.." +msgid "New Inherited Scene..." +msgstr "Ny Arvet Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Åpne Scene.." +msgid "Open Scene..." +msgstr "Åpne Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1923,17 +1904,17 @@ msgid "Open Recent" msgstr "Åpne Nylig" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konverter Til.." +msgid "Convert To..." +msgstr "Konverter Til..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshBibliotek.." +msgid "MeshLibrary..." +msgstr "MeshBibliotek..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet…" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1983,9 +1964,8 @@ msgid "Debug" msgstr "Debug" #: editor/editor_node.cpp -#, fuzzy msgid "Deploy with Remote Debug" -msgstr "Deploy med Ekstern Debug" +msgstr "Distribuer med ekstern feilsøking" #: editor/editor_node.cpp #, fuzzy @@ -2145,7 +2125,7 @@ msgstr "Pause scenen" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "Pause Scene" +msgstr "Sett scenen på pause" #: editor/editor_node.cpp msgid "Stop the scene." @@ -2205,8 +2185,8 @@ msgid "Save the currently edited resource." msgstr "Lagre den nylige redigerte ressursen." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Lagre Som.." +msgid "Save As..." +msgstr "Lagre Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2315,8 +2295,8 @@ msgid "Creating Mesh Previews" msgstr "Lager Forhåndsvisning av Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatyrbilde.." +msgid "Thumbnail..." +msgstr "Miniatyrbilde..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2473,8 +2453,8 @@ msgid "(Current)" msgstr "(Gjeldende)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Henter fillager, vennligst vent.." +msgid "Retrieving mirrors, please wait..." +msgstr "Henter fillager, vennligst vent..." #: editor/export_template_manager.cpp #, fuzzy @@ -2556,8 +2536,8 @@ msgid "Error requesting url: " msgstr "Error ved forespørsel av url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Kobler til Fillager.." +msgid "Connecting to Mirror..." +msgstr "Kobler til Fillager..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2573,8 +2553,8 @@ msgstr "Kan ikke Løses" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Kobler til.." +msgid "Connecting..." +msgstr "Kobler til..." #: editor/export_template_manager.cpp #, fuzzy @@ -2588,8 +2568,8 @@ msgstr "Tilkoblet" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Requesting.." -msgstr "Ber om.." +msgid "Requesting..." +msgstr "Ber om..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2734,12 +2714,12 @@ msgid "Collapse all" msgstr "Kollaps alle" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Endre Navn.." +msgid "Rename..." +msgstr "Endre Navn..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Flytt Til.." +msgid "Move To..." +msgstr "Flytt Til..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2751,16 +2731,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Endre Avhengigheter.." +msgid "Edit Dependencies..." +msgstr "Endre Avhengigheter..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vis Eiere.." +msgid "View Owners..." +msgstr "Vis Eiere..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplisér" #: editor/filesystem_dock.cpp @@ -2787,10 +2767,10 @@ msgstr "Instanser den valgte scene(r) som barn av den valgte noden." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Skanner Filer,\n" -"Vennligst Vent.." +"Vennligst Vent..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2855,8 +2835,8 @@ msgid "Import Scene" msgstr "Importer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importerer Scene.." +msgid "Importing Scene..." +msgstr "Importerer Scene..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2867,8 +2847,8 @@ msgid "Generating for Mesh: " msgstr "Genererer for Maske: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Kjører Tilpasser Skript.." +msgid "Running Custom Script..." +msgstr "Kjører Tilpasser Skript..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2884,8 +2864,8 @@ msgid "Error running post-import script:" msgstr "Error ved kjøring av post-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Lagrer.." +msgid "Saving..." +msgstr "Lagrer..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2905,8 +2885,8 @@ msgstr "Importer Som:" #: editor/import_dock.cpp editor/property_editor.cpp #, fuzzy -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "Preset..." #: editor/import_dock.cpp msgid "Reimport" @@ -3336,16 +3316,16 @@ msgid "Transition Node" msgstr "Overgang Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importer Animasjoner.." +msgid "Import Animations..." +msgstr "Importer Animasjoner..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Rediger Node-Filtre" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtre.." +msgid "Filters..." +msgstr "Filtre..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3414,8 +3394,8 @@ msgid "Fetching:" msgstr "Henter:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Løser.." +msgid "Resolving..." +msgstr "Løser..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3484,8 +3464,8 @@ msgid "Site:" msgstr "Side:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Support.." +msgid "Support..." +msgstr "Support..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3675,6 +3655,7 @@ msgid "Use Rotation Snap" msgstr "Bruk Rotasjons-Snap" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Konfigurer Snap..." @@ -3837,7 +3818,7 @@ msgstr "Legg til %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "Legger til %s.." +msgstr "Legger til %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" @@ -4106,7 +4087,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 @@ -4313,8 +4294,8 @@ msgid "Error loading image:" msgstr "Feil ved innlasting av bilde:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Ingen piksler med gjennomsiktighet > 128 i bilde.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Ingen piksler med gjennomsiktighet > 128 i bilde..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4682,8 +4663,8 @@ msgid "Import Theme" msgstr "Importer Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Lagre Tema Som.." +msgid "Save Theme As..." +msgstr "Lagre Tema Som..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4779,8 +4760,8 @@ msgstr "Veksle skriptpanel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Finn.." +msgid "Find..." +msgstr "Finn..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4987,15 +4968,15 @@ msgid "Find Previous" msgstr "Finn forrige" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Erstatt.." +msgid "Replace..." +msgstr "Erstatt..." #: 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 @@ -5450,11 +5431,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5709,7 +5686,7 @@ msgid "Remove All" msgstr "Fjern Funksjon" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5778,8 +5755,9 @@ msgid "Options" msgstr "Innstillinger" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Innstillinger" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5905,7 +5883,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5969,7 +5947,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6060,6 +6038,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Prosjektnavn:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunne ikke opprette mappe." @@ -6251,8 +6234,8 @@ msgstr "Museknapp" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6280,7 +6263,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 @@ -6466,7 +6449,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6563,11 +6546,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 @@ -6740,7 +6723,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 @@ -8211,12 +8194,19 @@ msgstr "" #: scene/resources/dynamic_font.cpp msgid "Error loading font." -msgstr "" +msgstr "Feil ved innlasting av font." #: scene/resources/dynamic_font.cpp msgid "Invalid font size." msgstr "Ugyldig fontstørrelse." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Forrige fane" + +#~ msgid "Next" +#~ msgstr "Neste" + #~ msgid "" #~ "Invalid version.txt format inside templates. Revision is not a valid " #~ "identifier." @@ -8227,9 +8217,6 @@ msgstr "Ugyldig fontstørrelse." #~ msgid "Can't write file." #~ msgstr "Kan ikke skrive fil." -#~ msgid "Next" -#~ msgstr "Neste" - #~ msgid "Not found!" #~ msgstr "Ikke funnet!" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 9927fd8e8a..bfedf322b3 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -11,9 +11,12 @@ # Daeran Wereld <daeran@gmail.com>, 2017. # Dzejkop <jakubtrad@gmail.com>, 2017. # Ferdinand de Coninck <ferdinand.deconinck@gmail.com>, 2018. +# frank <frankvprive@gmail.com>, 2018. +# Johannes Smit <smitjohannes96@gmail.com>, 2018. # Jorn Theunissen <jorn-theunissen@hotmail.com>, 2018. # Maikel <maikel_martens_1@hotmail.com>, 2017. # millenniumproof <millenniumproof@gmail.com>, 2018. +# nee <lespam@protonmail.com>, 2018. # Pieter-Jan Briers <pieterjan.briers@gmail.com>, 2017-2018. # Robin Arys <robinarys@hotmail.com>, 2017. # Senno Kaasjager <senno.kaasjager@gmail.com>, 2017. @@ -25,15 +28,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-06 15:35+0000\n" -"Last-Translator: millenniumproof <millenniumproof@gmail.com>\n" +"PO-Revision-Date: 2018-05-21 18:36+0000\n" +"Last-Translator: Johannes Smit <smitjohannes96@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.20\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -514,8 +517,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Ontkoppel '%s' van '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Verbind.." +msgid "Connect..." +msgstr "Verbind..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -937,12 +940,12 @@ msgid "Move Audio Bus" msgstr "Verplaats audiobus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Sla Audio Bus Layout Op Als.." +msgid "Save Audio Bus Layout As..." +msgstr "Sla Audio Bus Layout Op Als..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Locatie voor Nieuwe Layout.." +msgid "Location for New Layout..." +msgstr "Locatie voor Nieuwe Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1080,12 +1083,12 @@ msgid "Updating Scene" msgstr "Scene aan het Updaten" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Lokale wijziging aan het opslaan.." +msgid "Storing local changes..." +msgstr "Lokale wijziging aan het opslaan..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scene aan het updaten.." +msgid "Updating scene..." +msgstr "Scene aan het updaten..." #: editor/editor_data.cpp msgid "[empty]" @@ -1153,8 +1156,8 @@ msgid "Show In File Manager" msgstr "Weergeven in Bestandsbeheer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nieuwe Map.." +msgid "New Folder..." +msgstr "Nieuwe Map..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1415,20 +1418,20 @@ msgstr "Maak Uitvoer Leeg" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Project exporteren faalt door foutcode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error bij het opslaan van resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Resource Opslaan Als.." +msgid "Save Resource As..." +msgstr "Resource Opslaan Als..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ik snap het.." +msgid "I see..." +msgstr "Ik snap het..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1660,11 +1663,11 @@ msgid "Open Base Scene" msgstr "Open Basisscene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Open Scene Snel..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Open Script Snel..." #: editor/editor_node.cpp @@ -1676,7 +1679,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Sla wijzigen aan '%s' op voor het afsluiten?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Sla Scene Op Als..." #: editor/editor_node.cpp @@ -1729,7 +1732,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Deze actie kan niet ongedaan gemaakt worden. Toch herstellen?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Snel Scene Uitvoeren..." #: editor/editor_node.cpp @@ -1889,7 +1892,7 @@ msgid "Previous tab" msgstr "Vorig tabblad" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Bestanden Filteren..." #: editor/editor_node.cpp @@ -1901,11 +1904,11 @@ msgid "New Scene" msgstr "Nieuwe Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nieuwe Geërfde Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Scene Openen..." #: editor/editor_node.cpp @@ -1925,15 +1928,15 @@ msgid "Open Recent" msgstr "Recente Scenes Openen" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converteer Naar..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2198,8 +2201,8 @@ msgid "Save the currently edited resource." msgstr "De bewerkte bron opslaan." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Opslaan Als.." +msgid "Save As..." +msgstr "Opslaan Als..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2307,8 +2310,8 @@ msgid "Creating Mesh Previews" msgstr "Creëren van Mesh Previews" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Voorbeeld.." +msgid "Thumbnail..." +msgstr "Voorbeeld..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2460,8 +2463,8 @@ msgid "(Current)" msgstr "(Huidig)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Mirrors ophalen, even wachten a.u.b.." +msgid "Retrieving mirrors, please wait..." +msgstr "Mirrors ophalen, even wachten a.u.b..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2538,8 +2541,8 @@ msgid "Error requesting url: " msgstr "Fout bij het opvragen van een URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Verbinden met Mirror.." +msgid "Connecting to Mirror..." +msgstr "Verbinden met Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2555,8 +2558,8 @@ msgstr "Kan niet oplossen" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Verbinden.." +msgid "Connecting..." +msgstr "Verbinden..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2568,7 +2571,7 @@ msgstr "Verbonden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Opvragen..." #: editor/export_template_manager.cpp @@ -2706,12 +2709,12 @@ msgid "Collapse all" msgstr "Klap alles in" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Hernoemen.." +msgid "Rename..." +msgstr "Hernoemen..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Verplaats Naar.." +msgid "Move To..." +msgstr "Verplaats Naar..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2722,16 +2725,16 @@ msgid "Instance" msgstr "Instantie" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Afhankelijkheden aanpassen.." +msgid "Edit Dependencies..." +msgstr "Afhankelijkheden aanpassen..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Bekijk eigenaren.." +msgid "View Owners..." +msgstr "Bekijk eigenaren..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Dupliceren.." +msgid "Duplicate..." +msgstr "Dupliceren..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2758,10 +2761,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Bestanden Scannen,\n" -"Wacht Alstublieft.." +"Wacht Alstublieft..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2826,8 +2829,8 @@ msgid "Import Scene" msgstr "Importeer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Scene Importeren.." +msgid "Importing Scene..." +msgstr "Scene Importeren..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2838,8 +2841,8 @@ msgid "Generating for Mesh: " msgstr "Bouw voor Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Aangepast script uitvoeren .." +msgid "Running Custom Script..." +msgstr "Aangepast script uitvoeren ..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2854,8 +2857,8 @@ msgid "Error running post-import script:" msgstr "Fout bij uitvoeren post-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Opslaan.." +msgid "Saving..." +msgstr "Opslaan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2874,8 +2877,8 @@ msgid "Import As:" msgstr "Importereen Als:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Voorinstelling.." +msgid "Preset..." +msgstr "Voorinstelling..." #: editor/import_dock.cpp msgid "Reimport" @@ -3294,15 +3297,15 @@ msgid "Transition Node" msgstr "Transition Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importeer Animaties.." +msgid "Import Animations..." +msgstr "Importeer Animaties..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Wijzig Node Filters" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filters..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3370,8 +3373,8 @@ msgid "Fetching:" msgstr "Ophalen:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Oplossen .." +msgid "Resolving..." +msgstr "Oplossen ..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3437,8 +3440,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Ondersteuning.." +msgid "Support..." +msgstr "Ondersteuning..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3635,8 +3638,9 @@ msgid "Use Rotation Snap" msgstr "Gebruik Rotatie Snap" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configureer Uitlijnen..." +msgstr "Configureer Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3735,14 +3739,12 @@ msgid "Show Guides" msgstr "Toon hulplijnen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Raster Weergeven" +msgstr "Toon Oorsprongspunt" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Toon helpers" +msgstr "Toon Aanzicht Portaal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3854,11 +3856,11 @@ msgstr "Verwijder Geselecteerde Item" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "Importeer vanaf de Scene" +msgstr "Importeer Vanuit Scene" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "Werk bij vanaf de Scene" +msgstr "Update Vanuit Scene" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" @@ -3869,13 +3871,12 @@ msgid "Flat1" msgstr "Plat1" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease in" -msgstr "Schaal Selectie" +msgstr "Rustig Aanzetten" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "Neem af naar buiten" +msgstr "Rustig Afzetten" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" @@ -4043,7 +4044,7 @@ 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 "" +msgstr "Mesh grondtype is niet PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4075,8 +4076,8 @@ msgstr "Creëer Convex Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Outline Mesh.." -msgstr "Creëer Omlijning Mesh.." +msgid "Create Outline Mesh..." +msgstr "Creëer Omlijning Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4227,7 +4228,7 @@ msgstr "Hoogteveld aan het creëeren..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "Markeer loopbare driehoeken.." +msgstr "Markeer loopbare driehoeken..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4284,8 +4285,8 @@ msgid "Error loading image:" msgstr "Error bij het laden van afbeelding:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Geen pixels met transparantie > 128 in afbeelding.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Geen pixels met transparantie > 128 in afbeelding..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4645,8 +4646,8 @@ msgid "Import Theme" msgstr "Importeer Thema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Thema Opslaan Als.." +msgid "Save Theme As..." +msgstr "Thema Opslaan Als..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4742,8 +4743,8 @@ msgstr "Schakel Scripten Paneel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Vind.." +msgid "Find..." +msgstr "Vind..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4952,16 +4953,16 @@ msgid "Find Previous" msgstr "Vind Vorige" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Vervang.." +msgid "Replace..." +msgstr "Vervang..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ga Naar Functie.." +msgid "Goto Function..." +msgstr "Ga Naar Functie..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ga Naar Regel.." +msgid "Goto Line..." +msgstr "Ga Naar Regel..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5305,12 +5306,11 @@ msgstr "Vrijekijk Snelheid Modificator" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "XForm Dialoog" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Selecteer Modus" +msgstr "Selectiestand (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -5318,22 +5318,25 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Slepen: Roteren\n" +"Atl+Slepen: Verplaatsen\n" +"Alt+RMB: Diepte selectie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" -msgstr "" +msgstr "Beweegstand (W)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode (E)" -msgstr "" +msgstr "Rotatiestand (E)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "Schaalstand (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "" +msgstr "Lokale Coördinaten" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5346,64 +5349,63 @@ msgstr "Op hulplijnen uitlijnen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "" +msgstr "Onderaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "" +msgstr "Bovenaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "" +msgstr "Achteraanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "" +msgstr "Vooraanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "" +msgstr "Linker Zijaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "" +msgstr "Rechter Zijaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Schakel Perspectief/Orthogonaal aanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "" +msgstr "Voeg Animatiesleutel toe" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "" +msgstr "Focus op Oorsprongspunt" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "" +msgstr "Focus Selectie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" -msgstr "" +msgstr "Arrangeer Selectie naar Aanzicht" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Alle Selectie" +msgstr "Gereedschappen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Move" -msgstr "" +msgstr "Beweeg Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Rotate" -msgstr "" +msgstr "Roteer Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Scale" -msgstr "" +msgstr "Verschalen Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5412,52 +5414,48 @@ msgstr "Toggle Favoriet" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "" +msgstr "Transformatie" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "" +msgid "Transform Dialog..." +msgstr "Transformatie Dialoog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "1 Aanzicht Portaal" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "" +msgstr "2 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "2 Aanzicht Portalen (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "" +msgstr "3 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "3 Aanzicht Portalen (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "" +msgstr "4 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "" +msgstr "Bekijk Oorsprongspunt" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "" +msgstr "Bekijk Raster" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings" -msgstr "" +msgstr "Instellingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" @@ -5465,71 +5463,71 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "Snap instellingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Verplaats Snap:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "" +msgstr "Draai Snap (grad.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "" +msgstr "Verander Grootte van Snap (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "" +msgstr "Instellingen Aanzicht Portaal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" -msgstr "" +msgstr "Perspectief FOV (grad.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "" +msgstr "Bekijk Z-Near:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "" +msgstr "Bekijk Z-Far:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Transformatie Verandering" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "" +msgstr "Verplaats:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "Rotatie (graden):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "Verschalen (ratio):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "Transformatie Type" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "" +msgstr "Pre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "" +msgstr "Post" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "" +msgstr "FOUT: Kan frame benodigdheden niet laden!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "" +msgstr "Voeg Frame toe" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" @@ -5537,60 +5535,59 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "" +msgstr "Frame Plakken" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "" +msgstr "Lege Toevoegen" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Verander Animatie Lus" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "Verander Animatie FPS" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(leeg)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animaties" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Snelheid (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "Lus" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "Animatie Frames" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "" +msgstr "Lege Toevoegen (Hiervoor)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "" +msgstr "Lege Toevoegen (Hierna)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Kopiëer Nodes" +msgstr "Verplaats (Hiervoor)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "" +msgstr "Verplaats (Hierna)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "" +msgstr "Sprite-Frames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5610,7 +5607,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Geen>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" @@ -5637,50 +5634,48 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Separation:" -msgstr "" +msgstr "Afzondering:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region" -msgstr "" +msgstr "Textuur Regio" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "" +msgstr "Textuur Regio Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" -msgstr "" +msgstr "Kan thema niet opslaan in bestand:" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "" +msgstr "Alle Items Toevoegen" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "" +msgstr "Allen Toevoegen" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Item" -msgstr "" +msgstr "Verwijder Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Verwijder Selectie" +msgstr "Verwijder Alle Items" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Verwijderen" +msgstr "Verwijder Alles" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "" +msgid "Edit theme..." +msgstr "Bewerk Thema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." -msgstr "" +msgstr "Thema Bewerkingsmenu." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -5692,15 +5687,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "Creëer Leeg Sjabloon" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "" +msgstr "Creëer Lege Sjabloon Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "" +msgstr "Creëer Derivatie Huidig Editor Thema" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5712,7 +5707,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -5733,69 +5728,68 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "Had" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "Veel" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "" +msgstr "Opties" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Opties" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Tabblad 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Tabblad 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "Tabblad 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "" +msgstr "Data Type:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Icoon" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" -msgstr "" +msgstr "Stijl" #: editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "" +msgstr "Lettertype" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Kleur" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "" +msgstr "Thema" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Schaal Selectie" +msgstr "Selectie Verwijderen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Lineair" +msgstr "Teken Lijn" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -5811,23 +5805,23 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" -msgstr "" +msgstr "Verwijder Selectie" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" -msgstr "" +msgstr "Vind Tegel" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "" +msgstr "Transponeren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "" +msgstr "Spiegel X" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "" +msgstr "Spiegel Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5835,39 +5829,39 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "" +msgstr "Kies Tegel" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "0 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "90 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "180 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "270 Graden Roteren" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" -msgstr "" +msgstr "Niet gevonden titel:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" -msgstr "" +msgstr "Item naam of identificatiecode:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" -msgstr "" +msgstr "Creëer vanuit scene?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "Vervoegen vanuit scene?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -5876,15 +5870,15 @@ msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "Creëer vanuit Scene" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Vervoeg vanuit Scene" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" -msgstr "" +msgstr "Fout" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" @@ -5903,44 +5897,40 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "De bewerkte bron opslaan." +msgstr "Selecteer zojuist bewerkte sub-tegel." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "" +msgstr "Selecteer een sub-tegel om zijn prioriteit te veranderen." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "Annuleren" +msgstr "Annuleer" #: editor/project_export.cpp -#, fuzzy msgid "Runnable" -msgstr "Inschakelen" +msgstr "Uitvoerbaar" #: editor/project_export.cpp -#, fuzzy msgid "Delete patch '%s' from list?" -msgstr "Verwijder" +msgstr "Verwijder patch '%s' van lijst?" #: editor/project_export.cpp -#, fuzzy msgid "Delete preset '%s'?" -msgstr "Verwijder geselecteerde bestanden?" +msgstr "Verwijder voorinstelling '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " -msgstr "" +msgstr "Exportsjablonen voor dit platform zijn vermist/corrupt: " #: editor/project_export.cpp msgid "Presets" -msgstr "" +msgstr "Voorinstelling" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "" +msgid "Add..." +msgstr "Toevoegen..." #: editor/project_export.cpp msgid "Resources" @@ -5952,7 +5942,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "" +msgstr "Exporteer geselecteerde scenes (en afhankelijkheden)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" @@ -5977,9 +5967,8 @@ msgid "" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Patches" -msgstr "Matches:" +msgstr "Patches" #: editor/project_export.cpp msgid "Make Patch" @@ -5987,24 +5976,23 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "" +msgstr "Kenmerken" #: editor/project_export.cpp msgid "Custom (comma-separated):" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Methode Lijst:" +msgstr "Kenmerkenlijst:" #: editor/project_export.cpp msgid "Export PCK/Zip" -msgstr "" +msgstr "Exporteer PCK/Zip" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Vermiste Exportsjablonen voor dit platform:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" @@ -6015,30 +6003,33 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "The path does not exist." -msgstr "Bestand bestaat niet." +msgstr "Dit pad bestaat niet." #: editor/project_manager.cpp msgid "Please choose a 'project.godot' file." -msgstr "" +msgstr "Kies alstublieft een 'project.godot' bestand." #: editor/project_manager.cpp msgid "Please choose an empty folder." -msgstr "" +msgstr "Kies alstublieft een lege map." #: editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Geïmporteerd Project" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ongeldige naam." + +#: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "Map kon niet gemaakt worden." +msgstr "Kon map niet creëren." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Er is al een map in dit pad met dezelfde naam." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6126,7 +6117,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "Verbind.." +msgstr "Verbind..." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -6201,7 +6192,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "Verbind.." +msgstr "Verbind..." #: editor/project_manager.cpp msgid "" @@ -6227,8 +6218,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6256,7 +6247,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 @@ -6443,7 +6434,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6517,7 +6508,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "" +msgstr "Kies een Aanzicht portaal" #: editor/property_editor.cpp msgid "Ease In" @@ -6540,11 +6531,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 @@ -6582,8 +6573,9 @@ msgid "Error loading file: Not a resource!" msgstr "" #: editor/property_editor.cpp +#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "" +msgstr "Geselecteerde ..... is geen Aanzicht Portaal!" #: editor/property_editor.cpp #, fuzzy @@ -6718,7 +6710,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 @@ -8258,10 +8250,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Deze viewport is niet ingesteld als render target. Maak het een kind van een " -"Control zodat het een grootte kan ontvangen, als je de bedoeling hebt zijn " -"inhoud direct op het scherm te weergeven. Anders, maak er een RenderTarget " -"van en wijs zijn interne texture toe aan een node om te tonen." +"Dit Aanzicht Portaal is niet ingesteld als render target. Maak het een kind " +"van een Control zodat het een grootte kan ontvangen, als je de bedoeling " +"hebt zijn inhoud direct op het scherm te weergeven. Anders, maak er een " +"RenderTarget van en wijs zijn interne texture toe aan een node om te tonen." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8280,6 +8272,13 @@ msgid "Invalid font size." msgstr "Ongeldige lettertype grootte." #, fuzzy +#~ msgid "Previous" +#~ msgstr "Vorig tabblad" + +#~ msgid "Next" +#~ msgstr "Volgende" + +#, fuzzy #~ msgid "Can't contain '/' or ':'" #~ msgstr "Kan niet verbinden met host:" @@ -8293,9 +8292,6 @@ msgstr "Ongeldige lettertype grootte." #~ msgid "Can't write file." #~ msgstr "Kan niet naar bestand schrijven." -#~ msgid "Next" -#~ msgstr "Volgende" - #~ msgid "Not found!" #~ msgstr "Niet gevonden!" @@ -8339,7 +8335,7 @@ msgstr "Ongeldige lettertype grootte." #, fuzzy #~ msgid "Setting '" -#~ msgstr "Aan Het Opzetten.." +#~ msgstr "Aan Het Opzetten..." #, fuzzy #~ msgid "Selection -> Duplicate" @@ -8390,8 +8386,8 @@ msgstr "Ongeldige lettertype grootte." #~ msgid "Exporting for %s" #~ msgstr "Aan het exporteren voor %s" -#~ msgid "Setting Up.." -#~ msgstr "Aan Het Opzetten.." +#~ msgid "Setting Up..." +#~ msgstr "Aan Het Opzetten..." #~ msgid "Re-Importing" #~ msgstr "Aan Het Herimporteren" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 3c8ee72cec..5ca2760249 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -2,7 +2,6 @@ # 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. -# # 8-bit Pixel <dawdejw@gmail.com>, 2016. # Adam Wolanski <adam.wolanski94@gmail.com>, 2017. # Adrian Węcławski <weclawskiadrian@gmail.com>, 2016. @@ -11,6 +10,7 @@ # Dariusz Król <rexioweb@gmail.com>, 2018. # heya10 <igor.gielzak@gmail.com>, 2017. # holistyczny interlokutor <jakubowesmieci@gmail.com>, 2017. +# Igor <igor.gielzak@gmail.com>, 2018. # Kajetan Kuszczyński <kajetanek99@gmail.com>, 2016. # Kamil Lewan <lewan.kamil@gmail.com>, 2016. # Karol Walasek <coreconviction@gmail.com>, 2016. @@ -19,16 +19,16 @@ # NeverK <neverkoxu@gmail.com>, 2018. # Rafal Brozio <rafal.brozio@gmail.com>, 2016. # Rafał Ziemniak <synaptykq@gmail.com>, 2017. +# RM <synaptykq@gmail.com>, 2018. # Sebastian Krzyszkowiak <dos@dosowisko.net>, 2017. # Sebastian Pasich <sebastian.pasich@gmail.com>, 2017. # siatek papieros <sbigneu@gmail.com>, 2016. # Zatherz <zatherz@linux.pl>, 2017. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-23 15:40+0000\n" -"Last-Translator: Dariusz Król <rexioweb@gmail.com>\n" +"PO-Revision-Date: 2018-06-22 08:31+0000\n" +"Last-Translator: RM <synaptykq@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -36,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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -48,19 +48,19 @@ msgstr "Wszystkie zaznaczenia" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Zmień czas klatki kluczowej" +msgstr "Zmiana czasu klatki kluczowej" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Zmiana przejścia animacji" +msgstr "Zmiana przejścia" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Animacja transformacji" +msgstr "Zmiana transformacji" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Zmień wartość klatki kluczowej" +msgstr "Zmiana wartości klatki kluczowej" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -84,7 +84,7 @@ msgstr "Przesuń ścieżkę animacji w dół" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Usuń animację" +msgstr "Usuń ścieżkę animacji" #: editor/animation_editor.cpp msgid "Set Transitions to:" @@ -92,7 +92,7 @@ msgstr "Ustaw przejścia na:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Zmień nazwę animacji" +msgstr "Zmień nazwę ściezki animacji" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" @@ -517,7 +517,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Rozłącz '%s' z '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Połącz..." #: editor/connections_dialog.cpp @@ -937,11 +937,11 @@ msgid "Move Audio Bus" msgstr "Przemieść magistralę audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Zapisz układ magistrali audio jako..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Lokalizacja nowego układu..." #: editor/editor_audio_buses.cpp @@ -1078,12 +1078,12 @@ msgid "Updating Scene" msgstr "Aktualizowanie Sceny" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Zachowywanie lokalnych zmian.." +msgid "Storing local changes..." +msgstr "Zachowywanie lokalnych zmian..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aktualizacja sceny .." +msgid "Updating scene..." +msgstr "Aktualizacja sceny ..." #: editor/editor_data.cpp msgid "[empty]" @@ -1151,7 +1151,7 @@ msgid "Show In File Manager" msgstr "Pokaż w menadżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Utwórz katalog..." #: editor/editor_file_dialog.cpp @@ -1343,9 +1343,8 @@ msgid "Description" msgstr "Opis" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Poradniki" +msgstr "Poradniki online:" #: editor/editor_help.cpp #, fuzzy @@ -1354,8 +1353,9 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color][url=" -"$url]wysyłając ją[/url][/color]!" +"Obecnie nie ma żadnych samouczków dla tej klasy, możesz [color=$color][url=" +"$url]dodać jeden[/url][/kolor] lub [color=$color] [url=$url2]poprosić o " +"jeden[/url][/barl]." #: editor/editor_help.cpp msgid "Properties" @@ -1414,20 +1414,20 @@ msgstr "Wyczyść dane wyjściowe" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Eksport projektu nie powiódł się, kod błędu to %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Błąd podczas zapisu zasobu!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Zapisz zasób jako..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Widzę.." +msgid "I see..." +msgstr "Widzę..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1657,12 +1657,12 @@ msgid "Open Base Scene" msgstr "Otwórz scenę bazową" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Szybkie otwieranie sceny.." +msgid "Quick Open Scene..." +msgstr "Szybkie otwieranie sceny..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Szybkie otwieranie skryptu.." +msgid "Quick Open Script..." +msgstr "Szybkie otwieranie skryptu..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1673,8 +1673,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Zapisać zmiany w '%s' przed zamknięciem?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Zapisz scenę jako.." +msgid "Save Scene As..." +msgstr "Zapisz scenę jako..." #: editor/editor_node.cpp msgid "No" @@ -1725,8 +1725,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tego nie można cofnąć. Przywrócić mimo to?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Szybkie uruchomienie sceny.." +msgid "Quick Run Scene..." +msgstr "Szybkie uruchomienie sceny..." #: editor/editor_node.cpp msgid "Quit" @@ -1884,7 +1884,7 @@ msgid "Previous tab" msgstr "Poprzednia zakładka" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrowanie plików..." #: editor/editor_node.cpp @@ -1896,12 +1896,12 @@ msgid "New Scene" msgstr "Nowa scena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nowa scena dziedzicząca..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Otwórz scenę.." +msgid "Open Scene..." +msgstr "Otwórz scenę..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1920,15 +1920,15 @@ msgid "Open Recent" msgstr "Ostatnio otwierane" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konwertuje na.." +msgid "Convert To..." +msgstr "Konwertuje na..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2114,7 +2114,7 @@ msgstr "Społeczność" #: editor/editor_node.cpp msgid "About" -msgstr "O programie" +msgstr "O silniku" #: editor/editor_node.cpp msgid "Play the project." @@ -2189,7 +2189,7 @@ msgid "Save the currently edited resource." msgstr "Zapisz aktualnie edytowany zasób." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Zapisz jako..." #: editor/editor_node.cpp @@ -2298,8 +2298,8 @@ msgid "Creating Mesh Previews" msgstr "Tworzenie podglądu Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2452,8 +2452,8 @@ msgid "(Current)" msgstr "(Bieżący)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Pobieranie informacji o serwerach lustrzanych, proszę czekać.." +msgid "Retrieving mirrors, please wait..." +msgstr "Pobieranie informacji o serwerach lustrzanych, proszę czekać..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2530,8 +2530,8 @@ msgid "Error requesting url: " msgstr "Błąd podczas żądania adresu url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Łączenie z serwerem lustrzanym.." +msgid "Connecting to Mirror..." +msgstr "Łączenie z serwerem lustrzanym..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2547,8 +2547,8 @@ msgstr "Nie można rozwiązać" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Łączenie.." +msgid "Connecting..." +msgstr "Łączenie..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2560,7 +2560,7 @@ msgstr "Podłączony" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Żądanie danych..." #: editor/export_template_manager.cpp @@ -2696,11 +2696,11 @@ msgid "Collapse all" msgstr "Zwiń foldery" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Zmień nazwę..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Przenieś Do..." #: editor/filesystem_dock.cpp @@ -2712,16 +2712,16 @@ msgid "Instance" msgstr "Instancja" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Edytuj Zależności..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Pokaż właścicieli.." +msgid "View Owners..." +msgstr "Pokaż właścicieli..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplikuj.." +msgid "Duplicate..." +msgstr "Duplikuj..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2746,7 +2746,7 @@ msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego węzła." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Skanowanie plików,\n" "Proszę czekać..." @@ -2814,8 +2814,8 @@ msgid "Import Scene" msgstr "Importuj Scenę" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importowanie Sceny.." +msgid "Importing Scene..." +msgstr "Importowanie Sceny..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2826,7 +2826,7 @@ msgid "Generating for Mesh: " msgstr "Generowanie dla siatki: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Uruchamiam skrypt..." #: editor/import/resource_importer_scene.cpp @@ -2844,8 +2844,8 @@ msgid "Error running post-import script:" msgstr "Błąd podczas uruchamiania skryptu po imporcie:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Zapisywanie.." +msgid "Saving..." +msgstr "Zapisywanie..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2864,8 +2864,8 @@ msgid "Import As:" msgstr "Importuj jako:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ustawienie predefiniowane.." +msgid "Preset..." +msgstr "Ustawienie predefiniowane..." #: editor/import_dock.cpp msgid "Reimport" @@ -3081,12 +3081,11 @@ msgstr "Tryb łusek cebuli" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Enable Onion Skinning" -msgstr "Włącz tryb łusek cebuli" +msgstr "Włącz tryb warstw cebuli" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Kategorie:" +msgstr "Kierunki" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" @@ -3290,16 +3289,16 @@ msgid "Transition Node" msgstr "Węzeł Przejścia" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Zaimportuj animacje.." +msgid "Import Animations..." +msgstr "Zaimportuj animacje..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Edytuj filtry węzłów" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtry.." +msgid "Filters..." +msgstr "Filtry..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3342,9 +3341,10 @@ msgid "Request failed, too many redirects" msgstr "Żądanie nieudane, zbyt dużo przekierowań" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Bad download hash, assuming file has been tampered with." -msgstr "Zły hash pobranego pliku. Zakładamy, że ktoś przy nim majstrował." +msgstr "" +"Zły hash pobranego pliku. Zakładamy, że ktoś przy nim majstrował, lub został " +"niepoprawnie pobrany." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -3367,13 +3367,12 @@ msgid "Fetching:" msgstr "Pobieranie:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Rozwiązywanie..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "Wystąpił błąd podczas tworzenia żądania" +msgstr "Wystąpił błąd podczas żądania" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3435,8 +3434,8 @@ msgid "Site:" msgstr "Źródło:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Wsparcie.." +msgid "Support..." +msgstr "Wsparcie..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3475,9 +3474,8 @@ msgstr "" "jedynie do odczytu." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Wypal Lightmaps" +msgstr "Stwórz Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3585,9 +3583,8 @@ msgstr "" "poruszania)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "Alt+PPM: Lista wyboru głębi" +msgstr "Alt + RMB: Głębokość listy" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3635,8 +3632,9 @@ msgid "Use Rotation Snap" msgstr "Użyj kroków obrotu" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Konfiguruj przyciąganie.." +msgstr "Konfiguruj przyciąganie..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3731,14 +3729,12 @@ 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" +msgstr "Pokaż widok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3782,11 +3778,11 @@ msgstr "Ustaw pivot w pozycji myszy" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Podwój wielkość siatki" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Zmniejsz wielkość siatki dwukrotnie" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3802,7 +3798,7 @@ msgstr "Ok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Nie można utworzyć wielu wezłów bez węzła głównego." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3858,11 +3854,11 @@ msgstr "Aktualizuj ze sceny" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Flat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" @@ -4042,7 +4038,6 @@ msgid "Could not create outline!" msgstr "Nie udało się utworzyć zarysu!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Outline" msgstr "Utwórz zarys" @@ -4067,8 +4062,8 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Utwórz siatkę zarysu.." +msgid "Create Outline Mesh..." +msgstr "Utwórz siatkę zarysu..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4282,8 +4277,8 @@ msgid "Error loading image:" msgstr "Błąd wczytywania obrazu:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Brak pikseli z przeźroczystością > 128 w obrazie.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Brak pikseli z przeźroczystością > 128 w obrazie..." #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -4653,8 +4648,8 @@ msgid "Import Theme" msgstr "Zaimportuj motyw" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Zapisz motyw jako.." +msgid "Save Theme As..." +msgstr "Zapisz motyw jako..." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4752,8 +4747,8 @@ msgstr "Przełącz panel skryptów" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Znajdź.." +msgid "Find..." +msgstr "Znajdź..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4963,16 +4958,16 @@ msgid "Find Previous" msgstr "Znajdź poprzedni" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Zamień.." +msgid "Replace..." +msgstr "Zamień..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Przejdź do funkcji.." +msgid "Goto Function..." +msgstr "Przejdź do funkcji..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Przejdź do linii.." +msgid "Goto Line..." +msgstr "Przejdź do linii..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5061,11 +5056,11 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "Dodaj/Usuń do mapy krzywej" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" -msgstr "" +msgstr "Edytuj mape krzywej" #: editor/plugins/shader_graph_editor_plugin.cpp #, fuzzy @@ -5299,34 +5294,31 @@ msgstr "Efekt Dopplera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "\"Wolny widok\" w lewo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "\"Wolny widok\" w prawo" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Dalej" +msgstr "\"Wolny widok\" w przód" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Wstecz" +msgstr "\"Wolny widok\" w tył" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "\"Wolny widok\" w góre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Kółko myszy w dół." +msgstr "\"Wolny widok\" w dół" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Zmiennik prędkości \"Wolnego widoku\"" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5342,6 +5334,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Pociągnięcie: Obrót\n" +"Alt+Pociągnięcie: Poruszenie\n" +"Alt+PPM: Lista wyboru głębi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5357,7 +5352,7 @@ msgstr "Tryb skalowania (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Koordynaty lokalne" +msgstr "Local Coords" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5440,12 +5435,8 @@ msgid "Transform" msgstr "Przekształcanie" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Konfiguruj krokowanie.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Okno transformowania.." +msgid "Transform Dialog..." +msgstr "Okno transformowania..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5699,8 +5690,8 @@ msgid "Remove All" msgstr "Usuń wszystkie" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Edytuj motyw interfejsu.." +msgid "Edit theme..." +msgstr "Edytuj motyw interfejsu..." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -5772,7 +5763,7 @@ msgstr "Opcje" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "Ma,Wiele,Różnych,Opcji!" #: editor/plugins/theme_editor_plugin.cpp @@ -5965,8 +5956,8 @@ msgid "Presets" msgstr "Profile eksportu" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Dodaj.." +msgid "Add..." +msgstr "Dodaj..." #: editor/project_export.cpp msgid "Resources" @@ -6060,12 +6051,17 @@ msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nazwa projektu:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Nie można utworzyć katalogu." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Folder o podanej nazwie istnieje już w tej lokalizacji." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6256,10 +6252,13 @@ msgid "Mouse Button" msgstr "Przycisk myszy" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " +"jak: '/', ':', '=', '\\' lub '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6286,8 +6285,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Naciśnij klawisz.." +msgid "Press a Key..." +msgstr "Naciśnij klawisz..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6359,7 +6358,7 @@ msgstr "Urządzenie" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Przycisk" +msgstr "Button" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -6463,15 +6462,15 @@ msgstr "Ustawienia projektu (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Ogólny" +msgstr "Ogólne" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "Właściwość:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Nadpisz dla.." +msgid "Override For..." +msgstr "Nadpisz dla..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6566,12 +6565,12 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Plik.." +msgid "File..." +msgstr "Plik..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Katalog.." +msgid "Dir..." +msgstr "Katalog..." #: editor/property_editor.cpp msgid "Assign" @@ -6682,7 +6681,7 @@ msgstr "Aktualna scena" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "Główna scena" +msgstr "Scena główna" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" @@ -6710,6 +6709,7 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Nie można utworzyć sceny '%s' ponieważ obecna scena jest jednym z jej wezłów." #: editor/scene_tree_dock.cpp #, fuzzy @@ -6747,7 +6747,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Tej operacji nie można wykonać na dziedziczącej scenie." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Zapisz nową scenę jako ..." #: editor/scene_tree_dock.cpp @@ -7197,7 +7197,7 @@ msgstr "Skróty" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Wiązanie" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -7475,7 +7475,7 @@ msgstr "Wybierz odległość:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nazwa klasy nie może być słowem zastrzeżonym" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7483,7 +7483,7 @@ msgstr "Generowanie solucji..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Generowanie projektu C#..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create solution." @@ -7507,7 +7507,7 @@ msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "O wsparciu języka C#" #: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" @@ -7708,7 +7708,7 @@ msgstr "Przełącznik" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" -msgstr "" +msgstr "Iterator" #: modules/visual_script/visual_script_editor.cpp msgid "While" @@ -7930,6 +7930,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Ten węzeł nie posiada podwezła, który definiował by jego kształt, więc nie " +"może wchodzić w interakcje.\n" +"Powinieneś dodać węzeł \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " +"podwęzeł aby zdefiniować kształt." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8009,6 +8013,8 @@ msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Nie przypisano materiału do przetwarzania cząsteczek, więc zmiany nie będą " +"widoczne." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -8051,6 +8057,8 @@ msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Id kontrolera nie może być '0' w innym przypadku kontroler nie zostanie " +"przypisany do żadnego rzeczywistego kontrolera" #: scene/3d/arvr_nodes.cpp #, fuzzy @@ -8073,7 +8081,7 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(Pozostały czas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8284,6 +8292,13 @@ msgstr "Błąd ładowania fonta." msgid "Invalid font size." msgstr "Niepoprawny rozmiar fonta." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Poprzednia zakładka" + +#~ msgid "Next" +#~ msgstr "Następny" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Nieprawidłowa akcja (wszystko oprócz '/' lub ':')." @@ -8309,9 +8324,6 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Nie znaleziono project.godot w ścieżce projektu." -#~ msgid "Next" -#~ msgstr "Następny" - #~ msgid "Not found!" #~ msgstr "Nie znaleziono!" @@ -8450,8 +8462,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Exporting for %s" #~ msgstr "Exportowanie do %s" -#~ msgid "Setting Up.." -#~ msgstr "Konfigurowanie .." +#~ msgid "Setting Up..." +#~ msgstr "Konfigurowanie ..." #~ msgid "Error loading scene." #~ msgstr "Błąd ładowania sceny." @@ -8509,8 +8521,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Info" #~ msgstr "Informacje" -#~ msgid "Re-Import.." -#~ msgstr "Importuj ponownie.." +#~ msgid "Re-Import..." +#~ msgstr "Importuj ponownie..." #~ msgid "No bit masks to import!" #~ msgstr "Brak mask bitowych do zaimportowania!" @@ -8883,13 +8895,13 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Zoom (%):" #~ msgstr "Powiększenie (%):" -#~ msgid "Skeleton.." -#~ msgstr "Szkielet.." +#~ msgid "Skeleton..." +#~ msgstr "Szkielet..." #~ msgid "Zoom Reset" #~ msgstr "Wyzeruj przybliżenie" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Ustaw przybliżenie..." #~ msgid "Set a Value" @@ -9238,8 +9250,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Export Project PCK" #~ msgstr "Eksport projektu PCK" -#~ msgid "Export.." -#~ msgstr "Eksport.." +#~ msgid "Export..." +#~ msgstr "Eksport..." #~ msgid "Project Export" #~ msgstr "Eksport projektu" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 94856aa875..0c085024e0 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -500,7 +500,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -915,11 +915,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 @@ -1055,11 +1055,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 @@ -1129,7 +1129,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 @@ -1394,12 +1394,12 @@ 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 @@ -1606,11 +1606,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 @@ -1622,7 +1622,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 @@ -1674,7 +1674,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 @@ -1819,7 +1819,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1831,11 +1831,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 @@ -1855,15 +1855,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 @@ -2109,7 +2109,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 @@ -2218,7 +2218,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2370,7 +2370,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 @@ -2447,7 +2447,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 @@ -2464,7 +2464,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2479,7 +2479,7 @@ msgstr "Slit th' Node" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2618,11 +2618,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 @@ -2634,15 +2634,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 @@ -2668,7 +2668,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2734,7 +2734,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2746,7 +2746,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 @@ -2762,7 +2762,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2782,7 +2782,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3199,7 +3199,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 @@ -3207,7 +3207,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 @@ -3275,7 +3275,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3342,7 +3342,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3532,6 +3532,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3957,7 +3958,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 @@ -4162,7 +4163,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 @@ -4527,7 +4528,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 @@ -4625,7 +4626,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 @@ -4833,15 +4834,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 @@ -5296,11 +5297,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5556,7 +5553,7 @@ msgid "Remove All" msgstr "Discharge ye' Signal" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5624,7 +5621,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5813,7 +5810,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5903,6 +5900,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Yer index property name be thrown overboard!" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6091,8 +6093,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6120,7 +6122,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 @@ -6306,7 +6308,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6403,11 +6405,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 @@ -6580,7 +6582,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 diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 3ad4798ca0..6d26cbc500 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -2,14 +2,14 @@ # 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. -# # 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. +# Breno Caldeira <breno.caldeira@gmail.com>, 2018. # Francesco Perrotti-Garcia <fpg1503@gmail.com>, 2017. # George Marques <george@gmarqu.es>, 2016. -# Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017. +# Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017, 2018. # 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. @@ -23,12 +23,11 @@ # Renato Rotenberg <renato.rotenberg@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-04-30 13:39+0000\n" +"PO-Revision-Date: 2018-06-16 18:43+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" @@ -37,7 +36,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -517,13 +516,13 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' do '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Conectar..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "Disconectar" +msgstr "Desconectar" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -938,12 +937,12 @@ msgid "Move Audio Bus" msgstr "Mover Canal de Áudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Salvar Layout de Canais de Áudio Como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Localização para o Novo Layout.." +msgid "Location for New Layout..." +msgstr "Localização para o Novo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1081,11 +1080,11 @@ msgid "Updating Scene" msgstr "Atualizando Cena" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Armazenando alterações locais..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Atualizando Cena..." #: editor/editor_data.cpp @@ -1154,7 +1153,7 @@ msgid "Show In File Manager" msgstr "Mostrar no Gerenciador de Arquivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Nova Pasta..." #: editor/editor_file_dialog.cpp @@ -1416,19 +1415,19 @@ msgstr "Limpar Saída" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Falha na exportação do projeto com código de erro %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao salvar Recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Salvar Recuso como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Entendo..." #: editor/editor_node.cpp @@ -1658,11 +1657,11 @@ msgid "Open Base Scene" msgstr "Abrir Cena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Abrir Cena Rapidamente..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Abrir Script Rapidamente..." #: editor/editor_node.cpp @@ -1674,7 +1673,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Salvar alterações em '%s' antes de fechar?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Salvar Cena Como..." #: editor/editor_node.cpp @@ -1726,7 +1725,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta ação não pode ser desfeita. Reverter mesmo assim?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Rodar Cena Ágil..." #: editor/editor_node.cpp @@ -1887,8 +1886,8 @@ msgid "Previous tab" msgstr "Guia anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Arquivos.." +msgid "Filter Files..." +msgstr "Filtrar Arquivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1899,11 +1898,11 @@ msgid "New Scene" msgstr "Nova Cena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nova Cena Herdada..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Abrir Cena..." #: editor/editor_node.cpp @@ -1923,15 +1922,15 @@ msgid "Open Recent" msgstr "Abrir Recente" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converter Para..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -1994,7 +1993,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Pequeno teste com o sistema de arquivos em rede" +msgstr "Pequena DIstribuição com Sistema de Arquivos de Rede" #: editor/editor_node.cpp msgid "" @@ -2195,7 +2194,7 @@ msgid "Save the currently edited resource." msgstr "Salva o recurso editado atualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Salvar Como..." #: editor/editor_node.cpp @@ -2304,7 +2303,7 @@ msgid "Creating Mesh Previews" msgstr "Criando Previsualizações das Malhas" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp @@ -2458,7 +2457,7 @@ msgid "(Current)" msgstr "(Atual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Reconectando, por favor aguarde." #: editor/export_template_manager.cpp @@ -2536,7 +2535,7 @@ msgid "Error requesting url: " msgstr "Erro ao solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Conectando..." #: editor/export_template_manager.cpp @@ -2553,8 +2552,8 @@ msgstr "Não foi possível resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2566,8 +2565,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2702,11 +2701,11 @@ msgid "Collapse all" msgstr "Recolher tudo" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Renomear..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Mover Para..." #: editor/filesystem_dock.cpp @@ -2718,15 +2717,15 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." +msgid "Edit Dependencies..." +msgstr "Editar Dependências..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Visualizar Proprietários..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp @@ -2752,7 +2751,7 @@ msgstr "Instanciar a(s) cena(s) selecionada como filho do nó selecionado." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Escaneando arquivos,\n" "Por favor aguarde..." @@ -2820,7 +2819,7 @@ msgid "Import Scene" msgstr "Importar cena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Importando Cena..." #: editor/import/resource_importer_scene.cpp @@ -2832,7 +2831,7 @@ msgid "Generating for Mesh: " msgstr "Generando para a Malha: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Rodando Script Personalizado..." #: editor/import/resource_importer_scene.cpp @@ -2848,7 +2847,7 @@ msgid "Error running post-import script:" msgstr "Erro ao rodar script pós-importação:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Salvando..." #: editor/import_dock.cpp @@ -2868,7 +2867,7 @@ msgid "Import As:" msgstr "Importar como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Predefinição..." #: editor/import_dock.cpp @@ -3289,7 +3288,7 @@ msgid "Transition Node" msgstr "Nó Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importar Animações..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3297,7 +3296,7 @@ msgid "Edit Node Filters" msgstr "Editar Filtros de Nó" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3306,7 +3305,7 @@ msgstr "AnimationTree" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "Livrar" +msgstr "Livre" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" @@ -3365,7 +3364,7 @@ msgid "Fetching:" msgstr "Procurando:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Resolvendo..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3432,8 +3431,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Suporte.." +msgid "Support..." +msgstr "Suporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3630,8 +3629,9 @@ msgid "Use Rotation Snap" msgstr "Usar Snap de Rotação" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar Encaixe..." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3726,14 +3726,12 @@ msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver Origem" +msgstr "Mostrar Origem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Viewport" +msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4026,7 +4024,7 @@ 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 "" +msgstr "Tipo primitivo da Mesh não é PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4057,8 +4055,8 @@ msgid "Create Convex Collision Sibling" msgstr "Criar Colisão Convexa Irmã" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Criar Malha de Contorno.." +msgid "Create Outline Mesh..." +msgstr "Criar Malha de Contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4265,7 +4263,7 @@ msgid "Error loading image:" msgstr "Erro ao carregar imagem:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Nenhum pixel com transparência > 128 na imagem." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4626,7 +4624,7 @@ msgid "Import Theme" msgstr "Importar Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Salvar Tema Como..." #: editor/plugins/script_editor_plugin.cpp @@ -4723,7 +4721,7 @@ msgstr "Alternar Painel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Localizar..." #: editor/plugins/script_editor_plugin.cpp @@ -4933,15 +4931,15 @@ msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substituir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Ir para linha..." #: editor/plugins/script_text_editor.cpp @@ -5395,11 +5393,7 @@ msgid "Transform" msgstr "Transformação" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Diálogo Transformação..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5652,8 +5646,8 @@ msgid "Remove All" msgstr "Remover Tudo" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5681,11 +5675,11 @@ msgstr "Criar a Partir do Tema Atual do Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "Rádio Checkbox 1" +msgstr "CheckBox Rádio1" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "Caixa de Seleção 2" +msgstr "CheckBox Rádio2" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" @@ -5693,21 +5687,19 @@ msgstr "Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "Checar Item" +msgstr "Item Marcável" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" msgstr "Item Checado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Adicionar Item" +msgstr "Item Rádio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item Checado" +msgstr "Item Rádio Marcado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5715,15 +5707,15 @@ msgstr "Tem" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "Muitos" +msgstr "Muitas" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" msgstr "Opções" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Ter,Muitas,Várias,Opções!" +msgid "Has,Many,Options" +msgstr "Tem,Muitas,Opções" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5755,7 +5747,7 @@ msgstr "Fonte" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "Color" +msgstr "Cor" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5916,7 +5908,7 @@ msgid "Presets" msgstr "Predefiniçoes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp @@ -6012,6 +6004,10 @@ msgid "Imported Project" msgstr "Projeto Importado" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nome do Projeto Inválido." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Impossível criar a pasta." @@ -6212,9 +6208,11 @@ msgstr "Botão do Mous" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nome de ação inválido. Ele não pode estar vazio ou conter '/', ':', '=', " +"'\\' ou '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6241,7 +6239,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Pressione uma Tecla..." #: editor/project_settings_editor.cpp @@ -6425,7 +6423,7 @@ msgid "Property:" msgstr "Propriedade:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Sobrescrever Para..." #: editor/project_settings_editor.cpp @@ -6521,11 +6519,11 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Arquivo..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Dir..." #: editor/property_editor.cpp @@ -6698,7 +6696,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Essa operação não pode ser realizada em cenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Salvar Nova Cena Como..." #: editor/scene_tree_dock.cpp @@ -7415,7 +7413,7 @@ msgstr "Escolha uma Distância:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nome da classe não pode ser uma palavra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8129,7 +8127,7 @@ msgstr "A propriedade Caminho deve apontar para um nó Spatial para funcionar." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment precisa de um recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8143,6 +8141,8 @@ 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 "" +"Este WorldEnvironment está sendo ignorado. Adicione uma Camera (para cenas " +"3D) ou defina o Background Mode deste ambiente para Canvas (para cenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8240,6 +8240,13 @@ msgstr "Erro ao carregar fonte." msgid "Invalid font size." msgstr "Tamanho de fonte inválido." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Guia anterior" + +#~ msgid "Next" +#~ msgstr "Próximo" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Ação Inválida (qualquer coisa serve, exceto '/' ou ':')." @@ -8266,9 +8273,6 @@ msgstr "Tamanho de fonte inválido." #~ 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" - #~ msgid "Not found!" #~ msgstr "Não encontrado!" @@ -8414,7 +8418,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Ajustando..." #~ msgid "Error loading scene." @@ -8476,7 +8480,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Info" #~ msgstr "Informação" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Re-importar..." #~ msgid "No bit masks to import!" @@ -8871,13 +8875,13 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Zoom (%):" #~ msgstr "Ampliação (%):" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Restaurar Ampliação" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Definir Ampliação..." #~ msgid "Set a Value" @@ -9297,7 +9301,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK do Projeto" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exportar..." #~ msgid "Project Export" @@ -9404,7 +9408,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Recarregar Tool Script (suave)" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "Editar Conexões..." #~ msgid "Set Params" @@ -9461,5 +9465,5 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Source Texture:" #~ msgstr "Textura de Origem:" -#~ msgid "Merging.." +#~ msgid "Merging..." #~ msgstr "Fundindo..." diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 84e80718da..71275cd19a 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -2,9 +2,9 @@ # 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. -# # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # Carlos Vieira <carlos.vieira@gmail.com>, 2017. +# João <joao@nogordio.com>, 2018. # João Graça <jgraca95@gmail.com>, 2017. # João Lopes <linux-man@hotmail.com>, 2017-2018. # Miguel Gomes <miggas09@gmail.com>, 2017. @@ -13,11 +13,10 @@ # Rueben Stevens <supercell03@gmail.com>, 2017. # SARDON <fabio3_Santos@hotmail.com>, 2017. # Vinicius Gonçalves <viniciusgoncalves21@gmail.com>, 2017. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-25 09:40+0000\n" +"PO-Revision-Date: 2018-06-10 01:02+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" @@ -25,7 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -505,7 +504,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desligar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Ligar..." #: editor/connections_dialog.cpp @@ -926,12 +925,12 @@ msgid "Move Audio Bus" msgstr "Mover barramento de áudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Guardar Modelo do barramento de áudio como.." +msgid "Save Audio Bus Layout As..." +msgstr "Guardar Modelo do barramento de áudio como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Localização para o Novo Modelo.." +msgid "Location for New Layout..." +msgstr "Localização para o Novo Modelo..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1072,12 +1071,12 @@ msgid "Updating Scene" msgstr "Atualizando a Cena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Armazenando alterações locais.." +msgid "Storing local changes..." +msgstr "Armazenando alterações locais..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Atualizando a Cena.." +msgid "Updating scene..." +msgstr "Atualizando a Cena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1145,8 +1144,8 @@ msgid "Show In File Manager" msgstr "Mostrar no Gestor de Ficheiros" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nova Diretoria.." +msgid "New Folder..." +msgstr "Nova Diretoria..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1407,20 +1406,20 @@ msgstr "Limpar Saída" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Exportação do projeto falhou com código de erro %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao guardar recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar Recurso Como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Eu vejo.." +msgid "I see..." +msgstr "Eu vejo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1653,12 +1652,12 @@ msgid "Open Base Scene" msgstr "Abrir Cena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Abrir Cena de forma rápida.." +msgid "Quick Open Scene..." +msgstr "Abrir Cena de forma rápida..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Abrir Script de forma rápida.." +msgid "Quick Open Script..." +msgstr "Abrir Script de forma rápida..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1669,8 +1668,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Guardar alterações a '%s' antes de fechar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar Cena como.." +msgid "Save Scene As..." +msgstr "Guardar Cena como..." #: editor/editor_node.cpp msgid "No" @@ -1721,8 +1720,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta acção não pode ser desfeita. Reverter na mesma?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Executar Cena de forma rápida.." +msgid "Quick Run Scene..." +msgstr "Executar Cena de forma rápida..." #: editor/editor_node.cpp msgid "Quit" @@ -1878,8 +1877,8 @@ msgid "Previous tab" msgstr "Guia anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Ficheiro.." +msgid "Filter Files..." +msgstr "Filtrar Ficheiro..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1890,12 +1889,12 @@ msgid "New Scene" msgstr "Nova Cena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nova Cena Herdada.." +msgid "New Inherited Scene..." +msgstr "Nova Cena Herdada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir Cena.." +msgid "Open Scene..." +msgstr "Abrir Cena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1914,16 +1913,16 @@ msgid "Open Recent" msgstr "Abrir Recente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Converter Para.." +msgid "Convert To..." +msgstr "Converter Para..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2110,7 +2109,7 @@ msgstr "Comunidade" #: editor/editor_node.cpp msgid "About" -msgstr "Sobre" +msgstr "Sobre Nós" #: editor/editor_node.cpp msgid "Play the project." @@ -2185,8 +2184,8 @@ msgid "Save the currently edited resource." msgstr "Guarde o recurso editado." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar Como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2294,8 +2293,8 @@ msgid "Creating Mesh Previews" msgstr "A criar pré-visualizações de Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2447,7 +2446,7 @@ msgid "(Current)" msgstr "(Atual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "A readquirir servidores, espere por favor..." #: editor/export_template_manager.cpp @@ -2525,7 +2524,7 @@ msgid "Error requesting url: " msgstr "Erro ao solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "A ligar ao servidor..." #: editor/export_template_manager.cpp @@ -2542,8 +2541,8 @@ msgstr "Impossível resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "A ligar.." +msgid "Connecting..." +msgstr "A ligar..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2555,7 +2554,7 @@ msgstr "Ligado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "A solicitar..." #: editor/export_template_manager.cpp @@ -2691,12 +2690,12 @@ msgid "Collapse all" msgstr "Colapsar tudo" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renomear.." +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover para.." +msgid "Move To..." +msgstr "Mover para..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2707,15 +2706,15 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." +msgid "Edit Dependencies..." +msgstr "Editar Dependências..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Ver proprietários..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp @@ -2741,7 +2740,7 @@ msgstr "Instancie a(s) Cena(s) selecionada(s) como filha(s) do Nó selecionado." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "A analisar Ficheiros,\n" "Espere, por favor..." @@ -2809,8 +2808,8 @@ msgid "Import Scene" msgstr "Importar Cena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "A importar Cena.." +msgid "Importing Scene..." +msgstr "A importar Cena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2821,8 +2820,8 @@ msgid "Generating for Mesh: " msgstr "A gerar para Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "A executar Script Customizado.." +msgid "Running Custom Script..." +msgstr "A executar Script Customizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,8 +2836,8 @@ msgid "Error running post-import script:" msgstr "Erro na execução do Script de pós-importação:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "A guardar.." +msgid "Saving..." +msgstr "A guardar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2857,8 +2856,8 @@ msgid "Import As:" msgstr "Importar Como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Predefinido.." +msgid "Preset..." +msgstr "Predefinido..." #: editor/import_dock.cpp msgid "Reimport" @@ -3276,7 +3275,7 @@ msgid "Transition Node" msgstr "Nó Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importar Animações..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3284,7 +3283,7 @@ msgid "Edit Node Filters" msgstr "Editar filtros de Nó" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3352,7 +3351,7 @@ msgid "Fetching:" msgstr "Em busca:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "A resolver..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3419,7 +3418,7 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Suporte..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3614,6 +3613,7 @@ msgid "Use Rotation Snap" msgstr "Usar Ajuste na rotação" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configurar Ajuste..." @@ -3710,14 +3710,12 @@ msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver origem" +msgstr "Mostrar Origem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Vista" +msgstr "Mostrar Vista" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4010,7 +4008,7 @@ 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 "" +msgstr "Tipo primitivo de Mesh não é PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4041,7 +4039,7 @@ msgid "Create Convex Collision Sibling" msgstr "Criar irmão de colisão convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Criar Mesh contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4246,7 +4244,7 @@ msgid "Error loading image:" msgstr "Erro ao carregar imagem:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Sem pixeis com transparência > 128 na imagem..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4607,7 +4605,7 @@ msgid "Import Theme" msgstr "Importar tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Guardar tema como..." #: editor/plugins/script_editor_plugin.cpp @@ -4704,7 +4702,7 @@ msgstr "Alternar painel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Encontrar..." #: editor/plugins/script_editor_plugin.cpp @@ -4914,15 +4912,15 @@ msgid "Find Previous" msgstr "Encontrar anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substituir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Ir para linha..." #: editor/plugins/script_text_editor.cpp @@ -5376,11 +5374,7 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Ajuste..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Diálogo de transformação..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5442,7 +5436,7 @@ msgstr "Ajuste de escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "Configuração de vista" +msgstr "Configuração de Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" @@ -5633,7 +5627,7 @@ msgid "Remove All" msgstr "Remover tudo" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp @@ -5681,14 +5675,12 @@ msgid "Checked Item" msgstr "Item verificado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Adicionar item" +msgstr "Item Rádio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item verificado" +msgstr "Item Rádio marcado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5703,8 +5695,8 @@ msgid "Options" msgstr "Opções" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Tem,Muitos,Vários,Opções!" +msgid "Has,Many,Options" +msgstr "Tem,Muitas,Opções" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5896,7 +5888,7 @@ msgid "Presets" msgstr "Predefinições" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp @@ -5991,6 +5983,10 @@ msgid "Imported Project" msgstr "Projeto importado" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nome do Projeto Inválido." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Impossível criar pasta." @@ -6190,9 +6186,11 @@ msgstr "Botão do rato" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nome de ação inválido. Não pode ser vazio nem conter '/', ':', '=', '\\' ou " +"'\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6219,7 +6217,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Pressione uma tecla..." #: editor/project_settings_editor.cpp @@ -6403,7 +6401,7 @@ msgid "Property:" msgstr "Propriedade:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Sobrepor por..." #: editor/project_settings_editor.cpp @@ -6476,7 +6474,7 @@ msgstr "Carregamento automático" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "Escolha uma vista" +msgstr "Escolha uma Vista" #: editor/property_editor.cpp msgid "Ease In" @@ -6499,11 +6497,11 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Ficheiro..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Diretoria..." #: editor/property_editor.cpp @@ -6540,7 +6538,7 @@ msgstr "Erro ao carregar Ficheiro: Não é um recurso!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "Nó selecionado não é uma vista!" +msgstr "Nó selecionado não é uma Vista!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6676,7 +6674,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operação não pode ser feita numa Cena instanciada." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Guardar nova Cena como..." #: editor/scene_tree_dock.cpp @@ -7394,7 +7392,7 @@ msgstr "Distância de escolha:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nome de classe não pode ser uma palavra-chave reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8108,7 +8106,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment precisa de um recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8122,6 +8120,8 @@ 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 "" +"Este WorldEnvironment ė ignorado. Pode adicionar uma Camera (para cenas 3D) " +"ou definir o Modo Background deste ambiente como Canvas (para cenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8219,6 +8219,13 @@ msgstr "Erro ao carregar letra." msgid "Invalid font size." msgstr "Tamanho de letra inválido." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Guia anterior" + +#~ msgid "Next" +#~ msgstr "Proximo" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Ação inválida (tudo menos '/' ou ':')." @@ -8244,9 +8251,6 @@ msgstr "Tamanho de letra inválido." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Impossível encontrar project.godot no Caminho do Projeto." -#~ msgid "Next" -#~ msgstr "Proximo" - #~ msgid "Not found!" #~ msgstr "Não encontrado!" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index e5b3fcbad7..eaf931092a 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -2,15 +2,15 @@ # 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. -# +# Calin Sopterean <csopterean@gmail.com>, 2018. # Filip <filipanton@tutanota.com>, 2018. +# Nitroretro <nitroretro@protonmail.com>, 2018. # TigerxWood <TigerxWood@gmail.com>, 2018. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-02 18:03+0000\n" -"Last-Translator: Filip <filipanton@tutanota.com>\n" +"PO-Revision-Date: 2018-06-20 20:43+0000\n" +"Last-Translator: Calin Sopterean <csopterean@gmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -18,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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -256,7 +256,7 @@ msgstr "Pas (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "Pas Bruscare Cursor (în secunde)." +msgstr "Pas de Cursor Snap (în secunde)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." @@ -498,8 +498,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Deconectați '%s' de la '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Conectați.." +msgid "Connect..." +msgstr "Conectați..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -549,7 +549,7 @@ msgstr "Potriviri:" #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp #: editor/script_editor_debugger.cpp msgid "Description:" -msgstr "Descripție:" +msgstr "Descriere:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" @@ -793,7 +793,7 @@ msgstr "Eroare la deschiderea fişierului pachet, nu este în format zip." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "Decompresez Active" +msgstr "Decomprimare Asset-uri" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" @@ -892,7 +892,7 @@ msgstr "Ștergeți Efectul" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "Audio" +msgstr "Sunet" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -919,16 +919,16 @@ msgid "Move Audio Bus" msgstr "Mutați Pista Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Salvați Pista Audio Șablon Ca.." +msgid "Save Audio Bus Layout As..." +msgstr "Salvați Schema Pistei Audio Ca..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Locație pentru Noul Șablon..." +msgid "Location for New Layout..." +msgstr "Locație pentru Noua Schemă..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Deschideți Șablon Pistă Audio" +msgstr "Deschide Schema Pistei Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -936,7 +936,7 @@ 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 "Fişier nevalid, nu un șablon de pistă audio." +msgstr "Fişier nevalid, nu este o schemă de pistă audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -944,7 +944,7 @@ msgstr "Adaugați Pistă Audio" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "Creaţi un Șablon nou Pistă Audio." +msgstr "Creaţi o Schemă nouă de Pistă Audio." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp @@ -953,7 +953,7 @@ msgstr "Încărcați" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "Încărcaţi un Șablon de Pistă Audio existent." +msgstr "Încărcaţi o Schemă de Pistă Audio existentă." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -962,7 +962,7 @@ msgstr "Salvați Ca" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "Salvaţi acest Șablon Pistă Audio într-un fişier." +msgstr "Salvaţi acestă Schemă de Pistă Audio într-un fişier." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -970,7 +970,7 @@ msgstr "Încărcați Implicit" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "Încărcat Șablonul Pistă Audio implicit." +msgstr "Încarcă Schema de Pistă Audio implicită." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1064,12 +1064,12 @@ msgid "Updating Scene" msgstr "Scena se Actualizează" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Modificările locale se stochează..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scena se Actualizează.." +msgid "Updating scene..." +msgstr "Scena se Actualizează..." #: editor/editor_data.cpp msgid "[empty]" @@ -1114,223 +1114,223 @@ msgstr "Fişierul se Stochează:" #: editor/editor_export.cpp msgid "Packing" -msgstr "" +msgstr "Ambalare" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "" +msgstr "Fișierul șablon nu a fost găsit:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Fișierul există, suprascrieţi?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "" +msgstr "Selectaţi directorul curent" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Copiaţi Calea" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "" +msgstr "Arătați în Administratorul de Fișiere" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "" +msgid "New Folder..." +msgstr "Director Nou..." #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "Reîmprospătați" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Toate Recunoscute" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Toate Fişierele (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Deschideți un Fișier" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Deschideți Fișier(e)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Deschideţi un Director" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Deschideți un Fişier sau Director" #: 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 "" +msgstr "Salvați" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Salvați un Fișier" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Înapoi" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Înainte" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Sus" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Comutați Fișiere Ascunse" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Comutați Favorite" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "Modul de Comutare" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Calea Focală" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "Deplasați Favorit Sus" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "Deplasați Favorit Jos" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "Accesați Directorul Părinte" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Directoare și Fişiere:" #: editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "" +msgstr "Previzualizați:" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "Fișier:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Trebuie să utilizaţi o extensie valida." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "SurseScan" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "(Re)Importând Asset-uri" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "Căutați în Ajutor" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "Listă de Clase:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "" +msgstr "Căutare Clase" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Sus" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Clasă:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "Moștenește:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "Moştenit de:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Descriere Scurtă:" #: editor/editor_help.cpp msgid "Members" -msgstr "" +msgstr "Membri" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" -msgstr "" +msgstr "Membri:" #: editor/editor_help.cpp msgid "Public Methods" -msgstr "" +msgstr "Metode Publice" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "Metode Publice:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "" +msgstr "Obiecte Tema Interfața Grafică" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "" +msgstr "Obiecte Tema Interfața Grafică:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" -msgstr "" +msgstr "Semnale:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "" +msgstr "Enumerări" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "" +msgstr "Enumerări:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Constante" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "Constante:" #: editor/editor_help.cpp msgid "Description" -msgstr "" +msgstr "Descriere" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "" +msgstr "Tutoriale Internet:" #: editor/editor_help.cpp msgid "" @@ -1338,164 +1338,174 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" +"Nu există în prezent nici un tutorial pentru această clasă, puteţi [culoare " +"= $color] [url = $url] contribui unul [/ URL] [/ color] sau [culoare = " +"$color] [url = $url2] cerere unul[/ URL] [/ color]." #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "Proprietăți" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "" +msgstr "Descriere Proprietate:" #: 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 "" +"Nu există în prezent nici o descriere pentru această proprietate. Te rog " +"ajută-ne prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ " +"color]!" #: editor/editor_help.cpp msgid "Methods" -msgstr "" +msgstr "Metode" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "" +msgstr "Descrierea metodei:" #: 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 "" +"Nu există în prezent nici o descriere pentru această metodă. Te rog ajută-ne " +"de prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ color]!" #: editor/editor_help.cpp msgid "Search Text" -msgstr "" +msgstr "Căutați Text" #: editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "Găsiți" #: editor/editor_log.cpp msgid "Output:" -msgstr "" +msgstr "Afișare:" #: 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 "" +msgstr "Curăță" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "" +msgstr "Curăță Afișarea" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Exportul de proiect nu a reuşit cu un cod de eroare %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "" +msgstr "Eroare la salvarea resursei!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "" +msgid "Save Resource As..." +msgstr "Salvați Resursa Ca..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "" +msgid "I see..." +msgstr "Am înțeles..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "Nu pot deschide fişierul pentru scris:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "Formatul fişierului solicitat este necunoscut:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "Eroare la salvare." #: editor/editor_node.cpp msgid "Can't open '%s'." -msgstr "" +msgstr "Imposibil de deschis '%s'." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "" +msgstr "Eroare analizând '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "Sfârșit de fișier neaşteptat '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "" +msgstr "Lipsește '%s' sau dependenţele sale." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "" +msgstr "Eroare în timpul încărcării '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "Salvând Scena" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "Analizând" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "" +msgstr "Creând Thumbnail" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "" +msgstr "Aceasta operațiune nu se poate face fără o rădăcină de copac." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +"Nu am putut salva scena. Probabil dependenţe (instanţe sau moşteniri) nu au " +"putut fi satisfăcute." #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "" +msgstr "Încărcarea resursei a eșuat." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "Imposibil de încărcat MeshLibrary pentru unire!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "Eroare la salvarea MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "Imposibil de încărcat TileSet pentru unire!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "Eroare la salvarea TileSet!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "Eroare la încercarea de a salva schema!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "" +msgstr "Schemă implicită de editor suprascrisă." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Numele schemei nu a fost găsit!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "" +msgstr "S-a restaurat schema implictă la setările de bază." #: editor/editor_node.cpp msgid "" @@ -1503,18 +1513,26 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Această resursă aparţine de o scena care a fost importată, astfel încât nu " +"este editabilă.\n" +"Vă rugăm să citiţi documentaţia relevantă pentru importul scene pentru a " +"înţelege mai bine cum sa lucrați cu acestea." #: 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 "" +"Această resursă este o scena care a fost instanțată sau moştenită.\n" +"Modificările la acesta nu vor fi păstrate la salvarea scenei curente." #: 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 "" +"Această resursă a fost importată, astfel încât nu este editabilă. Modificaţi " +"setările din panoul de import şi apoi reimportați." #: editor/editor_node.cpp msgid "" @@ -1523,6 +1541,11 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Această scenă a fost importată, astfel încât modificările la acesta nu vor " +"fi păstrate.\n" +"Instanțarea sau moştenirea vă permite efectuarea de modificări la acesta.\n" +"Vă rugăm să citiţi documentaţia relevantă pentru importul scene pentru a " +"înţelege mai bine acest mod de lucru." #: editor/editor_node.cpp msgid "" @@ -1530,46 +1553,50 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"Acesta este un obiect îndepărtat, astfel încât modificările la acesta nu vor " +"fi păstrate.\n" +"Vă rugăm să citiţi documentaţia relevantă pentru depanare pentru a înţelege " +"mai bine acest mod de lucru." #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "Extinde toate proprietăţile" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "Restrânge toate proprietăţile" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "" +msgstr "Copie Parametrii" #: editor/editor_node.cpp msgid "Paste Params" -msgstr "" +msgstr "Lipiţi Parametrii" #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" +msgstr "Lipiți Resursa" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "" +msgstr "Copiați Resursa" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "" +msgstr "Faceți Încorporat" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "" +msgstr "Faceți Sub-Resursa Unică" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "" +msgstr "Deschideți în Ajutor" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "" +msgstr "Nu există nici o scenă definită pentru a execuție." #: editor/editor_node.cpp msgid "" @@ -1577,6 +1604,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Nici o scena principala a fost definită, selectați una?\n" +"Puteți schimba mai târziu, în \"Setări Proiect\" în categoria 'Aplicație'." #: editor/editor_node.cpp msgid "" @@ -1584,6 +1613,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Scena selectată ’%s’ nu există, selectați una?\n" +"Puteți schimba mai târziu în „Setări Proiect” în categoria „Aplicație”." #: editor/editor_node.cpp msgid "" @@ -1591,343 +1622,364 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Scena selectată ’%s’ nu este un fișier scenă, selectați una validă?\n" +"Puteți schimba mai târziu în „Setări Proiect” în categoria „Aplicație”." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" +"Scena curentă nu a fost salvată niciodată, salvați-o înainte de rulare." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "" +msgstr "Nu s-a putut porni subprocesul!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "Deschide o scenă" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "" +msgstr "Deschide o scenă de bază" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "" +msgid "Quick Open Scene..." +msgstr "Deschide o scenă rapid..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "" +msgid "Quick Open Script..." +msgstr "Deschide un script rapid..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Salvează și închide" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Salvează schimbările la ’%s’ înainte de ieșire?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "" +msgid "Save Scene As..." +msgstr "Salvează scena ca..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Nu" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Da" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Această scenă nu a fost salvată niciodata. Salvați înainte de rulare?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Această operație nu se poate face fără o scenă." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "" +msgstr "Exportă Librăria de Mesh-uri" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Această operațiune nu poate fi făcută fără un nod de bază." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "" +msgstr "Exportă Setul de Plăci" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Această operațiune nu poate fi făcută fără un nod selectat." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Scena curentă nu este salvată. Deschizi oricum?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Nu se poate reîncărca o scenă care nu a fost salvată niciodată." #: editor/editor_node.cpp msgid "Revert" -msgstr "" +msgstr "Întoarcere" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "" +msgstr "Această acțiune nu poate fi recuperată. Te reîntorci oricum?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "" +msgid "Quick Run Scene..." +msgstr "Execută Rapid Scena..." #: editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "Închidere" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "Ieși din editor?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Deschizi Managerul de Proiect?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "Salvează și Închide" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" msgstr "" +"Salvezi modificările făcute în urmatoarea(le) scenă(e) înainte să închizi?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Salvezi modificările făcute în urmatoarea(le) scenă(e) înainte să deschizi " +"Managerul de Proiect?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" +"Această opțiune este depreciată. Situațiile în care reînprospătarea trebuie " +"forțată sunt acum considerate buguri. Te rugăm să raportezi." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "" +msgstr "Alege o Scenă Principală" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" +"Nu se poate inițializa plugin-ul la: '%s' analizarea configurației a eșuat." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" +"Nu a putut fi găsit câmpul scriptului pentru plugin la: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "" +msgstr "Nu a putut fi încărcat scriptul add-on din calea: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" +"Nu a putut fi încărcat scriptul add-on din calea: '%s' tipul de Bază nu este " +"EditorPlugin." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" +"Nu a putut fi încărcat scriptul add-on din calea: '%s' Scriptul nu este în " +"modul unealtă." #: 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 "" +"Scena '%s' nu a fost importată automat, deci ea nu poate fi modificată.\n" +"Ca să poți face modificări, o nouă scenă derivată poate fi creată." #: 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 "" +msgstr "Uh" #: 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 "" +"Eroare la încărcarea scenei, aceasta trebuie să fie în calea spre proiect. " +"Folosește 'Importă' ca să deschizi scena, apoi salveaz-o în calea spre " +"proiect." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "" +msgstr "Scena '%s' are dependințe nefuncționale:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "" +msgstr "Curăță Scenele Recente" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "" +msgstr "Salvează Schema" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "" +msgstr "Șterge Schema" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp msgid "Default" -msgstr "" +msgstr "Implicit" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "" +msgstr "Comutați între Scene" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "" +msgstr "%d mai multe fișiere sau foldere" #: editor/editor_node.cpp msgid "%d more folders" -msgstr "" +msgstr "%d mai multe foldere" #: editor/editor_node.cpp msgid "%d more files" -msgstr "" +msgstr "%d mai multe fișiere" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "" +msgstr "Poziția Dock-ului" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "" +msgstr "Modul Fără Distrageri" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "" +msgstr "Comutează modul fără distrageri." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "" +msgstr "Adaugă o nouă scenă." #: editor/editor_node.cpp msgid "Scene" -msgstr "" +msgstr "Scenă" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "" +msgstr "Mergi la o scenă deschisă anterior." #: editor/editor_node.cpp msgid "Next tab" -msgstr "" +msgstr "Fila următoare" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "" +msgstr "Fila anterioară" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "" +msgid "Filter Files..." +msgstr "Filtrează fișierele..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "" +msgstr "Operațiuni cu fișiere tip scenă." #: editor/editor_node.cpp msgid "New Scene" -msgstr "" +msgstr "Scenă Nouă" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "" +msgid "New Inherited Scene..." +msgstr "Scenă Derivată Nouă..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "" +msgid "Open Scene..." +msgstr "Deschide Scena..." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "" +msgstr "Salvează Scena" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "" +msgstr "Salvează toate Scenele" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "" +msgstr "Închide Scena" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "" +msgstr "Deschide Recente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "" +msgid "Convert To..." +msgstr "Convertește În..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "" +msgid "MeshLibrary..." +msgstr "Librărie_de_Structuri..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "" +msgid "TileSet..." +msgstr "Set_de_Plăci..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Undo" -msgstr "" +msgstr "Revenire" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp msgid "Redo" -msgstr "" +msgstr "Reîntoarcere" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "" +msgstr "Restabilește Scena" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "" +msgstr "Proiect Divers sau unelte pentru scenă." #: editor/editor_node.cpp msgid "Project" -msgstr "" +msgstr "Proiect" #: editor/editor_node.cpp msgid "Project Settings" -msgstr "" +msgstr "Setări ale Proiectului" #: editor/editor_node.cpp msgid "Run Script" -msgstr "" +msgstr "Execută Scriptul" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Exportare" #: editor/editor_node.cpp msgid "Tools" -msgstr "" +msgstr "Unelte" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "Închide spre Lista Proiectului" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "" +msgstr "Depanare" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "" +msgstr "Lansează cu Depanare la Distanță" #: 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 "" +"Când exporți sau lansezi, executabilul rezultat va încerca să se conecteze " +"la IP-ul acestui computer pentru a putea fi depanat." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Mini Lansare cu Rețea FS" #: editor/editor_node.cpp msgid "" @@ -1938,30 +1990,39 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" +"Când această opțiune este activată, exportarea sau lansarea va produce un " +"executabil minimal.\n" +"Sistemul de fișiere va fi furnizat de la proiect la editor prin rețea.\n" +"Pe Android, lansarea va folosi cablul USB pentru performanță mai rapidă. " +"Această opțiune accelerează testarea jocurilor cu o marime substanțială." #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "" +msgstr "Forme de Coliziune Vizibile" #: 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 "" +"Formele de coliziune si nodurile raycast (pentru 2D și 3D) vor fi vizibile " +"când jocul rulează dacă această opțiune este activată." #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Navigare Vizibilă" #: editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" +"Structurile de navigare și poligoanele vor fi vizibile când jocul rulează " +"dacă această opțiune este activată." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "" +msgstr "Sincronizează Modificările Scenei" #: editor/editor_node.cpp msgid "" @@ -1970,10 +2031,14 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Când această opțiune este activată, orice modificare facută în scenă din " +"editor va fi replicată în jocul care rulează.\n" +"Când această opțiune este folosită de la distanță pe un dispozitiv, este " +"mult mai eficient dacă este folosit un sistem de fișiere în rețea." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "" +msgstr "Sincronizează Modificările Scriptului" #: editor/editor_node.cpp msgid "" @@ -1982,844 +2047,861 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Când această opțiune este activată, orice script salvat ulterior va fi " +"reîncărcat în jocul care rulează.\n" +"Când această opțiune este folosită de la distanță pe un dispozitiv, este " +"mult mai eficient dacă este folosit un sistem de fișiere în rețea." #: editor/editor_node.cpp msgid "Editor" -msgstr "" +msgstr "Editor" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "" +msgstr "Setări ale Editorului" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "" +msgstr "Schema Editorului" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "" +msgstr "Comută în Ecran Complet" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "" +msgstr "Administrează Șabloanele de Export" #: editor/editor_node.cpp msgid "Help" -msgstr "" +msgstr "Ajutor" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Classes" -msgstr "" +msgstr "Clase" #: 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 "" +msgstr "Căutare" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Online Docs" -msgstr "" +msgstr "Documentație Online" #: editor/editor_node.cpp msgid "Q&A" -msgstr "" +msgstr "Întrebări și Răspunsuri" #: editor/editor_node.cpp msgid "Issue Tracker" -msgstr "" +msgstr "Agent de Monitorizare al Problemelor" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Comunitate" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "Despre" #: editor/editor_node.cpp msgid "Play the project." -msgstr "" +msgstr "Rulează proiectul." #: editor/editor_node.cpp msgid "Play" -msgstr "" +msgstr "Rulează" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "" +msgstr "Întrerupe scena" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "" +msgstr "Întrerupere Scenă" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "" +msgstr "Oprește scena." #: editor/editor_node.cpp msgid "Stop" -msgstr "" +msgstr "Oprește" #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "" +msgstr "Rulează scena editată." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Rulează Scena" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "" +msgstr "Rulează scena personalizată" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "" +msgstr "Rulează Scena Personalizată" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" -msgstr "" +msgstr "Se rotește când ferestra editorului se recolorează!" #: editor/editor_node.cpp msgid "Update Always" -msgstr "" +msgstr "Actualizează Întotdeauna" #: editor/editor_node.cpp msgid "Update Changes" -msgstr "" +msgstr "Modificări ale Actualizării" #: editor/editor_node.cpp msgid "Disable Update Spinner" -msgstr "" +msgstr "Dezactivează Cercul de Actualizare" #: editor/editor_node.cpp msgid "Inspector" -msgstr "" +msgstr "Inspector" #: editor/editor_node.cpp msgid "Create a new resource in memory and edit it." -msgstr "" +msgstr "Creează o nouă resursă în memorie și editeaz-o." #: editor/editor_node.cpp msgid "Load an existing resource from disk and edit it." -msgstr "" +msgstr "Încarcă o resursă existentă de pe disc si editeaz-o." #: editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "" +msgstr "Salvează resursa editată curentă." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "" +msgid "Save As..." +msgstr "Salvează Ca..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." -msgstr "" +msgstr "Mergi la un obiect din istoric editat anterior." #: editor/editor_node.cpp msgid "Go to the next edited object in history." -msgstr "" +msgstr "Mergi la următorul obiect editat din istoric." #: editor/editor_node.cpp msgid "History of recently edited objects." -msgstr "" +msgstr "Istoricul obiectelor editate recent." #: editor/editor_node.cpp msgid "Object properties." -msgstr "" +msgstr "Proprietățile obiectului." #: editor/editor_node.cpp msgid "Changes may be lost!" -msgstr "" +msgstr "Modificările pot fi pierdute!" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Importă" #: editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Nod" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "" +msgstr "Sistemul De Fișiere" #: editor/editor_node.cpp msgid "Output" -msgstr "" +msgstr "Ieșire" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" +msgstr "Nu Salva" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Importă Șabloane Dintr-o Arhivă ZIP" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Exportă Proiectul" #: editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Exportă Librăria" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "" +msgstr "Contopește Cu Existentul" #: editor/editor_node.cpp msgid "Password:" -msgstr "" +msgstr "Parola:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Deschide și Execută un Script" #: editor/editor_node.cpp msgid "New Inherited" -msgstr "" +msgstr "Derivare Nouă" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "" +msgstr "Încarcă Erorile" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "" +msgstr "Selectează" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "" +msgstr "Deschide Editorul 2D" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "" +msgstr "Deschide Editorul 3D" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "" +msgstr "Deschide Editorul de Scripturi" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "" +msgstr "Deschide Librăria de Asseturi" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "" +msgstr "Deschide Editorul următor" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "" +msgstr "Deschide Editorul anterior" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Se creează Previzualizările Mesh-ului" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" +msgid "Thumbnail..." +msgstr "Miniatură..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "" +msgstr "Pluginuri instalate:" #: editor/editor_plugin_settings.cpp msgid "Update" -msgstr "" +msgstr "Actualizare" #: editor/editor_plugin_settings.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Version:" -msgstr "" +msgstr "Versiune:" #: editor/editor_plugin_settings.cpp msgid "Author:" -msgstr "" +msgstr "Autor:" #: editor/editor_plugin_settings.cpp msgid "Status:" -msgstr "" +msgstr "Stare:" #: editor/editor_profiler.cpp msgid "Stop Profiling" -msgstr "" +msgstr "Oprește Profilarea" #: editor/editor_profiler.cpp msgid "Start Profiling" -msgstr "" +msgstr "Pornește Profilarea" #: editor/editor_profiler.cpp msgid "Measure:" -msgstr "" +msgstr "Măsura:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Timpul Cadrului (sec)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "" +msgstr "Media Timpului (sec)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Cadru %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "" +msgstr "Cadru Fizic %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" -msgstr "" +msgstr "Timp:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "Inclusiv" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Propriu" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "" +msgstr "Cadru #:" #: editor/editor_profiler.cpp msgid "Time" -msgstr "" +msgstr "Timp" #: editor/editor_profiler.cpp msgid "Calls" -msgstr "" +msgstr "Apeluri" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Selectează un dispozitiv din listă" #: 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 "" +"Nu a fost găsită nicio presetare de export care să poată rula pentru această " +"platformă.\n" +"Te rog adaugă o presetare de rulare în meniul pentru export." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Scrie logica programului în metoda _run()." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Acolo este o scenă deja editată." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Nu s-a putut inițializa scriptul:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Ai uitat cumva cuvântul 'unealtă'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Nu a putut fi executat scriptul:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Ai uitat cumva metoda '_run' ?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "" +msgstr "Implicit (Asemănător ca Editor)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "" +msgstr "Selectează Nodul(rile) pentru Importare" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Calea Scenei:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Importă Din Nod:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Descarcă din nou" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Dezinstalează" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(Instalat)" #: editor/export_template_manager.cpp msgid "Download" -msgstr "" +msgstr "Descarcă" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(Lipsește)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Curent)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "" +msgid "Retrieving mirrors, please wait..." +msgstr "Se recuperează oglinzile, te rog așteaptă..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Elimini șablonul versiunea '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "" +msgstr "Nu se pot deschide șabloanele de export zip." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "" +msgstr "Format nevalid versiune.txt în șabloane." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Nu s-a găsit versiune.txt în șabloane." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "" +msgstr "Eroare la crearea căii pentru șabloane:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "" +msgstr "Se extrag Șabloanele de Export" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "Se importă:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Niciun link pentru descărcare nu a fost găsit pentru această versiune. " +"Descărcarea directă este disponibilă numai pentru lansări oficiale." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Nu se poate rezolva." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "Nu se poate face conexiunea." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Niciun răspuns." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "Cerere Eșuată." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Buclă de Redirecționare." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "A Eșuat:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Descărcare Completă." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "" +msgstr "Eroare la solicitarea URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "" +msgid "Connecting to Mirror..." +msgstr "Se conectează la Oglinda..." #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "Deconectat" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "Se Soluționează" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Nu se poate Soluționa" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" +msgid "Connecting..." +msgstr "Conectare..." #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "" +msgstr "Nu se poate Conecta" #: editor/export_template_manager.cpp msgid "Connected" -msgstr "" +msgstr "Conectat" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" +msgid "Requesting..." +msgstr "Se Solicită..." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "Se Descarcă" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "Eroare de Conexiune" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Eroare SSL Handshake" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Versiune Curentă:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Versiuni Instalate:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Instalează Din Fișier" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "" +msgstr "Elimină Șablon" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "Selectează fișierul șablon" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "Exportă Managerul de Șabloane" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "" +msgstr "Descarcă Șabloane" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "Selectează oglinda din listă: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Nu se poate deschide file_type_cache.cch pentru scriere, nu se salvează " +"fișierul tip cache!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" +"Nu se poate naviga către '%s' pentru că nu a fost găsit în sistemul de " +"fișiere!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "Vizualizează articolele ca și o grilă de miniaturi" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "Vizualizează articolele ca și o listă" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Stare: Importarea fișierului eșuată. Te rog repară fișierul și reimportă " +"manual." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Nu se poate muta/redenumi rădăcina resurselor." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Nu se poate muta un director în el însuși." #: editor/filesystem_dock.cpp msgid "Error moving:" -msgstr "" +msgstr "Eroare mutând:" #: editor/filesystem_dock.cpp msgid "Error duplicating:" -msgstr "" +msgstr "Eroare duplicând:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "" +msgstr "Imposibil de actualizat dependințele:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "Niciun nume furnizat" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "Numele furnizat conține caractere nevalide" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "Niciun nume furnizat." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "" +msgstr "Numele furnizat conține caractere nevalide." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Un fișier sau un director cu acest nume există deja." #: editor/filesystem_dock.cpp msgid "Renaming file:" -msgstr "" +msgstr "Redenumind fișierul:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "Redenumind directorul:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "" +msgstr "Duplicând fișierul:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" +msgstr "Duplicând directorul:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "Extinde toate" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Restrânge toate" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "" +msgid "Rename..." +msgstr "Redenumește..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "" +msgid "Move To..." +msgstr "Mută În..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "" +msgstr "Deschide Scena(ele)" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Instanță" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +msgid "Edit Dependencies..." +msgstr "Editează Dependințele..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "View Owners..." +msgstr "Vizualizează Proprietarii..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "" +msgid "Duplicate..." +msgstr "Duplicați..." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "Directorul Anterior" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Directorul Urmator" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Rescanează Sistemul de Fișiere" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "Marchează statutul directorului ca Favorit" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" +msgstr "Instanțiază scena(ele) selectată ca un copil al nodului selectat." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" +"Se Scanează Fișierele,\n" +"Te Rog Așteaptă..." #: editor/filesystem_dock.cpp msgid "Move" -msgstr "" +msgstr "Mută" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "" +msgstr "Redenumește" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Adaugă în Grup" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Elimină din Grup" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Importă ca Scenă Simplă" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Importă cu Animații Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importă cu Materiale Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importă cu Obiecte Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importă cu Obiecte+Materiale Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Importă cu Obiecte+Animații Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Importă cu Materiale+Animații Separate" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Importă cu Obiecte+Materiale+Animații Separate" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Importă ca Scene Multiple" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importă ca Scene+Materiale Multiple" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Importă Scena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "" +msgid "Importing Scene..." +msgstr "Se Importa Scena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Se Genereaza Lightmaps" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Se Generează pentru Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "" +msgid "Running Custom Script..." +msgstr "Se Execută un Script Personalizat..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "Nu s-a putut încărca scriptul post-importare:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" +msgstr "Script nevalid/nefuncțional pentru post-importare (vezi consola):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "" +msgstr "Eroare la executarea scripyului post-importare:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "" +msgid "Saving..." +msgstr "Se Salvează..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Setează ca Implicit pentru '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Curăță setarea Implicită pentru '%s'" #: editor/import_dock.cpp msgid " Files" -msgstr "" +msgstr " Fișiere" #: editor/import_dock.cpp msgid "Import As:" -msgstr "" +msgstr "Importă Ca:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "" +msgid "Preset..." +msgstr "Presetare..." #: editor/import_dock.cpp msgid "Reimport" -msgstr "" +msgstr "Reimportă" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Set MultiNod" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Grupuri" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "Selectează un Nod pentru a edita Semnalele și Grupurile." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "" +msgstr "Crează Poligon" #: 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 "Editează Poligon" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Inserează Punct" #: 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 "Editează Poligon (Elimină Punct)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Elimină Poligon Și Punct" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Crează un nou poligon de la zero" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -2828,522 +2910,526 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Editează poligon existent:\n" +"LMB: Mută Punct.\n" +"Ctrl+LMB: Despică Segment.\n" +"RMB: Șterge Punct." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" -msgstr "" +msgstr "Șterge puncte" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "" +msgstr "Comutează Auto-Execuție" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nume Nou Animație:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Anim Nouă" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Schimbă Numele Animației:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" -msgstr "" +msgstr "Ștergi Animația?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "" +msgstr "Elimină Animația" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "EROARE: Nume animație nevalid!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "EROARE: Numele animației există deja!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Redenumește Animația" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Adaugă Animația" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "" +msgstr "Amestecă Următoarea Schimbare" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Schimbă Timpul Amestecului" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Încarcă Animație" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Duplicare Animație" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "" +msgstr "EROARE: Nicio copie a animației!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "EROARE: Nicio resursă de animație în clipboard!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "" +msgstr "Animație Lipită" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" -msgstr "" +msgstr "Lipește Animație" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "EROARE: Nicio animație pentru editare!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "Rulează animația selectată în sens invers de la poziția curentă. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "Rulează animația selectată în sens invers de la sfârșit. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Oprește rularea animației. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "Rulează animația selectată de la început. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "Rulează animația selectată de la poziția curentă. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Poziția animației (în secunde)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Redimensionează rularea animației pentru nod." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." -msgstr "" +msgstr "Creează o nouă animație în player." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load animation from disk." -msgstr "" +msgstr "Încarcă animație de pe disc." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load an animation from disk." -msgstr "" +msgstr "Încarcă o animație de pe disc." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save the current animation" -msgstr "" +msgstr "Salvează actuala animație" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "" +msgstr "Afișează o listă a animațiilor în player." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "" +msgstr "Auto-Execută la Încărcare" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Editează Timpul de Amestecare al Țintei" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "Unelte Animație" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Copy Animation" -msgstr "" +msgstr "Copiză Animație" #: 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 "" +msgstr "Activează Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "" +msgstr "Direcții" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "Trecut" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "Viitor" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +msgstr "Adâncime" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 pas" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 pași" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 pași" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "Doar Diferențe" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Forțează Modulare Albă" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Include Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "Creează Animație Nouă" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "Nume Animație:" #: 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 "Eroare!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Timpi de Amestecare:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "Următorul (Rând Automat):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Timpi de Amestecare Cross-Animație" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "Animație" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Nume nou:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Filters" -msgstr "" +msgstr "Editează Filtrele" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Dimensiune:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" -msgstr "" +msgstr "Estompează (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Reliefează (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Amestec" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Restartare Automată:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "Restartare (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "Restartare Aleatorie (s):" #: 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 "Cantitate:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "" +msgstr "Amestec:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "Amestec 0:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "Amestec 1:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "Timp X-Decolorare (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "Curent:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "" +msgstr "Adaugă Intrare(Input)" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "" +msgstr "Curăță Auto-Avansarea" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Setează Auto-Avansare" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "" +msgstr "Șterge Intrare(Input)" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "" +msgstr "Arborele Animației este valid." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "" +msgstr "Arborele Animației este nevalid." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Nod de Animație" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "Nod OneShot" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "Nod de Amestecare" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Nod Amestec2" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Nod Amestec3" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Nod Amestec4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Nod DimensiuneTimp" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Nod CăutareTimp" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Nod Tranziție" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "" +msgid "Import Animations..." +msgstr "Importă Animații..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Editează Filtrele Nodurilor" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "" +msgid "Filters..." +msgstr "Filtre..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" -msgstr "" +msgstr "ArboreAnimație" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "" +msgstr "Gratuit" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "Conținut:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +msgstr "Vizualizează Fișierele" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "" +msgstr "Nu se poate rezolva numele gazdei:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "" +msgstr "Eroare la conectare, te rog încearcă din nou." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "" +msgstr "Nu se poate conecta la gazda:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "Nciun răspuns de la gazda:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "Cerere eșuată, cod returnat:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "Cerere eșuată, prea multe redirecționări" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "" +msgstr "Hash eronat de descărcare, se presupune că fișierul este falsificat." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "Așteptat:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "Primit:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "Verificare hash sha256 eșuată" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Eroare la Descărcarea Asset-ului:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Fetching:" -msgstr "" +msgstr "Se Preia(u):" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" +msgid "Resolving..." +msgstr "Se Rezolvă..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "" +msgstr "Eroare la solicitare" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "" +msgstr "Inactiv" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Reîncearcă" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Eroare Descărcare" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Descărcarea acestui asset rulează deja!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" -msgstr "" +msgstr "primul" #: editor/plugins/asset_library_editor_plugin.cpp msgid "prev" -msgstr "" +msgstr "anterior" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" -msgstr "" +msgstr "următorul" #: editor/plugins/asset_library_editor_plugin.cpp msgid "last" -msgstr "" +msgstr "ultimul" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "Toate" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "" +msgstr "Plugin-uri" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" -msgstr "" +msgstr "Sorare:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "Revers" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" -msgstr "" +msgstr "Categorie:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" +msgid "Support..." +msgstr "Suport..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "Oficial" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "Se Testează" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "Fișier ZIP cu Asset-uri" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -3351,135 +3437,144 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Nu se poate determina p cale de salvare pentru imaginile lightmap.\n" +"Salvează scena (imaginile vor fi salvate în acelasi director), sau alege o " +"cale de salvare din proprietățile BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" +"Nicio structură pentru procesare. Asigură-te că acestea conțin un canal UV2 " +"și că opțiunea 'Procesează Lumina' este pornită." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Crearea imaginilor lightmap eșuată, asigură-te că poate fi scrisă calea spre " +"ele." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "" +msgstr "Procesează Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "Previzualizare" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "Configurare Snap" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "Compensare Grilă:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "Pas Grilă:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "Compensare Rotație:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Pas Rotație:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "" +msgstr "Mută Pivot" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "Acțiune de Mutare" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" -msgstr "" +msgstr "Mută ghidul vertical" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new vertical guide" -msgstr "" +msgstr "Creează un nou ghid vertical" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove vertical guide" -msgstr "" +msgstr "Elimină ghidul vertical" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move horizontal guide" -msgstr "" +msgstr "Mută ghidul orizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal guide" -msgstr "" +msgstr "Creează un nou ghid orizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove horizontal guide" -msgstr "" +msgstr "Elimină ghidul orizontal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" -msgstr "" +msgstr "Creează ghizi noi orizontal și vertical" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" -msgstr "" +msgstr "Editează Lanț IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "Editează ObiectulPânză" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" -msgstr "" +msgstr "Doar ancore" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors and Margins" -msgstr "" +msgstr "Modifică Ancorele și Limitele" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "" +msgstr "Modifică Ancorele" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Lipește Postura" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" -msgstr "" +msgstr "Mod Selectare" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Trage: Rotire" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+Trage: Mutare" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Apasă 'v' pentru a Schimba Pivotul, 'Shift+v' pentru a Trage Pivotul (în " +"timpul mișcării)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt+RMB: Selecție adâncime listă" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Mod Mutare" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Mod Rotație" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3487,559 +3582,566 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Arată o listă a tuturor obiectelor la poziția clickului\n" +"(similar cu Alt+RMB în modul selectare)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Click pentru a modifica pivotul de rotație al obiectului." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Mod În Jur" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" -msgstr "" +msgstr "Comutare snapping" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "Utilizează Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping options" -msgstr "" +msgstr "Opțiuni Snapping" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" -msgstr "" +msgstr "Snap pe grilă" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "Folosește Rotația Snap" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "Configurare Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "Snap Relativ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "Utilizează Pixel Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "" +msgstr "Snapping inteligent" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "" +msgstr "Snap către părinte" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "" +msgstr "Snap către ancora nodului" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "" +msgstr "Snap pe fețele nodului" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "" +msgstr "Snap către alte noduri" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "" +msgstr "Snap pe ghizi" #: 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 "Imobilizează obiectul selectat (nu poate fi mișcat)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "Remobilizează obiectul selectat (poate fi mișcat)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "" +msgstr "Asigură-te că nu pot fi selectați copiii obiectului." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Restaurează abilitatea copiilor obiectului de a fi selectați." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" -msgstr "" +msgstr "Creează Oase" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "" +msgstr "Curăță Oasele" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" -msgstr "" +msgstr "Arată Oasele" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "Creează Lanț IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "Curăță Lanțul IK" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "View" -msgstr "" +msgstr "Perspectivă" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "" +msgstr "Arată Grila" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" -msgstr "" +msgstr "Arată Asistenții" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" -msgstr "" +msgstr "Arată Riglele" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Guides" -msgstr "" +msgstr "Arată Ghizii" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Origin" -msgstr "" +msgstr "Arată Originea" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Viewport" -msgstr "" +msgstr "Arată Fereastra de Lucru" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "" +msgstr "Centrează Selecția" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "" +msgstr "Încadrează în Ecran Selecția" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" -msgstr "" +msgstr "Schemă" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" -msgstr "" +msgstr "Inserează Note" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "Inserează Notă" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Inserează Notă (Melodii existente)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "" +msgstr "Copiază Postura" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "" +msgstr "Curăță Postura" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag pivot from mouse position" -msgstr "" +msgstr "Trage pivotul de la poziția mouse-ului" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set pivot at mouse position" -msgstr "" +msgstr "Setează pivotul la poziția mouse-ului" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Multiplică pasul pe grilă cu 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Împarte pasul pe grilă cu 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "" +msgstr "Adaugă %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "" +msgstr "Se adaugă %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "Bine" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Nu se pot instanția noduri multiple fără o rădacină." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "Creează Nod" #: 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 "Eroare la instanțierea scenei din %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change default type" -msgstr "" +msgstr "Schimbă tipul implicit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" +"Trage & lasă + Shift: Adaugă nod ca și frate\n" +"Trage & lasă + Shift: Schimbă tipul nodului" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" -msgstr "" +msgstr "Creează Poligon3D" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Setează Mâner" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "Elimini obiectul %d?" #: 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 "Adaugă Obiect" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "" +msgstr "Elimină Obiectul Selectat" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "" +msgstr "Importă din Scenă" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "" +msgstr "Actualizează din Scenă" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Plat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Plat1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" -msgstr "" +msgstr "Facilitare în" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "" +msgstr "Facilitare din" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "PasOmogen" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "" +msgstr "Modifică Punctul Curbei" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "" +msgstr "Modifică Tangenta Curbei" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" -msgstr "" +msgstr "Încarcă Presetare a Curbei" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" -msgstr "" +msgstr "Adaugă punct" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove point" -msgstr "" +msgstr "Elimină punct" #: editor/plugins/curve_editor_plugin.cpp msgid "Left linear" -msgstr "" +msgstr "Stânga liniară" #: editor/plugins/curve_editor_plugin.cpp msgid "Right linear" -msgstr "" +msgstr "Dreapta liniară" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" -msgstr "" +msgstr "Încarcă presetare" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "" +msgstr "Elimină Punctul Curbei" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Comută Tangenta Liniară a Curbei" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Ține apăsat Shift pentru a edita individual tangentele" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Procesează Sonda GI" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" -msgstr "" +msgstr "Adaugă/Elimină Punctul Rampei de Culori" #: editor/plugins/gradient_editor_plugin.cpp #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Color Ramp" -msgstr "" +msgstr "Modifică Rampa de Culori" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "Obiect %d" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" -msgstr "" +msgstr "Obiecte" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Editor Lista de Obiect" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Nicio resursă OccluderPolygon2D în acest nod.\n" +"Vrei să creezi și să atribui una?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "" +msgstr "Creează Poligon de Ocluziune" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "" +msgstr "Creează un nou poligon de la zero." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit existing polygon:" -msgstr "" +msgstr "Editează poligonul existent:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "" +msgstr "LMB: Mișcă Punctul." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "" +msgstr "Ctrl+LMB: Despică Segmentul." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "" +msgstr "RMB: Șterge Punctul." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Mesh-ul este gol!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Creează un Corp Static Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Creează un Corp Static Convex" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "" +msgstr "Asta nu funcționează în rădăcina scenei!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Creează o Formă Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "Creează o Formă Convexă" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Creează un Mesh de Navigare" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "" +msgstr "Mesh-ul conținut nu este de tipul ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "Despachetarea UV a eșuat, se poate ca mesh-ul să nu fie multiplu?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "" +msgstr "Niciun mesh de depanat." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "Modelul nu are UV în acest strat" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "" +msgstr "MeshInstance nu are un Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "" +msgstr "Mesh-ul nu are o suprafață din care să se poată creea contururi!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Mesh-ul primitiv nu este de tipul PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "" +msgstr "Nu s-a putut creea un contur!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "" +msgstr "Creează Contur" #: 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 "Creează un Corp Static Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "" +msgstr "Creează un Corp Static Convex" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Creează un Frate de Coliziune Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Creează un Frate de Coliziune Convex" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "" +msgid "Create Outline Mesh..." +msgstr "Se Creează un Mesh de Contur..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" -msgstr "" +msgstr "Vizionare UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV2" -msgstr "" +msgstr "Vizionare UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "" +msgstr "Despachetează UV2 pentru Lightmap/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "" +msgstr "Creează Mesh de Contur" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "" +msgstr "Dimensiunea Conturului:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "" +msgstr "Niciun mesh sursă specificată (și niciun MultiMesh setat în nod)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "" +msgstr "Niciun mesh sursă specificată (și MultiMesh nu conține un Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "" +msgstr "Sursa mesh-ului nevalidă (cale nevalidă)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Sursa mesh-ului nevalidă (nu este un MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "Sursa mesh-ului nevalidă (nu conține nicio resursă Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Nicio sursă de suprafață specificată." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Sursa suprafeței nevalidă (cale nevalidă)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Sursa suprafeței nevalidă (nu există geometrie)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Sursa suprafeței nevalidă (nu există fețe)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "Părintele nu are fețe solide pentru a fi populate." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." -msgstr "" +msgstr "Nu s-a putut mapa zona." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Selectează un Mesh Sursă:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Selectează o Suprafață Țintă:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Populează Suprafața" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "" +msgstr "Populează MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Suprafață Țintă:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Mesh Sursă:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "" +msgstr "Axa-X" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "" +msgstr "Axa-Y" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "" +msgstr "Axa-Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" @@ -4055,7 +4157,7 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "" +msgstr "Dimensiune Aleatorie:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -4067,11 +4169,11 @@ msgstr "" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake the navigation mesh." -msgstr "" +msgstr "Procesează mesh-ul de navigare." #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Curăță mesh-ul de navigare." #: editor/plugins/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -4111,11 +4213,11 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Se convertește în mesh nativ de navigare..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Setup Generare Mesh de Navigare:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -4143,7 +4245,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 @@ -4156,7 +4258,7 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Curăță Masca de Emisie" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4210,7 +4312,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Creează Puncte de Emisie Din Mesh" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" @@ -4375,7 +4477,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "" +msgstr "Shift+Ctrl: Dimensiune" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" @@ -4387,7 +4489,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "Redimensionează Poligon" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4407,16 +4509,16 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "" +msgstr "Curăță 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 "Activează Snap" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" @@ -4477,7 +4579,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "" +msgstr "Curăță Fișierele Recente" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" @@ -4504,7 +4606,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 @@ -4593,7 +4695,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Execută" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" @@ -4601,7 +4703,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 @@ -4807,15 +4909,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 @@ -5183,7 +5285,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "Mod Redimensionare (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" @@ -5195,7 +5297,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Mode (%s)" -msgstr "" +msgstr "Mod Snap (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -5255,7 +5357,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Scale" -msgstr "" +msgstr "Unealtă Dimensiune" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -5266,11 +5368,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5316,19 +5414,19 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "Setări Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Tradu Snap:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "" +msgstr "Rotație Snap (grade):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "" +msgstr "Dimensionare Snap (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" @@ -5360,7 +5458,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "Dimensiune (raport):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -5456,7 +5554,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "" +msgstr "Mod Snap:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" @@ -5464,11 +5562,11 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "" +msgstr "Pixel Snap" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "" +msgstr "Snap Grilă" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -5523,7 +5621,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5591,7 +5689,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5779,7 +5877,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5869,6 +5967,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Nume de Proiect Nevalid." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -5968,16 +6070,21 @@ msgid "" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" +"Proiectul nu poate fi executat: nicio scenă principală nu a fost definită.\n" +"Te rog editează proiectul și setează o scenă principală în \"Setările " +"Proiectului\" din categoria \"Aplicații\"." #: 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 "" +"Nu se poate executa priectul: există Asset-uri care trebuie importate.\n" +"Te rog editează proiectul pentru a declanșa importul inițial." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" -msgstr "" +msgstr "Ești sigur că vrei să execuți acel proiect?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" @@ -6029,13 +6136,16 @@ msgstr "" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "" +msgstr "Proiectul nu poate fi executat" #: 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 "" +"Deocamdată nu ai niciun proiect.\n" +"Dorești să explorezi exemplele de proiecte oficiale din Librăria de Asset-" +"uri?" #: editor/project_settings_editor.cpp msgid "Key " @@ -6055,8 +6165,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6084,7 +6194,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 @@ -6261,14 +6371,14 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "General" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6364,11 +6474,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 @@ -6469,7 +6579,7 @@ msgstr "" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Modul de Execuție:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -6485,7 +6595,7 @@ msgstr "" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Setările de Execuție ale Scenei" #: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp #: scene/gui/dialogs.cpp @@ -6539,7 +6649,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 @@ -6590,7 +6700,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Curăță Derivarea" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -6614,7 +6724,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Clear Script" -msgstr "" +msgstr "Curăță Scriptul" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -6652,7 +6762,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "Curăță un script pentru nodul selectat." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -6664,11 +6774,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Curăță Derivarea? (Fără Întoarcere)" #: editor/scene_tree_dock.cpp msgid "Clear!" -msgstr "" +msgstr "Curăță!" #: editor/scene_tree_editor.cpp msgid "Toggle Spatial Visible" @@ -7160,7 +7270,7 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" -msgstr "" +msgstr "Perspectivă Snap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -7212,7 +7322,7 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Curăță Rotația Cursorului" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Create Area" @@ -7228,7 +7338,7 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" -msgstr "" +msgstr "Curăță Selecția" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -7632,11 +7742,11 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "" +msgstr "Execută în Browser" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "Execută HTML-ul exportat în browserul prestabilit al sistemului." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -7971,3 +8081,11 @@ msgstr "" #: scene/resources/dynamic_font.cpp msgid "Invalid font size." msgstr "" + +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Fila anterioară" + +#, fuzzy +#~ msgid "Next" +#~ msgstr "Fila următoare" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 9ddbc965e5..97c7284404 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -2,7 +2,7 @@ # 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. -# +# Аркадий Авас <savvot@gmail.com>, 2018. # Artem Varaksa <aymfst@gmail.com>, 2018. # B10nicMachine <shumik1337@gmail.com>, 2017. # Chaosus89 <chaosus89@gmail.com>, 2018. @@ -14,15 +14,15 @@ # Maxim toby3d Lebedev <mail@toby3d.ru>, 2016. # outbools <drag4e@yandex.ru>, 2017. # pitchblack <pitchblack@mail.ru>, 2017. +# Sergey <maligin.serega2010@yandex.ru>, 2018. # Sergey Agarkov <zorgsoft@gmail.com>, 2017. -# Аркадий Авас <savvot@gmail.com>, 2018. -# +# teriva <spirin.cos@yandex.ru>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-27 16:39+0000\n" -"Last-Translator: Chaosus89 <chaosus89@gmail.com>\n" +"PO-Revision-Date: 2018-06-18 19:42+0000\n" +"Last-Translator: ijet <my-ijet@mail.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -31,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 3.0-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -511,8 +511,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Отключить '%s' от '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Присоединить.." +msgid "Connect..." +msgstr "Присоединить..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -931,12 +931,12 @@ msgid "Move Audio Bus" msgstr "Переместить аудио шину" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Сохранить раскладку звуковой шины как.." +msgid "Save Audio Bus Layout As..." +msgstr "Сохранить раскладку звуковой шины как..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Местоположение новой раскладки.." +msgid "Location for New Layout..." +msgstr "Местоположение новой раскладки..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1077,12 +1077,12 @@ msgid "Updating Scene" msgstr "Обновление сцены" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Сохранение локальных изменений.." +msgid "Storing local changes..." +msgstr "Сохранение локальных изменений..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Обновление сцены.." +msgid "Updating scene..." +msgstr "Обновление сцены..." #: editor/editor_data.cpp msgid "[empty]" @@ -1150,8 +1150,8 @@ msgid "Show In File Manager" msgstr "Просмотреть в проводнике" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Новая папка.." +msgid "New Folder..." +msgstr "Новая папка..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1412,20 +1412,20 @@ msgstr "Очистить вывод" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Экспорт проекта не удался, код %d." #: 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 "Сохранить ресурс как.." +msgid "Save Resource As..." +msgstr "Сохранить ресурс как..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ясно.." +msgid "I see..." +msgstr "Ясно..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1655,12 +1655,12 @@ msgid "Open Base Scene" msgstr "Открыть основную сцену" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Быстро открыть сцену.." +msgid "Quick Open Scene..." +msgstr "Быстро открыть сцену..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Быстро открыть скрипт.." +msgid "Quick Open Script..." +msgstr "Быстро открыть скрипт..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1671,8 +1671,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Сохранить изменения в «%s» перед закрытием?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Сохранить сцену как.." +msgid "Save Scene As..." +msgstr "Сохранить сцену как..." #: editor/editor_node.cpp msgid "No" @@ -1723,8 +1723,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Это действие нельзя отменить. Восстановить в любом случае?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Быстро запустить сцену.." +msgid "Quick Run Scene..." +msgstr "Быстро запустить сцену..." #: editor/editor_node.cpp msgid "Quit" @@ -1880,8 +1880,8 @@ msgid "Previous tab" msgstr "Предыдущая вкладка" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Отсортировать файлы.." +msgid "Filter Files..." +msgstr "Отсортировать файлы..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1892,12 +1892,12 @@ msgid "New Scene" msgstr "Новая сцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Новая унаследованная Сцена.." +msgid "New Inherited Scene..." +msgstr "Новая унаследованная Сцена..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Открыть сцену.." +msgid "Open Scene..." +msgstr "Открыть сцену..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1916,16 +1916,16 @@ msgid "Open Recent" msgstr "Открыть последнее" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Конвертировать в.." +msgid "Convert To..." +msgstr "Конвертировать в..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "Библиотека полисеток.." +msgid "MeshLibrary..." +msgstr "Библиотека полисеток..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "Набор тайлов.." +msgid "TileSet..." +msgstr "Набор тайлов..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2109,7 +2109,7 @@ msgstr "Система отслеживания ошибок" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "Общественные" +msgstr "Сообщество" #: editor/editor_node.cpp msgid "About" @@ -2188,8 +2188,8 @@ msgid "Save the currently edited resource." msgstr "Сохранить текущий редактируемый ресурс." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Сохранить как.." +msgid "Save As..." +msgstr "Сохранить как..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2297,8 +2297,8 @@ msgid "Creating Mesh Previews" msgstr "Создание предпросмотра" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Миниатюра.." +msgid "Thumbnail..." +msgstr "Миниатюра..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2359,7 +2359,7 @@ msgstr "Включительно" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Self" +msgstr "" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2450,7 +2450,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 @@ -2528,8 +2528,8 @@ msgid "Error requesting url: " msgstr "Ошибка запроса адреса ссылки: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Подключение к зеркалам.." +msgid "Connecting to Mirror..." +msgstr "Подключение к зеркалам..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2545,8 +2545,8 @@ msgstr "Не удаётся разрешить" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Подключение.." +msgid "Connecting..." +msgstr "Подключение..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2558,8 +2558,8 @@ msgstr "Подключен" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запрашиваю.." +msgid "Requesting..." +msgstr "Запрашиваю..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2695,12 +2695,12 @@ msgid "Collapse all" msgstr "Свернуть все" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Переименовать.." +msgid "Rename..." +msgstr "Переименовать..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Переместить в.." +msgid "Move To..." +msgstr "Переместить в..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2711,16 +2711,16 @@ msgid "Instance" msgstr "Добавить экземпляр" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редактировать зависимости.." +msgid "Edit Dependencies..." +msgstr "Редактировать зависимости..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Просмотреть владельцев.." +msgid "View Owners..." +msgstr "Просмотреть владельцев..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Дублировать.." +msgid "Duplicate..." +msgstr "Дублировать..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2745,7 +2745,7 @@ msgstr "Добавить выбранную сцену(ы), в качестве #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Сканирование файлов,\n" "пожалуйста, подождите..." @@ -2813,8 +2813,8 @@ msgid "Import Scene" msgstr "Импортировать сцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Импортирование сцены.." +msgid "Importing Scene..." +msgstr "Импортирование сцены..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2825,8 +2825,8 @@ msgid "Generating for Mesh: " msgstr "Создание для полисетки: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Запуск пользовательского скрипта.." +msgid "Running Custom Script..." +msgstr "Запуск пользовательского скрипта..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2841,8 +2841,8 @@ msgid "Error running post-import script:" msgstr "Ошибка запуска пост-импорт скрипта:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Сохранение.." +msgid "Saving..." +msgstr "Сохранение..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2861,8 +2861,8 @@ msgid "Import As:" msgstr "Импортировать как:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Предустановка.." +msgid "Preset..." +msgstr "Предустановка..." #: editor/import_dock.cpp msgid "Reimport" @@ -3282,16 +3282,16 @@ msgid "Transition Node" msgstr "Transition узел" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Импортировать анимации.." +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 "Фильтры.." +msgid "Filters..." +msgstr "Фильтры..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3358,7 +3358,7 @@ msgid "Fetching:" msgstr "Извлечение:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Инициализация..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3425,8 +3425,8 @@ msgid "Site:" msgstr "Сайт:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Поддержка.." +msgid "Support..." +msgstr "Поддержка..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3622,6 +3622,7 @@ msgid "Use Rotation Snap" msgstr "Использовать привязку вращения" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Настроить привязку..." @@ -3718,18 +3719,16 @@ msgid "Show Guides" msgstr "Показывать направляющие" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Отображать начало координат" +msgstr "Отображать центр" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Окно" +msgstr "Показать окно просмотра" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Центрировать на выбранном" +msgstr "Центрировать выбранное" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" @@ -4018,7 +4017,7 @@ msgstr "Полиcетка не имеет поверхности для созд #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Тип полисетки не PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4049,8 +4048,8 @@ msgid "Create Convex Collision Sibling" msgstr "Создать выпуклую область столкновения" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Создать полисетку обводки.." +msgid "Create Outline Mesh..." +msgstr "Создать полисетку обводки..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4254,8 +4253,8 @@ msgid "Error loading image:" msgstr "Ошибка при загрузке изображения:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Никаких пикселей с прозрачностью > 128 в изображении.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Никаких пикселей с прозрачностью > 128 в изображении..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4615,8 +4614,8 @@ msgid "Import Theme" msgstr "Импортировать тему" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Сохранить тему как.." +msgid "Save Theme As..." +msgstr "Сохранить тему как..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4712,8 +4711,8 @@ msgstr "Переключить панель скриптов" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Найти.." +msgid "Find..." +msgstr "Найти..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4922,16 +4921,16 @@ msgid "Find Previous" msgstr "Найти предыдущее" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Заменить.." +msgid "Replace..." +msgstr "Заменить..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Перейти к функции.." +msgid "Goto Function..." +msgstr "Перейти к функции..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Перейти к строке.." +msgid "Goto Line..." +msgstr "Перейти к строке..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5384,12 +5383,8 @@ msgid "Transform" msgstr "Преобразование" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Настроить привязку.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Окно преобразования.." +msgid "Transform Dialog..." +msgstr "Окно преобразования..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5558,7 +5553,7 @@ msgstr "Переместить (после)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "SpriteFrames" +msgstr "Спрайт кадры" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5566,7 +5561,7 @@ msgstr "Предпросмотр StyleBox:" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox" -msgstr "StyleBox" +msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" @@ -5641,8 +5636,8 @@ msgid "Remove All" msgstr "Удалить все" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Редактировать тему.." +msgid "Edit theme..." +msgstr "Редактировать тему..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5711,8 +5706,8 @@ msgid "Options" msgstr "Параметры" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Имеет,Много,Разных,Опций!" +msgid "Has,Many,Options" +msgstr "Есть,Много,Вариантов" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5903,8 +5898,8 @@ msgid "Presets" msgstr "Предустановки" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Добавить.." +msgid "Add..." +msgstr "Добавить..." #: editor/project_export.cpp msgid "Resources" @@ -5995,6 +5990,10 @@ msgid "Imported Project" msgstr "Импортированный проект" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Недопустимое имя проекта." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Не удалось создать папку." @@ -6194,9 +6193,11 @@ msgstr "Кнопка мыши" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Недопустимое имя действия. Оно не может быть пустым или содержать '/', ':', " +"'=', '\\' или '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6223,7 +6224,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Нажмите любую клавишу..." #: editor/project_settings_editor.cpp @@ -6407,7 +6408,7 @@ msgid "Property:" msgstr "Параметр:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Переопределить для..." #: editor/project_settings_editor.cpp @@ -6503,12 +6504,12 @@ msgid "Easing Out-In" msgstr "Переход ИЗ-В" #: editor/property_editor.cpp -msgid "File.." -msgstr "Файл.." +msgid "File..." +msgstr "Файл..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Папка.." +msgid "Dir..." +msgstr "Папка..." #: editor/property_editor.cpp msgid "Assign" @@ -6682,8 +6683,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Эта операция не может быть сделана на редактируемой сцене." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Сохранить новую Сцену как.." +msgid "Save New Scene As..." +msgstr "Сохранить новую Сцену как..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7232,7 +7233,7 @@ msgstr "Библиотеки: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "GDNative" +msgstr "" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7399,7 +7400,7 @@ msgstr "Расстояние выбора:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Имя класса не может быть зарезервированным ключевым словом" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8111,7 +8112,7 @@ msgstr "Свойство Path должно указывать на действ #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment необходим Environment ресурс." #: scene/3d/scenario_fx.cpp msgid "" @@ -8125,6 +8126,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Этот WorldEnvironment игнорируется. Либо добавьте Camera (для 3D-сцен), либо " +"установите в Environment ресурсе Background режим в Canvas (для 2D сцен)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8225,6 +8228,13 @@ msgstr "Ошибка загрузки шрифта." msgid "Invalid font size." msgstr "Недопустимый размер шрифта." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Предыдущая вкладка" + +#~ msgid "Next" +#~ msgstr "Следующий" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Недопустимое название действия (подойдёт всё кроме '/' или ':')." @@ -8251,9 +8261,6 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Отсутствует project.godot в папке проекта." -#~ msgid "Next" -#~ msgstr "Следующий" - #~ msgid "Not found!" #~ msgstr "Не найдено!" @@ -8398,8 +8405,8 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Exporting for %s" #~ msgstr "Экспортирование для %s" -#~ msgid "Setting Up.." -#~ msgstr "Настройка.." +#~ msgid "Setting Up..." +#~ msgstr "Настройка..." #~ msgid "Error loading scene." #~ msgstr "Ошибка загрузки сцены." @@ -8459,8 +8466,8 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Info" #~ msgstr "Информация" -#~ msgid "Re-Import.." -#~ msgstr "Переимпортировать.." +#~ msgid "Re-Import..." +#~ msgstr "Переимпортировать..." #~ msgid "No bit masks to import!" #~ msgstr "Нет битовой маски для импорта!" @@ -8856,14 +8863,14 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Zoom (%):" #~ msgstr "Масштаб (%):" -#~ msgid "Skeleton.." -#~ msgstr "Скелет.." +#~ msgid "Skeleton..." +#~ msgstr "Скелет..." #~ msgid "Zoom Reset" #~ msgstr "Сбросить масштаб" -#~ msgid "Zoom Set.." -#~ msgstr "Установить масштаб.." +#~ msgid "Zoom Set..." +#~ msgstr "Установить масштаб..." #~ msgid "Set a Value" #~ msgstr "Установить значение" @@ -9336,8 +9343,8 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Export Project PCK" #~ msgstr "Экспортировать PCK проекта" -#~ msgid "Export.." -#~ msgstr "Экспортировать.." +#~ msgid "Export..." +#~ msgstr "Экспортировать..." #~ msgid "Project Export" #~ msgstr "Экспортирование проекта" @@ -9457,8 +9464,8 @@ msgstr "Недопустимый размер шрифта." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Перезагрузить инструм. скрипт (мягко)" -#~ msgid "Edit Connections.." -#~ msgstr "Изменить связи.." +#~ msgid "Edit Connections..." +#~ msgstr "Изменить связи..." #~ msgid "Set Params" #~ msgstr "Назначить параметры" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 16f675df37..9716dee696 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -2,25 +2,24 @@ # 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. -# # J08nY <johnenter@gmail.com>, 2016. -# +# MineGame 159 <minegame459@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2016-06-25 14:16+0000\n" -"Last-Translator: J08nY <johnenter@gmail.com>\n" +"PO-Revision-Date: 2018-06-18 08:43+0000\n" +"Last-Translator: MineGame 159 <minegame459@gmail.com>\n" "Language-Team: Slovak <https://hosted.weblate.org/projects/godot-engine/" "godot/sk/>\n" "Language: sk\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 2.7-dev\n" +"X-Generator: Weblate 3.0.1\n" #: editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "Vypnuté" #: editor/animation_editor.cpp msgid "All Selection" @@ -28,11 +27,11 @@ msgstr "Všetky vybrané" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "" +msgstr "Animácia Zmeniť Keyframe Čas" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "Animácia zmeniť prechod" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -40,11 +39,12 @@ msgstr "" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "" +msgstr "Animácia Zmeniť Keyframe Hodnotu" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Call" -msgstr "" +msgstr "Animácia Zmeniť Hovor" #: editor/animation_editor.cpp msgid "Anim Add Track" @@ -68,7 +68,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "Nastaviť prechody na:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -92,7 +92,7 @@ msgstr "" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "Upraviť výber krivky" #: editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -101,20 +101,19 @@ msgstr "" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "Duplikovať výber" #: editor/animation_editor.cpp msgid "Duplicate Transposed" msgstr "" #: editor/animation_editor.cpp -#, fuzzy msgid "Remove Selection" -msgstr "Všetky vybrané" +msgstr "Odstrániť výber" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "Priebežný" #: editor/animation_editor.cpp msgid "Discrete" @@ -134,19 +133,19 @@ msgstr "" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "Zmeniť veľkosť výberu" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Zmeniť veľkosť od kurzora" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "Prejsť na ďalší krok" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "Prejsť na predchádzajúci krok" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -159,23 +158,25 @@ msgstr "" #: editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "V" #: editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "Von" #: editor/animation_editor.cpp +#, fuzzy msgid "In-Out" -msgstr "" +msgstr "V-Von" #: editor/animation_editor.cpp +#, fuzzy msgid "Out-In" -msgstr "" +msgstr "Von-V" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "Prechody" #: editor/animation_editor.cpp msgid "Optimize Animation" @@ -495,7 +496,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -910,11 +911,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 @@ -1051,11 +1052,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 @@ -1126,7 +1127,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "Vytvoriť adresár" #: editor/editor_file_dialog.cpp @@ -1394,12 +1395,12 @@ 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 @@ -1604,11 +1605,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 @@ -1621,7 +1622,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 @@ -1673,7 +1674,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 @@ -1820,7 +1821,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1832,11 +1833,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 @@ -1857,15 +1858,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 @@ -2110,7 +2111,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 @@ -2222,7 +2223,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2373,7 +2374,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 @@ -2449,7 +2450,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 @@ -2466,7 +2467,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2479,7 +2480,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2613,11 +2614,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 @@ -2630,15 +2631,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 @@ -2664,7 +2665,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2730,7 +2731,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2742,7 +2743,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 @@ -2758,7 +2759,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2779,7 +2780,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3197,7 +3198,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 @@ -3205,7 +3206,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 @@ -3275,7 +3276,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3342,7 +3343,7 @@ msgid "Site:" msgstr "Stránka:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3532,6 +3533,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3958,7 +3960,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 @@ -4165,7 +4167,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 @@ -4530,7 +4532,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 @@ -4628,7 +4630,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 @@ -4834,15 +4836,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 @@ -5297,11 +5299,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5558,7 +5556,7 @@ msgid "Remove All" msgstr "Všetky vybrané" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5626,7 +5624,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5817,7 +5815,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5907,6 +5905,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "Couldn't create folder." msgstr "Vytvoriť adresár" @@ -6098,8 +6100,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6127,7 +6129,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 @@ -6312,7 +6314,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6409,11 +6411,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 @@ -6586,7 +6588,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 @@ -8049,7 +8051,7 @@ msgstr "" #: scene/resources/dynamic_font.cpp msgid "Invalid font size." -msgstr "" +msgstr "Nesprávna veľkosť písma." #, fuzzy #~ msgid "Can't write file." diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 74b469fc42..0fe619654f 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -2,17 +2,15 @@ # 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. -# # 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-05-03 07:41+0000\n" +"PO-Revision-Date: 2018-06-10 08:44+0000\n" "Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" @@ -21,7 +19,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 3.0-dev\n" +"X-Generator: Weblate 3.0.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -191,11 +189,11 @@ msgstr "Počisti Animacijo" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Ustvari NOVI trak za %s in vstavi ključ?" +msgstr "Ustvarim NOVO sled za %s in vstavim ključ?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Ustvarim %d NOVO sled in vstavim ključe?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -207,43 +205,43 @@ msgstr "Ustvari" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Ustvari & Vstavi Animacijo" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "V Animacijo Vstavi Sled & Ključ" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "V Animacijo Vstavi Ključ" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Spremeni Dolžino Animacije" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Spremeni Zanko Animacije" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "V Animaciji Ustvari Vneseno Vrednost Ključa" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Vstavi Animacijo" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Spremeni Obseg Ključev" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "Dodaj Klicajočo Sled v Animacijo" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "Približaj animacijo" +msgstr "Približaj animacijo." #: editor/animation_editor.cpp msgid "Length (s):" @@ -259,39 +257,39 @@ msgstr "Korak (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "Korak postavitve kazalca (v sekundah)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "Omogoči/Onemogoči zankanje v animaciji." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "Dodaj Novo Sled." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "Trenutno sled premakni gor." #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "Trenutno sled premakni dol." #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "Odstrani izbrano sled." #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "Orodja sledi" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "S klikom na posamezne ključe omogočite njihovo urejanje." #: editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Optimizacija Animacije" #: editor/animation_editor.cpp msgid "Max. Linear Error:" @@ -307,11 +305,12 @@ msgstr "" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Optimiziraj" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "" +"Če želite urediti animacije, izberite AnimationPlayer iz drevesa scene." #: editor/animation_editor.cpp msgid "Key" @@ -319,15 +318,15 @@ msgstr "Črka" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "Prehod" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "Razmerje Obsega:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "Klic funkcije v katerem gradniku?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -335,7 +334,7 @@ msgstr "Odstrani nedovoljene Črke" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Odstrani nedoločene in prazne sledi" #: editor/animation_editor.cpp msgid "Clean-up all animations" @@ -343,11 +342,11 @@ msgstr "Pobriši vse animacije" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Izbriši Animacij(o/e) (BREZ VRNITVE)" +msgstr "Izbriši Animacijo/e (BREZ VRNITVE!)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "Pobriši" +msgstr "Počisti" #: editor/array_property_edit.cpp msgid "Resize Array" @@ -355,35 +354,35 @@ msgstr "Povečaj Niz" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "Spremeni Tip Vrednosti Niza" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "Spremeni Vrednost Niza" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Pojdi na Vrstico" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Številka vrste:" +msgstr "Številka Vrste:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "Ni Zadetkov" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Zamenjana %d ponovitev/e." #: editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "Ujemanje Velikih Črk" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "Cele Besede" #: editor/code_editor.cpp msgid "Replace" @@ -391,51 +390,53 @@ msgstr "Zamenjaj" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Zamenjaj Vse" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Samo Izbira" #: editor/code_editor.cpp msgid "Zoom In" -msgstr "" +msgstr "Približaj" #: editor/code_editor.cpp msgid "Zoom Out" -msgstr "" +msgstr "Oddalji" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Ponastavi Povečavo/Pomanjšavo" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "Vrstica:" #: editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "Stolpec:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "Metoda v ciljnem gradniku mora biti navedena!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"Ciljna metoda ni bila najdena! Navedite veljavno metodo ali priložite " +"skripto, ki cilja na Gradnik." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "Poveži se z Gradnikom:" #: 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 "Dodaj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -446,27 +447,27 @@ msgstr "Odstrani" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Dodaj Dodaten Klicni Argument:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "Dodatni Klicni Argumenti:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "Pot do Gradnika:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "Naredi Funkcijo" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Odloženo" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "En Poizkus" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -484,37 +485,36 @@ msgstr "Zapri" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Poveži" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Poveži '%s' v '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "Povezovanje Signala:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Odklopite '%s' iz '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "" +msgid "Connect..." +msgstr "Poveži..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Odklopi" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Signali" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Osnovni Tip:" +msgstr "Spremeni Tip %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -522,9 +522,8 @@ msgid "Change" msgstr "Spremeni" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Ustvari" +msgstr "Ustvari Nov %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -533,55 +532,59 @@ msgstr "Priljubljene:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Nedavni:" #: 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 "Iskanje:" #: 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 "Zadetki:" #: 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 "Opis:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Iskanje Zamenjave Za:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "Odvisnosti Za:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"Scena '%s' je trenutno v urejanju.\n" +"Spremembe bodo začele veljati, ko bodo znova naložene." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"Vir '%s' je v uporabi.\n" +"Spremembe bodo začele veljati, ko bodo znova naložene." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "Odvisnosti" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "Viri" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp @@ -591,34 +594,34 @@ msgstr "Pot" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "Odvisnosti:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Popravi Pokvarjeno" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "Urejevalnik Odvisnosti" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "Iskanje Nadomestnih Virov:" #: 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 "Odpri" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "Lastniki:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" +msgstr "Odstranim izbrane datoteke iz projekta? (brez vrnitve)" #: editor/dependency_editor.cpp msgid "" @@ -626,46 +629,48 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"Izbrisane datoteke so potrebne za delovanje drugih virov.\n" +"Ali jih vseeno odstranim? (brez vrnitve)" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "" +msgstr "Ni mogoče odstraniti:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "Napaka pri nalaganju:" #: editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "Nalaganje scene je spodletelo zaradi manjkajočih odvisnosti:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Vseeno Odpri" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Katere ukrepe je treba sprejeti?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Popravi Odvisnosti" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "Napake pri nalaganju!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Trajno izbrišem %d predmet(e)? (Brez vrnitve!)" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "Lastnik" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "" +msgstr "Viri Brez Izrecnega Lastništva:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" @@ -673,7 +678,7 @@ msgstr "Raziskovalec Osamljenih Virov" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "Izbrišem izbrane datoteke?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -681,35 +686,35 @@ msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp #: editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "Izbriši" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "" +msgstr "Spremeni Slovarski Ključ" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "" +msgstr "Spremeni Slovarsko Vrednost" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" +msgstr "Zahvaljujemo se vam iz skupnosti Godota!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "" +msgstr "Hvala!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "Godot Engine sodelovci" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "" +msgstr "Ustanovitelji Projekta" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "Vodilni Razvajalec" #: editor/editor_about.cpp msgid "Project Manager " @@ -717,47 +722,47 @@ msgstr "Upravljalnik Projekta " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "Razvajalci" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Avtorji" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "Platina Sponzorji" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "Zlati Sponzorji" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "" +msgstr "Majhni Sponzorji" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "Zlati Donatorji" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "Srebrni Donatorji" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "Bronasti Donatorji" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "Donatorji" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Licenca" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "Licenca Tretjih Oseb" #: editor/editor_about.cpp msgid "" @@ -766,125 +771,125 @@ msgid "" "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine se nanaša na številne brezplačne in odprokodne knjižnice tretih " +"oseb, ki so združljive z določili MIT licence. Sledeči obširen seznam " +"predstavi komponente tretjih oseb s pripadajočimi izjavami o avtorskih " +"pravicah in licenčnimi pogoji." #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "Vse Komponente" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "Komponente" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licence" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Napaka pri odpiranju datoteke paketa, ker ni v formatu zip." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "" +msgstr "Razširjenje Dodatkov" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Paket je Uspešno Nameščen!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Uspelo je!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install" -msgstr "" +msgstr "Namesti" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "" +msgstr "Namestnik Paketov" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Zvočniki" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "Dodaj Učinek" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Preimenuj Funkcijo" +msgstr "Preimenuj Zvočno Vodilo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Preimenuj Funkcijo" +msgstr "Spremeni Glasnost Zvočnega Vodila" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "" +msgstr "Preklopi samo na Zvočno Vodilo" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "Preklopi na Tihi Način Zvočnega Vodila" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Preklopi na Učinke Prehoda Zvočnega Vodila" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Izberi Pošlji možnost Zvočnega vodila" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Dodaj učinek Zvočnega Vodila" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Premakni učinek Vodila" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Izbriši Izbrano" +msgstr "Izbriši učinek Vodila" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" +msgstr "Zvočno Vodilo, Povelci in Izpusti za preureditev." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Sam" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Nem" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Prehod" #: editor/editor_audio_buses.cpp msgid "Bus options" -msgstr "" +msgstr "Možnosti Vodila" #: 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 "Podvoji" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "" +msgstr "Ponastavi Glasnost" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Effect" -msgstr "Izbriši Izbrano" +msgstr "Izbriši Učinek" #: editor/editor_audio_buses.cpp msgid "Audio" @@ -892,154 +897,156 @@ msgstr "Zvok" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "" +msgstr "Dodaj Zvočno Vodilo" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Glavno vodilo ni mogoče izbrisati!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "" +msgstr "Izbriši Zvočno Vodilo" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "" +msgstr "Podvoji Zvočno Vodilo" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "" +msgstr "Ponastavi Glasnost Vodila" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "" +msgstr "Premakni Zvočno Vodilo" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "" +msgid "Save Audio Bus Layout As..." +msgstr "Shrani Postavitev Zvočnega Vodila Kot..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "" +msgid "Location for New Layout..." +msgstr "Lokacija za Novo Postavitev..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "Odpri Zvočno Vodilo" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Datoteka 'res://default_bus_layout.tres' ne obstaja." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "Neveljavna datoteka, ker ni postavitve zvočnega vodila." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "Dodaj Vodilo" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "Ustvari novo Postavitev Vodila." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Load" -msgstr "" +msgstr "Naloži" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "Naloži obstoječo Postavitev Vodila." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "" +msgstr "Shrani Kot" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "Shrani to Postavitev Vodila v datoteko." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "" +msgstr "Naložite Prevzeto" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Naloži prevezeto Postavitev Vodila." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "Neveljavno ime." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Veljavni znaki:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "" +msgstr "Neveljavno ime. Ne sme se prekrivati z obstoječim imenom razreda." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" +"Neveljavno ime. Ne sme se prekrivati z obstoječim vgrajenim imenom tipa." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" +"Neveljavno ime. Ne sme se prekrivati z obstoječim imenom globalne konstante." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "Neveljavna Pot." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "Datoteka ne obstaja." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "" +msgstr "Ni na poti virov." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Dodaj SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "SamodejnoNalaganje '%s' že obstaja!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "Preimenuj SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Preklopi na Globalno SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "Premakni SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "Odstrani SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "" +msgstr "Omogoči" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "Preuredi SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Pot:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Ime Gradnika:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1048,35 +1055,35 @@ msgstr "Ime" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Posameznik" #: editor/editor_data.cpp msgid "Updating Scene" msgstr "Posodabljanje Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "" +msgid "Storing local changes..." +msgstr "Shranjevanje lokalnih sprememb..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Posodabljanje scene.." +msgid "Updating scene..." +msgstr "Posodabljanje scene..." #: editor/editor_data.cpp msgid "[empty]" -msgstr "[prazen]" +msgstr "[prazno]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[neshranjeno]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "" +msgstr "Najprej izberi osnovno mapo" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "Izberi Mapo" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp @@ -1088,32 +1095,32 @@ msgstr "Ustvarite Mapo" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp #: scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "Ime:" #: 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 "Mape ni mogoče ustvariti." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "Izberi" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "" +msgstr "Shranjevanje Datoteke:" #: editor/editor_export.cpp msgid "Packing" -msgstr "" +msgstr "Pakiranje" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "" +msgstr "Predloge ni mogoče najti:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Datoteka Obstaja, Prepišem?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" @@ -1121,23 +1128,23 @@ msgstr "Izberite Trenutno Mapo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Kopiraj Pot" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "" +msgstr "Pokaži V Upravitelju Datotek" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "" +msgid "New Folder..." +msgstr "Nova Mapa..." #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "Osveži" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Vse Prepoznano" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1145,69 +1152,69 @@ msgstr "Vse Datoteke (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Odpri v Datoteki" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Odpri Datotek(o/e)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Odpri v Mapi" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Odpri Datoteko ali Mapo" #: 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 "" +msgstr "Shrani" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Shrani Datoteko" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Pojdi Nazaj" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Pojdi Naprej" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Pojdi Navzgor" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Preklopi na Skrite Datoteke" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Preklopi na Najljubše" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "Preklopi Način" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Poudari Pot" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "Premakni Priljubljeno Navzgor" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "Premakni Priljubljeno Navzdol" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "Pojdi v nadrejeno mapo" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1215,7 +1222,7 @@ msgstr "Mape & Datoteke:" #: editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "" +msgstr "Predogled:" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp @@ -1224,53 +1231,52 @@ msgstr "Datoteka:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Uporabiti moraš valjavno razširitev." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "BranjeVirov" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "Uvoz Dodatkov" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "Išči Pomoč" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "Seznam Razredov:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "" +msgstr "Išči Razrede" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Vrh" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Razred:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "Dedovanja:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "Podedovano od:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Kratek Opis:" #: editor/editor_help.cpp -#, fuzzy msgid "Members" -msgstr "Člani:" +msgstr "Člani" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -1278,53 +1284,51 @@ msgstr "Člani:" #: editor/editor_help.cpp msgid "Public Methods" -msgstr "" +msgstr "Javne Metode" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "Javne Metode:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "" +msgstr "Elementi GUI Teme" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "" +msgstr "Elementi GUI Teme:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Signali:" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Funkcije:" +msgstr "Oštevilčenja" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations:" -msgstr "Funkcije:" +msgstr "Oštevilčenja:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "oštevil " #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Konstante" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "Konstante:" #: editor/editor_help.cpp msgid "Description" -msgstr "" +msgstr "Opis" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "" +msgstr "Spletne Vaje:" #: editor/editor_help.cpp msgid "" @@ -1332,42 +1336,48 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" +"Trenutno ni vaj za ta razred, lahko ga [color=$color][url=$url]prispevate[/" +"url][/color] ali [color=$color][url=$url2]zahtevate enega[/url][/color]." #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "Lastnosti" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "" +msgstr "Opis lastnosti:" #: 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 "" +"Trenutno ni opisa za to lastnost. Pomagajte nam s [color=$color][url=" +"$url]prispevkom[/url][/color]!" #: editor/editor_help.cpp msgid "Methods" -msgstr "" +msgstr "Metode" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "" +msgstr "Opis Metode:" #: 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 "" +"Trenutno ni opisa za to metodo. Pomagajte nam s [color=$color][url=" +"$url]prispevkom[/url][/color]!" #: editor/editor_help.cpp msgid "Search Text" -msgstr "" +msgstr "Išči Besedilo" #: editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "Najdi" #: editor/editor_log.cpp msgid "Output:" @@ -1378,60 +1388,60 @@ msgstr "Izhod:" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "" +msgstr "Počisti" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "" +msgstr "Počisti Izhod" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Izvoz projekta ni uspelo s kodno napako %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "" +msgstr "Napaka pri shranjevanju virov!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "" +msgid "Save Resource As..." +msgstr "Shrani Vire Kot..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "" +msgid "I see..." +msgstr "Vidim..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "Datoteke ni mogoče odpreti za pisanje:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "Zahtevan format datoteke ni znan:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "Napaka med shranjevanjem." #: editor/editor_node.cpp msgid "Can't open '%s'." -msgstr "" +msgstr "Ni mogoče odpreti '%s'." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "" +msgstr "Napaka pri razčlenjevanju '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "Nepričakovan konec datoteke '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "" +msgstr "Manjka '%s' ali njegove odvisnosti." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "" +msgstr "Napaka pri nalaganju '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -1439,57 +1449,59 @@ msgstr "Shranjevanje Scene" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "Analiziranje" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "" +msgstr "Ustvarjanje Sličic" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "" +msgstr "Te operacije ne moremo storiti brez osnovnega drevesa." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +"Ni mogoče shraniti scene. Najverjetneje odvisnosti (primeri ali dedovanja) " +"ne morejo biti izpolnjene." #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "" +msgstr "Napaka pri nalaganju vira." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "Knjižnice Modelov ni mogoče naložiti za združitev!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "Napaka pri shranjevanju Knjižnice Modelov!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "PloščniNiz ni mogoče naložiti za združitev!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "Napaka pri shranjevanju PloščnegaNiza!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "Napaka pri shranjevanju postavitev!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "" +msgstr "Privzeti urejevalnik postavitev je bil prepisan." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Ime postavitve ni mogoče najti!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "" +msgstr "Privzeta postavitev je bila ponastavljena na osnovne nastaviteve." #: editor/editor_node.cpp msgid "" @@ -1497,18 +1509,24 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Ta vir pripada uvoženi sceni, zato ga ne moremo spreminjati.\n" +"Za boljše razumevanje preberi dokumentacijo namenjeno za uvažanje scen." #: 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 "" +"Ta vir pripada sceni, ki je dedovana ali je primer druge.\n" +"Pri shranjevanju trenutne scene se spremembe ne bodo ohranile." #: 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 "" +"Ta vir je bil uvožen tako, da ga ne morete spreminjati. Spremenite svoje " +"nastavitve na plošči za uvoz in nato znova uvozite." #: editor/editor_node.cpp msgid "" @@ -1517,6 +1535,9 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Ta scena je bila uvožena tako, da spremembe ne bodo shranjene.\n" +"Primer druge ali dedovanje bo omogočilo spremembe v njem.\n" +"Za boljše razumevanje preberi dokumentacijo namenjeno za uvažanje scen." #: editor/editor_node.cpp msgid "" @@ -1524,46 +1545,48 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"To je objekt odprt na daljavo, zato spremembe v njem ne bodo shranjene.\n" +"Za boljše razumevanje preberi dokumentacijo namenjeno razhroščevanju." #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "Razširi vse lastnosti" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "Skrči vse lastnosti" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "" +msgstr "Kopiraj Parametre" #: editor/editor_node.cpp msgid "Paste Params" -msgstr "" +msgstr "Prilepi Parametre" #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" +msgstr "Prilepi Vir" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "" +msgstr "Kopiraj Vir" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "" +msgstr "Naredi Vgrajeno" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "" +msgstr "Naredi Pod-Vire Samostojne" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "" +msgstr "Odpri v Pomoči" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "" +msgstr "Ni določene scene za zagon." #: editor/editor_node.cpp msgid "" @@ -1571,6 +1594,9 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Glavna scena ni bila določena, izberem eno?\n" +"Kasneje jo lahko spremeniš v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "" @@ -1578,6 +1604,9 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Izbrana scena '%s' ne obstaja, izberem veljavno?\n" +"Kasneje jo lahko spremeniš v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "" @@ -1585,14 +1614,17 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Izbrana scena '%s' ni datoteka scene, izberem veljavno?\n" +"Kasneje jo lahko spremeniš v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "" +msgstr "Trenutna scena ni bila shranjena, shranite jo pred zagonom." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "" +msgstr "Nemorem začeti podprocesa!" #: editor/editor_node.cpp msgid "Open Scene" @@ -1603,76 +1635,76 @@ msgid "Open Base Scene" msgstr "Odpri Osnovno Sceno" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Hitro Odpri Sceno.." +msgid "Quick Open Scene..." +msgstr "Hitro Odpri Sceno..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Hitro Odpri Skripto.." +msgid "Quick Open Script..." +msgstr "Hitro Odpri Skripto..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Shrani & Zapri" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Shranim spremembe v '%s' pred zapiranjem?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Shrani Sceno Kot.." +msgid "Save Scene As..." +msgstr "Shrani Sceno Kot..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Ne" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Da" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Ta scena ni bila nikoli shranjena. Shranim pred zagonom?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Ta operacija ni mogoča brez scene." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "" +msgstr "Izvozi Knjižnico Modelov" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Ta operacija ni mogoča brez osnovnega gradnika." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "" +msgstr "Izvozi Ploščno Zbirko" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Te operacije ne moremo storiti brez izbranega gradnika." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Trenutna scena ni shranjena. Vseeno odprem?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Ni mogoče osvežiti scene, ki ni bila shranjena." #: editor/editor_node.cpp msgid "Revert" -msgstr "" +msgstr "Povrni" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "" +msgstr "Tega dejanja ni mogoče razveljaviti. Vseeno povrni?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hitro Zaženi Sceno.." +msgid "Quick Run Scene..." +msgstr "Hitro Zaženi Sceno..." #: editor/editor_node.cpp msgid "Quit" @@ -1680,187 +1712,200 @@ msgstr "Zapri" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "Zaprem urejevalnik?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Odprem Upravljalnik Projekta?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "Shrani & Zapri" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Shranim spremembe na sledečih scenah pred zaprtjem?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Shranim spremembe na sledečih scenah pred odpiranjem Upravljalnika Projekta?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" +"Ta možnost je zastarela. Situacije, kjer je treba osvežitev prisiliti, se " +"zdaj štejejo za napako. Prosimo, prijavite." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "" +msgstr "Izberi Glavno Sceno" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" +"Ni mogoče omogočiti dodatnega vtičnika na: '%s'. Razčlenjevanje " +"konfiguracije ni uspelo." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" +"Ni mogoče najti polja skripte za dodatni vtičnik na: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "" +msgstr "Ni mogoče naložiti dodatno skripto iz poti: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" +"Ni mogoče naložiti dodatno skripto iz poti: '%s' Osnovni tip ni " +"UrejevalniVtičnik." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" +"Ni mogoče naložiti dodatno skripto iz poti: '%s' Skripta ni v načinu orodje." #: 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 "" +"Scena '%s' je bila samodejno uvožena, zato je ni mogoče spremeniti.\n" +"Če želite narediti spremembe, lahko ustvarite novo podedovano sceno." #: 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 "" +msgstr "Uh" #: 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 "" +"Napaka pri nalaganju prizora, zato ker ni znotraj poti projekta. Uporabite " +"'Uvoz', da odprete prizor in ga nato shranite znotraj poti projekta." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "" +msgstr "Prizor '%s' ima pretrgane odvisnosti:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "Počisti Nedavne Scene" +msgstr "Počisti Nedavne Prizore" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "" +msgstr "Shrani Postavitev" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "" +msgstr "Izbriši Postavitev" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp msgid "Default" -msgstr "" +msgstr "Prevzeto" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "" +msgstr "Preklopi na zavihek Prizor" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "" +msgstr "%d več datotek ali map" #: editor/editor_node.cpp msgid "%d more folders" -msgstr "" +msgstr "%d več map" #: editor/editor_node.cpp msgid "%d more files" -msgstr "" +msgstr "%d več datotek" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "" +msgstr "Položaj Sidranja" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "" +msgstr "Način Brez Motenj" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "" +msgstr "Preklop način pisanja brez motenj." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "Dodaj novo Sceno." +msgstr "Dodaj nov Prizor." #: editor/editor_node.cpp msgid "Scene" -msgstr "Scena" +msgstr "Prizor" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "Pojdite na predhodno odprte scene." +msgstr "Pojdi na predhodno odprti prizor." #: editor/editor_node.cpp msgid "Next tab" -msgstr "" +msgstr "Naslednji zavihek" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "" +msgstr "Prejšnji zavihek" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "" +msgid "Filter Files..." +msgstr "Filtriraj datoteke..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "" +msgstr "Operacije z datotekami prizora." #: editor/editor_node.cpp msgid "New Scene" -msgstr "Nova Scena" +msgstr "Nov Prizor" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nova Podedovana Scena.." +msgid "New Inherited Scene..." +msgstr "Nov Podedovan Prizor..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Odpri Sceno.." +msgid "Open Scene..." +msgstr "Odpri Prizor..." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "Shrani Sceno" +msgstr "Shrani Prizor" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "Shrani vse Scene" +msgstr "Shrani vse Prizore" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "Zapri Sceno" +msgstr "Zapri Prizor" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "Odpri Nedavno" +msgstr "Odpri Nedavne" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Pretvori V.." +msgid "Convert To..." +msgstr "Pretvori V..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "" +msgid "MeshLibrary..." +msgstr "Knjižnica Modelov..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -1875,11 +1920,11 @@ msgstr "Ponovi" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "Povrni Sceno" +msgstr "Povrni Prizor" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "" +msgstr "Različna projektna ali prizorska orodja." #: editor/editor_node.cpp msgid "Project" @@ -1891,7 +1936,7 @@ msgstr "Nastavitve Projekta" #: editor/editor_node.cpp msgid "Run Script" -msgstr "" +msgstr "Zaženi Skripto" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" @@ -1918,6 +1963,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 "" +"Pri izvažanju ali uvajanju se bo končna izvršljiva datoteka razhroščevala, " +"tako da se bo skušala povezati z IP-jem tega računalnika." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" @@ -1932,30 +1979,39 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" +"Ko je ta možnost omogočena, se bo pri izvozu ali uvajanju ustvarila " +"minimalna izvršljiva datoteka.\n" +"Datotečni sistem bo iz projekta zagotovljen z urejevalnikom preko omrežja.\n" +"Na Androidu bo uvajanje zaradi hitrejšega delovanja potekalo preko kabla " +"USB. Ta možnost pospeši testiranje iger z velikim odtisom." #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "" +msgstr "Vidne Oblike Trka" #: 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 "" +"Gradniki oblike trka in prikaz žarka (za 2D in 3D) bodo vidni pri poteku " +"igre, če je ta možnost vklopljena." #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Vidna Navigacija" #: editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" +"Če je ta možnost vključena, bodo navigacijske oblike in poligoni vidni pri " +"poteku igre." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "" +msgstr "Usklajuj Spremembe Prizora" #: editor/editor_node.cpp msgid "" @@ -1964,10 +2020,12 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Ko je ta možnost vključena, bodo vse spremebe v prizoru ali urejevalniku " +"ponovljene med potekom igre." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "" +msgstr "Usklajuj Spremembe Skript" #: editor/editor_node.cpp msgid "" @@ -1976,6 +2034,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Če je ta možnost vključena, bo vsaka shranjena skripta ponovno naložena v " +"igro, ki se izvaja.\n" +"Če se uporablja napravo na daljavo, je to bolj učinkovito pri omrežnem " +"datotečnem sistemu." #: editor/editor_node.cpp msgid "Editor" @@ -1983,19 +2045,19 @@ msgstr "Urejevalnik" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "" +msgstr "Nastavitve Urejevalnika" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "" +msgstr "Postavitev Urejevalnika" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "" +msgstr "Preklopi na Celozaslonski Način" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "" +msgstr "Upravljaj Izvozne Predloge" #: editor/editor_node.cpp msgid "Help" @@ -2003,7 +2065,7 @@ msgstr "Pomoč" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Classes" -msgstr "" +msgstr "Razredi" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2014,119 +2076,119 @@ msgstr "Iskanje" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Online Docs" -msgstr "" +msgstr "Spletna Dokumentacija" #: editor/editor_node.cpp msgid "Q&A" -msgstr "" +msgstr "V&O" #: editor/editor_node.cpp msgid "Issue Tracker" -msgstr "" +msgstr "Sledilnik Napak" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Skupnost" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "O Programu" #: editor/editor_node.cpp msgid "Play the project." -msgstr "" +msgstr "Zaženi projekt." #: editor/editor_node.cpp msgid "Play" -msgstr "" +msgstr "Zaženi" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "" +msgstr "Zaustavi prizor" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "" +msgstr "Zaustavi prizor" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "" +msgstr "Ustavi Prizor." #: editor/editor_node.cpp msgid "Stop" -msgstr "" +msgstr "Ustavi" #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "" +msgstr "Zaženi prizor u urejanju." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Zaženi Prizor" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "" +msgstr "Zaženi prizor po meri" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "" +msgstr "Zaženi Prizor po Meri" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" -msgstr "" +msgstr "Vrti se ob spremembi okna urejevalnika!" #: editor/editor_node.cpp msgid "Update Always" -msgstr "" +msgstr "Posodobi Vedno" #: editor/editor_node.cpp msgid "Update Changes" -msgstr "" +msgstr "Posodobi Spremembe" #: editor/editor_node.cpp msgid "Disable Update Spinner" -msgstr "" +msgstr "Onemogoči Posodobitve Kolesca" #: editor/editor_node.cpp msgid "Inspector" -msgstr "" +msgstr "Nadzornik" #: editor/editor_node.cpp msgid "Create a new resource in memory and edit it." -msgstr "" +msgstr "Ustvari nov vir v pomnilniku in ga uredi." #: editor/editor_node.cpp msgid "Load an existing resource from disk and edit it." -msgstr "" +msgstr "Naloži obstoječi vir iz spomina in ga uredi." #: editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "" +msgstr "Shrani trenutno urejani vir." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "" +msgid "Save As..." +msgstr "Shrani Kot..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." -msgstr "" +msgstr "Pojdi na prejšnji urejani objekt v zgodovini." #: editor/editor_node.cpp msgid "Go to the next edited object in history." -msgstr "" +msgstr "Pojdi na naslednji urejani objekt v zgodovini." #: editor/editor_node.cpp msgid "History of recently edited objects." -msgstr "" +msgstr "Zgodovina nedavno urejanih objektov." #: editor/editor_node.cpp msgid "Object properties." -msgstr "" +msgstr "Lastnosti objekta." #: editor/editor_node.cpp msgid "Changes may be lost!" -msgstr "" +msgstr "Spremembe se lahko izgubijo!" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp @@ -2135,7 +2197,7 @@ msgstr "Uvozi" #: editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Gradnik" #: editor/editor_node.cpp msgid "FileSystem" @@ -2147,521 +2209,526 @@ msgstr "Izhod" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" +msgstr "Ne Shrani" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Uvozi Predloge iz ZIP Datoteke" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Izvozi Projekt" #: editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Izvozi Knjižnico" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "" +msgstr "Spoji z Obstoječim" #: editor/editor_node.cpp msgid "Password:" -msgstr "" +msgstr "Geslo:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Odpri & Zaženi Skripto" #: editor/editor_node.cpp msgid "New Inherited" -msgstr "" +msgstr "Novo Podedovano" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "" +msgstr "Napake pri Nalaganju" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "" +msgstr "Izberi" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "" +msgstr "Odpri 2D Urejevalnik" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "" +msgstr "Odpri 3D Urejevalnik" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "" +msgstr "Odpri Urejevalnik Skript" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Odprite Asset Library" +msgstr "Odpri Knjižnico Dodatkov" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "" +msgstr "Odpri naslednji Urejevalnik" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "" +msgstr "Odpri prejšnji Urejevalnik" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Ustvari Predogled Modela" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" +msgid "Thumbnail..." +msgstr "Sličica..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "" +msgstr "Nameščeni Vtičniki:" #: editor/editor_plugin_settings.cpp msgid "Update" -msgstr "" +msgstr "Posodobi" #: editor/editor_plugin_settings.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Version:" -msgstr "" +msgstr "Različica:" #: editor/editor_plugin_settings.cpp msgid "Author:" -msgstr "" +msgstr "Avtor:" #: editor/editor_plugin_settings.cpp msgid "Status:" -msgstr "" +msgstr "Stanje:" #: editor/editor_profiler.cpp msgid "Stop Profiling" -msgstr "" +msgstr "Ustavi Modeliranje" #: editor/editor_profiler.cpp msgid "Start Profiling" -msgstr "" +msgstr "Začni Modeliranje" #: editor/editor_profiler.cpp msgid "Measure:" -msgstr "" +msgstr "Mera:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Okvirni Čas (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "" +msgstr "Povprečni Čas (sek)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Okvir %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "" +msgstr "Fizikalni Okvir %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" -msgstr "" +msgstr "Čas:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "Vključno" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Samo" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "" +msgstr "Okvir #:" #: editor/editor_profiler.cpp msgid "Time" -msgstr "" +msgstr "Čas" #: editor/editor_profiler.cpp msgid "Calls" -msgstr "" +msgstr "Klici" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Izberite napravo s seznama" #: 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 "" +"Za to platformo ni mogoče najti obstoječih izvoznih nastavitev.\n" +"V izvoznem meniju dodajte svoje nastavitve." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Napišite svojo logiko v metodi _run() ." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Tu že obstaja prizor v urejanju." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Ni mogoče ustvariti primera skripte:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Ali si pozabil ključno besedo 'orodje'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Ni mogoče zagnati skripte:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Ali si pozabil metodo '_run' ?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "" +msgstr "Privzeto (Enako kot Urejevalnik)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "" +msgstr "Izberi Gradnik(e) za Uvoz" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Pot Prizora:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Uvozi iz Gradnika:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Ponovno Prenesi" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Odstrani" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(Nameščeno)" #: editor/export_template_manager.cpp msgid "Download" -msgstr "" +msgstr "Prenesi" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(Manjkajoče)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Trenutno)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "" +msgid "Retrieving mirrors, please wait..." +msgstr "Pridobivanje virov, počakajte..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Želiš odstraniti predlogo različice '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "" +msgstr "Ne morem odpreti zip izvozne predloge." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "" +msgstr "Neveljaven format version.txt znotraj predloge." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Datoteke version.txt ni v predlogi." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "" +msgstr "Napaka pri ustvarjanju poti za predloge:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "" +msgstr "Razširjanje Izvoznih Predlog" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "Uvažanje:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Za to različico ni mogoče najti linkov za prenos. Neposredni prenos je na " +"voljo samo za uradne izdaje." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Ni mogoče razrešiti." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "Nemogoče se je povezati." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Ni odgovora." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "Zahteva Ni Uspela." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Preusmeritev Zanke." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "Spodletelo:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Prenos je Dokončan." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "" +msgstr "Napaka pri zahtevi URL-ja: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "" +msgid "Connecting to Mirror..." +msgstr "Povezovanje z Virom..." #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "Nepovezano" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "Razreševanje" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Ni Mogoče Razrešiti" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" +msgid "Connecting..." +msgstr "Povezovanje..." #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "" +msgstr "Nemogoče se je Povezati" #: editor/export_template_manager.cpp msgid "Connected" -msgstr "" +msgstr "Povezano" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" +msgid "Requesting..." +msgstr "Zahtevam..." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "Prenašanje" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "Napaka Pri Povezavi" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Napaka Pri Usklanjevanju SSH" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Trenutna Različica:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Nameščene Različice:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Namesti Iz Datoteke" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Predlogo" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "Izberi datoteko predloge" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "Izvozni Upravitelj Predlog" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Odstrani Spremenljivko" +msgstr "Prenesi Predloge" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "Izberi vire s seznama: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Za pisanje ni mogoče odpreti file_type_cache.cch, ne da bi shranili " +"predpomnilnik tipa datoteke!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" +"Ne morem se postaviti na mesto '%s', ker ni bilo najdeno v datotečnem " +"sistemu!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "Oglejte si elemente, kot mrežo sličic" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "Oglejte si elemente v seznamu" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Stanje: Uvoz datoteke ni uspel. Popravi datoteko in ponovno ročno uvozi." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Ni mogoče premakniti/preimenovati osnovne vire." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Mape ni mogoče premakniti vase." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Napaka naložitve pisave." +msgstr "Napaka pri premikanju:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Preimenuj Spremenljivko" +msgstr "Napaka pri podvajanju:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "" +msgstr "Odvisnosti ni mogoče posodobiti:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "Ime ni na voljo" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "Vnešeno ime vsebuje neveljavne znake" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "Ime ni določeno." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "" +msgstr "Ime vsebuje neveljavne znake." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Datoteka ali mapa s tem imenom že obstaja." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Preimenuj Spremenljivko" +msgstr "Preimenovanje Datoteke:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "Preimenovanje mape:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Preimenuj Spremenljivko" +msgstr "Podvajanje datoteke:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" +msgstr "Podvajanje mape:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "Razširi vse" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Skrči vse" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "" +msgid "Rename..." +msgstr "Preimenuj..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "" +msgid "Move To..." +msgstr "Premakni V..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "" +msgstr "Odpri Prizor(e)" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Primer" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +msgid "Edit Dependencies..." +msgstr "Uredi Odvisnosti..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "View Owners..." +msgstr "Poglej Lastnike..." #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate.." -msgstr "Podvoji Izbrano" +msgid "Duplicate..." +msgstr "Podvoji..." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "Prejšna Mapa" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Naslednja Mapa" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Ponovno Preglej Datotečni Sistem" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "Nastavi mapo status kot Priljubljeno" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" +"Naredi primer iz izbranih prizorov, ki bo naslednik izbranega gradnika." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" +"Pregledovanje Datotek,\n" +"Prosimo, Počakajte..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2674,153 +2741,153 @@ msgstr "Preimenuj" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Dodaj v Skupino" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Odstrani iz Skupine" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Uvozi kot En Prizor" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Uvozi z Ločenimi Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Uvozi z Ločenimi Materiali" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Uvozi z Ločenimi Objekti" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Uvozi z Ločenimi Objekti+Materiali" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Uvozi z Ločenimi Objekti+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Uvozi z Ločenimi Materiali+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Uvozi z Ločenimi Objekti+Materiali+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Uvozi kot Več Prizorov" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Uvozi kot Večkratnik Prizorov+Materialov" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Uvozi Prizor" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "" +msgid "Importing Scene..." +msgstr "Uvažanje Prizora..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Ustvarjanje Svetlobnih Kart" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Ustvarjanje za Model: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "" +msgid "Running Custom Script..." +msgstr "Izvajanje Skripte Po Meri..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "Skripte po uvozu ni bilo mogoče naložiti:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" +msgstr "Neveljavna/pokvarjena skripta za naknadno uvažanje (Glej konzolo):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "" +msgstr "Napaka pri zagonu skripte po uvozu:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "" +msgid "Saving..." +msgstr "Shranjevanje..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Nastavi kot Privzeto za '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Počisti privzeto za '%s'" #: editor/import_dock.cpp msgid " Files" -msgstr "" +msgstr " Datoteke" #: editor/import_dock.cpp msgid "Import As:" -msgstr "" +msgstr "Uvozi Kot:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "" +msgid "Preset..." +msgstr "Prednastavitev..." #: editor/import_dock.cpp msgid "Reimport" -msgstr "" +msgstr "Ponovno Uvozi" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Niz Večkratnih Gradnikov" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Skupine" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "Za urejanje Signalov in Skupin izberi Gradnik." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "" +msgstr "Ustvarite Poligon" #: 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 "Uredi Poligon" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Ustavi Točko" #: 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 "Uredi Poligon (Odstrani Točko)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Odstrani Poligon in Točko" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Ustvari nov poligon od začetka" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -2829,199 +2896,201 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Uredi obstoječi poligon:\n" +"LMG: Premakni Točko.\n" +"Ctrl+LMG: Razdeli člen.\n" +"DMG: Zbriši Točko." #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" -msgstr "Izbriši Izbrano" +msgstr "Izbriši točke" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "" +msgstr "Preklop funkcije Samodejno Predvajanje" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Novo Ime Animacije:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Nova Animacija" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Spremeni Ime Animacije:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" -msgstr "" +msgstr "Izbrišem animacijo?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "" +msgstr "Odstrani Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "Napaka: Neveljavno ime animacije!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "NAPAKA: Animacija s tem imenom že obstaja!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Preimenuj Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Dodaj Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "" +msgstr "Naslednjo Mešanje se je Spremenilo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Spremeni Mešalni Čas" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Naloži Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Podvoji Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "" +msgstr "NAPAKA: Ni animacije za kopiranje!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "NAPAKA: Ni animacije virov na odložišču!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "" +msgstr "Prilepljena Animacija" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" -msgstr "" +msgstr "Prilepi animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "NAPAKA: Ni animacije za urejanje!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "Predvajaj izbrano animacijo nazaj od trenutnega položaja. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "Predvajaj izbrano animacijo nazaj od konca. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Ustavi predvajanje animacije. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "Predvajaj izbrano animacijo od začetka. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "Predvajaj izbrano animacijo iz trenutne pozicije. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Mesto animacije (v sekundah)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Spremeni velikost predvajanja za gradnike globalno." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." -msgstr "" +msgstr "Ustvari novo animacijo v predvajalniku." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load animation from disk." -msgstr "" +msgstr "Naloži animacijo z diska." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load an animation from disk." -msgstr "" +msgstr "Naloži animacijo z diska." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save the current animation" -msgstr "" +msgstr "Shrani trenutno animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "" +msgstr "Prikaži seznam animacij v predvajalniku." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "" +msgstr "Samodejno predvajaj ob nalaganju" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Uredi čas mešanice cilja" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "Animacijska Orodja" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Copy Animation" -msgstr "" +msgstr "Kopiraj Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" -msgstr "" +msgstr "Lupljenje Čebule" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "" +msgstr "Omogoči Lupljenje Čebule" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Funkcije:" +msgstr "Smeri" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "Preteklost" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "Prihodnost" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +msgstr "Globina" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 korak" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 koraka" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 koraki" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "Samo Razlike" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Sile Bele Modulacije" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" @@ -3029,30 +3098,30 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "Ustvari Novo Animacijo" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "Ime Animacije:" #: 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 "Napaka!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Čas Mešanja:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "Naprej (Samodejna Razvrstitev):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Navzkrižna Animacija Časa Mešanice" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3061,78 +3130,77 @@ msgstr "Animacija" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Novo ime:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Uredi Spremenljivko:" +msgstr "Uredi Filtre" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Prilagodi Velikost:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade In (s):" -msgstr "" +msgstr "Postopno Prikazovanje (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Postopno Izginevanje (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Zmešaj" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "Mešaj" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Samodejni Ponovni Zagon:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "Znova Zaženi (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "Naključno Zaženi (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "Zaženi!" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "" +msgstr "Količina:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend:" -msgstr "" +msgstr "Zmešaj:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "Zmešaj 0:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "Zmešaj 1:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "Čas X-Bledenja (s):" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "Trenutno:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "" +msgstr "Dodaj Vnos" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" @@ -3140,136 +3208,135 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Nastavi Samodejno-Napredovanje" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "" +msgstr "Izbriši Vnos" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "" +msgstr "Drevo animacije je veljavno." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "" +msgstr "Drevo animacije ni veljavno." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Animacijski Gradnik" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "Gradnik EnPoizkus" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "Gradnik Mešanica" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Gradnik Zmešaj2" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Gradnik Zmešaj3" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Gradnik Zmešaj4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Gradnik ČasovnoMerilo" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Gradnik ČasovniIskalnik" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Gradnik Prehod" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "" +msgid "Import Animations..." +msgstr "Uvozi Animacije..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Uredi Gradnike Filtri" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "" +msgid "Filters..." +msgstr "Filtri..." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Približaj Animacijo" +msgstr "AnimacijskoDrevo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "" +msgstr "Prosto" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "Vsebina:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +msgstr "Ogled datotek" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "" +msgstr "Ne morem razrešiti imena gostitelja:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "" +msgstr "Napaka pri povezavi, poskusi znova." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "" +msgstr "Nemogoče se je povezati z gostiteljem:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "Gostitelj se ne odziva:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "Zahteva ni uspela, povratna koda:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "Zahteva ni uspela, preveč preusmeritev" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "" +msgstr "Slab prenos hash kode, predvidevamo, da je bila datoteka spremenjena." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "Pričakovano:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "Dobil:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "Neuspešno preverjanje preizkusa sha256" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Napaka pri prenosu sredstev:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Fetching:" -msgstr "" +msgstr "Pridobivanje:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" +msgid "Resolving..." +msgstr "Razreševanje..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3335,8 +3402,8 @@ msgid "Site:" msgstr "Stran:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Podpora.." +msgid "Support..." +msgstr "Podpora..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3362,6 +3429,8 @@ msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" +"Brez modelov za peko. Poskrbi, da vsebujejo kanal UV2 in da je vključena " +"oznaka 'Zapeči Svetlobo'." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -3415,9 +3484,8 @@ msgid "Create new vertical guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove vertical guide" -msgstr "Odstrani Spremenljivko" +msgstr "Odstranite navpični vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move horizontal guide" @@ -3428,9 +3496,8 @@ msgid "Create new horizontal guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove horizontal guide" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani vodoravno vodilo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" @@ -3506,9 +3573,8 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggles snapping" -msgstr "Preklopi na Zaustavitev" +msgstr "Preklopi pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" @@ -3527,8 +3593,9 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "Preoblikuj Zaskok..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3667,9 +3734,8 @@ msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Odstrani Signal" +msgstr "Nastavite točko na položaj miške" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -3778,14 +3844,12 @@ msgid "Load Curve Preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "Dodaj Signal" +msgstr "Dodaj točko" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "Odstrani Signal" +msgstr "Odstrani točko" #: editor/plugins/curve_editor_plugin.cpp msgid "Left linear" @@ -3800,9 +3864,8 @@ msgid "Load preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Odstrani Signal" +msgstr "Odstrani Krivuljno Točko" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -3869,11 +3932,11 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Model je prazen!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Ustvari Statično Telo TriModel" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" @@ -3952,7 +4015,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 @@ -4157,7 +4220,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 @@ -4336,19 +4399,16 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Položaj Krivuljne Točke" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Krivuljo na Položaj" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Krivuljo iz Položaja" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4359,9 +4419,8 @@ msgid "Remove Path Point" msgstr "" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Odstrani Funkcijo" +msgstr "Odstrani Točko Izven Nadzora" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" @@ -4522,7 +4581,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 @@ -4602,9 +4661,8 @@ msgid "Close Docs" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close All" -msgstr "Zapri" +msgstr "Zapri Vse" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -4620,7 +4678,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 @@ -4745,9 +4803,8 @@ msgid "Select All" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Izbriši Izbrano" +msgstr "Izbriši Vrstico" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -4762,9 +4819,8 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Izbriši Izbrano" +msgstr "Pregibna/Nepregibna Črta" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -4828,15 +4884,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 @@ -5028,9 +5084,8 @@ msgid "Material Changes" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Spremeni" +msgstr "Spremebe v Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" @@ -5267,9 +5322,8 @@ msgid "Align Selection With View" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Izbriši Izbrano" +msgstr "Izbira Orodja" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Move" @@ -5284,21 +5338,16 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" -msgstr "Preklopi na Zaustavitev" +msgstr "Preklopi Svobodni Pregled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "Preoblikovanje" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Preoblikuj Zaskok.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Preoblikovanje Dialoga.." +msgid "Transform Dialog..." +msgstr "Preoblikovanje Dialoga..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5542,17 +5591,15 @@ msgid "Remove Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Vse Stvari" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Odstrani Signal" +msgstr "Odstrani Vse" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5620,7 +5667,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5776,9 +5823,8 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi trenutno pod-ploščo v urejanju." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." @@ -5809,7 +5855,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5899,6 +5945,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Ime Projekta:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -5933,9 +5984,8 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Rename Project" -msgstr "Preimenuj Funkcijo" +msgstr "Preimenuj Projekt" #: editor/project_manager.cpp msgid "New Game Project" @@ -6088,8 +6138,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6117,7 +6167,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 @@ -6213,9 +6263,8 @@ msgid "Wheel Down." msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Dodaj Getter Lastnost" +msgstr "Dodaj Globalno Lastnost" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" @@ -6230,9 +6279,8 @@ msgid "Setting '%s' is internal, and it can't be deleted." msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Izbriši Izbrano" +msgstr "Izbriši Predmet" #: editor/project_settings_editor.cpp msgid "Already existing" @@ -6303,7 +6351,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6399,11 +6447,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 @@ -6411,9 +6459,8 @@ msgid "Assign" msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi Gradnik" #: editor/property_editor.cpp msgid "New Script" @@ -6468,9 +6515,8 @@ msgid "Properties:" msgstr "" #: editor/property_selector.cpp -#, fuzzy msgid "Select Property" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi Lastnost" #: editor/property_selector.cpp msgid "Select Virtual Method" @@ -6576,7 +6622,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 @@ -6692,9 +6738,8 @@ msgid "Clear a script for the selected node." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "Odstrani Signal" +msgstr "Upravljalnik" #: editor/scene_tree_dock.cpp msgid "Local" @@ -6823,18 +6868,16 @@ msgid "Wrong extension chosen" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr ": Neveljavni argumenti: " +msgstr "Neveljavna Pot" #: editor/script_create_dialog.cpp msgid "Invalid class name" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path" -msgstr "Neveljaven indeks lastnosti imena." +msgstr "Neveljaveno prevzeto ime ali pot nadrejenega" #: editor/script_create_dialog.cpp msgid "Script valid" @@ -6869,9 +6912,8 @@ msgid "Class Name" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Odstrani Spremenljivko" +msgstr "Predloga" #: editor/script_create_dialog.cpp msgid "Built-in Script" @@ -6882,9 +6924,8 @@ msgid "Attach Node Script" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Odstrani Signal" +msgstr "Upravljalnik " #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7075,9 +7116,8 @@ msgid "Select dependencies of the library for this entry" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Odstrani Signal" +msgstr "Odstrani trenutni vnos" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -7191,9 +7231,8 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Izbriši Izbrano" +msgstr "GridMap Izbriši Izbor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -7272,9 +7311,8 @@ msgid "Erase Area" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Izbriši Izbrano" +msgstr "Počisti izbrano" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -7345,8 +7383,8 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"Vozlišče se je ustavilo brez delovnega spomina! Prosimo preberite si v " -"dokumentaciji, kako pravilno ustaviti vozlišče." +"Gradnik je bil ustavljen brez delovnega spomina, v dokumentaciji si " +"preberite kako ga pravilno ustaviti!" #: modules/visual_script/visual_script.cpp msgid "" @@ -7378,9 +7416,8 @@ msgid "Stack overflow with stack depth: " msgstr "Sklad prepoln z stack depth: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Uredi Argumente Signala:" +msgstr "Spremeni Argumente Signala" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" @@ -7395,9 +7432,8 @@ msgid "Set Variable Default Value" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Uredi Spremenljivko:" +msgstr "Nastavite Tip Spremenljivke" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7448,9 +7484,8 @@ msgid "Add Node" msgstr "Dodaj vozlišče" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Gradnike VizualnaSkripta" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" @@ -7485,9 +7520,8 @@ msgid "Add Preload Node" msgstr "Dodaj prednaloženo vozlišče" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s) From Tree" -msgstr "Dodaj vozlišče(a) iz drevesa" +msgstr "Dodaj Gradnik(e) iz Drevesa" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -7498,18 +7532,16 @@ msgid "Add Setter Property" msgstr "Dodaj Setter Lastnost" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Osnovni Tip:" +msgstr "Spremeni Osnovni Tip" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Gradnik VizualnaSkripta" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" @@ -7572,18 +7604,16 @@ msgid "Remove Function" msgstr "Odstrani Funkcijo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Uredi Spremenljivko:" +msgstr "Uredi Spremenljivko" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Odstrani Spremenljivko" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Urejanje Signala:" +msgstr "Uredi Signal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7710,9 +7740,8 @@ msgid "Could not open template for export:" msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Neveljaven indeks lastnosti imena." +msgstr "Neveljavna izvozna predloga:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" @@ -8051,6 +8080,14 @@ msgstr "Napaka nalaganja pisave." msgid "Invalid font size." msgstr "Neveljavna velikost pisave." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Prejšnji zavihek" + +#, fuzzy +#~ msgid "Next" +#~ msgstr "Naslednji zavihek" + #~ msgid "Not found!" #~ msgstr "Ni Zadetka!" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 2c2b1eb001..c838174131 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -500,7 +500,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Повежи '%s' са '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Повежи..." #: editor/connections_dialog.cpp @@ -925,11 +925,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 @@ -1065,11 +1065,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 @@ -1140,7 +1140,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 @@ -1411,12 +1411,12 @@ 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 @@ -1645,11 +1645,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 @@ -1661,7 +1661,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Сачувај промене '%s' пре изласка?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Сачувај сцену као..." #: editor/editor_node.cpp @@ -1713,7 +1713,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 @@ -1869,7 +1869,7 @@ msgid "Previous tab" msgstr "Претходни таб" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Филтрирај датотеке..." #: editor/editor_node.cpp @@ -1881,11 +1881,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 @@ -1905,15 +1905,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 "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2177,7 +2177,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 @@ -2286,7 +2286,7 @@ msgid "Creating Mesh Previews" msgstr "Направи приказ мрежа" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Сличица..." #: editor/editor_plugin_settings.cpp @@ -2441,7 +2441,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 @@ -2521,7 +2521,7 @@ msgid "Error requesting url: " msgstr "Грешка при захтеву url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Повезивање са одредиштем..." #: editor/export_template_manager.cpp @@ -2538,7 +2538,7 @@ msgstr "Не могу решити" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "Повезивање..." #: editor/export_template_manager.cpp @@ -2552,7 +2552,7 @@ msgstr "Повезан" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Захтевање..." #: editor/export_template_manager.cpp @@ -2696,11 +2696,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 @@ -2713,16 +2713,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Дуплирај" #: editor/filesystem_dock.cpp @@ -2748,7 +2748,7 @@ msgstr "Направи следећу сцену/е као дете одабра #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Скенирање датотека,\n" "Молим сачекајте..." @@ -2816,7 +2816,7 @@ msgid "Import Scene" msgstr "Увези сцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Увожење сцеене..." #: editor/import/resource_importer_scene.cpp @@ -2830,7 +2830,7 @@ msgid "Generating for Mesh: " msgstr "Генерисање осног поравнаног граничниог оквира (AABB)" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Обрађивање скриптице..." #: editor/import/resource_importer_scene.cpp @@ -2846,7 +2846,7 @@ msgid "Error running post-import script:" msgstr "Грешка при обрађивању пост-увозне скриптице:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Чување..." #: editor/import_dock.cpp @@ -2866,7 +2866,7 @@ msgid "Import As:" msgstr "Увези као:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Поставке..." #: editor/import_dock.cpp @@ -3284,7 +3284,7 @@ msgid "Transition Node" msgstr "Transition чвор" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Увези анимације..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3292,7 +3292,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 @@ -3361,7 +3361,7 @@ msgid "Fetching:" msgstr "Преузимање:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Решавање..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3428,7 +3428,7 @@ msgid "Site:" msgstr "Веб страница:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Подршка..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3618,6 +3618,7 @@ msgid "Use Rotation Snap" msgstr "Користи лепљење ротације" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Поставке лепљења..." @@ -4045,7 +4046,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 @@ -4253,7 +4254,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 "У слици нема пиксела са транспарентношћу већом од 128..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4618,7 +4619,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 @@ -4717,7 +4718,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 @@ -4928,15 +4929,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 @@ -5393,11 +5394,7 @@ msgid "Transform" msgstr "Трансформација" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Конфигуриши лепљење..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Прозор трансформације..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5653,7 +5650,7 @@ msgid "Remove All" msgstr "Обриши све" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Измени тему..." #: editor/plugins/theme_editor_plugin.cpp @@ -5725,7 +5722,8 @@ msgid "Options" msgstr "Опција" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Има,много,неколико,опција!" #: editor/plugins/theme_editor_plugin.cpp @@ -5924,7 +5922,7 @@ msgid "Presets" msgstr "Поставке" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Додај..." #: editor/project_export.cpp @@ -6020,6 +6018,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Неважеће име." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Неуспех при прављењу директоријума." @@ -6209,8 +6212,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6238,7 +6241,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 @@ -6423,7 +6426,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6519,11 +6522,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 @@ -6695,7 +6698,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 @@ -8146,6 +8149,13 @@ msgstr "" msgid "Invalid font size." msgstr "Неважећа величина фонта." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Претходни таб" + +#~ msgid "Next" +#~ msgstr "Следеће" + #~ msgid "" #~ "Invalid version.txt format inside templates. Revision is not a valid " #~ "identifier." @@ -8156,9 +8166,6 @@ msgstr "Неважећа величина фонта." #~ msgid "Can't write file." #~ msgstr "Неуспех при записивању датотеке." -#~ msgid "Next" -#~ msgstr "Следеће" - #~ msgid "Not found!" #~ msgstr "Није пронађено!" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index d7cb85af1b..975418d4fb 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-25 14:41+0000\n" +"PO-Revision-Date: 2018-05-15 08: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" @@ -215,7 +215,7 @@ msgstr "Animacija dodaj ključ" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Promijeni Dužinu Animacije" #: editor/animation_editor.cpp msgid "Change Anim Loop" @@ -223,15 +223,15 @@ msgstr "" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Animacija Napravit Tip Vrijednosni Ključ" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Animacija Umetni" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Animacija Skaliraj Ključeve" #: editor/animation_editor.cpp msgid "Anim Add Call Track" @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -905,11 +905,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 @@ -1045,11 +1045,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 @@ -1118,7 +1118,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 @@ -1380,12 +1380,12 @@ 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 @@ -1590,11 +1590,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 @@ -1606,7 +1606,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 @@ -1658,7 +1658,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 @@ -1803,7 +1803,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1815,11 +1815,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 @@ -1839,15 +1839,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 @@ -2092,7 +2092,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 @@ -2201,7 +2201,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2352,7 +2352,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 @@ -2428,7 +2428,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 @@ -2445,7 +2445,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2458,7 +2458,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2590,11 +2590,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 @@ -2606,15 +2606,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 @@ -2640,7 +2640,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2706,7 +2706,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2718,7 +2718,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 @@ -2734,7 +2734,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2754,7 +2754,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3168,7 +3168,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 @@ -3176,7 +3176,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 @@ -3244,7 +3244,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3311,7 +3311,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3498,6 +3498,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3919,7 +3920,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 @@ -4124,7 +4125,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 @@ -4485,7 +4486,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 @@ -4582,7 +4583,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 @@ -4788,15 +4789,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 @@ -5247,11 +5248,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5504,7 +5501,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5572,7 +5569,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5760,7 +5757,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5850,6 +5847,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6036,8 +6037,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6065,7 +6066,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 @@ -6249,7 +6250,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6345,11 +6346,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 @@ -6520,7 +6521,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 diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 4a861d1b76..9ec654128a 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -3,21 +3,23 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # -# bergmarklund <davemcgroin@gmail.com>, 2017. +# bergmarklund <davemcgroin@gmail.com>, 2017, 2018. # Christoffer Sundbom <christoffer_karlsson@live.se>, 2017. +# Jakob Sinclair <sinclair.jakob@mailbox.org>, 2018. +# . <grenoscar@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-01 23:50+0000\n" -"Last-Translator: bergmarklund <davemcgroin@gmail.com>\n" +"PO-Revision-Date: 2018-05-07 11:42+0000\n" +"Last-Translator: anonymous <>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/" "godot/sv/>\n" "Language: sv\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" @@ -41,17 +43,16 @@ msgid "Anim Change Transform" msgstr "Anim Ändra Transformation" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Ändra Värde" +msgstr "Anim Ändra Värde På Tidsnyckeln" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Anim Ändra Samtal" +msgstr "Anim Ändra Anrop" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Lägg till spår" +msgstr "Anim Lägg till spår" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" @@ -59,11 +60,11 @@ msgstr "Anim Duplicera Nycklar" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Flytta Anim Spåra Upp" +msgstr "Flytta Anim Spåra Uppåt" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Flytta Anim Spår Ner" +msgstr "Flytta Anim Spår Neråt" #: editor/animation_editor.cpp msgid "Remove Anim Track" @@ -83,16 +84,15 @@ msgstr "Anim Ändra Spårets Interpolation" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Ändra Anim Spårets Värde Läge" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" msgstr "" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Node Curve" -msgstr "Redigera Node-Kurva" +msgstr "Redigera Nodkurva" #: editor/animation_editor.cpp #, fuzzy @@ -491,7 +491,7 @@ msgstr "Skapa Funktion" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Uppskjuten" #: editor/connections_dialog.cpp #, fuzzy @@ -531,8 +531,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Anslut '%s' till '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Anslut.." +msgid "Connect..." +msgstr "Anslut..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -733,7 +733,7 @@ msgstr "Resurser Utan Explicit Ägande:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Föräldralös Resursutforskare" #: editor/dependency_editor.cpp msgid "Delete selected files?" @@ -988,7 +988,7 @@ msgstr "Ta bort Effekt" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Ljud" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1022,13 +1022,13 @@ msgstr "Flytta Ljud-Buss" #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Save Audio Bus Layout As.." -msgstr "Spara Ljud-Buss Layout Som.." +msgid "Save Audio Bus Layout As..." +msgstr "Spara Ljud-Buss Layout Som..." #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Location for New Layout.." -msgstr "Plats för Ny Layout.." +msgid "Location for New Layout..." +msgstr "Plats för Ny Layout..." #: editor/editor_audio_buses.cpp #, fuzzy @@ -1193,12 +1193,12 @@ msgstr "Uppdaterar Scen" #: editor/editor_data.cpp #, fuzzy -msgid "Storing local changes.." -msgstr "Lagrar lokala ändringar.." +msgid "Storing local changes..." +msgstr "Lagrar lokala ändringar..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Uppdaterar scen.." +msgid "Updating scene..." +msgstr "Uppdaterar scen..." #: editor/editor_data.cpp #, fuzzy @@ -1276,8 +1276,8 @@ msgid "Show In File Manager" msgstr "Visa I Filhanteraren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Ny Mapp.." +msgid "New Folder..." +msgstr "Ny Mapp..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1285,7 +1285,7 @@ msgstr "Uppdatera" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Alla Erkända" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1348,7 +1348,7 @@ msgstr "Växla Läge" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Fokusera på Sökväg" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -1360,7 +1360,7 @@ msgstr "Flytta Favorit Ner" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "Gå till överordnad mapp" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy @@ -1464,11 +1464,11 @@ msgstr "Signaler:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "" +msgstr "Enumerations" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "" +msgstr "Enumerations:" #: editor/editor_help.cpp #, fuzzy @@ -1570,7 +1570,7 @@ msgstr "Output:" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt exporten misslyckades med följande felmeddelande %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -1578,13 +1578,13 @@ msgid "Error saving resource!" msgstr "Fel vid sparande av resurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Spara Resurs Som.." +msgid "Save Resource As..." +msgstr "Spara Resurs Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Jag förstår.." +msgid "I see..." +msgstr "Jag förstår..." #: editor/editor_node.cpp #, fuzzy @@ -1845,13 +1845,13 @@ msgstr "Öppna Bas-Scen" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Scene.." -msgstr "Snabböppna Scen.." +msgid "Quick Open Scene..." +msgstr "Snabböppna Scen..." #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Script.." -msgstr "Snabböppna Skript.." +msgid "Quick Open Script..." +msgstr "Snabböppna Skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1863,8 +1863,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Spara ändringar i '%s' innan stängning?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Spara Scen Som.." +msgid "Save Scene As..." +msgstr "Spara Scen Som..." #: editor/editor_node.cpp msgid "No" @@ -1925,8 +1925,8 @@ msgstr "Åtgärden kan inte ångras. Återställ ändå?" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Run Scene.." -msgstr "Snabbkör Scen.." +msgid "Quick Run Scene..." +msgstr "Snabbkör Scen..." #: editor/editor_node.cpp msgid "Quit" @@ -2102,8 +2102,8 @@ msgid "Previous tab" msgstr "Föregående flik" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrera Filer.." +msgid "Filter Files..." +msgstr "Filtrera Filer..." #: editor/editor_node.cpp #, fuzzy @@ -2116,12 +2116,12 @@ msgstr "Ny Scen" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "Ny Ärvd Scen.." +msgid "New Inherited Scene..." +msgstr "Ny Ärvd Scen..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Öppna Scen.." +msgid "Open Scene..." +msgstr "Öppna Scen..." #: editor/editor_node.cpp msgid "Save Scene" @@ -2141,18 +2141,18 @@ msgid "Open Recent" msgstr "Öppna Senaste" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konvertera Till.." +msgid "Convert To..." +msgstr "Konvertera Till..." #: editor/editor_node.cpp #, fuzzy -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2340,7 +2340,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Play" -msgstr "" +msgstr "Spela" #: editor/editor_node.cpp msgid "Pause the scene" @@ -2366,7 +2366,7 @@ msgstr "Spela den redigerade scenen." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Spela Scen" #: editor/editor_node.cpp msgid "Play custom scene" @@ -2412,8 +2412,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Spara Som.." +msgid "Save As..." +msgstr "Spara Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2526,8 +2526,8 @@ msgstr "" #: editor/editor_plugin.cpp #, fuzzy -msgid "Thumbnail.." -msgstr "Miniatyr.." +msgid "Thumbnail..." +msgstr "Miniatyr..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2564,7 +2564,7 @@ msgstr "" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Bildrutetid (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" @@ -2686,7 +2686,7 @@ msgid "(Current)" msgstr "(Nuvarande)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2767,7 +2767,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 @@ -2786,8 +2786,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." -msgstr "Ansluter.." +msgid "Connecting..." +msgstr "Ansluter..." #: editor/export_template_manager.cpp #, fuzzy @@ -2801,7 +2801,7 @@ msgstr "Ansluten" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2951,13 +2951,13 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." -msgstr "Byt namn.." +msgid "Rename..." +msgstr "Byt namn..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To.." -msgstr "Flytta Till.." +msgid "Move To..." +msgstr "Flytta Till..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2970,17 +2970,17 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "View Owners.." -msgstr "Visa Ägare.." +msgid "View Owners..." +msgstr "Visa Ägare..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicera" #: editor/filesystem_dock.cpp @@ -3007,7 +3007,7 @@ msgstr "Instansiera valda scen(er) som barn till vald Node." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -3077,8 +3077,8 @@ msgstr "Importera Scen" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Importing Scene.." -msgstr "Importerar Scen.." +msgid "Importing Scene..." +msgstr "Importerar Scen..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3089,7 +3089,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 @@ -3105,8 +3105,8 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Sparar.." +msgid "Saving..." +msgstr "Sparar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -3126,7 +3126,7 @@ msgid "Import As:" msgstr "Importera Som:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3156,25 +3156,26 @@ msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "" +msgstr "Redigera Polygon" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Infoga Punkt" #: 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 "Redigera Polygon (ta bort punkt)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Ta bort Polygon och Punkt" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Skapa ny polygon från grunden" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -3186,7 +3187,7 @@ msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" -msgstr "" +msgstr "Radera punkter" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3194,7 +3195,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nytt Animationsnamn:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -3202,7 +3203,7 @@ msgstr "Ny Anim" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Ändra Animationsnamn:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3215,11 +3216,11 @@ msgstr "Ta bort Animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "ERROR: Ogiltigt animationsnamn!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "ERROR: Animationsnamn finns redan!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3558,8 +3559,8 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Import Animations.." -msgstr "Importera Animationer.." +msgid "Import Animations..." +msgstr "Importera Animationer..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3568,8 +3569,8 @@ msgstr "Redigera Node-Filter" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Filters.." -msgstr "Filter.." +msgid "Filters..." +msgstr "Filter..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3638,7 +3639,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3667,8 +3668,9 @@ msgid "first" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "prev" -msgstr "" +msgstr "förhandsgranska" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" @@ -3707,7 +3709,7 @@ msgid "Site:" msgstr "Webbplats:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3895,6 +3897,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4328,7 +4331,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 @@ -4497,7 +4500,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Partitioning..." -msgstr "Partitionerar.." +msgstr "Partitionerar..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4542,7 +4545,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 @@ -4914,8 +4917,8 @@ msgstr "Importera Tema" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Save Theme As.." -msgstr "Spara Tema Som.." +msgid "Save Theme As..." +msgstr "Spara Tema Som..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -5023,8 +5026,8 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find.." -msgstr "Hitta.." +msgid "Find..." +msgstr "Hitta..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5244,15 +5247,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Replace.." -msgstr "Ersätt.." +msgid "Replace..." +msgstr "Ersätt..." #: 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 @@ -5733,11 +5736,7 @@ msgid "Transform" msgstr "Transformera" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5999,8 +5998,8 @@ msgstr "Ta bort Alla" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy -msgid "Edit theme.." -msgstr "Redigera tema.." +msgid "Edit theme..." +msgstr "Redigera tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -6069,8 +6068,9 @@ msgid "Options" msgstr "Alternativ" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Alternativ" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6201,7 +6201,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6267,8 +6267,8 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Lägg till.." +msgid "Add..." +msgstr "Lägg till..." #: editor/project_export.cpp msgid "Resources" @@ -6362,6 +6362,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Projektnamn:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunde inte skapa mapp." @@ -6572,8 +6577,8 @@ msgstr "Musknapp" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6602,8 +6607,8 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp #, fuzzy -msgid "Press a Key.." -msgstr "Tryck på en Knapp.." +msgid "Press a Key..." +msgstr "Tryck på en Knapp..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6791,7 +6796,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6892,11 +6897,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Fil.." +msgid "File..." +msgstr "Fil..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -7082,8 +7087,8 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Save New Scene As.." -msgstr "Spara Ny Scen Som.." +msgid "Save New Scene As..." +msgstr "Spara Ny Scen Som..." #: editor/scene_tree_dock.cpp #, fuzzy @@ -8646,6 +8651,10 @@ msgstr "Fel vid laddning av font." msgid "Invalid font size." msgstr "Ogiltig teckenstorlek." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Föregående flik" + #~ msgid "Next" #~ msgstr "Nästa" @@ -8681,10 +8690,6 @@ msgstr "Ogiltig teckenstorlek." #~ msgid "That's a BINGO!" #~ msgstr "Det är en BINGO!" -#, fuzzy -#~ msgid "preview" -#~ msgstr "förhandsgranska" - #~ msgid "Move Add Key" #~ msgstr "Flytta Lägg Till Nyckel" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index e7269ffa0e..d7910c2c87 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -496,7 +496,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -906,11 +906,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 @@ -1046,11 +1046,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 @@ -1119,7 +1119,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 @@ -1381,12 +1381,12 @@ 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 @@ -1591,11 +1591,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 @@ -1607,7 +1607,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 @@ -1659,7 +1659,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 @@ -1804,7 +1804,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1816,11 +1816,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 @@ -1840,15 +1840,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 @@ -2093,7 +2093,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 @@ -2202,7 +2202,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2353,7 +2353,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 @@ -2429,7 +2429,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 @@ -2446,7 +2446,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2459,7 +2459,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2591,11 +2591,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 @@ -2607,16 +2607,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "அசைவூட்டு போலிபச்சாவிகள்" #: editor/filesystem_dock.cpp @@ -2642,7 +2642,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2708,7 +2708,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2720,7 +2720,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 @@ -2736,7 +2736,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2756,7 +2756,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3170,7 +3170,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 @@ -3178,7 +3178,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 @@ -3246,7 +3246,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3313,7 +3313,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3500,6 +3500,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3921,7 +3922,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 @@ -4126,7 +4127,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 @@ -4487,7 +4488,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 @@ -4584,7 +4585,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 @@ -4790,15 +4791,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 @@ -5249,11 +5250,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5506,7 +5503,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5574,7 +5571,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5762,7 +5759,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5852,6 +5849,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6038,8 +6039,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6067,7 +6068,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 @@ -6251,7 +6252,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,11 +6348,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 @@ -6522,7 +6523,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 diff --git a/editor/translations/th.po b/editor/translations/th.po index 74e2270f2c..4db8459f1b 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -495,8 +495,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "ลบการเชื่อมโยง '%s' กับ '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "เชื่อมโยง.." +msgid "Connect..." +msgstr "เชื่อมโยง..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -914,12 +914,12 @@ msgid "Move Audio Bus" msgstr "ย้าย Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "บันทึกเลย์เอาต์ของ Audio Bus เป็น.." +msgid "Save Audio Bus Layout As..." +msgstr "บันทึกเลย์เอาต์ของ Audio Bus เป็น..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "ตำแหน่งของเลย์เอาต์ใหม่.." +msgid "Location for New Layout..." +msgstr "ตำแหน่งของเลย์เอาต์ใหม่..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1054,12 +1054,12 @@ msgid "Updating Scene" msgstr "อัพเดทฉาก" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "เก็บการเปลี่ยนแปลงภายใน.." +msgid "Storing local changes..." +msgstr "เก็บการเปลี่ยนแปลงภายใน..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "อัพเดทฉาก.." +msgid "Updating scene..." +msgstr "อัพเดทฉาก..." #: editor/editor_data.cpp msgid "[empty]" @@ -1127,8 +1127,8 @@ msgid "Show In File Manager" msgstr "แสดงในตัวจัดการไฟล์" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "สร้างโฟลเดอร์.." +msgid "New Folder..." +msgstr "สร้างโฟลเดอร์..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1391,13 +1391,13 @@ msgid "Error saving resource!" msgstr "บันทึกรีซอร์สผิดพลาด!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "บันทึกรีซอร์สเป็น.." +msgid "Save Resource As..." +msgstr "บันทึกรีซอร์สเป็น..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "ตกลง.." +msgid "I see..." +msgstr "ตกลง..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1616,12 +1616,12 @@ msgid "Open Base Scene" msgstr "เปิดไฟล์ฉากที่ใช้สืบทอด" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "เปิดไฟล์ฉากด่วน.." +msgid "Quick Open Scene..." +msgstr "เปิดไฟล์ฉากด่วน..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "เปิดไฟล์สคริปต์ด่วน.." +msgid "Quick Open Script..." +msgstr "เปิดไฟล์สคริปต์ด่วน..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1632,8 +1632,8 @@ msgid "Save changes to '%s' before closing?" msgstr "บันทึก '%s' ก่อนปิดโปรแกรมหรือไม่?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "บันทึกฉากเป็น.." +msgid "Save Scene As..." +msgstr "บันทึกฉากเป็น..." #: editor/editor_node.cpp msgid "No" @@ -1684,8 +1684,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "การคืนกลับไม่สามารถยกเลิกได้ คืนกลับ?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "เริ่มฉากด่วน.." +msgid "Quick Run Scene..." +msgstr "เริ่มฉากด่วน..." #: editor/editor_node.cpp msgid "Quit" @@ -1834,8 +1834,8 @@ msgid "Previous tab" msgstr "แท็บก่อนหน้า" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "คัดกรองไฟล์.." +msgid "Filter Files..." +msgstr "คัดกรองไฟล์..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1846,12 +1846,12 @@ msgid "New Scene" msgstr "ฉากใหม่" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "สืบทอดฉากใหม่.." +msgid "New Inherited Scene..." +msgstr "สืบทอดฉากใหม่..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "เปิดไฟล์ฉาก.." +msgid "Open Scene..." +msgstr "เปิดไฟล์ฉาก..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1870,16 +1870,16 @@ msgid "Open Recent" msgstr "เปิดไฟล์ล่าสุด" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "แปลงเป็น.." +msgid "Convert To..." +msgstr "แปลงเป็น..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2130,8 +2130,8 @@ msgid "Save the currently edited resource." msgstr "บันทึกรีซอร์สที่กำลังปรับแต่ง" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "บันทึกเป็น.." +msgid "Save As..." +msgstr "บันทึกเป็น..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2239,8 +2239,8 @@ msgid "Creating Mesh Previews" msgstr "กำลังสร้างภาพตัวอย่าง Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "รูปตัวอย่าง.." +msgid "Thumbnail..." +msgstr "รูปตัวอย่าง..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2392,8 +2392,8 @@ msgid "(Current)" msgstr "(ปัจจุบัน)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "กำลังเรียกข้อมูล โปรดรอ.." +msgid "Retrieving mirrors, please wait..." +msgstr "กำลังเรียกข้อมูล โปรดรอ..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2468,8 +2468,8 @@ msgid "Error requesting url: " msgstr "ผิดพลาดขณะร้องขอที่อยู่: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "กำลังเชื่อมต่อ.." +msgid "Connecting to Mirror..." +msgstr "กำลังเชื่อมต่อ..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2477,7 +2477,7 @@ msgstr "การเชื่อมต่อสิ้นสุด" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "กำลังค้นหา.." +msgstr "กำลังค้นหา..." #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2485,8 +2485,8 @@ msgstr "ค้นหาไม่สำเร็จ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "กำลังเชื่อมต่อ.." +msgid "Connecting..." +msgstr "กำลังเชื่อมต่อ..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2498,8 +2498,8 @@ msgstr "เชื่อมต่อแล้ว" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "กำลังร้องขอ.." +msgid "Requesting..." +msgstr "กำลังร้องขอ..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2630,12 +2630,12 @@ msgid "Collapse all" msgstr "ยุบโฟลเดอร์" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "เปลี่ยนชื่อ.." +msgid "Rename..." +msgstr "เปลี่ยนชื่อ..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ย้ายไป.." +msgid "Move To..." +msgstr "ย้ายไป..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2646,16 +2646,16 @@ msgid "Instance" msgstr "อินสแตนซ์" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "แก้ไขการอ้างอิง.." +msgid "Edit Dependencies..." +msgstr "แก้ไขการอ้างอิง..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ดูเจ้าของ.." +msgid "View Owners..." +msgstr "ดูเจ้าของ..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "ทำซ้ำ.." +msgid "Duplicate..." +msgstr "ทำซ้ำ..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2680,10 +2680,10 @@ msgstr "อินสแตนซ์ฉากที่เลือกให้เ #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "กำลังสแกนไฟล์,\n" -"กรุณารอ.." +"กรุณารอ..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2748,8 +2748,8 @@ msgid "Import Scene" msgstr "นำเข้าฉาก" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "กำลังนำเข้าฉาก.." +msgid "Importing Scene..." +msgstr "กำลังนำเข้าฉาก..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2760,8 +2760,8 @@ msgid "Generating for Mesh: " msgstr "สร้างสำหรับพื้นผิว: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "กำลังรันสคริปต์.." +msgid "Running Custom Script..." +msgstr "กำลังรันสคริปต์..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2776,8 +2776,8 @@ msgid "Error running post-import script:" msgstr "ผิดพลาดขณะรันสคริปต์หลังนำเข้า:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "กำลังบันทึก.." +msgid "Saving..." +msgstr "กำลังบันทึก..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2796,8 +2796,8 @@ msgid "Import As:" msgstr "นำเข้าเป็น:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "แบบ.." +msgid "Preset..." +msgstr "แบบ..." #: editor/import_dock.cpp msgid "Reimport" @@ -3214,16 +3214,16 @@ msgid "Transition Node" msgstr "โหนดทรานสิชัน" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "นำเข้าแอนิเมชัน.." +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 "ตัวกรอง.." +msgid "Filters..." +msgstr "ตัวกรอง..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3290,8 +3290,8 @@ msgid "Fetching:" msgstr "กำลังรับข้อมูล:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "กำลังค้นหา.." +msgid "Resolving..." +msgstr "กำลังค้นหา..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3357,8 +3357,8 @@ msgid "Site:" msgstr "ไซต์:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "การสนับสนุน.." +msgid "Support..." +msgstr "การสนับสนุน..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3549,6 +3549,7 @@ msgid "Use Rotation Snap" msgstr "จำกัดการหมุน" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ตั้งค่าการจำกัด..." @@ -3976,8 +3977,8 @@ msgid "Create Convex Collision Sibling" msgstr "สร้างรูปทรงตันกายภาพเป็นโหนดญาติ" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "สร้างเส้นขอบ Mesh.." +msgid "Create Outline Mesh..." +msgstr "สร้างเส้นขอบ Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4181,8 +4182,8 @@ msgid "Error loading image:" msgstr "ผิดพลาดขณะโหลดรูป:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "รูปไม่มีพิกเซลใดที่ความโปร่งแสง > 128 .." +msgid "No pixels with transparency > 128 in image..." +msgstr "รูปไม่มีพิกเซลใดที่ความโปร่งแสง > 128 ..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4542,7 +4543,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 @@ -4639,8 +4640,8 @@ msgstr "เปิด/ปิดแผงสคริปต์" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "ค้นหา.." +msgid "Find..." +msgstr "ค้นหา..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4847,16 +4848,16 @@ msgid "Find Previous" msgstr "ค้นหาก่อนหน้า" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "แทนที่.." +msgid "Replace..." +msgstr "แทนที่..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "ไปยังฟังก์ชัน.." +msgid "Goto Function..." +msgstr "ไปยังฟังก์ชัน..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "ไปยังบรรทัด.." +msgid "Goto Line..." +msgstr "ไปยังบรรทัด..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5309,12 +5310,8 @@ msgid "Transform" msgstr "เคลื่อนย้าย" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ตั้งค่าการจำกัด.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "เครื่องมือเคลื่อนย้าย.." +msgid "Transform Dialog..." +msgstr "เครื่องมือเคลื่อนย้าย..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5566,8 +5563,8 @@ msgid "Remove All" msgstr "ลบทั้งหมด" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "แก้ไขธีม.." +msgid "Edit theme..." +msgstr "แก้ไขธีม..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5636,7 +5633,8 @@ msgid "Options" msgstr "ตัวเลือก" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "มี,มากมาย,หลาย,ตัวเลือก!" #: editor/plugins/theme_editor_plugin.cpp @@ -5826,8 +5824,8 @@ msgid "Presets" msgstr "การส่งออก" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "เพิ่ม.." +msgid "Add..." +msgstr "เพิ่ม..." #: editor/project_export.cpp msgid "Resources" @@ -5916,6 +5914,11 @@ msgid "Imported Project" msgstr "นำเข้าโปรเจกต์แล้ว" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "ชื่อโปรเจกต์:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "ไม่สามารถสร้างโฟลเดอร์" @@ -6111,8 +6114,8 @@ msgstr "ปุ่มเมาส์" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6140,8 +6143,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "กดปุ่ม.." +msgid "Press a Key..." +msgstr "กดปุ่ม..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6324,8 +6327,8 @@ msgid "Property:" msgstr "คุณสมบัติ:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "กำหนดเฉพาะ.." +msgid "Override For..." +msgstr "กำหนดเฉพาะ..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6420,12 +6423,12 @@ msgid "Easing Out-In" msgstr "ออก-เข้านุ่มนวล" #: editor/property_editor.cpp -msgid "File.." -msgstr "ไฟล์.." +msgid "File..." +msgstr "ไฟล์..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "โฟลเดอร์.." +msgid "Dir..." +msgstr "โฟลเดอร์..." #: editor/property_editor.cpp msgid "Assign" @@ -6595,8 +6598,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ทำกับฉากที่เป็นอินสแตนซ์ไม่ได้" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "บันทึกฉากใหม่เป็น.." +msgid "Save New Scene As..." +msgstr "บันทึกฉากใหม่เป็น..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -8074,6 +8077,13 @@ msgstr "ผิดพลาดขณะโหลดฟอนต์" msgid "Invalid font size." msgstr "ขนาดฟอนต์ผิดพลาด" +#, fuzzy +#~ msgid "Previous" +#~ msgstr "แท็บก่อนหน้า" + +#~ msgid "Next" +#~ msgstr "ต่อไป" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "ใช้ชื่อนี้ไม่ได้ (มี '/' หรือ ':')" @@ -8097,9 +8107,6 @@ msgstr "ขนาดฟอนต์ผิดพลาด" #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "ไม่พบไฟล์ project.godot" -#~ msgid "Next" -#~ msgstr "ต่อไป" - #~ msgid "Not found!" #~ msgstr "ไม่พบ!" @@ -8242,8 +8249,8 @@ msgstr "ขนาดฟอนต์ผิดพลาด" #~ msgid "Exporting for %s" #~ msgstr "ส่งออกสำหรับ %s" -#~ msgid "Setting Up.." -#~ msgstr "กำลังตั้งค่า.." +#~ msgid "Setting Up..." +#~ msgstr "กำลังตั้งค่า..." #~ msgid "Error loading scene." #~ msgstr "ผิดพลาดขณะโหลดฉาก" @@ -8303,8 +8310,8 @@ msgstr "ขนาดฟอนต์ผิดพลาด" #~ msgid "Info" #~ msgstr "ข้อมูล" -#~ msgid "Re-Import.." -#~ msgstr "นำเข้าอีกครั้ง.." +#~ msgid "Re-Import..." +#~ msgstr "นำเข้าอีกครั้ง..." #~ msgid "No bit masks to import!" #~ msgstr "ไม่มีบิตแมสก์ให้นำเข้า!" @@ -8684,14 +8691,14 @@ msgstr "ขนาดฟอนต์ผิดพลาด" #~ msgid "Zoom (%):" #~ msgstr "ซูม (%):" -#~ msgid "Skeleton.." -#~ msgstr "โครงกระดูก.." +#~ msgid "Skeleton..." +#~ msgstr "โครงกระดูก..." #~ msgid "Zoom Reset" #~ msgstr "รีเซ็ตการซูม" -#~ msgid "Zoom Set.." -#~ msgstr "ตั้งค่าการซูม.." +#~ msgid "Zoom Set..." +#~ msgstr "ตั้งค่าการซูม..." #~ msgid "Set a Value" #~ msgstr "เซ็ตค่า" @@ -9105,8 +9112,8 @@ msgstr "ขนาดฟอนต์ผิดพลาด" #~ msgid "Export Project PCK" #~ msgstr "ส่งออก PCK โปรเจกต์" -#~ msgid "Export.." -#~ msgstr "ส่งออก.." +#~ msgid "Export..." +#~ msgstr "ส่งออก..." #~ msgid "Project Export" #~ msgstr "ส่งออกโปรเจกต์" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 5e4a18ce28..292cec4063 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -2,32 +2,33 @@ # 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. -# # Aprın Çor Tigin <kabusturk38@gmail.com>, 2016-2017. +# Aykut YILDIRIM <aykutyildirim@windowslive.com>, 2018. # Ceyhun Can Ulker <ceyhuncanu@gmail.com>, 2016. # Enes Kaya Öcal <ekayaocal@hotmail.com>, 2016. # 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. +# Kaan Gül <qaantum@hotmail.com>, 2018. # M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016. +# monolifed <monolifed@gmail.com>, 2018. # Orkun Turan <holygatestudio@yandex.com>, 2016-2017. # razah <icnikerazah@gmail.com>, 2017-2018. # stnmycri <satenmeycri@gmail.com>, 2017-2018. # Yavuz Günay <yavuzgunay@gmail.com>, 2017. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-19 12:41+0000\n" -"Last-Translator: H.Hüseyin CİHANGİR <hashusfb@gmail.com>\n" +"PO-Revision-Date: 2018-06-10 09:46+0000\n" +"Last-Translator: Aykut YILDIRIM <aykutyildirim@windowslive.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 3.0-dev\n" +"X-Generator: Weblate 3.0.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -509,7 +510,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Şunun: '%s' şununla: '%s' bağlantısını kes" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Bağlan..." #: editor/connections_dialog.cpp @@ -929,12 +930,12 @@ msgid "Move Audio Bus" msgstr "Audio Bus'ı Taşı" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Audio Bus Yerleşim Düzenini Farklı Kaydet.." +msgid "Save Audio Bus Layout As..." +msgstr "Audio Bus Yerleşim Düzenini Farklı Kaydet..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Yeni Yerleşim Düzeni için Konum.." +msgid "Location for New Layout..." +msgstr "Yeni Yerleşim Düzeni için Konum..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1069,12 +1070,12 @@ msgid "Updating Scene" msgstr "Sahne Güncelleniyor" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Yerel değişiklikler kayıt ediliyor.." +msgid "Storing local changes..." +msgstr "Yerel değişiklikler kayıt ediliyor..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Sahne güncelleniyor.." +msgid "Updating scene..." +msgstr "Sahne güncelleniyor..." #: editor/editor_data.cpp msgid "[empty]" @@ -1142,8 +1143,8 @@ msgid "Show In File Manager" msgstr "Dosya Yöneticisinde Göster" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Yeni Klasör.." +msgid "New Folder..." +msgstr "Yeni Klasör..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1404,20 +1405,20 @@ msgstr "Çıktıyı Temizle" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Proje dışa aktarımı %d hata koduyla başarısız." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Kaynak kaydedilirken hata!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Kaynağı Farklı Kaydet.." +msgid "Save Resource As..." +msgstr "Kaynağı Farklı Kaydet..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Anlıyorum.." +msgid "I see..." +msgstr "Anlıyorum..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1648,12 +1649,12 @@ msgid "Open Base Scene" msgstr "Ana Sahneyi Aç" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Sahneyi Hızlı Aç.." +msgid "Quick Open Scene..." +msgstr "Sahneyi Hızlı Aç..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Betiği Hızlı Aç.." +msgid "Quick Open Script..." +msgstr "Betiği Hızlı Aç..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1664,8 +1665,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Sahneyi Farklı Kaydet.." +msgid "Save Scene As..." +msgstr "Sahneyi Farklı Kaydet..." #: editor/editor_node.cpp msgid "No" @@ -1716,8 +1717,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Bu eylem geri alınamaz. Yine de geri dönsün mü?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Sahneyi Hızlı Çalıştır.." +msgid "Quick Run Scene..." +msgstr "Sahneyi Hızlı Çalıştır..." #: editor/editor_node.cpp msgid "Quit" @@ -1872,8 +1873,8 @@ msgid "Previous tab" msgstr "Önceki sekme" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Dosyaları Süz.." +msgid "Filter Files..." +msgstr "Dosyaları Süz..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1884,12 +1885,12 @@ msgid "New Scene" msgstr "Yeni Sahne" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Yeni Miras Alınmış Sahne .." +msgid "New Inherited Scene..." +msgstr "Yeni Miras Alınmış Sahne ..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Sahne Aç.." +msgid "Open Scene..." +msgstr "Sahne Aç..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1908,16 +1909,16 @@ msgid "Open Recent" msgstr "En Sonuncuyu Aç" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Şuna Dönüştür.." +msgid "Convert To..." +msgstr "Şuna Dönüştür..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary .." +msgid "MeshLibrary..." +msgstr "MeshLibrary ..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet .." +msgid "TileSet..." +msgstr "TileSet ..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1966,9 +1967,8 @@ msgid "Debug" msgstr "Hata Ayıklama" #: editor/editor_node.cpp -#, fuzzy msgid "Deploy with Remote Debug" -msgstr "Uzaktan Hata Ayıklama ile Aç" +msgstr "Uzaktan Hata Ayıklama ile Dağıt" #: editor/editor_node.cpp msgid "" @@ -2181,8 +2181,8 @@ msgid "Save the currently edited resource." msgstr "Düzenlenen kaynağı kaydedin." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Farklı Kaydet.." +msgid "Save As..." +msgstr "Farklı Kaydet..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2290,8 +2290,8 @@ msgid "Creating Mesh Previews" msgstr "Mesh Önizlemeleri Oluşturuluyor" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Küçük Resim.." +msgid "Thumbnail..." +msgstr "Küçük Resim..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2443,8 +2443,8 @@ msgid "(Current)" msgstr "(Şuanki)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Aynalar alınıyor, lütfen bekleyin.." +msgid "Retrieving mirrors, please wait..." +msgstr "Aynalar alınıyor, lütfen bekleyin..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2521,8 +2521,8 @@ msgid "Error requesting url: " msgstr "Url isteği hatası: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Aynaya bağlanılıyor.." +msgid "Connecting to Mirror..." +msgstr "Aynaya bağlanılıyor..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2538,8 +2538,8 @@ msgstr "Çözümlenemedi" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Bağlanılıyor.." +msgid "Connecting..." +msgstr "Bağlanılıyor..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2551,8 +2551,8 @@ msgstr "Bağlı" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "İsteniyor.." +msgid "Requesting..." +msgstr "İsteniyor..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2687,12 +2687,12 @@ msgid "Collapse all" msgstr "Hepsini daralt" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Yeniden Adlandır.." +msgid "Rename..." +msgstr "Yeniden Adlandır..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Şuraya Taşı.." +msgid "Move To..." +msgstr "Şuraya Taşı..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2703,16 +2703,16 @@ msgid "Instance" msgstr "Örnek" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Bağımlılıkları Düzenle.." +msgid "Edit Dependencies..." +msgstr "Bağımlılıkları Düzenle..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Sahipleri Görüntüle.." +msgid "View Owners..." +msgstr "Sahipleri Görüntüle..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Çoğalt.." +msgid "Duplicate..." +msgstr "Çoğalt..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2737,10 +2737,10 @@ msgstr "Seçilen sahneyi/sahneleri seçilen düğüme çocuk olarak örneklendir #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Dosyalar Taranıyor,\n" -"Lütfen Bekleyiniz.." +"Lütfen Bekleyiniz..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2805,7 +2805,7 @@ msgid "Import Scene" msgstr "Sahneyi İçe Aktar" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Sahneyi İçe Aktarıyor..." #: editor/import/resource_importer_scene.cpp @@ -2817,8 +2817,8 @@ msgid "Generating for Mesh: " msgstr "Örüntü için Üretiliyor: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Çalışan Özel Betik.." +msgid "Running Custom Script..." +msgstr "Çalışan Özel Betik..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2835,7 +2835,7 @@ msgid "Error running post-import script:" msgstr "sonradan-içe aktarılmış betik çalıştırılırken hata:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Kaydediliyor..." #: editor/import_dock.cpp @@ -2855,8 +2855,8 @@ msgid "Import As:" msgstr "Şu Şekilde İçe Aktar:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ön ayar.." +msgid "Preset..." +msgstr "Ön ayar..." #: editor/import_dock.cpp msgid "Reimport" @@ -3273,15 +3273,15 @@ msgid "Transition Node" msgstr "Geçiş Düğümü" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animasyonları İçe Aktar.." +msgid "Import Animations..." +msgstr "Animasyonları İçe Aktar..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Düğüm Süzgeçlerini Düzenle" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Süzgeçler..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3349,7 +3349,7 @@ msgid "Fetching:" msgstr "Alınıyor:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Çözümleniyor..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3416,7 +3416,7 @@ msgid "Site:" msgstr "Yer:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Destek..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3614,6 +3614,7 @@ msgid "Use Rotation Snap" msgstr "Döndürme Yapışması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Yapışmayı Yapılandır..." @@ -3710,14 +3711,12 @@ 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ü" +msgstr "Başlatımı Göster" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Görüntükapısı" +msgstr "Görüntükapısını Göster" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3773,7 +3772,7 @@ msgstr "Ekle %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "Ekliyor %s.." +msgstr "Ekliyor %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" @@ -4010,7 +4009,7 @@ 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 "" +msgstr "Örüntü ilkel türü PRIMITIVE_TRIANGLES değil!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4041,8 +4040,8 @@ msgid "Create Convex Collision Sibling" msgstr "Dışbükey Çarpışma Kardeşi Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Anahat Örüntüsü Oluştur.." +msgid "Create Outline Mesh..." +msgstr "Anahat Örüntüsü Oluştur..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4246,8 +4245,8 @@ msgid "Error loading image:" msgstr "Resim yüklenirken hata:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Saydamlığı olan nokta yok > 128 bedizde.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Saydamlığı olan nokta yok > 128 bedizde..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4607,8 +4606,8 @@ msgid "Import Theme" msgstr "Kalıbı İçe Aktar" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Temayı Farklı Kaydet.." +msgid "Save Theme As..." +msgstr "Temayı Farklı Kaydet..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4704,8 +4703,8 @@ msgstr "Betikler Panelini Aç/Kapa" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Bul.." +msgid "Find..." +msgstr "Bul..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4914,16 +4913,16 @@ msgid "Find Previous" msgstr "Öncekini Bul" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Değiştir.." +msgid "Replace..." +msgstr "Değiştir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "İşleve Git.." +msgid "Goto Function..." +msgstr "İşleve Git..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Dizeye Git.." +msgid "Goto Line..." +msgstr "Dizeye Git..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5376,12 +5375,8 @@ msgid "Transform" msgstr "Dönüşüm" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Yapışmayı Yapılandır.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Dönüştürme İletişim Kutusu.." +msgid "Transform Dialog..." +msgstr "Dönüştürme İletişim Kutusu..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5633,8 +5628,8 @@ msgid "Remove All" msgstr "Tümünü Kaldır" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Tema düzenle.." +msgid "Edit theme..." +msgstr "Tema düzenle..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5681,14 +5676,12 @@ msgid "Checked Item" msgstr "Denetlenen Öğe" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Öğe Ekle" +msgstr "Radyo Ögesi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Denetlenen Öğe" +msgstr "Seçili Radyo Ögesi" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5703,7 +5696,8 @@ msgid "Options" msgstr "Seçenekler" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Bir Çok,Seçenek,Var!" #: editor/plugins/theme_editor_plugin.cpp @@ -5895,8 +5889,8 @@ msgid "Presets" msgstr "Önayarlar" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Ekle.." +msgid "Add..." +msgstr "Ekle..." #: editor/project_export.cpp msgid "Resources" @@ -5989,6 +5983,10 @@ msgid "Imported Project" msgstr "İçe Aktarılan Proje" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Geçersiz Proje Adı." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Klasör oluşturulamadı." @@ -6188,9 +6186,10 @@ msgstr "Fare Düğmesi" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Geçersiz işlem adı. Boş olamaz ve '/', ':', '=', '\\' veya '\"' içeremez." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6217,8 +6216,8 @@ msgid "Control+" msgstr "Denetim+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Bir Dokunaca Basın.." +msgid "Press a Key..." +msgstr "Bir Dokunaca Basın..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6401,8 +6400,8 @@ msgid "Property:" msgstr "Özellik:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Şunun Üzerine Yaz.." +msgid "Override For..." +msgstr "Şunun Üzerine Yaz..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6497,12 +6496,12 @@ msgid "Easing Out-In" msgstr "Kararma Açılma" #: editor/property_editor.cpp -msgid "File.." -msgstr "Dosya.." +msgid "File..." +msgstr "Dosya..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Diz.." +msgid "Dir..." +msgstr "Diz..." #: editor/property_editor.cpp msgid "Assign" @@ -6674,8 +6673,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Bu işlem örneklenmiş sahnelerde yapılamaz." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Yeni Sahneyi Farklı Kaydet .." +msgid "Save New Scene As..." +msgstr "Yeni Sahneyi Farklı Kaydet ..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7389,11 +7388,11 @@ msgstr "Uzaklık Seç:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "solü oluşturuluyor..." +msgstr "Çözüm oluşturuluyor..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." @@ -7420,9 +7419,8 @@ msgid "Mono" msgstr "Tekli" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "About C# support" -msgstr "C# hakkında destek" +msgstr "C# desteği hakkında" #: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" @@ -7442,7 +7440,7 @@ msgstr "Uyarılar" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "İç özel durum yığını izlemesinin sonu" #: modules/visual_script/visual_script.cpp msgid "" @@ -7995,12 +7993,11 @@ msgstr "ARVROrigin bir ARVRCamera çocuk düğümü gerektirir" #: scene/3d/baked_lightmap.cpp msgid "%d%%" -msgstr "" +msgstr "%d%%" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "(Time Left: %d:%02d s)" -msgstr "(Kalan Zaman:%d:%02d s)" +msgstr "(Kalan Zaman:%d:%02d sn)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8102,7 +8099,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment bir Environment kaynağı gerektirir." #: scene/3d/scenario_fx.cpp msgid "" @@ -8116,6 +8113,8 @@ 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 "" +"Bu WorldEnvironment yoksayıldı. (3B sahneler için) Bir Kamera ekleyin veya " +"(2B sahneler için) bu ortamın Arkaplan Kipini Canvas olarak ayarlayın." #: scene/3d/sprite_3d.cpp msgid "" @@ -8213,6 +8212,13 @@ msgstr "Yazıtipi yükleme hatası." msgid "Invalid font size." msgstr "Geçersiz yazıtipi boyutu." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Önceki sekme" + +#~ msgid "Next" +#~ msgstr "Sonraki" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Geçersiz işlem (her şey ancak şu '/' ya da şuna ':' gider)." @@ -8238,9 +8244,6 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Proje yolunda proje.godot alınamadı." -#~ msgid "Next" -#~ msgstr "Sonraki" - #~ msgid "Not found!" #~ msgstr "Bulunamadı!" @@ -8380,7 +8383,7 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Exporting for %s" #~ msgstr "%s için Dışa Aktarım" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Kurulum..." #~ msgid "Error loading scene." @@ -8435,8 +8438,8 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Info" #~ msgstr "Bilgi" -#~ msgid "Re-Import.." -#~ msgstr "Yeniden İçe Aktar.." +#~ msgid "Re-Import..." +#~ msgstr "Yeniden İçe Aktar..." #~ msgid "No bit masks to import!" #~ msgstr "Alınacak hiç bit örteci yok!" @@ -8832,14 +8835,14 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Zoom (%):" #~ msgstr "Yaklaş (%):" -#~ msgid "Skeleton.." -#~ msgstr "İskelet.." +#~ msgid "Skeleton..." +#~ msgstr "İskelet..." #~ msgid "Zoom Reset" #~ msgstr "Yakınlaşmayı Sıfırla" -#~ msgid "Zoom Set.." -#~ msgstr "Yakınlaşmayı Ayarla.." +#~ msgid "Zoom Set..." +#~ msgstr "Yakınlaşmayı Ayarla..." #~ msgid "Set a Value" #~ msgstr "Bir Değer Ata" @@ -8980,7 +8983,7 @@ msgstr "Geçersiz yazıtipi boyutu." #~ "Download and install export templates." #~ msgstr "" #~ "Hiçbir dışa aktarım kalıbı bulunamadı.\n" -#~ "Dışa aktarım kalıplarını indirin ve yükleyin.." +#~ "Dışa aktarım kalıplarını indirin ve yükleyin..." #~ msgid "Custom debug package not found." #~ msgstr "Özel kusur ayıklama çıkını bulunmadı." @@ -9303,8 +9306,8 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Export Project PCK" #~ msgstr "Tasarı PCK Dışa Aktar" -#~ msgid "Export.." -#~ msgstr "Dışa Aktar.." +#~ msgid "Export..." +#~ msgstr "Dışa Aktar..." #~ msgid "Project Export" #~ msgstr "Tasarı Dışa Aktar" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 45138cd5de..067c7be724 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -2,7 +2,6 @@ # 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. -# # Aleksandr <XpycT.TOP@gmail.com>, 2017. # Yuri Chornoivan <yurchor@ukr.net>, 2018. # Андрій Бандура <andriykopanytsia@gmail.com>, 2018. @@ -10,11 +9,10 @@ # Максим Якимчук <xpinovo@gmail.com>, 2018. # Марс Ямбар <mjambarmeta@gmail.com>, 2017-2018. # Олександр Пилипчук <pilipchukap@rambler.ru>, 2018. -# msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" -"PO-Revision-Date: 2018-04-20 18:42+0000\n" +"PO-Revision-Date: 2018-06-06 04:03+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -23,7 +21,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 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -345,7 +343,7 @@ msgstr "Очищення всіх анімації" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Очищення анімації(і) (не скасувати!)" +msgstr "Очистити анімацію(ї) (НЕ СКАСУВАТИ!)" #: editor/animation_editor.cpp msgid "Clean-Up" @@ -492,7 +490,7 @@ msgstr "З'єднати" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "З'єднання '%s' для %s'" +msgstr "Приєднати '%s' до %s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" @@ -503,8 +501,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Від'єднати '%s' від '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Приєднати.." +msgid "Connect..." +msgstr "Приєднати..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -666,7 +664,7 @@ msgstr "Помилки завантаження!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "Остаточно вилучити %d об'єкти (неможливо скасувати)" +msgstr "Остаточно вилучити %d об'єкт(и)? (Неможливо скасувати)" #: editor/dependency_editor.cpp msgid "Owns" @@ -706,7 +704,7 @@ msgstr "Спасибі від спільноти Godot!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "Дякую!" +msgstr "Подяка!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -776,7 +774,7 @@ msgid "" "respective copyright statements and license terms." msgstr "" "Рушій Godot спирається на ряд сторонніх безкоштовних і відкритих бібліотек, " -"сумісних з умовами ліцензії mit. Нижче наводиться вичерпний список всіх " +"сумісних з умовами ліцензії MIT. Нижче наводиться вичерпний список всіх " "таких сторонніх компонентів з відповідними заявами авторських прав і умов " "ліцензійної угоди." @@ -824,7 +822,7 @@ msgstr "Динаміки" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "Додати ефект" +msgstr "Додавання ефекту" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -852,7 +850,7 @@ msgstr "Вибір передачі аудіо шини" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Додати ефект аудіо шини" +msgstr "Додавання ефекту аудіо шини" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -897,11 +895,11 @@ msgstr "Видалити ефект" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "Звук" +msgstr "Аудіо" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "Додати аудіо шину" +msgstr "Додавання аудіо шини" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" @@ -924,16 +922,16 @@ msgid "Move Audio Bus" msgstr "Перемістити аудіо шину" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Зберегти макет аудіо шини як.." +msgid "Save Audio Bus Layout As..." +msgstr "Зберегти компонування аудіо шини як..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Розташування для нового макета..." +msgid "Location for New Layout..." +msgstr "Розташування для нового компонування..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Відкрити макет аудіо шини" +msgstr "Відкрити компонування аудіо шини" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -941,7 +939,7 @@ msgstr "Файл 'res: //default_bus_layout.tres' не знайдено." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "Неприпустимий файл, це не макет аудіо-шини." +msgstr "Неприпустимий файл, це не компонування аудіо-шини." #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -949,7 +947,7 @@ msgstr "Додати шину" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "Створення нового макету шини." +msgstr "Створення нового компонування шини." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp @@ -958,16 +956,16 @@ msgstr "Завантажити" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "Завантаження існуючого макета шини." +msgstr "Завантаження існуючого компонування шини." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "Зберегти Як" +msgstr "Зберегти як" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "Зберегти цей макет шини у файлі." +msgstr "Зберегти це компонування шини у файлі." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -975,7 +973,7 @@ msgstr "Завантажити типовий" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "Завантажити типовий макет шини." +msgstr "Завантажити типове компонування шини." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -998,7 +996,7 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" -"Неправильне ім'я. Не повинно збігатись з іменем існуючої глобальної " +"Неприпустиме ім'я. Не повинно збігатись з іменем існуючої глобальної " "константи." #: editor/editor_autoload_settings.cpp @@ -1068,12 +1066,12 @@ msgid "Updating Scene" msgstr "Оновлення сцени" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Збереження локальних змін.." +msgid "Storing local changes..." +msgstr "Збереження локальних змін..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Оновлення сцени.." +msgid "Updating scene..." +msgstr "Оновлення сцени..." #: editor/editor_data.cpp msgid "[empty]" @@ -1141,8 +1139,8 @@ msgid "Show In File Manager" msgstr "Показати в файловому менеджері" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Створити теку.." +msgid "New Folder..." +msgstr "Створити теку..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1154,7 +1152,7 @@ msgstr "Усе розпізнано" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "Усі фали (*)" +msgstr "Усі файли (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" @@ -1180,11 +1178,11 @@ msgstr "Зберегти" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "Збереження файлу" +msgstr "Зберегти файл" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "Повертатися" +msgstr "Повернутися назад" #: editor/editor_file_dialog.cpp msgid "Go Forward" @@ -1212,11 +1210,11 @@ msgstr "Фокусувати шлях" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "Перемістити обране вгору" +msgstr "Перемістити вибране вгору" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "Перемістити обране вниз" +msgstr "Перемістити вибране вниз" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1245,7 +1243,7 @@ msgstr "Сканувати сирці" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "(Re)Імпорт активів" +msgstr "Імпортування активів" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1258,7 +1256,7 @@ msgstr "Список класів:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "Пошук класу" +msgstr "Пошук класів" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -1274,19 +1272,19 @@ msgstr "Успадковує:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "Успадкована:" +msgstr "Успадковано:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "Короткий опис:" +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" @@ -1298,11 +1296,11 @@ msgstr "Публічні методи:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "Елементи графічного інтерфейсу теми" +msgstr "Тема елементів ГІК" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "Елементи графічного інтерфейсу теми:" +msgstr "Тема елементів ГІК:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1310,15 +1308,15 @@ msgstr "Сигнали:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "Перелік" +msgstr "Перелічуваний" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Перелік:" +msgstr "Перелічуваний:" #: editor/editor_help.cpp msgid "enum " -msgstr "перелік " +msgstr "перелічуваний " #: editor/editor_help.cpp msgid "Constants" @@ -1368,7 +1366,7 @@ msgstr "Методи" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "Опис методу:" +msgstr "Опис методів:" #: editor/editor_help.cpp msgid "" @@ -1403,20 +1401,20 @@ msgstr "Очистити вивід" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Не вдалося експортувати проект, код помилки — %d." #: 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 "Зберегти ресурс як.." +msgid "Save Resource As..." +msgstr "Зберегти ресурс як..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Бачу.." +msgid "I see..." +msgstr "Бачу..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1496,7 +1494,7 @@ msgstr "Помилка збереження набору тайлів!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "Помилка при спробі зберегти макет!" +msgstr "Помилка при спробі зберегти компонування!" #: editor/editor_node.cpp msgid "Default editor layout overridden." @@ -1504,7 +1502,7 @@ msgstr "Типове компонування редактора перевиз #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "Назву макета не знайдено!" +msgstr "Назву компонування не знайдено!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." @@ -1516,7 +1514,7 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"Цей ресурс належить до сцени, який було імпортовано, тому не можна " +"Цей ресурс належить до сцени, який було імпортовано, тому його не можна " "редагувати.\n" "Будь ласка, прочитайте документацію, що стосуються імпортування сцен, щоб " "краще зрозуміти цей робочий процес." @@ -1597,7 +1595,7 @@ msgstr "Відкрити у довідці" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "Не існує визначеної сцени для запуску." +msgstr "Немає визначеної сцени для виконання." #: editor/editor_node.cpp msgid "" @@ -1647,12 +1645,12 @@ msgid "Open Base Scene" msgstr "Відкрити основну сцену" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Швидке відкриття сцени.." +msgid "Quick Open Scene..." +msgstr "Швидке відкриття сцени..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Швидке відкриття скрипту.." +msgid "Quick Open Script..." +msgstr "Швидке відкриття скрипту..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1660,11 +1658,11 @@ msgstr "Зберегти та закрити" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "Зберегти зміни, внесені до '%s ' перед закриттям?" +msgstr "Зберегти зміни, внесені до '%s' перед закриттям?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Зберегти сцени, як..." +msgid "Save Scene As..." +msgstr "Зберегти сцену як..." #: editor/editor_node.cpp msgid "No" @@ -1715,8 +1713,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Цю дію не можна скасувати. Повернутися в будь-якому випадку?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Швидкий запуск сцени.." +msgid "Quick Run Scene..." +msgstr "Швидкий запуск сцени..." #: editor/editor_node.cpp msgid "Quit" @@ -1815,11 +1813,11 @@ msgstr "Очистити недавні сцени" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "Зберегти макет" +msgstr "Зберегти компонування" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "Видалити макет" +msgstr "Видалити компонування" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -1828,7 +1826,7 @@ msgstr "Типовий" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Перемкнути вкладку \"Сцена\"" +msgstr "Перемикання вкладки \"Сцена\"" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1875,7 +1873,7 @@ msgid "Previous tab" msgstr "Попередня вкладка" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Фільтрувати файли..." #: editor/editor_node.cpp @@ -1887,12 +1885,12 @@ msgid "New Scene" msgstr "Нова сцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Нова успадкована сцена.." +msgid "New Inherited Scene..." +msgstr "Нова успадкована сцена..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Відкрити сцену.." +msgid "Open Scene..." +msgstr "Відкрити сцену..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1911,16 +1909,16 @@ msgid "Open Recent" msgstr "Відкрити останні" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Перетворити на.." +msgid "Convert To..." +msgstr "Перетворити на..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "Бібліотека сітки.." +msgid "MeshLibrary..." +msgstr "Бібліотека сітки..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "Набір тайлів.." +msgid "TileSet..." +msgstr "Набір тайлів..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1930,7 +1928,7 @@ msgstr "Скасувати" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp msgid "Redo" -msgstr "Повторити" +msgstr "Повернути" #: editor/editor_node.cpp msgid "Revert Scene" @@ -1954,7 +1952,7 @@ msgstr "Запустити скрипт" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "Експортувати" +msgstr "Експортування" #: editor/editor_node.cpp msgid "Tools" @@ -2001,14 +1999,14 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "Видимі форми зіткнень" +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 "" -"Форми зіткнення та вузли raycast (для 2D та 3D) будуть видно в роботі гри, " +"Контури зіткнення та вузли raycast (для 2D та 3D) буде видно в роботі гри, " "якщо ця опція увімкнена." #: editor/editor_node.cpp @@ -2036,8 +2034,8 @@ msgid "" msgstr "" "Якщо цей параметр увімкнено, будь-які зміни, внесені в сцену в редакторі, " "будуть відтворені в роботі гри.\n" -"Коли він використовується віддалено на пристрої, це більш ефективно з " -"мережевою файловою системою." +"При віддаленому використанні на пристрої, це більш ефективно з мережевою " +"файловою системою." #: editor/editor_node.cpp msgid "Sync Script Changes" @@ -2052,8 +2050,8 @@ msgid "" msgstr "" "Якщо цей параметр увімкнено, будь-який скрипт, який буде збережений, буде " "перезавантажений у поточній грі.\n" -"Коли він використовується віддалено на пристрої, це більш ефективно з " -"мережевою файловою системою." +"При віддаленому використанні на пристрої, це більш ефективно з мережевою " +"файловою системою." #: editor/editor_node.cpp msgid "Editor" @@ -2065,7 +2063,7 @@ msgstr "Параметри редактора" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "Редактор макетів" +msgstr "Редактор компонування" #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2108,7 +2106,7 @@ msgstr "Спільнота" #: editor/editor_node.cpp msgid "About" -msgstr "Про програму" +msgstr "Про" #: editor/editor_node.cpp msgid "Play the project." @@ -2160,7 +2158,7 @@ msgstr "Завжди оновлювати" #: editor/editor_node.cpp msgid "Update Changes" -msgstr "Оновити зміни" +msgstr "Оновлювати зміни" #: editor/editor_node.cpp msgid "Disable Update Spinner" @@ -2183,7 +2181,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 @@ -2257,7 +2255,7 @@ msgstr "Новий успадкований" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "Завантажити помилки" +msgstr "Помилки завантаження" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" @@ -2292,12 +2290,12 @@ msgid "Creating Mesh Previews" msgstr "Створення попереднього перегляду сітки" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Мініатюра.." +msgid "Thumbnail..." +msgstr "Мініатюра..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "Встановлені плагіни:" +msgstr "Встановлені плаґіни:" #: editor/editor_plugin_settings.cpp msgid "Update" @@ -2342,7 +2340,7 @@ msgstr "Кадр %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "Фізика кадрів %" +msgstr "Фізичний кадр %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2386,7 +2384,7 @@ msgstr "Напишіть свою логіку в методі _run ()." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "Є вже редагована сцена." +msgstr "Редагована сцена вже існує." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -2394,7 +2392,7 @@ msgstr "Неможливо створити екземпляр скрипту:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "Ви забули ключове слово \"інструмент\"?" +msgstr "Ви забули ключове слово 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2402,7 +2400,7 @@ msgstr "Не вдалося запустити скрипт:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "Ви забули метод \"_run\"?" +msgstr "Ви забули метод '_run'?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" @@ -2445,12 +2443,12 @@ msgid "(Current)" msgstr "(Поточний)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Отримання дзеркал, будь ласка, зачекайте.." +msgid "Retrieving mirrors, please wait..." +msgstr "Отримання дзеркал, будь ласка, зачекайте..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "Видалити версію шаблону '%s'?" +msgstr "Видалити версію шаблону '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2470,7 +2468,7 @@ msgstr "Помилка створення шляху для шаблонів:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "Витяг шаблонів експорту" +msgstr "Розпакування шаблонів експорту" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2481,8 +2479,8 @@ 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 @@ -2523,8 +2521,8 @@ msgid "Error requesting url: " msgstr "Помилка запиту url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Підключення до дзеркала.." +msgid "Connecting to Mirror..." +msgstr "Підключення до дзеркала..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2540,8 +2538,8 @@ msgstr "Не вдається вирішити" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "З’єднання.." +msgid "Connecting..." +msgstr "З’єднання..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2553,7 +2551,7 @@ msgstr "З’єднано" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Запит..." #: editor/export_template_manager.cpp @@ -2566,7 +2564,7 @@ msgstr "Помилка з'єднання" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "Помилка SSL Handshake" +msgstr "Помилка SSL Рукостискання" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -2586,7 +2584,7 @@ msgstr "Видалити шаблон" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "Виберіть файл шаблону" +msgstr "Вибрати файл шаблону" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -2603,18 +2601,17 @@ 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 для написання, кеш тип файлу " -"не буде збережений!" +"Не вдається відкрити file_type_cache.cch для запису, не буде збережений файл " +"тип кешу!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" -"Неможливо перейти до \"'%s' , оскільки він не був знайдений в файлової " -"системі!" +"Неможливо перейти до '%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" @@ -2623,8 +2620,8 @@ 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." @@ -2684,18 +2681,18 @@ 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.." +msgid "Rename..." msgstr "Перейменувати..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Перемістити до..." #: editor/filesystem_dock.cpp @@ -2707,16 +2704,16 @@ msgid "Instance" msgstr "Екземпляр" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редагувати залежності.." +msgid "Edit Dependencies..." +msgstr "Редагувати залежності..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Переглянути власників.." +msgid "View Owners..." +msgstr "Переглянути власників..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Дублювати.." +msgid "Duplicate..." +msgstr "Дублювати..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2728,20 +2725,20 @@ 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." -msgstr "Додати обрану сцену(и), як нащадка обраного вузла." +msgstr "Додати вибрану сцену(и), як нащадка вибраного вузла." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Сканування файлів,\n" "будь ласка, зачекайте..." @@ -2809,8 +2806,8 @@ msgid "Import Scene" msgstr "Імпортувати сцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Імпортування сцени.." +msgid "Importing Scene..." +msgstr "Імпортування сцени..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2821,8 +2818,8 @@ msgid "Generating for Mesh: " msgstr "Створення для сітки: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Запуск користувацького скрипту.." +msgid "Running Custom Script..." +msgstr "Запуск користувацького скрипту..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,16 +2834,16 @@ msgid "Error running post-import script:" msgstr "Помилка запуску після імпорту скрипту:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Збереження..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "Встановити за замовчуванням для \"%s\"" +msgstr "Встановити як типове для '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "Очистити за замовчуванням для '%s'" +msgstr "Очистити типове для '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2857,12 +2854,12 @@ msgid "Import As:" msgstr "Імпортувати як:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Заздалегідь установлений.." +msgid "Preset..." +msgstr "Заздалегідь установлений..." #: editor/import_dock.cpp msgid "Reimport" -msgstr "Переімпортивути" +msgstr "Переімпортувати" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -2935,7 +2932,7 @@ msgstr "Нова анімація" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Змініть ім'я анімації:" +msgstr "Змінити ім'я анімації:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -2982,7 +2979,7 @@ msgstr "Дублювати анімацію" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "ПОМИЛКА: Немає копії анімації!" +msgstr "ПОМИЛКА: Немає анімації для копіювання!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" @@ -3031,7 +3028,7 @@ msgstr "Шкала відтворення глобально анімації д #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." -msgstr "Створювати нові анімації у програвачі." +msgstr "Створити нову анімацію у програвачі." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load animation from disk." @@ -3276,15 +3273,15 @@ msgid "Transition Node" msgstr "Вузол переходу" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Імпортувати анімації.." +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.." +msgid "Filters..." msgstr "Фільтри..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3352,7 +3349,7 @@ msgid "Fetching:" msgstr "Видобування:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Вирішення..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3419,7 +3416,7 @@ msgid "Site:" msgstr "Сайт:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Підтримка..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3617,6 +3614,7 @@ msgid "Use Rotation Snap" msgstr "Використання обертання прив'язки" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Налаштування прив'язки..." @@ -3713,14 +3711,12 @@ msgid "Show Guides" msgstr "Показати напрямні" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Перегляд центра" +msgstr "Показати центр" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 панель перегляду" +msgstr "Показати панель перегляду" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4014,7 +4010,7 @@ msgstr "Сітка не має поверхні, щоб створити кон #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Типом сітки примітива не є PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4045,8 +4041,8 @@ msgid "Create Convex Collision Sibling" msgstr "Створити опуклу область зіткнення" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Створити контурну сітку .." +msgid "Create Outline Mesh..." +msgstr "Створити контурну сітку ..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4251,8 +4247,8 @@ msgid "Error loading image:" msgstr "Помилка завантаження зображення:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "В зображенні немає пікселів з прозорістю > 128.." +msgid "No pixels with transparency > 128 in image..." +msgstr "В зображенні немає пікселів з прозорістю > 128..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4612,7 +4608,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 @@ -4709,8 +4705,8 @@ msgstr "Перемкнути панель сценаріїв" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Знайти.." +msgid "Find..." +msgstr "Знайти..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4835,7 +4831,7 @@ 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" @@ -4919,16 +4915,16 @@ msgid "Find Previous" msgstr "Знайти попереднє" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Замінити.." +msgid "Replace..." +msgstr "Замінити..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Перейти до функції.." +msgid "Goto Function..." +msgstr "Перейти до функції..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Перейти до рядка.." +msgid "Goto Line..." +msgstr "Перейти до рядка..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5381,11 +5377,7 @@ msgid "Transform" msgstr "Перетворення" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Налаштувати прилипання..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Вікно перетворення..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5638,7 +5630,7 @@ msgid "Remove All" msgstr "Вилучити усі" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Редагувати тему..." #: editor/plugins/theme_editor_plugin.cpp @@ -5686,14 +5678,12 @@ msgid "Checked Item" msgstr "Позначений елемент" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Додати елемент" +msgstr "Пункт варіанта" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Позначений елемент" +msgstr "Позначений пункт варіанта" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5705,11 +5695,11 @@ msgstr "Багато" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "Параметрів" +msgstr "Параметри" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Має,Багато,Декілька,Параметрів!" +msgid "Has,Many,Options" +msgstr "Має,Багато,Параметрів" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5901,7 +5891,7 @@ msgid "Presets" msgstr "Набори" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Додати..." #: editor/project_export.cpp @@ -5996,6 +5986,10 @@ msgid "Imported Project" msgstr "Імпортований проект" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "Некоректна назва проекту." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Неможливо створити теку." @@ -6196,9 +6190,11 @@ msgstr "Кнопка миші" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Некоректна назва дії. Назва не може бути порожньою і не може містити " +"символів «/», «:», «=», «\\» та «\"»." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6225,7 +6221,7 @@ msgid "Control+" msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Натисніть клавішу,..." #: editor/project_settings_editor.cpp @@ -6402,14 +6398,14 @@ 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:" msgstr "Властивість:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Перевизначити на..." #: editor/project_settings_editor.cpp @@ -6454,19 +6450,19 @@ msgstr "Переспрямування за локаллю:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Локаль" +msgstr "Мова" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "Фільтр локалей" +msgstr "Фільтр локалізацій" #: editor/project_settings_editor.cpp msgid "Show all locales" -msgstr "Показати усі локалі" +msgstr "Показати усі локалізації" #: editor/project_settings_editor.cpp msgid "Show only selected locales" -msgstr "Показати лише позначені локалі" +msgstr "Показати лише позначені локалізації" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -6474,7 +6470,7 @@ msgstr "Режим фільтрування:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "Локалі:" +msgstr "Мови:" #: editor/project_settings_editor.cpp msgid "AutoLoad" @@ -6505,11 +6501,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 @@ -6683,7 +6679,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 @@ -7401,7 +7397,7 @@ msgstr "Відстань вибору:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Назвою класу не може бути зарезервоване ключове слово" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8114,7 +8110,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment потребує ресурсу Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8128,6 +8124,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Цей запис WorldEnvironment проігноровано. Або додайте запис Camera (для " +"просторових сцен) або встановіть для Background Mode цього середовища " +"значення Canvas (для двовимірних сцен)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8226,6 +8225,13 @@ msgstr "Помилка завантаження шрифту." msgid "Invalid font size." msgstr "Некоректний розмір шрифту." +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Попередня вкладка" + +#~ msgid "Next" +#~ msgstr "Далі" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Некоректна дія (можна усе, окрім «/» або «:»)." @@ -8252,9 +8258,6 @@ msgstr "Некоректний розмір шрифту." #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "Не вдалося отримати project.godot у каталозі проекту." -#~ msgid "Next" -#~ msgstr "Далі" - #~ msgid "Not found!" #~ msgstr "Не знайдено!" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 4f03e8a387..0162eb0788 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -909,11 +909,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 @@ -1051,11 +1051,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 @@ -1124,7 +1124,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 @@ -1391,12 +1391,12 @@ 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 @@ -1601,11 +1601,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 @@ -1617,7 +1617,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 @@ -1669,7 +1669,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 @@ -1815,7 +1815,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1827,11 +1827,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 @@ -1851,15 +1851,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 @@ -2104,7 +2104,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 @@ -2214,7 +2214,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2365,7 +2365,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 @@ -2441,7 +2441,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 @@ -2458,7 +2458,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2471,7 +2471,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2605,11 +2605,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 @@ -2621,15 +2621,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 @@ -2655,7 +2655,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2721,7 +2721,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2733,7 +2733,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 @@ -2749,7 +2749,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2769,7 +2769,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3185,7 +3185,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 @@ -3193,7 +3193,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 @@ -3261,7 +3261,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3328,7 +3328,7 @@ msgid "Site:" msgstr "سائٹ:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr ".سپورٹ" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3519,6 +3519,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3944,7 +3945,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 @@ -4149,7 +4150,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 @@ -4514,7 +4515,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 @@ -4612,7 +4613,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 @@ -4818,15 +4819,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 @@ -5280,11 +5281,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5541,7 +5538,7 @@ msgid "Remove All" msgstr ".تمام کا انتخاب" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5609,7 +5606,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5798,7 +5795,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5888,6 +5885,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "Couldn't create folder." msgstr "سب سکریپشن بنائیں" @@ -6078,8 +6079,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6107,7 +6108,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 @@ -6292,7 +6293,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6388,11 +6389,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 @@ -6564,7 +6565,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 diff --git a/editor/translations/vi.po b/editor/translations/vi.po index d6284d640e..6651bd170c 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -498,7 +498,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -908,11 +908,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 @@ -1048,11 +1048,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 @@ -1121,7 +1121,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 @@ -1383,12 +1383,12 @@ 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 @@ -1593,11 +1593,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 @@ -1609,8 +1609,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Lưu Scene với tên.." +msgid "Save Scene As..." +msgstr "Lưu Scene với tên..." #: editor/editor_node.cpp msgid "No" @@ -1661,7 +1661,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 @@ -1808,7 +1808,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1820,11 +1820,11 @@ msgid "New Scene" msgstr "Tạo Scene Mới" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Tạo Scene Con.." +msgid "New Inherited Scene..." +msgstr "Tạo Scene Con..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1844,15 +1844,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 @@ -2097,7 +2097,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 @@ -2206,7 +2206,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2357,7 +2357,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 @@ -2433,7 +2433,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 @@ -2450,7 +2450,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2463,7 +2463,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2595,11 +2595,11 @@ msgid "Collapse all" msgstr "Thu gọn tất cả" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Đổi tên..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Di chuyển đến..." #: editor/filesystem_dock.cpp @@ -2611,15 +2611,15 @@ msgid "Instance" msgstr "Thêm vào scene" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Chỉnh sửa các File phụ thuộc.." +msgid "Edit Dependencies..." +msgstr "Chỉnh sửa các File phụ thuộc..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Xem các scene sở hữu.." +msgid "View Owners..." +msgstr "Xem các scene sở hữu..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Nhân đôi..." #: editor/filesystem_dock.cpp @@ -2645,10 +2645,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Đang quét file,\n" -"Chờ môt chút.." +"Chờ môt chút..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2713,7 +2713,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2725,7 +2725,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 @@ -2741,7 +2741,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2761,7 +2761,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3175,7 +3175,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 @@ -3183,7 +3183,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 @@ -3251,7 +3251,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3318,7 +3318,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3505,6 +3505,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3926,7 +3927,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 @@ -4131,7 +4132,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 @@ -4492,7 +4493,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 @@ -4589,7 +4590,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 @@ -4795,15 +4796,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 @@ -5254,11 +5255,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5511,7 +5508,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5579,7 +5576,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5767,7 +5764,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5857,6 +5854,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Kích thước font không hợp lệ." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6045,8 +6047,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6074,7 +6076,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 @@ -6258,7 +6260,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6354,11 +6356,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 @@ -6529,7 +6531,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 @@ -7965,3 +7967,7 @@ msgstr "Lỗi tải font." #: scene/resources/dynamic_font.cpp msgid "Invalid font size." msgstr "Kích thước font không hợp lệ." + +#, fuzzy +#~ msgid "Previous" +#~ msgstr "Thư mục trước" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 45d2d81505..48e30ceab3 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -2,7 +2,6 @@ # 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. -# # 360119124 <360119124@qq.com>, 2018. # 柠檬杀手 <lemonkiller@gmail.com>, 2018. # 纯洁的坏蛋 <tqj.zyy@gmail.com>, 2016. @@ -12,9 +11,12 @@ # Bruce Guo <guoboism@hotmail.com>, 2016. # dragonandy <dragonandy@foxmail.com>, 2017-2018. # Geequlim <geequlim@gmail.com>, 2016-2018. +# jie Shi <meishijiemeimeimei@gmail.com>, 2018. +# Jingtian Pan <panjingtian@126.com>, 2018. # lalalaring <783482203@qq.com>, 2017. -# Luo Jun <vipsbpig@gmail.com>, 2016-2017. +# Luo Jun <vipsbpig@gmail.com>, 2016-2017, 2018. # oberon-tonya <360119124@qq.com>, 2016. +# plumsky <x-wolf@163.com>, 2018. # Qichunren <whyruby@gmail.com>, 2017. # seanfy <everxiao@qq.com>, 2018. # sersoong <seraphim945@qq.com>, 2017-2018. @@ -23,13 +25,13 @@ # Youmu <konpaku.w@gmail.com>, 2017. # yuetian <18829280955@163.com>, 2018. # Zae Chao <zae.vito@live.com>, 2018. -# +# zwj36028 <23732399@qq.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-05-03 08:59+0000\n" -"Last-Translator: Geequlim <geequlim@gmail.com>\n" +"PO-Revision-Date: 2018-06-09 03:55+0000\n" +"Last-Translator: zwj36028 <23732399@qq.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\n" @@ -37,7 +39,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -515,8 +517,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "取消'%s'的连接'%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "连接信号.." +msgid "Connect..." +msgstr "连接信号..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -927,12 +929,12 @@ msgid "Move Audio Bus" msgstr "移动音频总线" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "将音频Bus布局保存为.." +msgid "Save Audio Bus Layout As..." +msgstr "将音频Bus布局保存为..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "新布局的位置.." +msgid "Location for New Layout..." +msgstr "新布局的位置..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -970,7 +972,7 @@ msgstr "另存为" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "将音频Bus布局保存为.." +msgstr "将音频Bus布局保存为..." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1067,12 +1069,12 @@ msgid "Updating Scene" msgstr "更新场景" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "保存修改中.." +msgid "Storing local changes..." +msgstr "保存修改中..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "更新场景中.." +msgid "Updating scene..." +msgstr "更新场景中..." #: editor/editor_data.cpp msgid "[empty]" @@ -1140,8 +1142,8 @@ msgid "Show In File Manager" msgstr "在资源管理器中打开" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "新建文件夹 .." +msgid "New Folder..." +msgstr "新建文件夹 ..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1401,20 +1403,20 @@ msgstr "清空输出" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "项目导出失败,错误代码 %d。" #: 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 "资源另存为.." +msgid "Save Resource As..." +msgstr "资源另存为..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "好吧.." +msgid "I see..." +msgstr "好吧..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1634,12 +1636,12 @@ msgid "Open Base Scene" msgstr "打开父场景" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "快速打开场景.." +msgid "Quick Open Scene..." +msgstr "快速打开场景..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "快速打开脚本.." +msgid "Quick Open Script..." +msgstr "快速打开脚本..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1650,8 +1652,8 @@ msgid "Save changes to '%s' before closing?" msgstr "在关闭前保存更改到 %s 吗?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "场景另存为.." +msgid "Save Scene As..." +msgstr "场景另存为..." #: editor/editor_node.cpp msgid "No" @@ -1702,8 +1704,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "此操作无法撤销,确定要继续吗?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "快速运行场景.." +msgid "Quick Run Scene..." +msgstr "快速运行场景..." #: editor/editor_node.cpp msgid "Quit" @@ -1850,8 +1852,8 @@ msgid "Previous tab" msgstr "上一个目录" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "筛选文件.." +msgid "Filter Files..." +msgstr "筛选文件..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1862,12 +1864,12 @@ msgid "New Scene" msgstr "新建场景" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "从现有场景中创建.." +msgid "New Inherited Scene..." +msgstr "从现有场景中创建..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "打开场景.." +msgid "Open Scene..." +msgstr "打开场景..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1886,16 +1888,16 @@ msgid "Open Recent" msgstr "最近打开" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "转换为.." +msgid "Convert To..." +msgstr "转换为..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary(网格库).." +msgid "MeshLibrary..." +msgstr "MeshLibrary(网格库)..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "砖块集.." +msgid "TileSet..." +msgstr "砖块集..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2148,8 +2150,8 @@ msgid "Save the currently edited resource." msgstr "保存当前编辑的资源。" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "另存为.." +msgid "Save As..." +msgstr "另存为..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2257,8 +2259,8 @@ msgid "Creating Mesh Previews" msgstr "创建网格预览" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "缩略图.." +msgid "Thumbnail..." +msgstr "缩略图..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2410,7 +2412,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 @@ -2486,7 +2488,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 @@ -2503,8 +2505,8 @@ msgstr "无法解析" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "连接中.." +msgid "Connecting..." +msgstr "连接中..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2516,7 +2518,7 @@ msgstr "已连接" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "正在请求。。" #: editor/export_template_manager.cpp @@ -2648,12 +2650,12 @@ msgid "Collapse all" msgstr "收起所有" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "重命名为..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "移动.." +msgid "Move To..." +msgstr "移动..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2664,16 +2666,16 @@ msgid "Instance" msgstr "创建实例节点" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "编辑依赖.." +msgid "Edit Dependencies..." +msgstr "编辑依赖..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "查看所有者.." +msgid "View Owners..." +msgstr "查看所有者..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "拷贝.." +msgid "Duplicate..." +msgstr "拷贝..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2698,7 +2700,7 @@ msgstr "将选中的场景实例为选中节点的子节点。" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "扫描文件,\n" "请稍候。" @@ -2746,11 +2748,11 @@ 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" @@ -2766,8 +2768,8 @@ msgid "Import Scene" msgstr "导入场景" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "导入场景.." +msgid "Importing Scene..." +msgstr "导入场景..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2778,8 +2780,8 @@ msgid "Generating for Mesh: " msgstr "正在生成Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "执行自定义脚本.." +msgid "Running Custom Script..." +msgstr "执行自定义脚本..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2794,7 +2796,7 @@ msgid "Error running post-import script:" msgstr "后处理脚本运行发生错误:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "保存中..." #: editor/import_dock.cpp @@ -2814,8 +2816,8 @@ msgid "Import As:" msgstr "导入为:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "预设.." +msgid "Preset..." +msgstr "预设..." #: editor/import_dock.cpp msgid "Reimport" @@ -3232,16 +3234,16 @@ msgid "Transition Node" msgstr "过渡节点" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "导入动画.." +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 "筛选.." +msgid "Filters..." +msgstr "筛选..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3308,8 +3310,8 @@ msgid "Fetching:" msgstr "获取:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "解析中.." +msgid "Resolving..." +msgstr "解析中..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3375,8 +3377,8 @@ msgid "Site:" msgstr "站点:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "支持.." +msgid "Support..." +msgstr "支持..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3565,8 +3567,9 @@ msgid "Use Rotation Snap" msgstr "使用旋转吸附" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "设置吸附.." +msgstr "设置吸附..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3661,14 +3664,12 @@ 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个视口" +msgstr "显示视图窗口" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3852,7 +3853,7 @@ msgstr "按住 Shift 可单独编辑切线" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "烘焙GI Probe" +msgstr "渲染GI Probe" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -3961,7 +3962,7 @@ msgstr "Mesh(网格)没有表面来创建轮廓(outlines)!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "网格原始类型不是 PRIMITIVE_TRIANGLES(三角形网格)!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -3992,8 +3993,8 @@ msgid "Create Convex Collision Sibling" msgstr "创建凸(Convex)碰撞同级" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "创建轮廓网格(Outline Mesh).." +msgid "Create Outline Mesh..." +msgstr "创建轮廓网格(Outline Mesh)..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4197,8 +4198,8 @@ msgid "Error loading image:" msgstr "加载图片出错:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "图片中没有透明度> 128的像素.." +msgid "No pixels with transparency > 128 in image..." +msgstr "图片中没有透明度> 128的像素..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4558,8 +4559,8 @@ msgid "Import Theme" msgstr "导入主题" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "主题另存为.." +msgid "Save Theme As..." +msgstr "主题另存为..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4655,8 +4656,8 @@ msgstr "切换脚本面板" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "查找.." +msgid "Find..." +msgstr "查找..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4863,16 +4864,16 @@ msgid "Find Previous" msgstr "查找上一项" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "替换.." +msgid "Replace..." +msgstr "替换..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "前往函数.." +msgid "Goto Function..." +msgstr "前往函数..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "前往行.." +msgid "Goto Line..." +msgstr "前往行..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5325,12 +5326,8 @@ msgid "Transform" msgstr "变换" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "设置吸附.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "变换对话框.." +msgid "Transform Dialog..." +msgstr "变换对话框..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5582,8 +5579,8 @@ msgid "Remove All" msgstr "移除全部" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "编辑主题.." +msgid "Edit theme..." +msgstr "编辑主题..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5630,14 +5627,12 @@ msgid "Checked Item" msgstr "已选项目(Checked Item)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "添加项目" +msgstr "单选项目" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "已选项目(Checked Item)" +msgstr "已选单选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5652,8 +5647,8 @@ msgid "Options" msgstr "选项" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "有,很多,几个,选项(Have,Many,Several,Options)!" +msgid "Has,Many,Options" +msgstr "有,很多,选项" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5843,8 +5838,8 @@ msgid "Presets" msgstr "预设" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "添加.." +msgid "Add..." +msgstr "添加..." #: editor/project_export.cpp msgid "Resources" @@ -5933,6 +5928,10 @@ msgid "Imported Project" msgstr "已导入的项目" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "无效项目名称。" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "无法创建文件夹。" @@ -6128,9 +6127,9 @@ msgstr "鼠标按键" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" -msgstr "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "无效的操作名称。它不能是空的也不能包含 '/', ':', '=', '\\' 或者 '\"'。" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6157,8 +6156,8 @@ msgid "Control+" msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "按下一个键.." +msgid "Press a Key..." +msgstr "按下一个键..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6341,7 +6340,7 @@ msgid "Property:" msgstr "属性:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "重写的......" #: editor/project_settings_editor.cpp @@ -6386,7 +6385,7 @@ msgstr "地区重定向:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "地区" +msgstr "区域" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -6437,12 +6436,12 @@ msgid "Easing Out-In" msgstr "反缓入缓出" #: editor/property_editor.cpp -msgid "File.." -msgstr "文件.." +msgid "File..." +msgstr "文件..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "目录.." +msgid "Dir..." +msgstr "目录..." #: editor/property_editor.cpp msgid "Assign" @@ -6612,8 +6611,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "此操作不能应用于实例化的场景。" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "将新场景另存为.." +msgid "Save New Scene As..." +msgstr "将新场景另存为..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7323,7 +7322,7 @@ msgstr "拾取距离:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "类名不能是保留关键字" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7347,7 +7346,7 @@ 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" @@ -7992,7 +7991,7 @@ msgstr "path属性必须指向一个合法的Spatial节点才能正常工作。" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment需要一个环境资源。" #: scene/3d/scenario_fx.cpp msgid "" @@ -8004,6 +8003,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"这个WorldEnvironment被忽略。添加摄像头(用于3D场景)或将此环境的背景模式设置" +"为画布(用于2D场景)。" #: scene/3d/sprite_3d.cpp msgid "" @@ -8096,6 +8097,13 @@ msgstr "加载字体出错。" msgid "Invalid font size." msgstr "字体大小非法。" +#, fuzzy +#~ msgid "Previous" +#~ msgstr "上一个目录" + +#~ msgid "Next" +#~ msgstr "下一项" + #~ msgid "Invalid action (anything goes but '/' or ':')." #~ msgstr "Action名非法(不得包含'/'或':')。" @@ -8119,9 +8127,6 @@ msgstr "字体大小非法。" #~ msgid "Couldn't get project.godot in the project path." #~ msgstr "无法在项目目录下找到project.godot文件。" -#~ msgid "Next" -#~ msgstr "下一项" - #~ msgid "Not found!" #~ msgstr "未找到!" @@ -8268,8 +8273,8 @@ msgstr "字体大小非法。" #~ msgid "Exporting for %s" #~ msgstr "正在导出 %s" -#~ msgid "Setting Up.." -#~ msgstr "配置.." +#~ msgid "Setting Up..." +#~ msgstr "配置..." #~ msgid "Error loading scene." #~ msgstr "加载场景出错。" @@ -8329,8 +8334,8 @@ msgstr "字体大小非法。" #~ msgid "Info" #~ msgstr "信息" -#~ msgid "Re-Import.." -#~ msgstr "重新导入.." +#~ msgid "Re-Import..." +#~ msgstr "重新导入..." #~ msgid "No bit masks to import!" #~ msgstr "没有要导入的bit masks!" @@ -8721,14 +8726,14 @@ msgstr "字体大小非法。" #~ msgid "Zoom (%):" #~ msgstr "缩放(%):" -#~ msgid "Skeleton.." -#~ msgstr "骨骼.." +#~ msgid "Skeleton..." +#~ msgstr "骨骼..." #~ msgid "Zoom Reset" #~ msgstr "重置缩放" -#~ msgid "Zoom Set.." -#~ msgstr "设置缩放.." +#~ msgid "Zoom Set..." +#~ msgstr "设置缩放..." #~ msgid "Set a Value" #~ msgstr "设置值" @@ -9196,8 +9201,8 @@ msgstr "字体大小非法。" #~ msgid "Export Project PCK" #~ msgstr "导出项目PCK文件" -#~ msgid "Export.." -#~ msgstr "导出.." +#~ msgid "Export..." +#~ msgstr "导出..." #~ msgid "Project Export" #~ msgstr "项目导出" @@ -9286,7 +9291,7 @@ msgstr "字体大小非法。" #~ msgid "Reload Tool Script (Soft)" #~ msgstr "重新加载Tool脚本(Soft)" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "编辑事件连接" #~ msgid "Set Params" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index f4c6a39788..568390a7a8 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -534,7 +534,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "由 '%s' 連到 '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "連到..." #: editor/connections_dialog.cpp @@ -972,11 +972,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 @@ -1126,11 +1126,11 @@ msgid "Updating Scene" msgstr "更新場景" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "儲存本地更改.." +msgid "Storing local changes..." +msgstr "儲存本地更改..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "正在更新場景..." #: editor/editor_data.cpp @@ -1203,7 +1203,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "新增資料夾" #: editor/editor_file_dialog.cpp @@ -1481,12 +1481,12 @@ 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 @@ -1713,11 +1713,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 @@ -1731,7 +1731,7 @@ msgid "Save changes to '%s' before closing?" msgstr "關閉前要先儲存對 '%s' 任何更改嗎?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "把場景另存為" #: editor/editor_node.cpp @@ -1783,8 +1783,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "快速運行場景.." +msgid "Quick Run Scene..." +msgstr "快速運行場景..." #: editor/editor_node.cpp msgid "Quit" @@ -1943,8 +1943,8 @@ msgstr "上一個tab" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "篩選檔案.." +msgid "Filter Files..." +msgstr "篩選檔案..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1955,11 +1955,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 @@ -1979,16 +1979,16 @@ msgid "Open Recent" msgstr "開啓最近的" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "轉為..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2236,8 +2236,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "另存為.." +msgid "Save As..." +msgstr "另存為..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2351,7 +2351,7 @@ msgstr "" #: editor/editor_plugin.cpp #, fuzzy -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "縮圖" #: editor/editor_plugin_settings.cpp @@ -2507,7 +2507,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 @@ -2591,7 +2591,7 @@ msgstr "請求時出現錯誤" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "連到..." #: editor/export_template_manager.cpp @@ -2610,7 +2610,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "連到..." #: editor/export_template_manager.cpp @@ -2625,7 +2625,7 @@ msgstr "連到" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "請求中..." #: editor/export_template_manager.cpp @@ -2771,13 +2771,13 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." -msgstr "重新命名.." +msgid "Rename..." +msgstr "重新命名..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To.." -msgstr "搬到.." +msgid "Move To..." +msgstr "搬到..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2789,16 +2789,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製" #: editor/filesystem_dock.cpp @@ -2824,7 +2824,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2834,7 +2834,7 @@ 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" @@ -2891,7 +2891,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2903,7 +2903,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 @@ -2919,8 +2919,8 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "儲存中.." +msgid "Saving..." +msgstr "儲存中..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2941,7 +2941,7 @@ msgid "Import As:" msgstr "導入" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3364,7 +3364,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 @@ -3372,7 +3372,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 @@ -3444,7 +3444,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3511,7 +3511,7 @@ msgid "Site:" msgstr "地址:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3701,6 +3701,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4129,7 +4130,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 @@ -4281,7 +4282,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "儲存本地更改.." +msgstr "儲存本地更改..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4337,7 +4338,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 @@ -4704,7 +4705,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 @@ -4806,7 +4807,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 @@ -5019,15 +5020,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 @@ -5491,11 +5492,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5751,7 +5748,7 @@ msgid "Remove All" msgstr "移除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5819,8 +5816,9 @@ msgid "Options" msgstr "選項" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "選項" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5947,7 +5945,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6014,7 +6012,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "添加..." #: editor/project_export.cpp @@ -6109,6 +6107,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "無效名稱" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "無法新增資料夾" @@ -6303,8 +6306,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6332,7 +6335,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 @@ -6519,7 +6522,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6616,11 +6619,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 @@ -6798,7 +6801,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 @@ -7331,7 +7334,7 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7340,12 +7343,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "GDNativeLibrary" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" @@ -8292,6 +8295,13 @@ msgid "Invalid font size." msgstr "無效字型" #, fuzzy +#~ msgid "Previous" +#~ msgstr "上一個tab" + +#~ msgid "Next" +#~ msgstr "下一個" + +#, fuzzy #~ msgid "Can't contain '/' or ':'" #~ msgstr "不能連到主機:" @@ -8299,9 +8309,6 @@ msgstr "無效字型" #~ msgid "Can't write file." #~ msgstr "無法新增資料夾" -#~ msgid "Next" -#~ msgstr "下一個" - #~ msgid "Not found!" #~ msgstr "找不到!" @@ -8452,7 +8459,7 @@ msgstr "無效字型" #~ msgid "Cannot go into subdir:" #~ msgstr "無法進入次要資料夾" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "編輯連接" #~ msgid "Live Editing" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index ccbd45bf31..38b565a37f 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -510,7 +510,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "將 '%s' 從 '%s' 中斷連接" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "連接..." #: editor/connections_dialog.cpp @@ -936,11 +936,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 @@ -1076,12 +1076,12 @@ msgid "Updating Scene" msgstr "更新場景" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "正在儲存變更.." +msgid "Storing local changes..." +msgstr "正在儲存變更..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "更新場景中.." +msgid "Updating scene..." +msgstr "更新場景中..." #: editor/editor_data.cpp msgid "[empty]" @@ -1151,7 +1151,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "新增資料夾" #: editor/editor_file_dialog.cpp @@ -1415,12 +1415,12 @@ 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 @@ -1626,11 +1626,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 @@ -1643,8 +1643,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "另存場景為.." +msgid "Save Scene As..." +msgstr "另存場景為..." #: editor/editor_node.cpp msgid "No" @@ -1696,8 +1696,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "此操作無法復原, 確定要還原嗎?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "快速執行場景.." +msgid "Quick Run Scene..." +msgstr "快速執行場景..." #: editor/editor_node.cpp msgid "Quit" @@ -1827,7 +1827,7 @@ msgstr "" #: editor/editor_node.cpp #, fuzzy msgid "Add a new scene." -msgstr "更新場景中.." +msgstr "更新場景中..." #: editor/editor_node.cpp #, fuzzy @@ -1847,8 +1847,8 @@ msgid "Previous tab" msgstr "上個分頁" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "過濾檔案.." +msgid "Filter Files..." +msgstr "過濾檔案..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1859,12 +1859,12 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "開啟場景.." +msgid "Open Scene..." +msgstr "開啟場景..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1883,15 +1883,15 @@ msgid "Open Recent" msgstr "開啟最近存取" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "轉換成.." +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 @@ -2137,7 +2137,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 @@ -2248,7 +2248,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2399,7 +2399,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 @@ -2479,7 +2479,7 @@ msgstr "載入場景時發生錯誤" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "連接..." #: editor/export_template_manager.cpp @@ -2498,7 +2498,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "連接..." #: editor/export_template_manager.cpp @@ -2513,7 +2513,7 @@ msgstr "連接..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2653,11 +2653,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 @@ -2670,16 +2670,16 @@ 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 #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製動畫關鍵畫格" #: editor/filesystem_dock.cpp @@ -2705,7 +2705,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2772,7 +2772,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2784,7 +2784,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 @@ -2800,7 +2800,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2820,7 +2820,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3112,7 +3112,7 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy msgid "Edit Filters" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3237,7 +3237,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 @@ -3245,7 +3245,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 @@ -3263,7 +3263,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "View Files" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -3314,7 +3314,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3343,8 +3343,9 @@ msgid "first" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "prev" -msgstr "" +msgstr "預覽:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "next" @@ -3382,7 +3383,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3571,6 +3572,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3997,18 +3999,18 @@ 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 #, fuzzy msgid "View UV1" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV2" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" @@ -4149,7 +4151,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "正在儲存變更.." +msgstr "正在儲存變更..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4205,7 +4207,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 @@ -4571,7 +4573,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 @@ -4669,7 +4671,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 @@ -4765,7 +4767,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert Case" -msgstr "轉換成.." +msgstr "轉換成..." #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4869,27 +4871,27 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Uppercase" -msgstr "轉換成.." +msgstr "轉換成..." #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Lowercase" -msgstr "轉換成.." +msgstr "轉換成..." #: editor/plugins/script_text_editor.cpp 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 @@ -5079,7 +5081,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Material Changes" -msgstr "正在儲存變更.." +msgstr "正在儲存變更..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" @@ -5192,7 +5194,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "View FPS" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -5346,11 +5348,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5604,7 +5602,7 @@ msgid "Remove All" msgstr "移除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5672,7 +5670,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5863,7 +5861,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5957,6 +5955,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "不能使用的名稱。" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "無法新增資料夾" @@ -6148,8 +6151,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6177,7 +6180,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 @@ -6365,7 +6368,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6427,7 +6430,7 @@ msgstr "" #: editor/project_settings_editor.cpp #, fuzzy msgid "Filter mode:" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/project_settings_editor.cpp msgid "Locales:" @@ -6462,11 +6465,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 +6499,7 @@ msgstr "" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "轉換成.." +msgstr "轉換成..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6638,7 +6641,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 @@ -6745,7 +6748,7 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy msgid "Filter nodes" -msgstr "過濾檔案.." +msgstr "過濾檔案..." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -8120,6 +8123,10 @@ msgstr "讀取字體錯誤。" msgid "Invalid font size." msgstr "無效的字體大小。" +#, fuzzy +#~ msgid "Previous" +#~ msgstr "上個分頁" + #~ msgid "Next" #~ msgstr "下一個" @@ -8138,10 +8145,6 @@ msgstr "無效的字體大小。" #~ msgid "Skip" #~ msgstr "跳過" -#, fuzzy -#~ msgid "preview" -#~ msgstr "預覽:" - #~ msgid "List:" #~ msgstr "列表:" |