summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
Diffstat (limited to 'editor')
-rw-r--r--editor/SCsub284
-rw-r--r--editor/animation_bezier_editor.cpp1183
-rw-r--r--editor/animation_bezier_editor.h141
-rw-r--r--editor/animation_editor.cpp4146
-rw-r--r--editor/animation_editor.h348
-rw-r--r--editor/animation_track_editor.cpp5032
-rw-r--r--editor/animation_track_editor.h484
-rw-r--r--editor/animation_track_editor_plugins.cpp1317
-rw-r--r--editor/animation_track_editor_plugins.h139
-rw-r--r--editor/audio_stream_preview.cpp211
-rw-r--r--editor/audio_stream_preview.h56
-rw-r--r--editor/doc/doc_data.cpp32
-rw-r--r--editor/doc/doc_data.h2
-rw-r--r--editor/editor_about.cpp54
-rw-r--r--editor/editor_about.h2
-rw-r--r--editor/editor_autoload_settings.cpp22
-rw-r--r--editor/editor_data.cpp35
-rw-r--r--editor/editor_data.h7
-rw-r--r--editor/editor_help.cpp29
-rw-r--r--editor/editor_help.h2
-rw-r--r--editor/editor_inspector.cpp28
-rw-r--r--editor/editor_inspector.h2
-rw-r--r--editor/editor_node.cpp375
-rw-r--r--editor/editor_node.h10
-rw-r--r--editor/editor_plugin.cpp10
-rw-r--r--editor/editor_plugin.h1
-rw-r--r--editor/editor_profiler.cpp23
-rw-r--r--editor/editor_profiler.h2
-rw-r--r--editor/editor_properties.cpp63
-rw-r--r--editor/editor_properties.h6
-rw-r--r--editor/editor_properties_array_dict.cpp82
-rw-r--r--editor/editor_properties_array_dict.h2
-rw-r--r--editor/editor_settings.cpp116
-rw-r--r--editor/editor_settings.h2
-rw-r--r--editor/editor_spin_slider.cpp18
-rw-r--r--editor/editor_spin_slider.h5
-rw-r--r--editor/editor_themes.cpp137
-rw-r--r--editor/filesystem_dock.cpp18
-rw-r--r--editor/find_in_files.cpp10
-rw-r--r--editor/icons/README.md4
-rw-r--r--editor/icons/icon_animation_filter.svg63
-rw-r--r--editor/icons/icon_animation_track_group.svg63
-rw-r--r--editor/icons/icon_animation_track_list.svg60
-rw-r--r--editor/icons/icon_animation_tree.svg5
-rw-r--r--editor/icons/icon_auto_end.svg68
-rw-r--r--editor/icons/icon_auto_triangle.svg64
-rw-r--r--editor/icons/icon_bezier_handles_balanced.svg98
-rw-r--r--editor/icons/icon_bezier_handles_free.svg98
-rw-r--r--editor/icons/icon_bezier_handles_mirror.svg98
-rw-r--r--editor/icons/icon_color_track_vu.svg115
-rw-r--r--editor/icons/icon_edit_bezier.svg73
-rw-r--r--editor/icons/icon_key_animation.svg65
-rw-r--r--editor/icons/icon_key_audio.svg65
-rw-r--r--editor/icons/icon_key_bezier.svg65
-rw-r--r--editor/icons/icon_key_bezier_handle.svg60
-rw-r--r--editor/icons/icon_key_bezier_point.svg64
-rw-r--r--editor/icons/icon_key_bezier_selected.svg64
-rw-r--r--editor/icons/icon_key_call.svg67
-rw-r--r--editor/icons/icon_key_selected.svg79
-rw-r--r--editor/icons/icon_key_xform.svg67
-rw-r--r--editor/icons/icon_oriented_path_follow.svg5
-rw-r--r--editor/icons/icon_play_travel.svg85
-rw-r--r--editor/icons/icon_time.svg74
-rw-r--r--editor/icons/icon_tool_add_node.svg80
-rw-r--r--editor/icons/icon_tool_connect.svg72
-rw-r--r--editor/icons/icon_tool_triangle.svg82
-rw-r--r--editor/icons/icon_track_capture.svg61
-rw-r--r--editor/icons/icon_transition_end.svg72
-rw-r--r--editor/icons/icon_transition_end_auto.svg74
-rw-r--r--editor/icons/icon_transition_end_auto_big.svg74
-rw-r--r--editor/icons/icon_transition_end_big.svg74
-rw-r--r--editor/icons/icon_transition_immediate.svg64
-rw-r--r--editor/icons/icon_transition_immediate_auto.svg64
-rw-r--r--editor/icons/icon_transition_immediate_auto_big.svg66
-rw-r--r--editor/icons/icon_transition_immediate_big.svg66
-rw-r--r--editor/icons/icon_transition_sync.svg72
-rw-r--r--editor/icons/icon_transition_sync_auto.svg74
-rw-r--r--editor/icons/icon_transition_sync_auto_big.svg74
-rw-r--r--editor/icons/icon_transition_sync_big.svg74
-rw-r--r--editor/import/editor_import_collada.cpp6
-rw-r--r--editor/import/editor_scene_importer_gltf.cpp15
-rw-r--r--editor/import/resource_importer_obj.cpp11
-rw-r--r--editor/import/resource_importer_scene.cpp50
-rw-r--r--editor/import/resource_importer_texture.cpp4
-rw-r--r--editor/inspector_dock.cpp14
-rw-r--r--editor/inspector_dock.h3
-rw-r--r--editor/plugins/animation_blend_space_1d_editor.cpp741
-rw-r--r--editor/plugins/animation_blend_space_1d_editor.h117
-rw-r--r--editor/plugins/animation_blend_space_2d_editor.cpp1023
-rw-r--r--editor/plugins/animation_blend_space_2d_editor.h130
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp848
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.h117
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp255
-rw-r--r--editor/plugins/animation_player_editor_plugin.h32
-rw-r--r--editor/plugins/animation_state_machine_editor.cpp1313
-rw-r--r--editor/plugins/animation_state_machine_editor.h167
-rw-r--r--editor/plugins/asset_library_editor_plugin.cpp1
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp120
-rw-r--r--editor/plugins/canvas_item_editor_plugin.h10
-rw-r--r--editor/plugins/editor_preview_plugins.cpp387
-rw-r--r--editor/plugins/editor_preview_plugins.h35
-rw-r--r--editor/plugins/navigation_mesh_editor_plugin.cpp166
-rw-r--r--editor/plugins/navigation_mesh_editor_plugin.h87
-rw-r--r--editor/plugins/navigation_mesh_generator.cpp308
-rw-r--r--editor/plugins/navigation_mesh_generator.h66
-rw-r--r--editor/plugins/root_motion_editor_plugin.cpp293
-rw-r--r--editor/plugins/root_motion_editor_plugin.h42
-rw-r--r--editor/plugins/script_editor_plugin.cpp128
-rw-r--r--editor/plugins/script_editor_plugin.h19
-rw-r--r--editor/plugins/script_text_editor.cpp30
-rw-r--r--editor/plugins/spatial_editor_plugin.cpp72
-rw-r--r--editor/plugins/spatial_editor_plugin.h2
-rw-r--r--editor/plugins/tile_map_editor_plugin.cpp220
-rw-r--r--editor/plugins/tile_map_editor_plugin.h13
-rw-r--r--editor/plugins/tile_set_editor_plugin.cpp4
-rw-r--r--editor/project_settings_editor.cpp162
-rw-r--r--editor/project_settings_editor.h2
-rw-r--r--editor/property_editor.cpp1
-rw-r--r--editor/property_selector.cpp62
-rw-r--r--editor/property_selector.h4
-rw-r--r--editor/scene_tree_dock.cpp20
-rw-r--r--editor/scene_tree_editor.cpp49
-rw-r--r--editor/scene_tree_editor.h4
-rw-r--r--editor/script_editor_debugger.cpp5
-rw-r--r--editor/settings_config_dialog.cpp4
-rw-r--r--editor/spatial_editor_gizmos.cpp143
-rw-r--r--editor/spatial_editor_gizmos.h19
-rw-r--r--editor/translations/af.po122
-rw-r--r--editor/translations/ar.po308
-rw-r--r--editor/translations/bg.po160
-rw-r--r--editor/translations/bn.po295
-rw-r--r--editor/translations/ca.po190
-rw-r--r--editor/translations/cs.po942
-rw-r--r--editor/translations/da.po255
-rw-r--r--editor/translations/de.po294
-rw-r--r--editor/translations/de_CH.po124
-rw-r--r--editor/translations/editor.pot15
-rw-r--r--editor/translations/el.po242
-rw-r--r--editor/translations/es.po905
-rw-r--r--editor/translations/es_AR.po294
-rw-r--r--editor/translations/fa.po144
-rw-r--r--editor/translations/fi.po2261
-rw-r--r--editor/translations/fr.po291
-rw-r--r--editor/translations/he.po132
-rw-r--r--editor/translations/hi.po124
-rw-r--r--editor/translations/hu.po279
-rw-r--r--editor/translations/id.po290
-rw-r--r--editor/translations/is.po210
-rw-r--r--editor/translations/it.po280
-rw-r--r--editor/translations/ja.po420
-rw-r--r--editor/translations/ko.po309
-rw-r--r--editor/translations/lt.po140
-rw-r--r--editor/translations/ms.po7956
-rw-r--r--editor/translations/nb.po303
-rw-r--r--editor/translations/nl.po534
-rw-r--r--editor/translations/pl.po348
-rw-r--r--editor/translations/pr.po122
-rw-r--r--editor/translations/pt_BR.po214
-rw-r--r--editor/translations/pt_PT.po226
-rw-r--r--editor/translations/ro.po1668
-rw-r--r--editor/translations/ru.po295
-rw-r--r--editor/translations/sk.po174
-rw-r--r--editor/translations/sl.po1635
-rw-r--r--editor/translations/sr_Cyrl.po133
-rw-r--r--editor/translations/sr_Latn.po131
-rw-r--r--editor/translations/sv.po283
-rw-r--r--editor/translations/ta.po121
-rw-r--r--editor/translations/th.po259
-rw-r--r--editor/translations/tr.po297
-rw-r--r--editor/translations/uk.po413
-rw-r--r--editor/translations/ur_PK.po121
-rw-r--r--editor/translations/vi.po136
-rw-r--r--editor/translations/zh_CN.po297
-rw-r--r--editor/translations/zh_HK.po167
-rw-r--r--editor/translations/zh_TW.po175
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 "列表:"