diff options
Diffstat (limited to 'editor')
109 files changed, 2245 insertions, 1323 deletions
diff --git a/editor/SCsub b/editor/SCsub index a9343f7f36..4fa287c33b 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -5,149 +5,14 @@ env.editor_sources = [] 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 - dst = target[0].srcnode().abspath - f = open(src, "rb") - g = open_utf8(dst, "w") - buf = f.read() - decomp_size = len(buf) - import zlib - buf = zlib.compress(buf) - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _CERTS_RAW_H\n") - g.write("#define _CERTS_RAW_H\n") - g.write("static const int _certs_compressed_size = " + str(len(buf)) + ";\n") - g.write("static const int _certs_uncompressed_size = " + str(decomp_size) + ";\n") - g.write("static const unsigned char _certs_compressed[] = {\n") - for i in range(len(buf)): - g.write("\t" + byte_to_str(buf[i]) + ",\n") - g.write("};\n") - g.write("#endif") - - g.close() - f.close() - - -def make_doc_header(target, source, env): - - dst = target[0].srcnode().abspath - g = open_utf8(dst, "w") - buf = "" - docbegin = "" - docend = "" - for s in source: - src = s.srcnode().abspath - if not src.endswith(".xml"): - continue - with open_utf8(src, "r") as f: - content = f.read() - buf += content - - buf = encode_utf8(docbegin + buf + docend) - decomp_size = len(buf) - import zlib - buf = zlib.compress(buf) - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _DOC_DATA_RAW_H\n") - g.write("#define _DOC_DATA_RAW_H\n") - g.write("static const int _doc_data_compressed_size = " + str(len(buf)) + ";\n") - g.write("static const int _doc_data_uncompressed_size = " + str(decomp_size) + ";\n") - g.write("static const unsigned char _doc_data_compressed[] = {\n") - for i in range(len(buf)): - g.write("\t" + byte_to_str(buf[i]) + ",\n") - g.write("};\n") - - g.write("#endif") - - g.close() - - -def make_fonts_header(target, source, env): - - dst = target[0].srcnode().abspath - - g = open_utf8(dst, "w") - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _EDITOR_FONTS_H\n") - g.write("#define _EDITOR_FONTS_H\n") - - # saving uncompressed, since freetype will reference from memory pointer - xl_names = [] - for i in range(len(source)): - with open(source[i].srcnode().abspath, "rb")as f: - buf = f.read() - - name = os.path.splitext(os.path.basename(source[i].srcnode().abspath))[0] - - g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n") - g.write("static const unsigned char _font_" + name + "[] = {\n") - for i in range(len(buf)): - g.write("\t" + byte_to_str(buf[i]) + ",\n") - - g.write("};\n") - - g.write("#endif") - - g.close() - +from platform_methods import run_in_subprocess +from compat import open_utf8 +import editor_builders -def make_translations_header(target, source, env): - - dst = target[0].srcnode().abspath - - g = open_utf8(dst, "w") - - g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - g.write("#ifndef _EDITOR_TRANSLATIONS_H\n") - g.write("#define _EDITOR_TRANSLATIONS_H\n") - - import zlib - import os.path - - paths = [node.srcnode().abspath for node in source] - sorted_paths = sorted(paths, key=lambda path: os.path.splitext(os.path.basename(path))[0]) - - xl_names = [] - for i in range(len(sorted_paths)): - with open(sorted_paths[i], "rb") as f: - buf = f.read() - decomp_size = len(buf) - buf = zlib.compress(buf) - name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] - - g.write("static const unsigned char _translation_" + name + "_compressed[] = {\n") - for i in range(len(buf)): - g.write("\t" + byte_to_str(buf[i]) + ",\n") - - g.write("};\n") - - xl_names.append([name, len(buf), str(decomp_size)]) - - g.write("struct EditorTranslationList {\n") - g.write("\tconst char* lang;\n") - g.write("\tint comp_size;\n") - g.write("\tint uncomp_size;\n") - g.write("\tconst unsigned char* data;\n") - g.write("};\n\n") - g.write("static EditorTranslationList _editor_translations[] = {\n") - for x in xl_names: - g.write("\t{ \"" + x[0] + "\", " + str(x[1]) + ", " + str(x[2]) + ", _translation_" + x[0] + "_compressed},\n") - g.write("\t{NULL, 0, 0, NULL}\n") - g.write("};\n") - - g.write("#endif") - - g.close() def _make_doc_data_class_path(to_path): - g = open_utf8(os.path.join(to_path,"doc_data_class_path.gen.h"), "w") + # NOTE: It is safe to generate this file here, since this is still executed serially + g = open_utf8(os.path.join(to_path, "doc_data_class_path.gen.h"), "w") g.write("static const int _doc_data_class_path_count = " + str(len(env.doc_class_path)) + ";\n") g.write("struct _DocDataClassPath { const char* name; const char* path; };\n") @@ -169,6 +34,8 @@ if env['tools']: reg_exporters += '\tregister_' + e + '_exporter();\n' reg_exporters_inc += '#include "platform/' + e + '/export/export.h"\n' reg_exporters += '}\n' + + # NOTE: It is safe to generate this file here, since this is still executed serially with open_utf8("register_exporters.gen.cpp", "w") as f: f.write(reg_exporters_inc) f.write(reg_exporters) @@ -192,24 +59,38 @@ if env['tools']: docs = sorted(docs) env.Depends("#editor/doc_data_compressed.gen.h", docs) - env.CommandNoCache("#editor/doc_data_compressed.gen.h", docs, make_doc_header) + env.CommandNoCache("#editor/doc_data_compressed.gen.h", docs, run_in_subprocess(editor_builders.make_doc_header)) + # Certificates env.Depends("#editor/certs_compressed.gen.h", "#thirdparty/certs/ca-certificates.crt") - env.CommandNoCache("#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", run_in_subprocess(editor_builders.make_certs_header)) import glob + path = env.Dir('.').abspath # Translations tlist = glob.glob(path + "/translations/*.po") env.Depends('#editor/translations.gen.h', tlist) - env.CommandNoCache('#editor/translations.gen.h', tlist, make_translations_header) + env.CommandNoCache('#editor/translations.gen.h', tlist, run_in_subprocess(editor_builders.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.CommandNoCache('#editor/builtin_fonts.gen.h', flist, make_fonts_header) + env.CommandNoCache('#editor/builtin_fonts.gen.h', flist, run_in_subprocess(editor_builders.make_fonts_header)) + + # Authors + env.Depends('#editor/authors.gen.h', "../AUTHORS.md") + env.CommandNoCache('#editor/authors.gen.h', "../AUTHORS.md", run_in_subprocess(editor_builders.make_authors_header)) + + # Donors + env.Depends('#editor/donors.gen.h', "../DONORS.md") + env.CommandNoCache('#editor/donors.gen.h', "../DONORS.md", run_in_subprocess(editor_builders.make_donors_header)) + + # License + env.Depends('#editor/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"]) + env.CommandNoCache('#editor/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"], run_in_subprocess(editor_builders.make_license_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_track_editor.cpp b/editor/animation_track_editor.cpp index 42d5ea120e..4c4830ad7a 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -231,10 +231,10 @@ public: 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); + args.write[idx] = Variant::construct(t, (const Variant **)ptrs, 1, err); } else { - args[idx] = Variant::construct(t, NULL, 0, err); + args.write[idx] = Variant::construct(t, NULL, 0, err); } change_notify_deserved = true; d_new["args"] = args; @@ -248,7 +248,7 @@ public: _fix_node_path(value); } - args[idx] = value; + args.write[idx] = value; d_new["args"] = args; mergeable = true; } @@ -3014,12 +3014,12 @@ PropertyInfo AnimationTrackEditor::_find_hint_for_track(int p_idx, NodePath &r_b if (res.is_valid()) { property_info_base = res; if (r_current_val) { - *r_current_val = res->get(leftover_path[leftover_path.size() - 1]); + *r_current_val = res->get_indexed(leftover_path); } } else if (node) { property_info_base = node; if (r_current_val) { - *r_current_val = node->get(leftover_path[leftover_path.size() - 1]); + *r_current_val = node->get_indexed(leftover_path); } } @@ -3053,31 +3053,31 @@ static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool subindices.push_back(""); } break; case Variant::VECTOR2: { - subindices.push_back(".x"); - subindices.push_back(".y"); + subindices.push_back(":x"); + subindices.push_back(":y"); } break; case Variant::VECTOR3: { - subindices.push_back(".x"); - subindices.push_back(".y"); - subindices.push_back(".z"); + 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"); + 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"); + 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"); + subindices.push_back(":x"); + subindices.push_back(":y"); + subindices.push_back(":z"); + subindices.push_back(":d"); } break; default: { if (r_valid) { @@ -3288,35 +3288,23 @@ void AnimationTrackEditor::_update_tracks() { if (root && root->has_node_and_resource(path)) { RES res; + NodePath base_path; Vector<StringName> leftover_path; Node *node = root->get_node_and_resource(path, res, leftover_path, true); + PropertyInfo pinfo = _find_hint_for_track(i, base_path); 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; - } + if (pinfo.name.empty()) { + pinfo.name = leftover_path[leftover_path.size() - 1]; } 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); + track_edit = track_edit_plugins.write[j]->create_value_track_edit(object, pinfo.type, pinfo.name, pinfo.hint, pinfo.hint_string, pinfo.usage); if (track_edit) { break; } @@ -3327,7 +3315,7 @@ void AnimationTrackEditor::_update_tracks() { 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(); + track_edit = track_edit_plugins.write[j]->create_audio_track_edit(); if (track_edit) { break; } @@ -3344,7 +3332,7 @@ void AnimationTrackEditor::_update_tracks() { 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); + track_edit = track_edit_plugins.write[j]->create_animation_track_edit(node); if (track_edit) { break; } diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index d0c91f10d9..6d444c5422 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -271,8 +271,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, 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); + lines.write[idx * 2 + 0] = Vector2(i, rect.position.y + min * rect.size.y); + lines.write[idx * 2 + 1] = Vector2(i, rect.position.y + max * rect.size.y); } Vector<Color> color; @@ -883,8 +883,8 @@ void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int 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); + lines.write[idx * 2 + 0] = Vector2(i, rect.position.y + min * rect.size.y); + lines.write[idx * 2 + 1] = Vector2(i, rect.position.y + max * rect.size.y); } Vector<Color> color; diff --git a/editor/audio_stream_preview.cpp b/editor/audio_stream_preview.cpp index 6ee4d7f4b0..6ae5ec43a9 100644 --- a/editor/audio_stream_preview.cpp +++ b/editor/audio_stream_preview.cpp @@ -118,8 +118,8 @@ void AudioStreamPreviewGenerator::_preview_thread(void *p_preview) { 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; + preview->preview->preview.write[(ofs_write + i) * 2 + 0] = pfrom; + preview->preview->preview.write[(ofs_write + i) * 2 + 1] = pto; } frames_todo -= to_read; diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 925f97de8e..4ce8556add 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -725,7 +725,7 @@ void CodeTextEditor::_complete_request() { int i = 0; for (List<String>::Element *E = entries.front(); E; E = E->next()) { - strs[i++] = E->get(); + strs.write[i++] = E->get(); } text_editor->code_complete(strs, forced); diff --git a/editor/collada/collada.cpp b/editor/collada/collada.cpp index 734229d014..fa7e37eb1f 100644 --- a/editor/collada/collada.cpp +++ b/editor/collada/collada.cpp @@ -191,7 +191,7 @@ Transform Collada::Node::get_global_transform() const { return default_transform; } -Vector<float> Collada::AnimationTrack::get_value_at_time(float p_time) { +Vector<float> Collada::AnimationTrack::get_value_at_time(float p_time) const { ERR_FAIL_COND_V(keys.size() == 0, Vector<float>()); int i = 0; @@ -225,22 +225,22 @@ Vector<float> Collada::AnimationTrack::get_value_at_time(float p_time) { ret.resize(16); Transform tr; // i wonder why collada matrices are transposed, given that's opposed to opengl.. - ret[0] = interp.basis.elements[0][0]; - ret[1] = interp.basis.elements[0][1]; - ret[2] = interp.basis.elements[0][2]; - ret[4] = interp.basis.elements[1][0]; - ret[5] = interp.basis.elements[1][1]; - ret[6] = interp.basis.elements[1][2]; - ret[8] = interp.basis.elements[2][0]; - ret[9] = interp.basis.elements[2][1]; - ret[10] = interp.basis.elements[2][2]; - ret[3] = interp.origin.x; - ret[7] = interp.origin.y; - ret[11] = interp.origin.z; - ret[12] = 0; - ret[13] = 0; - ret[14] = 0; - ret[15] = 1; + ret.write[0] = interp.basis.elements[0][0]; + ret.write[1] = interp.basis.elements[0][1]; + ret.write[2] = interp.basis.elements[0][2]; + ret.write[4] = interp.basis.elements[1][0]; + ret.write[5] = interp.basis.elements[1][1]; + ret.write[6] = interp.basis.elements[1][2]; + ret.write[8] = interp.basis.elements[2][0]; + ret.write[9] = interp.basis.elements[2][1]; + ret.write[10] = interp.basis.elements[2][2]; + ret.write[3] = interp.origin.x; + ret.write[7] = interp.origin.y; + ret.write[11] = interp.origin.z; + ret.write[12] = 0; + ret.write[13] = 0; + ret.write[14] = 0; + ret.write[15] = 1; return ret; } else { @@ -249,7 +249,7 @@ Vector<float> Collada::AnimationTrack::get_value_at_time(float p_time) { dest.resize(keys[i].data.size()); for (int j = 0; j < dest.size(); j++) { - dest[j] = keys[i].data[j] * c + keys[i - 1].data[j] * (1.0 - c); + dest.write[j] = keys[i].data[j] * c + keys[i - 1].data[j] * (1.0 - c); } return dest; //interpolate one by one @@ -452,7 +452,7 @@ Transform Collada::_read_transform(XMLParser &parser) { Vector<float> farr; farr.resize(16); for (int i = 0; i < 16; i++) { - farr[i] = array[i].to_double(); + farr.write[i] = array[i].to_double(); } return _read_transform_from_array(farr); @@ -1104,7 +1104,7 @@ void Collada::_parse_mesh_geometry(XMLParser &parser, String p_id, String p_name int from = prim.indices.size(); prim.indices.resize(from + values.size()); for (int i = 0; i < values.size(); i++) - prim.indices[from + i] = values[i]; + prim.indices.write[from + i] = values[i]; } else if (prim.vertex_size > 0) { prim.indices = values; @@ -1884,7 +1884,7 @@ void Collada::_parse_animation(XMLParser &parser) { track.keys.resize(key_count); for (int j = 0; j < key_count; j++) { - track.keys[j].time = time_keys[j]; + track.keys.write[j].time = time_keys[j]; state.animation_length = MAX(state.animation_length, time_keys[j]); } @@ -1905,9 +1905,9 @@ void Collada::_parse_animation(XMLParser &parser) { ERR_CONTINUE((output.size() / stride) != key_count); for (int j = 0; j < key_count; j++) { - track.keys[j].data.resize(output_len); + track.keys.write[j].data.resize(output_len); for (int k = 0; k < output_len; k++) - track.keys[j].data[k] = output[l + j * stride + k]; //super weird but should work: + track.keys.write[j].data.write[k] = output[l + j * stride + k]; //super weird but should work: } if (sampler.has("INTERPOLATION")) { @@ -1919,9 +1919,9 @@ void Collada::_parse_animation(XMLParser &parser) { for (int j = 0; j < key_count; j++) { if (interps[j] == "BEZIER") - track.keys[j].interp_type = AnimationTrack::INTERP_BEZIER; + track.keys.write[j].interp_type = AnimationTrack::INTERP_BEZIER; else - track.keys[j].interp_type = AnimationTrack::INTERP_LINEAR; + track.keys.write[j].interp_type = AnimationTrack::INTERP_LINEAR; } } @@ -1939,8 +1939,8 @@ void Collada::_parse_animation(XMLParser &parser) { ERR_CONTINUE(outangents.size() != key_count * 2 * names.size()); for (int j = 0; j < key_count; j++) { - track.keys[j].in_tangent = Vector2(intangents[j * 2 * names.size() + 0 + l * 2], intangents[j * 2 * names.size() + 1 + l * 2]); - track.keys[j].out_tangent = Vector2(outangents[j * 2 * names.size() + 0 + l * 2], outangents[j * 2 * names.size() + 1 + l * 2]); + track.keys.write[j].in_tangent = Vector2(intangents[j * 2 * names.size() + 0 + l * 2], intangents[j * 2 * names.size() + 1 + l * 2]); + track.keys.write[j].out_tangent = Vector2(outangents[j * 2 * names.size() + 0 + l * 2], outangents[j * 2 * names.size() + 1 + l * 2]); } } @@ -2118,7 +2118,7 @@ void Collada::_joint_set_owner(Collada::Node *p_node, NodeSkeleton *p_owner) { for (int i = 0; i < nj->children.size(); i++) { - _joint_set_owner(nj->children[i], p_owner); + _joint_set_owner(nj->children.write[i], p_owner); } } } @@ -2147,7 +2147,7 @@ void Collada::_create_skeletons(Collada::Node **p_node, NodeSkeleton *p_skeleton } for (int i = 0; i < node->children.size(); i++) { - _create_skeletons(&node->children[i], p_skeleton); + _create_skeletons(&node->children.write[i], p_skeleton); } } @@ -2314,7 +2314,7 @@ bool Collada::_optimize_skeletons(VisualScene *p_vscene, Node *p_node) { for (int i = 0; i < gp->children.size(); i++) { if (gp->children[i] == parent) { - gp->children[i] = node; + gp->children.write[i] = node; found = true; break; } @@ -2330,7 +2330,7 @@ bool Collada::_optimize_skeletons(VisualScene *p_vscene, Node *p_node) { if (p_vscene->root_nodes[i] == parent) { - p_vscene->root_nodes[i] = node; + p_vscene->root_nodes.write[i] = node; found = true; break; } @@ -2466,7 +2466,7 @@ void Collada::_optimize() { VisualScene &vs = E->get(); for (int i = 0; i < vs.root_nodes.size(); i++) { - _create_skeletons(&vs.root_nodes[i]); + _create_skeletons(&vs.root_nodes.write[i]); } for (int i = 0; i < vs.root_nodes.size(); i++) { diff --git a/editor/collada/collada.h b/editor/collada/collada.h index ec3284bc5c..7535162f74 100644 --- a/editor/collada/collada.h +++ b/editor/collada/collada.h @@ -312,7 +312,7 @@ public: total += weights[i].weight; if (total) for (int i = 0; i < 4; i++) - weights[i].weight /= total; + weights.write[i].weight /= total; } } @@ -515,7 +515,7 @@ public: Key() { interp_type = INTERP_LINEAR; } }; - Vector<float> get_value_at_time(float p_time); + Vector<float> get_value_at_time(float p_time) const; Vector<Key> keys; diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index c4f4e28fec..da73a3930a 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -51,7 +51,7 @@ public: if (name.begins_with("bind/")) { int which = name.get_slice("/", 1).to_int() - 1; ERR_FAIL_INDEX_V(which, params.size(), false); - params[which] = p_value; + params.write[which] = p_value; } else return false; diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 6b2a072e20..3e0c1f2d53 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -40,6 +40,11 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { + type_list.clear(); + ClassDB::get_class_list(&type_list); + ScriptServer::get_global_class_list(&type_list); + type_list.sort_custom<StringName::AlphCompare>(); + recent->clear(); FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("create_recent." + base_type), FileAccess::READ); @@ -173,10 +178,28 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p if (p_types.has(p_type)) return; - if (!ClassDB::is_parent_class(p_type, base_type) || p_type == base_type) + + bool cpp_type = ClassDB::class_exists(p_type); + EditorData &ed = EditorNode::get_singleton()->get_editor_data(); + + if (p_type == base_type) return; - String inherits = ClassDB::get_parent_class(p_type); + if (cpp_type) { + if (!ClassDB::is_parent_class(p_type, base_type)) + return; + } else { + if (!ScriptServer::is_global_class(p_type) || !ed.script_class_is_parent(p_type, base_type)) + return; + + String script_path = ScriptServer::get_global_class_path(p_type); + if (script_path.find("res://addons/", 0) != -1) { + if (!EditorNode::get_singleton()->is_addon_plugin_enabled(script_path.get_slicec('/', 3))) + return; + } + } + + String inherits = cpp_type ? ClassDB::get_parent_class(p_type) : ed.script_class_get_base(p_type); TreeItem *parent = p_root; @@ -189,17 +212,32 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p if (p_types.has(inherits)) parent = p_types[inherits]; + else if (ScriptServer::is_global_class(inherits)) + return; } + bool can_instance = (cpp_type && ClassDB::can_instance(p_type)) || ScriptServer::is_global_class(p_type); + TreeItem *item = search_options->create_item(parent); - item->set_text(0, p_type); - if (!ClassDB::can_instance(p_type)) { + if (cpp_type) { + item->set_text(0, p_type); + } else { + item->set_metadata(0, p_type); + item->set_text(0, p_type + " (" + ScriptServer::get_global_class_path(p_type).get_file() + ")"); + } + if (!can_instance) { item->set_custom_color(0, get_color("disabled_font_color", "Editor")); item->set_selectable(0, false); } else { bool is_search_subsequence = search_box->get_text().is_subsequence_ofi(p_type); String to_select_type = *to_select ? (*to_select)->get_text(0) : ""; - bool current_item_is_preffered = ClassDB::is_parent_class(p_type, preferred_search_result_type) && !ClassDB::is_parent_class(to_select_type, preferred_search_result_type); + to_select_type = to_select_type.split(" ")[0]; + bool current_item_is_preffered; + if (cpp_type) { + current_item_is_preffered = ClassDB::is_parent_class(p_type, preferred_search_result_type) && !ClassDB::is_parent_class(to_select_type, preferred_search_result_type); + } else { + current_item_is_preffered = ed.script_class_is_parent(p_type, preferred_search_result_type) && !ed.script_class_is_parent(to_select_type, preferred_search_result_type); + } if (*to_select && p_type.length() < (*to_select)->get_text(0).length()) { current_item_is_preffered = true; } @@ -217,16 +255,19 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p // don't collapse the root node collapse &= (item != p_root); // don't collapse abstract nodes on the first tree level - collapse &= ((parent != p_root) || (ClassDB::can_instance(p_type))); + collapse &= ((parent != p_root) || (can_instance)); item->set_collapsed(collapse); } const String &description = EditorHelp::get_doc_data()->class_list[p_type].brief_description; item->set_tooltip(0, description); - if (has_icon(p_type, "EditorIcons")) { + if (cpp_type && has_icon(p_type, "EditorIcons")) { item->set_icon(0, get_icon(p_type, "EditorIcons")); + } else if (!cpp_type && has_icon(ScriptServer::get_global_class_base(p_type), "EditorIcons")) { + + item->set_icon(0, get_icon(ScriptServer::get_global_class_base(p_type), "EditorIcons")); } p_types[p_type] = item; @@ -243,47 +284,38 @@ void CreateDialog::_update_search() { _parse_fs(EditorFileSystem::get_singleton()->get_filesystem()); */ - List<StringName> global_classes; - ScriptServer::get_global_class_list(&global_classes); - - Map<String, List<String> > global_class_map; - for (List<StringName>::Element *E = global_classes.front(); E; E = E->next()) { - String base = ScriptServer::get_global_class_base(E->get()); - if (!global_class_map.has(base)) { - global_class_map[base] = List<String>(); - } - global_class_map[base].push_back(E->get()); - } - HashMap<String, TreeItem *> types; TreeItem *root = search_options->create_item(); + EditorData &ed = EditorNode::get_singleton()->get_editor_data(); root->set_text(0, base_type); if (has_icon(base_type, "EditorIcons")) { root->set_icon(0, get_icon(base_type, "EditorIcons")); } - List<StringName>::Element *I = type_list.front(); TreeItem *to_select = search_box->get_text() == base_type ? root : NULL; - for (; I; I = I->next()) { + for (List<StringName>::Element *I = type_list.front(); I; I = I->next()) { String type = I->get(); + bool cpp_type = ClassDB::class_exists(type); if (base_type == "Node" && type.begins_with("Editor")) continue; // do not show editor nodes - if (!ClassDB::can_instance(type)) + if (cpp_type && !ClassDB::can_instance(type)) continue; // can't create what can't be instanced bool skip = false; - for (Set<StringName>::Element *E = type_blacklist.front(); E && !skip; E = E->next()) { - if (ClassDB::is_parent_class(type, E->get())) - skip = true; + if (cpp_type) { + for (Set<StringName>::Element *E = type_blacklist.front(); E && !skip; E = E->next()) { + if (ClassDB::is_parent_class(type, E->get())) + skip = true; + } + if (skip) + continue; } - if (skip) - continue; if (search_box->get_text() == "") { add_type(type, types, root, &to_select); @@ -291,7 +323,7 @@ void CreateDialog::_update_search() { bool found = false; String type = I->get(); - while (type != "" && ClassDB::is_parent_class(type, base_type) && type != base_type) { + while (type != "" && (cpp_type ? ClassDB::is_parent_class(type, base_type) : ed.script_class_is_parent(type, base_type)) && type != base_type) { if (search_box->get_text().is_subsequence_ofi(type)) { found = true; @@ -305,32 +337,6 @@ void CreateDialog::_update_search() { add_type(I->get(), types, root, &to_select); } - if (global_class_map.has(type) && ClassDB::is_parent_class(type, base_type)) { - for (List<String>::Element *J = global_class_map[type].front(); J; J = J->next()) { - bool show = search_box->get_text().is_subsequence_ofi(J->get()); - - if (!show) - continue; - - if (!types.has(type)) - add_type(type, types, root, &to_select); - - TreeItem *ti; - if (types.has(type)) - ti = types[type]; - else - ti = search_options->get_root(); - - TreeItem *item = search_options->create_item(ti); - item->set_metadata(0, J->get()); - item->set_text(0, J->get() + " (" + ScriptServer::get_global_class_path(J->get()).get_file() + ")"); - item->set_icon(0, _get_editor_icon(type)); - if (!to_select || J->get() == search_box->get_text()) { - to_select = item; - } - } - } - if (EditorNode::get_editor_data().get_custom_types().has(type) && ClassDB::is_parent_class(type, base_type)) { //there are custom types based on this... cool. @@ -694,9 +700,6 @@ CreateDialog::CreateDialog() { is_replace_mode = false; - ClassDB::get_class_list(&type_list); - type_list.sort_custom<StringName::AlphCompare>(); - set_resizable(true); HSplitContainer *hsc = memnew(HSplitContainer); @@ -762,4 +765,6 @@ CreateDialog::CreateDialog() { type_blacklist.insert("PluginScript"); // PluginScript must be initialized before use, which is not possible here type_blacklist.insert("ScriptCreateDialog"); // This is an exposed editor Node that doesn't have an Editor prefix. + + EDITOR_DEF("interface/editors/derive_script_globals_by_name", true); } diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index 542dca74e0..2803762973 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -58,7 +58,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods[i]; + MethodDoc &m = c.methods.write[i]; for (int j = 0; j < cf.methods.size(); j++) { @@ -72,13 +72,13 @@ void DocData::merge_from(const DocData &p_data) { Vector<bool> arg_used; arg_used.resize(arg_count); for (int l = 0; l < arg_count; ++l) - arg_used[l] = false; + arg_used.write[l] = false; // also there is no guarantee that argument ordering will match, so we // have to check one by one so we make sure we have an exact match for (int k = 0; k < arg_count; ++k) { for (int l = 0; l < arg_count; ++l) if (cf.methods[j].arguments[k].type == m.arguments[l].type && !arg_used[l]) { - arg_used[l] = true; + arg_used.write[l] = true; break; } } @@ -98,7 +98,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals[i]; + MethodDoc &m = c.signals.write[i]; for (int j = 0; j < cf.signals.size(); j++) { @@ -113,7 +113,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &m = c.constants[i]; + ConstantDoc &m = c.constants.write[i]; for (int j = 0; j < cf.constants.size(); j++) { @@ -128,7 +128,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.properties.size(); i++) { - PropertyDoc &p = c.properties[i]; + PropertyDoc &p = c.properties.write[i]; for (int j = 0; j < cf.properties.size(); j++) { @@ -146,7 +146,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties[i]; + PropertyDoc &p = c.theme_properties.write[i]; for (int j = 0; j < cf.theme_properties.size(); j++) { @@ -1020,7 +1020,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods[i]; + const MethodDoc &m = c.methods[i]; String qualifiers; if (m.qualifiers != "") @@ -1040,7 +1040,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int j = 0; j < m.arguments.size(); j++) { - ArgumentDoc &a = m.arguments[j]; + const ArgumentDoc &a = m.arguments[j]; String enum_text; if (a.enumeration != String()) { @@ -1075,7 +1075,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri if (c.properties[i].enumeration != String()) { enum_text = " enum=\"" + c.properties[i].enumeration + "\""; } - PropertyDoc &p = c.properties[i]; + const PropertyDoc &p = c.properties[i]; _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\"" + enum_text + ">"); _write_string(f, 3, p.description.strip_edges().xml_escape()); _write_string(f, 2, "</member>"); @@ -1090,11 +1090,11 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<signals>"); for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals[i]; + const MethodDoc &m = c.signals[i]; _write_string(f, 2, "<signal name=\"" + m.name + "\">"); for (int j = 0; j < m.arguments.size(); j++) { - ArgumentDoc &a = m.arguments[j]; + const ArgumentDoc &a = m.arguments[j]; _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\">"); _write_string(f, 3, "</argument>"); } @@ -1113,7 +1113,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &k = c.constants[i]; + const ConstantDoc &k = c.constants[i]; if (k.enumeration != String()) { _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); } else { @@ -1132,7 +1132,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<theme_items>"); for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties[i]; + const PropertyDoc &p = c.theme_properties[i]; _write_string(f, 2, "<theme_item name=\"" + p.name + "\" type=\"" + p.type + "\">"); _write_string(f, 2, "</theme_item>"); } diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 2f0982e5d9..d12c85861b 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -598,7 +598,7 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & int i = 0; for (List<AutoLoadInfo>::Element *E = autoload_cache.front(); E; E = E->next()) { - orders[i++] = E->get().order; + orders.write[i++] = E->get().order; } orders.sort(); diff --git a/editor/editor_builders.py b/editor/editor_builders.py new file mode 100644 index 0000000000..6c2f9e298e --- /dev/null +++ b/editor/editor_builders.py @@ -0,0 +1,412 @@ +"""Functions used to generate source files during build time + +All such functions are invoked in a subprocess on Windows to prevent build flakiness. + +""" +import os +import os.path +from platform_methods import subprocess_main +from compat import encode_utf8, byte_to_str, open_utf8, escape_string + + +def make_certs_header(target, source, env): + + src = source[0] + dst = target[0] + f = open(src, "rb") + g = open_utf8(dst, "w") + buf = f.read() + decomp_size = len(buf) + import zlib + buf = zlib.compress(buf) + + g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") + g.write("#ifndef _CERTS_RAW_H\n") + g.write("#define _CERTS_RAW_H\n") + g.write("static const int _certs_compressed_size = " + str(len(buf)) + ";\n") + g.write("static const int _certs_uncompressed_size = " + str(decomp_size) + ";\n") + g.write("static const unsigned char _certs_compressed[] = {\n") + for i in range(len(buf)): + g.write("\t" + byte_to_str(buf[i]) + ",\n") + g.write("};\n") + g.write("#endif") + + g.close() + f.close() + + +def make_doc_header(target, source, env): + + dst = target[0] + g = open_utf8(dst, "w") + buf = "" + docbegin = "" + docend = "" + for src in source: + if not src.endswith(".xml"): + continue + with open_utf8(src, "r") as f: + content = f.read() + buf += content + + buf = encode_utf8(docbegin + buf + docend) + decomp_size = len(buf) + import zlib + buf = zlib.compress(buf) + + g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") + g.write("#ifndef _DOC_DATA_RAW_H\n") + g.write("#define _DOC_DATA_RAW_H\n") + g.write("static const int _doc_data_compressed_size = " + str(len(buf)) + ";\n") + g.write("static const int _doc_data_uncompressed_size = " + str(decomp_size) + ";\n") + g.write("static const unsigned char _doc_data_compressed[] = {\n") + for i in range(len(buf)): + g.write("\t" + byte_to_str(buf[i]) + ",\n") + g.write("};\n") + + g.write("#endif") + + g.close() + + +def make_fonts_header(target, source, env): + + dst = target[0] + + g = open_utf8(dst, "w") + + g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") + g.write("#ifndef _EDITOR_FONTS_H\n") + g.write("#define _EDITOR_FONTS_H\n") + + # saving uncompressed, since freetype will reference from memory pointer + xl_names = [] + for i in range(len(source)): + with open(source[i], "rb")as f: + buf = f.read() + + name = os.path.splitext(os.path.basename(source[i]))[0] + + g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n") + g.write("static const unsigned char _font_" + name + "[] = {\n") + for i in range(len(buf)): + g.write("\t" + byte_to_str(buf[i]) + ",\n") + + g.write("};\n") + + g.write("#endif") + + g.close() + + +def make_translations_header(target, source, env): + + dst = target[0] + + g = open_utf8(dst, "w") + + g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") + g.write("#ifndef _EDITOR_TRANSLATIONS_H\n") + g.write("#define _EDITOR_TRANSLATIONS_H\n") + + import zlib + import os.path + + sorted_paths = sorted(source, key=lambda path: os.path.splitext(os.path.basename(path))[0]) + + xl_names = [] + for i in range(len(sorted_paths)): + with open(sorted_paths[i], "rb") as f: + buf = f.read() + decomp_size = len(buf) + buf = zlib.compress(buf) + name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] + + g.write("static const unsigned char _translation_" + name + "_compressed[] = {\n") + for i in range(len(buf)): + g.write("\t" + byte_to_str(buf[i]) + ",\n") + + g.write("};\n") + + xl_names.append([name, len(buf), str(decomp_size)]) + + g.write("struct EditorTranslationList {\n") + g.write("\tconst char* lang;\n") + g.write("\tint comp_size;\n") + g.write("\tint uncomp_size;\n") + g.write("\tconst unsigned char* data;\n") + g.write("};\n\n") + g.write("static EditorTranslationList _editor_translations[] = {\n") + for x in xl_names: + g.write("\t{ \"" + x[0] + "\", " + str(x[1]) + ", " + str(x[2]) + ", _translation_" + x[0] + "_compressed},\n") + g.write("\t{NULL, 0, 0, NULL}\n") + g.write("};\n") + + g.write("#endif") + + 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] + dst = target[0] + 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] + dst = target[0] + 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] + src_license = source[1] + dst = target[0] + 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() + + +if __name__ == '__main__': + subprocess_main(globals()) diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 4dde893c6d..f4ef11eb36 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -62,7 +62,7 @@ void EditorHistory::cleanup_history() { fail = true; } else { //after level, clip - history[i].path.resize(j); + history.write[i].path.resize(j); } break; @@ -100,14 +100,14 @@ void EditorHistory::_add_object(ObjectID p_object, const String &p_property, int if (p_property != "" && has_prev) { //add a sub property - History &pr = history[current]; + History &pr = history.write[current]; h = pr; h.path.resize(h.level + 1); h.path.push_back(o); h.level++; } else if (p_level_change != -1 && has_prev) { //add a sub property - History &pr = history[current]; + History &pr = history.write[current]; h = pr; ERR_FAIL_INDEX(p_level_change, h.path.size()); h.level = p_level_change; @@ -206,7 +206,7 @@ ObjectID EditorHistory::get_current() { if (current < 0 || current >= history.size()) return 0; - History &h = history[current]; + History &h = history.write[current]; Object *obj = ObjectDB::get_instance(h.path[h.level].object); if (!obj) return 0; @@ -558,7 +558,7 @@ void EditorData::move_edited_scene_index(int p_idx, int p_to_idx) { ERR_FAIL_INDEX(p_idx, edited_scene.size()); ERR_FAIL_INDEX(p_to_idx, edited_scene.size()); - SWAP(edited_scene[p_idx], edited_scene[p_to_idx]); + SWAP(edited_scene.write[p_idx], edited_scene.write[p_to_idx]); } void EditorData::remove_scene(int p_idx) { ERR_FAIL_INDEX(p_idx, edited_scene.size()); @@ -644,7 +644,7 @@ bool EditorData::check_and_update_scene(int p_idx) { //transfer selection List<Node *> new_selection; - for (List<Node *>::Element *E = edited_scene[p_idx].selection.front(); E; E = E->next()) { + for (List<Node *>::Element *E = edited_scene.write[p_idx].selection.front(); E; E = E->next()) { NodePath p = edited_scene[p_idx].root->get_path_to(E->get()); Node *new_node = new_scene->get_node(p); if (new_node) @@ -654,8 +654,8 @@ bool EditorData::check_and_update_scene(int p_idx) { new_scene->set_filename(edited_scene[p_idx].root->get_filename()); memdelete(edited_scene[p_idx].root); - edited_scene[p_idx].root = new_scene; - edited_scene[p_idx].selection = new_selection; + edited_scene.write[p_idx].root = new_scene; + edited_scene.write[p_idx].selection = new_selection; return true; } @@ -685,7 +685,7 @@ Node *EditorData::get_edited_scene_root(int p_idx) { void EditorData::set_edited_scene_root(Node *p_root) { ERR_FAIL_INDEX(current_edited_scene, edited_scene.size()); - edited_scene[current_edited_scene].root = p_root; + edited_scene.write[current_edited_scene].root = p_root; } int EditorData::get_edited_scene_count() const { @@ -707,10 +707,10 @@ Vector<EditorData::EditedScene> EditorData::get_edited_scenes() const { void EditorData::set_edited_scene_version(uint64_t version, int p_scene_idx) { ERR_FAIL_INDEX(current_edited_scene, edited_scene.size()); if (p_scene_idx < 0) { - edited_scene[current_edited_scene].version = version; + edited_scene.write[current_edited_scene].version = version; } else { ERR_FAIL_INDEX(p_scene_idx, edited_scene.size()); - edited_scene[p_scene_idx].version = version; + edited_scene.write[p_scene_idx].version = version; } } @@ -793,7 +793,7 @@ String EditorData::get_scene_path(int p_idx) const { void EditorData::set_edited_scene_live_edit_root(const NodePath &p_root) { ERR_FAIL_INDEX(current_edited_scene, edited_scene.size()); - edited_scene[current_edited_scene].live_edit_root = p_root; + edited_scene.write[current_edited_scene].live_edit_root = p_root; } NodePath EditorData::get_edited_scene_live_edit_root() { @@ -806,7 +806,7 @@ void EditorData::save_edited_scene_state(EditorSelection *p_selection, EditorHis ERR_FAIL_INDEX(current_edited_scene, edited_scene.size()); - EditedScene &es = edited_scene[current_edited_scene]; + EditedScene &es = edited_scene.write[current_edited_scene]; es.selection = p_selection->get_selected_node_list(); es.history_current = p_history->current; es.history_stored = p_history->history; @@ -817,7 +817,7 @@ void EditorData::save_edited_scene_state(EditorSelection *p_selection, EditorHis Dictionary EditorData::restore_edited_scene_state(EditorSelection *p_selection, EditorHistory *p_history) { ERR_FAIL_INDEX_V(current_edited_scene, edited_scene.size(), Dictionary()); - EditedScene &es = edited_scene[current_edited_scene]; + EditedScene &es = edited_scene.write[current_edited_scene]; p_history->current = es.history_current; p_history->history = es.history_stored; @@ -853,6 +853,41 @@ void EditorData::get_plugin_window_layout(Ref<ConfigFile> p_layout) { } } +bool EditorData::script_class_is_parent(const String &p_class, const String &p_inherits) { + if (!ScriptServer::is_global_class(p_class)) + return false; + String base = script_class_get_base(p_class); + while (p_inherits != base) { + if (ClassDB::class_exists(base)) { + return ClassDB::is_parent_class(base, p_inherits); + } else if (ScriptServer::is_global_class(base)) { + base = script_class_get_base(base); + } else { + return false; + } + } + return true; +} + +StringName EditorData::script_class_get_base(const String &p_class) { + + if (!ScriptServer::is_global_class(p_class)) + return StringName(); + + String path = ScriptServer::get_global_class_path(p_class); + + Ref<Script> script = ResourceLoader::load(path, "Script"); + if (script.is_null()) + return StringName(); + + Ref<Script> base_script = script->get_base_script(); + if (base_script.is_null()) { + return ScriptServer::get_global_class_base(p_class); + } + + return script->get_language()->get_global_class_name(base_script->get_path()); +} + EditorData::EditorData() { current_edited_scene = -1; diff --git a/editor/editor_data.h b/editor/editor_data.h index 0ecef8ae31..fac6635cd2 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -211,6 +211,9 @@ public: void notify_edited_scene_changed(); void notify_resource_saved(const Ref<Resource> &p_resource); + bool script_class_is_parent(const String &p_class, const String &p_inherits); + StringName script_class_get_base(const String &p_class); + EditorData(); }; diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 317fffad64..5c911a00ca 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -187,7 +187,7 @@ void EditorExportPreset::remove_patch(int p_idx) { void EditorExportPreset::set_patch(int p_index, const String &p_path) { ERR_FAIL_INDEX(p_index, patches.size()); - patches[p_index] = p_path; + patches.write[p_index] = p_path; EditorExport::singleton->save_presets(); } String EditorExportPreset::get_patch(int p_index) { @@ -295,7 +295,7 @@ Error EditorExportPlatform::_save_pack_file(void *p_userdata, const String &p_pa MD5Final(&ctx); sd.md5.resize(16); for (int i = 0; i < 16; i++) { - sd.md5[i] = ctx.digest[i]; + sd.md5.write[i] = ctx.digest[i]; } } @@ -584,9 +584,9 @@ EditorExportPlatform::ExportNotifier::ExportNotifier(EditorExportPlatform &p_pla //initial export plugin callback for (int i = 0; i < export_plugins.size(); i++) { if (export_plugins[i]->get_script_instance()) { //script based - export_plugins[i]->_export_begin_script(features.features_pv, p_debug, p_path, p_flags); + export_plugins.write[i]->_export_begin_script(features.features_pv, p_debug, p_path, p_flags); } else { - export_plugins[i]->_export_begin(features.features, p_debug, p_path, p_flags); + export_plugins.write[i]->_export_begin(features.features, p_debug, p_path, p_flags); } } } @@ -594,7 +594,7 @@ EditorExportPlatform::ExportNotifier::ExportNotifier(EditorExportPlatform &p_pla EditorExportPlatform::ExportNotifier::~ExportNotifier() { Vector<Ref<EditorExportPlugin> > export_plugins = EditorExport::get_singleton()->get_export_plugins(); for (int i = 0; i < export_plugins.size(); i++) { - export_plugins[i]->_export_end(); + export_plugins.write[i]->_export_end(); } } @@ -632,7 +632,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & p_func(p_udata, export_plugins[i]->extra_files[j].path, export_plugins[i]->extra_files[j].data, 0, paths.size()); } - export_plugins[i]->_clear(); + export_plugins.write[i]->_clear(); } FeatureContainers feature_containers = get_feature_containers(p_preset); @@ -687,9 +687,9 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & bool do_export = true; for (int i = 0; i < export_plugins.size(); i++) { if (export_plugins[i]->get_script_instance()) { //script based - export_plugins[i]->_export_file_script(path, type, features_pv); + export_plugins.write[i]->_export_file_script(path, type, features_pv); } else { - export_plugins[i]->_export_file(path, type, features); + export_plugins.write[i]->_export_file(path, type, features); } if (p_so_func) { for (int j = 0; j < export_plugins[i]->shared_objects.size(); j++) { @@ -709,7 +709,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & if (export_plugins[i]->skipped) { do_export = false; } - export_plugins[i]->_clear(); + export_plugins.write[i]->_clear(); if (!do_export) break; //apologies, not exporting @@ -751,7 +751,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & Vector<uint8_t> new_file; new_file.resize(utf8.length()); for (int j = 0; j < utf8.length(); j++) { - new_file[j] = utf8[j]; + new_file.write[j] = utf8[j]; } p_func(p_udata, from + ".remap", new_file, idx, total); @@ -1130,7 +1130,7 @@ void EditorExport::load_config() { for (int i = 0; i < export_platforms.size(); i++) { if (export_platforms[i]->get_name() == platform) { - preset = export_platforms[i]->create_preset(); + preset = export_platforms.write[i]->create_preset(); break; } } @@ -1203,7 +1203,7 @@ bool EditorExport::poll_export_platforms() { bool changed = false; for (int i = 0; i < export_platforms.size(); i++) { - if (export_platforms[i]->poll_devices()) { + if (export_platforms.write[i]->poll_devices()) { changed = true; } } diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 8a8a21543b..7d56c4985a 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -1135,7 +1135,7 @@ void EditorFileDialog::_favorite_move_up() { if (a_idx == -1 || b_idx == -1) return; - SWAP(favorited[a_idx], favorited[b_idx]); + SWAP(favorited.write[a_idx], favorited.write[b_idx]); EditorSettings::get_singleton()->set_favorite_dirs(favorited); @@ -1155,7 +1155,7 @@ void EditorFileDialog::_favorite_move_down() { if (a_idx == -1 || b_idx == -1) return; - SWAP(favorited[a_idx], favorited[b_idx]); + SWAP(favorited.write[a_idx], favorited.write[b_idx]); EditorSettings::get_singleton()->set_favorite_dirs(favorited); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index b366ebd911..20e8a7915f 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -946,8 +946,6 @@ void EditorNode::_save_scene_with_preview(String p_file, int p_idx) { int x = (img->get_width() - vp_size) / 2; int y = (img->get_height() - vp_size) / 2; - img->convert(Image::FORMAT_RGB8); - if (vp_size < preview_size) { // just square it. img->crop_from_point(x, y, vp_size, vp_size); @@ -962,6 +960,7 @@ void EditorNode::_save_scene_with_preview(String p_file, int p_idx) { // We could get better pictures with better filters img->resize(preview_size, preview_size, Image::INTERPOLATE_CUBIC); } + img->convert(Image::FORMAT_RGB8); img->flip_y(); @@ -1502,7 +1501,7 @@ void EditorNode::_edit_current() { if (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 (main_plugin->get_name() == "Script" && current_obj->get_class_name() != StringName("VisualScript") && (bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor")) || overrides_external_editor(current_obj))) { if (!changing_scene) main_plugin->edit(current_obj); } @@ -2047,6 +2046,10 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { project_settings->popup_project_settings(); } break; + case RUN_PROJECT_DATA_FOLDER: { + + OS::get_singleton()->shell_open(OS::get_singleton()->get_user_data_dir()); + } break; case FILE_QUIT: case RUN_PROJECT_MANAGER: { @@ -2179,6 +2182,14 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { settings_config_dialog->popup_edit_settings(); } break; + case SETTINGS_EDITOR_DATA_FOLDER: { + + OS::get_singleton()->shell_open(EditorSettings::get_singleton()->get_data_dir()); + } break; + case SETTINGS_EDITOR_CONFIG_FOLDER: { + + OS::get_singleton()->shell_open(EditorSettings::get_singleton()->get_settings_dir()); + } break; case SETTINGS_MANAGE_EXPORT_TEMPLATES: { export_template_manager->popup_manager(); @@ -3935,7 +3946,7 @@ void EditorNode::raise_bottom_panel_item(Control *p_item) { if (bottom_panel_items[i].control == p_item) { bottom_panel_items[i].button->raise(); - SWAP(bottom_panel_items[i], bottom_panel_items[bottom_panel_items.size() - 1]); + SWAP(bottom_panel_items.write[i], bottom_panel_items.write[bottom_panel_items.size() - 1]); break; } } @@ -5078,6 +5089,9 @@ EditorNode::EditorNode() { tool_menu->add_item(TTR("Orphan Resource Explorer"), TOOLS_ORPHAN_RESOURCES); p->add_separator(); + p->add_item(TTR("Open Project Data Folder"), RUN_PROJECT_DATA_FOLDER); + p->add_separator(); + #ifdef OSX_ENABLED p->add_item(TTR("Quit to Project List"), RUN_PROJECT_MANAGER, KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q); #else @@ -5125,6 +5139,7 @@ EditorNode::EditorNode() { p->add_item(TTR("Editor Settings"), SETTINGS_PREFERENCES); p->add_separator(); + editor_layouts = memnew(PopupMenu); editor_layouts->set_name("Layouts"); p->add_child(editor_layouts); @@ -5136,6 +5151,17 @@ EditorNode::EditorNode() { p->add_shortcut(ED_SHORTCUT("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREEN); #endif p->add_separator(); + + if (OS::get_singleton()->get_data_path() == OS::get_singleton()->get_config_path()) { + // Configuration and data folders are located in the same place (Windows/macOS) + p->add_item(TTR("Open Editor Data/Settings Folder"), SETTINGS_EDITOR_DATA_FOLDER); + } else { + // Separate configuration and data folders (Linux) + p->add_item(TTR("Open Editor Data Folder"), SETTINGS_EDITOR_DATA_FOLDER); + p->add_item(TTR("Open Editor Settings Folder"), SETTINGS_EDITOR_CONFIG_FOLDER); + } + p->add_separator(); + p->add_item(TTR("Manage Export Templates"), SETTINGS_MANAGE_EXPORT_TEMPLATES); // Help Menu diff --git a/editor/editor_node.h b/editor/editor_node.h index 38e68b2e09..b7224c9393 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -154,6 +154,7 @@ private: RUN_PLAY_CUSTOM_SCENE, RUN_SCENE_SETTINGS, RUN_SETTINGS, + RUN_PROJECT_DATA_FOLDER, RUN_PROJECT_MANAGER, RUN_FILE_SERVER, RUN_LIVE_DEBUG, @@ -168,6 +169,8 @@ private: SETTINGS_LAYOUT_SAVE, SETTINGS_LAYOUT_DELETE, SETTINGS_LAYOUT_DEFAULT, + SETTINGS_EDITOR_DATA_FOLDER, + SETTINGS_EDITOR_CONFIG_FOLDER, SETTINGS_MANAGE_EXPORT_TEMPLATES, SETTINGS_PICK_MAIN_SCENE, SETTINGS_TOGGLE_FULLSCREEN, diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp index d4a97b7095..67700b59de 100644 --- a/editor/editor_profiler.cpp +++ b/editor/editor_profiler.cpp @@ -37,9 +37,9 @@ void EditorProfiler::_make_metric_ptrs(Metric &m) { for (int i = 0; i < m.categories.size(); i++) { - m.category_ptrs[m.categories[i].signature] = &m.categories[i]; + m.category_ptrs[m.categories[i].signature] = &m.categories.write[i]; for (int j = 0; j < m.categories[i].items.size(); j++) { - m.item_ptrs[m.categories[i].items[j].signature] = &m.categories[i].items[j]; + m.item_ptrs[m.categories[i].items[j].signature] = &m.categories.write[i].items.write[j]; } } } @@ -50,8 +50,8 @@ void EditorProfiler::add_frame_metric(const Metric &p_metric, bool p_final) { if (last_metric >= frame_metrics.size()) last_metric = 0; - frame_metrics[last_metric] = p_metric; - _make_metric_ptrs(frame_metrics[last_metric]); + frame_metrics.write[last_metric] = p_metric; + _make_metric_ptrs(frame_metrics.write[last_metric]); updating_frame = true; cursor_metric_edit->set_max(frame_metrics[last_metric].frame_number); @@ -108,7 +108,7 @@ static String _get_percent_txt(float p_value, float p_total) { return String::num((p_value / p_total) * 100, 1) + "%"; } -String EditorProfiler::_get_time_as_text(Metric &m, float p_time, int p_calls) { +String EditorProfiler::_get_time_as_text(const Metric &m, float p_time, int p_calls) { int dmode = display_mode->get_selected(); @@ -192,18 +192,18 @@ void EditorProfiler::_update_plot() { float highest = 0; for (int i = 0; i < frame_metrics.size(); i++) { - Metric &m = frame_metrics[i]; + const Metric &m = frame_metrics[i]; if (!m.valid) continue; for (Set<StringName>::Element *E = plot_sigs.front(); E; E = E->next()) { - Map<StringName, Metric::Category *>::Element *F = m.category_ptrs.find(E->get()); + const Map<StringName, Metric::Category *>::Element *F = m.category_ptrs.find(E->get()); if (F) { highest = MAX(F->get()->total_time, highest); } - Map<StringName, Metric::Category::Item *>::Element *G = m.item_ptrs.find(E->get()); + const Map<StringName, Metric::Category::Item *>::Element *G = m.item_ptrs.find(E->get()); if (G) { if (use_self) { highest = MAX(G->get()->self, highest); @@ -256,18 +256,18 @@ void EditorProfiler::_update_plot() { } //get - Metric &m = frame_metrics[idx]; + const Metric &m = frame_metrics[idx]; if (m.valid == false) continue; //skip because invalid float value = 0; - Map<StringName, Metric::Category *>::Element *F = m.category_ptrs.find(E->get()); + const Map<StringName, Metric::Category *>::Element *F = m.category_ptrs.find(E->get()); if (F) { value = F->get()->total_time; } - Map<StringName, Metric::Category::Item *>::Element *G = m.item_ptrs.find(E->get()); + const Map<StringName, Metric::Category::Item *>::Element *G = m.item_ptrs.find(E->get()); if (G) { if (use_self) { value = G->get()->self; @@ -375,7 +375,7 @@ void EditorProfiler::_update_frame() { variables->clear(); TreeItem *root = variables->create_item(); - Metric &m = frame_metrics[cursor_metric]; + const Metric &m = frame_metrics[cursor_metric]; int dtime = display_time->get_selected(); @@ -394,7 +394,7 @@ void EditorProfiler::_update_frame() { } for (int j = 0; j < m.categories[i].items.size(); j++) { - Metric::Category::Item &it = m.categories[i].items[j]; + const Metric::Category::Item &it = m.categories[i].items[j]; TreeItem *item = variables->create_item(category); item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); diff --git a/editor/editor_profiler.h b/editor/editor_profiler.h index cb451475e7..d445ad58aa 100644 --- a/editor/editor_profiler.h +++ b/editor/editor_profiler.h @@ -136,7 +136,7 @@ private: void _activate_pressed(); void _clear_pressed(); - String _get_time_as_text(Metric &m, float p_time, int p_calls); + String _get_time_as_text(const Metric &m, float p_time, int p_calls); void _make_metric_ptrs(Metric &m); void _item_edited(); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 0b49b5a801..4fae8467b4 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -258,6 +258,51 @@ EditorPropertyPath::EditorPropertyPath() { global = false; } +///////////////////// CLASS NAME ///////////////////////// + +void EditorPropertyClassName::setup(const String &p_base_type, const String &p_selected_type) { + + base_type = p_base_type; + dialog->set_base_type(base_type); + selected_type = p_selected_type; + property->set_text(selected_type); +} + +void EditorPropertyClassName::update_property() { + + String s = get_edited_object()->get(get_edited_property()); + property->set_text(s); + selected_type = s; +} + +void EditorPropertyClassName::_property_selected() { + dialog->popup_create(true); +} + +void EditorPropertyClassName::_dialog_created() { + selected_type = dialog->get_selected_type(); + emit_signal("property_changed", get_edited_property(), selected_type); + update_property(); +} + +void EditorPropertyClassName::_bind_methods() { + ClassDB::bind_method(D_METHOD("_dialog_created"), &EditorPropertyClassName::_dialog_created); + ClassDB::bind_method(D_METHOD("_property_selected"), &EditorPropertyClassName::_property_selected); +} + +EditorPropertyClassName::EditorPropertyClassName() { + property = memnew(Button); + property->set_clip_text(true); + add_child(property); + add_focusable(property); + property->set_text(selected_type); + property->connect("pressed", this, "_property_selected"); + dialog = memnew(CreateDialog); + dialog->set_base_type(base_type); + dialog->connect("create", this, "_dialog_created"); + add_child(dialog); +} + ///////////////////// MEMBER ///////////////////////// void EditorPropertyMember::_property_selected(const String &p_selected) { @@ -681,6 +726,7 @@ void EditorPropertyLayers::_menu_pressed(int p_menu) { grid->value |= (1 << p_menu); } grid->update(); + layers->set_item_checked(layers->get_item_index(p_menu), grid->value & (1 << p_menu)); _grid_changed(grid->value); } @@ -706,6 +752,7 @@ EditorPropertyLayers::EditorPropertyLayers() { set_bottom_editor(hb); layers = memnew(PopupMenu); add_child(layers); + layers->set_hide_on_checkable_item_selection(false); layers->connect("id_pressed", this, "_menu_pressed"); } ///////////////////// INT ///////////////////////// @@ -2607,6 +2654,10 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ } else if (p_hint == PROPERTY_HINT_MULTILINE_TEXT) { EditorPropertyMultilineText *editor = memnew(EditorPropertyMultilineText); add_property_editor(p_path, editor); + } else if (p_hint == PROPERTY_HINT_TYPE_STRING) { + EditorPropertyClassName *editor = memnew(EditorPropertyClassName); + editor->setup("Object", p_hint_text); + add_property_editor(p_path, editor); } else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) { Vector<String> extensions = p_hint_text.split(","); diff --git a/editor/editor_properties.h b/editor/editor_properties.h index 0afb1bf955..ccd73d2539 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -119,6 +119,25 @@ public: EditorPropertyPath(); }; +class EditorPropertyClassName : public EditorProperty { + GDCLASS(EditorPropertyClassName, EditorProperty) +private: + CreateDialog *dialog; + Button *property; + String selected_type; + String base_type; + void _property_selected(); + void _dialog_created(); + +protected: + static void _bind_methods(); + +public: + void setup(const String &p_base_type, const String &p_selected_type); + virtual void update_property(); + EditorPropertyClassName(); +}; + class EditorPropertyMember : public EditorProperty { GDCLASS(EditorPropertyMember, EditorProperty) public: diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index aa67ea03d7..a9eaad47b7 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -46,7 +46,7 @@ bool EditorResourcePreviewGenerator::handles(const String &p_type) const { ERR_EXPLAIN("EditorResourcePreviewGenerator::handles needs to be overridden"); ERR_FAIL_V(false); } -Ref<Texture> EditorResourcePreviewGenerator::generate(const RES &p_from) { +Ref<Texture> EditorResourcePreviewGenerator::generate(const RES &p_from) const { if (get_script_instance() && get_script_instance()->has_method("generate")) { return get_script_instance()->call("generate", p_from); @@ -55,7 +55,7 @@ Ref<Texture> EditorResourcePreviewGenerator::generate(const RES &p_from) { ERR_FAIL_V(Ref<Texture>()); } -Ref<Texture> EditorResourcePreviewGenerator::generate_from_path(const String &p_path) { +Ref<Texture> EditorResourcePreviewGenerator::generate_from_path(const String &p_path) const { if (get_script_instance() && get_script_instance()->has_method("generate_from_path")) { return get_script_instance()->call("generate_from_path", p_path); diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h index e2276aa11d..74841b1a1e 100644 --- a/editor/editor_resource_preview.h +++ b/editor/editor_resource_preview.h @@ -63,8 +63,8 @@ protected: 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); + virtual Ref<Texture> generate(const RES &p_from) const; + virtual Ref<Texture> generate_from_path(const String &p_path) const; EditorResourcePreviewGenerator(); }; diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index c8e97b071f..02e121b5f1 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -881,7 +881,7 @@ fail: Vector<String> list = extra_config->get_value("init_projects", "list"); for (int i = 0; i < list.size(); i++) { - list[i] = exe_path + "/" + list[i]; + list.write[i] = exe_path + "/" + list[i]; }; extra_config->set_value("init_projects", "list", list); }; diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp index a218070933..b9e0c7d0fa 100644 --- a/editor/fileserver/editor_file_server.cpp +++ b/editor/fileserver/editor_file_server.cpp @@ -78,7 +78,7 @@ void EditorFileServer::_subthread_start(void *s) { _close_client(cd); ERR_FAIL_COND(err != OK); } - passutf8[passlen] = 0; + passutf8.write[passlen] = 0; String s; s.parse_utf8(passutf8.ptr()); if (s != cd->efs->password) { @@ -145,7 +145,7 @@ void EditorFileServer::_subthread_start(void *s) { _close_client(cd); ERR_FAIL_COND(err != OK); } - fileutf8[namelen] = 0; + fileutf8.write[namelen] = 0; String s; s.parse_utf8(fileutf8.ptr()); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index 004a49e2b4..2be1f1644e 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -143,7 +143,7 @@ void FindInFiles::_iterate() { // Scan folders first so we can build a list of files and have progress info later - PoolStringArray &folders_to_scan = _folders_stack[_folders_stack.size() - 1]; + PoolStringArray &folders_to_scan = _folders_stack.write[_folders_stack.size() - 1]; if (folders_to_scan.size() != 0) { // Scan one folder below diff --git a/editor/icons/SCsub b/editor/icons/SCsub index 7f94073e01..31bf8f116a 100644 --- a/editor/icons/SCsub +++ b/editor/icons/SCsub @@ -1,96 +1,14 @@ #!/usr/bin/env python Import('env') -from compat import StringIO +from platform_methods import run_in_subprocess +import editor_icons_builders -def make_editor_icons_action(target, source, env): - import os - - dst = target[0].srcnode().abspath - svg_icons = source - - icons_string = StringIO() - - for f in svg_icons: - - fname = str(f) - - icons_string.write('\t"') - - with open(fname, 'rb') as svgf: - b = svgf.read(1) - while(len(b) == 1): - icons_string.write("\\" + str(hex(ord(b)))[1:]) - b = svgf.read(1) - - - icons_string.write('"') - if fname != svg_icons[-1]: - icons_string.write(",") - icons_string.write('\n') - - s = StringIO() - s.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") - s.write("#ifndef _EDITOR_ICONS_H\n") - s.write("#define _EDITOR_ICONS_H\n") - s.write("static const int editor_icons_count = {};\n".format(len(svg_icons))) - s.write("static const char *editor_icons_sources[] = {\n") - s.write(icons_string.getvalue()) - s.write('};\n\n') - s.write("static const char *editor_icons_names[] = {\n") - - # this is used to store the indices of thumbnail icons - thumb_medium_indices = []; - thumb_big_indices = []; - index = 0 - for f in svg_icons: - - fname = str(f) - - icon_name = os.path.basename(fname)[5:-4].title().replace("_", "") - # some special cases - if icon_name in ['Int', 'Bool', 'Float']: - icon_name = icon_name.lower() - if icon_name.endswith("MediumThumb"): # don't know a better way to handle this - thumb_medium_indices.append(str(index)) - if icon_name.endswith("BigThumb"): # don't know a better way to handle this - thumb_big_indices.append(str(index)) - - s.write('\t"{0}"'.format(icon_name)) - - if fname != svg_icons[-1]: - s.write(",") - s.write('\n') - - index += 1 - - s.write('};\n') - - if thumb_medium_indices: - s.write("\n\n") - s.write("static const int editor_md_thumbs_count = {};\n".format(len(thumb_medium_indices))) - s.write("static const int editor_md_thumbs_indices[] = {") - s.write(", ".join(thumb_medium_indices)) - s.write("};\n") - if thumb_big_indices: - s.write("\n\n") - s.write("static const int editor_bg_thumbs_count = {};\n".format(len(thumb_big_indices))) - s.write("static const int editor_bg_thumbs_indices[] = {") - s.write(", ".join(thumb_big_indices)) - s.write("};\n") - - s.write("#endif\n") - - with open(dst, "w") as f: - f.write(s.getvalue()) - - s.close() - icons_string.close() - -make_editor_icons_builder = Builder(action=make_editor_icons_action, +make_editor_icons_builder = Builder(action=run_in_subprocess(editor_icons_builders.make_editor_icons_action), suffix='.h', src_suffix='.svg') + env['BUILDERS']['MakeEditorIconsBuilder'] = make_editor_icons_builder env.Alias('editor_icons', [env.MakeEditorIconsBuilder('#editor/editor_icons.gen.h', Glob("*.svg"))]) diff --git a/editor/icons/editor_icons_builders.py b/editor/icons/editor_icons_builders.py new file mode 100644 index 0000000000..dfd0802ce9 --- /dev/null +++ b/editor/icons/editor_icons_builders.py @@ -0,0 +1,96 @@ +"""Functions used to generate source files during build time + +All such functions are invoked in a subprocess on Windows to prevent build flakiness. + +""" +import os +from platform_methods import subprocess_main +from compat import StringIO + + +def make_editor_icons_action(target, source, env): + + dst = target[0] + svg_icons = source + + icons_string = StringIO() + + for f in svg_icons: + + fname = str(f) + + icons_string.write('\t"') + + with open(fname, 'rb') as svgf: + b = svgf.read(1) + while(len(b) == 1): + icons_string.write("\\" + str(hex(ord(b)))[1:]) + b = svgf.read(1) + + + icons_string.write('"') + if fname != svg_icons[-1]: + icons_string.write(",") + icons_string.write('\n') + + s = StringIO() + s.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") + s.write("#ifndef _EDITOR_ICONS_H\n") + s.write("#define _EDITOR_ICONS_H\n") + s.write("static const int editor_icons_count = {};\n".format(len(svg_icons))) + s.write("static const char *editor_icons_sources[] = {\n") + s.write(icons_string.getvalue()) + s.write('};\n\n') + s.write("static const char *editor_icons_names[] = {\n") + + # this is used to store the indices of thumbnail icons + thumb_medium_indices = []; + thumb_big_indices = []; + index = 0 + for f in svg_icons: + + fname = str(f) + + icon_name = os.path.basename(fname)[5:-4].title().replace("_", "") + # some special cases + if icon_name in ['Int', 'Bool', 'Float']: + icon_name = icon_name.lower() + if icon_name.endswith("MediumThumb"): # don't know a better way to handle this + thumb_medium_indices.append(str(index)) + if icon_name.endswith("BigThumb"): # don't know a better way to handle this + thumb_big_indices.append(str(index)) + + s.write('\t"{0}"'.format(icon_name)) + + if fname != svg_icons[-1]: + s.write(",") + s.write('\n') + + index += 1 + + s.write('};\n') + + if thumb_medium_indices: + s.write("\n\n") + s.write("static const int editor_md_thumbs_count = {};\n".format(len(thumb_medium_indices))) + s.write("static const int editor_md_thumbs_indices[] = {") + s.write(", ".join(thumb_medium_indices)) + s.write("};\n") + if thumb_big_indices: + s.write("\n\n") + s.write("static const int editor_bg_thumbs_count = {};\n".format(len(thumb_big_indices))) + s.write("static const int editor_bg_thumbs_indices[] = {") + s.write(", ".join(thumb_big_indices)) + s.write("};\n") + + s.write("#endif\n") + + with open(dst, "w") as f: + f.write(s.getvalue()) + + s.close() + icons_string.close() + + +if __name__ == '__main__': + subprocess_main(globals()) diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index a13f741ee7..22ea5883e8 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -579,12 +579,12 @@ static void _generate_tangents_and_binormals(const PoolVector<int> &p_indices, c .normalized(); } - tangents[index_arrayr[idx * 3 + 0]] += tangent; - binormals[index_arrayr[idx * 3 + 0]] += binormal; - tangents[index_arrayr[idx * 3 + 1]] += tangent; - binormals[index_arrayr[idx * 3 + 1]] += binormal; - tangents[index_arrayr[idx * 3 + 2]] += tangent; - binormals[index_arrayr[idx * 3 + 2]] += binormal; + tangents.write[index_arrayr[idx * 3 + 0]] += tangent; + binormals.write[index_arrayr[idx * 3 + 0]] += binormal; + tangents.write[index_arrayr[idx * 3 + 1]] += tangent; + binormals.write[index_arrayr[idx * 3 + 1]] += binormal; + tangents.write[index_arrayr[idx * 3 + 2]] += tangent; + binormals.write[index_arrayr[idx * 3 + 2]] += binormal; //print_line(itos(idx)+" tangent: "+tangent); //print_line(itos(idx)+" binormal: "+binormal); @@ -800,7 +800,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me total += weights[i].weight; if (total) for (int i = 0; i < weights.size(); i++) - weights[i].weight /= total; + weights.write[i].weight /= total; if (weights.size() == 0 || total == 0) { //if nothing, add a weight to bone 0 //no weights assigned @@ -987,7 +987,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me vertex_array.resize(vertex_set.size()); for (Set<Collada::Vertex>::Element *F = vertex_set.front(); F; F = F->next()) { - vertex_array[F->get().idx] = F->get(); + vertex_array.write[F->get().idx] = F->get(); } if (has_weights) { @@ -996,9 +996,9 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me Transform local_xform = p_local_xform; for (int i = 0; i < vertex_array.size(); i++) { - vertex_array[i].vertex = local_xform.xform(vertex_array[i].vertex); - vertex_array[i].normal = local_xform.basis.xform(vertex_array[i].normal).normalized(); - vertex_array[i].tangent.normal = local_xform.basis.xform(vertex_array[i].tangent.normal).normalized(); + vertex_array.write[i].vertex = local_xform.xform(vertex_array[i].vertex); + vertex_array.write[i].normal = local_xform.basis.xform(vertex_array[i].normal).normalized(); + vertex_array.write[i].tangent.normal = local_xform.basis.xform(vertex_array[i].tangent.normal).normalized(); if (local_xform_mirror) { //i shouldn't do this? wtf? //vertex_array[i].normal*=-1.0; @@ -1061,13 +1061,13 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me //float sum=0.0; for (int l = 0; l < VS::ARRAY_WEIGHTS_SIZE; l++) { if (l < vertex_array[k].weights.size()) { - weights[l] = vertex_array[k].weights[l].weight; - bones[l] = vertex_array[k].weights[l].bone_idx; + weights.write[l] = vertex_array[k].weights[l].weight; + bones.write[l] = vertex_array[k].weights[l].bone_idx; //sum += vertex_array[k].weights[l].weight; } else { - weights[l] = 0; - bones[l] = 0; + weights.write[l] = 0; + bones.write[l] = 0; } } @@ -1286,7 +1286,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres String str = joint_src->sarray[i]; ERR_FAIL_COND_V(!bone_remap_map.has(str), ERR_INVALID_DATA); - bone_remap[i] = bone_remap_map[str]; + bone_remap.write[i] = bone_remap_map[str]; } } @@ -1506,7 +1506,7 @@ void ColladaImport::_fix_param_animation_tracks() { const Vector<int> &rt = collada.state.referenced_tracks[track_name]; for (int rti = 0; rti < rt.size(); rti++) { - Collada::AnimationTrack *at = &collada.state.animation_tracks[rt[rti]]; + Collada::AnimationTrack *at = &collada.state.animation_tracks.write[rt[rti]]; at->target = E->key(); at->param = "morph/" + collada.state.mesh_name_map[mesh_name]; @@ -1540,7 +1540,7 @@ void ColladaImport::create_animations(bool p_make_tracks_in_all_bones, bool p_im for (int i = 0; i < collada.state.animation_tracks.size(); i++) { - Collada::AnimationTrack &at = collada.state.animation_tracks[i]; + const Collada::AnimationTrack &at = collada.state.animation_tracks[i]; //print_line("CHANNEL: "+at.target+" PARAM: "+at.param); String node; @@ -1698,7 +1698,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones if (nm.anim_tracks.size() == 1) { //use snapshot keys from anim track instead, because this was most likely exported baked - Collada::AnimationTrack &at = collada.state.animation_tracks[nm.anim_tracks.front()->get()]; + const Collada::AnimationTrack &at = collada.state.animation_tracks[nm.anim_tracks.front()->get()]; snapshots.clear(); for (int i = 0; i < at.keys.size(); i++) snapshots.push_back(at.keys[i].time); @@ -1723,7 +1723,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones found_anim = true; - Collada::AnimationTrack &at = collada.state.animation_tracks[ET->get()]; + const Collada::AnimationTrack &at = collada.state.animation_tracks[ET->get()]; int xform_idx = -1; for (int j = 0; j < cn->xform_list.size(); j++) { @@ -1745,18 +1745,18 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones Vector<float> data = at.get_value_at_time(snapshots[i]); ERR_CONTINUE(data.empty()); - Collada::Node::XForm &xf = cn->xform_list[xform_idx]; + Collada::Node::XForm &xf = cn->xform_list.write[xform_idx]; if (at.component == "ANGLE") { ERR_CONTINUE(data.size() != 1); ERR_CONTINUE(xf.op != Collada::Node::XForm::OP_ROTATE); ERR_CONTINUE(xf.data.size() < 4); - xf.data[3] = data[0]; + xf.data.write[3] = data[0]; } else if (at.component == "X" || at.component == "Y" || at.component == "Z") { int cn = at.component[0] - 'X'; ERR_CONTINUE(cn >= xf.data.size()); ERR_CONTINUE(data.size() > 1); - xf.data[cn] = data[0]; + xf.data.write[cn] = data[0]; } else if (data.size() == xf.data.size()) { xf.data = data; @@ -1862,7 +1862,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones continue; } - Collada::AnimationTrack &at = collada.state.animation_tracks[ti]; + const Collada::AnimationTrack &at = collada.state.animation_tracks[ti]; // take snapshots if (!collada.state.scene_map.has(at.target)) @@ -1965,7 +1965,7 @@ Node *EditorSceneImporterCollada::import_scene(const String &p_path, uint32_t p_ if (p_flags & IMPORT_ANIMATION_DETECT_LOOP) { if (name.begins_with("loop") || name.ends_with("loop") || name.begins_with("cycle") || name.ends_with("cycle")) { - state.animations[i]->set_loop(true); + state.animations.write[i]->set_loop(true); } } diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index f2f4328cd2..7cfaa9070f 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -651,7 +651,7 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p } else { //fill with zeros, as bufferview is not defined. for (int i = 0; i < (a.count * component_count); i++) { - dst_buffer[i] = 0; + dst_buffer.write[i] = 0; } } @@ -794,7 +794,7 @@ Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, ret.resize(ret_size); { for (int i = 0; i < ret_size; i++) { - ret[i] = Quat(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]); + ret.write[i] = Quat(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]); } } return ret; @@ -808,8 +808,8 @@ Vector<Transform2D> EditorSceneImporterGLTF::_decode_accessor_as_xform2d(GLTFSta ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); ret.resize(attribs.size() / 4); for (int i = 0; i < ret.size(); i++) { - ret[i][0] = Vector2(attribs[i * 4 + 0], attribs[i * 4 + 1]); - ret[i][1] = Vector2(attribs[i * 4 + 2], attribs[i * 4 + 3]); + ret.write[i][0] = Vector2(attribs[i * 4 + 0], attribs[i * 4 + 1]); + ret.write[i][1] = Vector2(attribs[i * 4 + 2], attribs[i * 4 + 3]); } return ret; } @@ -823,9 +823,9 @@ Vector<Basis> EditorSceneImporterGLTF::_decode_accessor_as_basis(GLTFState &stat ERR_FAIL_COND_V(attribs.size() % 9 != 0, ret); ret.resize(attribs.size() / 9); for (int i = 0; i < ret.size(); i++) { - ret[i].set_axis(0, Vector3(attribs[i * 9 + 0], attribs[i * 9 + 1], attribs[i * 9 + 2])); - ret[i].set_axis(1, Vector3(attribs[i * 9 + 3], attribs[i * 9 + 4], attribs[i * 9 + 5])); - ret[i].set_axis(2, Vector3(attribs[i * 9 + 6], attribs[i * 9 + 7], attribs[i * 9 + 8])); + ret.write[i].set_axis(0, Vector3(attribs[i * 9 + 0], attribs[i * 9 + 1], attribs[i * 9 + 2])); + ret.write[i].set_axis(1, Vector3(attribs[i * 9 + 3], attribs[i * 9 + 4], attribs[i * 9 + 5])); + ret.write[i].set_axis(2, Vector3(attribs[i * 9 + 6], attribs[i * 9 + 7], attribs[i * 9 + 8])); } return ret; } @@ -838,10 +838,10 @@ Vector<Transform> EditorSceneImporterGLTF::_decode_accessor_as_xform(GLTFState & ERR_FAIL_COND_V(attribs.size() % 16 != 0, ret); ret.resize(attribs.size() / 16); for (int i = 0; i < ret.size(); i++) { - ret[i].basis.set_axis(0, Vector3(attribs[i * 16 + 0], attribs[i * 16 + 1], attribs[i * 16 + 2])); - ret[i].basis.set_axis(1, Vector3(attribs[i * 16 + 4], attribs[i * 16 + 5], attribs[i * 16 + 6])); - ret[i].basis.set_axis(2, Vector3(attribs[i * 16 + 8], attribs[i * 16 + 9], attribs[i * 16 + 10])); - ret[i].set_origin(Vector3(attribs[i * 16 + 12], attribs[i * 16 + 13], attribs[i * 16 + 14])); + ret.write[i].basis.set_axis(0, Vector3(attribs[i * 16 + 0], attribs[i * 16 + 1], attribs[i * 16 + 2])); + ret.write[i].basis.set_axis(1, Vector3(attribs[i * 16 + 4], attribs[i * 16 + 5], attribs[i * 16 + 6])); + ret.write[i].basis.set_axis(2, Vector3(attribs[i * 16 + 8], attribs[i * 16 + 9], attribs[i * 16 + 10])); + ret.write[i].set_origin(Vector3(attribs[i * 16 + 12], attribs[i * 16 + 13], attribs[i * 16 + 14])); } return ret; } @@ -1085,7 +1085,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { ERR_FAIL_COND_V(mesh.mesh->get_blend_shape_count() != weights.size(), ERR_PARSE_ERROR); mesh.blend_weights.resize(weights.size()); for (int j = 0; j < weights.size(); j++) { - mesh.blend_weights[j] = weights[j]; + mesh.blend_weights.write[j] = weights[j]; } } @@ -1139,7 +1139,7 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b ERR_FAIL_INDEX_V(bvi, state.buffer_views.size(), ERR_PARAMETER_RANGE_ERROR); - GLTFBufferView &bv = state.buffer_views[bvi]; + const GLTFBufferView &bv = state.buffer_views[bvi]; int bi = bv.buffer; ERR_FAIL_INDEX_V(bi, state.buffers.size(), ERR_PARAMETER_RANGE_ERROR); @@ -1596,7 +1596,7 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { PoolVector<float> weights = _decode_accessor_as_floats(state, output, false); ERR_FAIL_INDEX_V(state.nodes[node]->mesh, state.meshes.size(), ERR_PARSE_ERROR); - GLTFMesh *mesh = &state.meshes[state.nodes[node]->mesh]; + const GLTFMesh *mesh = &state.meshes[state.nodes[node]->mesh]; ERR_FAIL_COND_V(mesh->blend_weights.size() == 0, ERR_PARSE_ERROR); int wc = mesh->blend_weights.size(); @@ -1611,11 +1611,11 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { Vector<float> wdata; wdata.resize(wlen); for (int l = 0; l < wlen; l++) { - wdata[l] = r[l * wc + k]; + wdata.write[l] = r[l * wc + k]; } cf.values = wdata; - track->weight_tracks[k] = cf; + track->weight_tracks.write[k] = cf; } } else { WARN_PRINTS("Invalid path: " + path); @@ -1657,7 +1657,7 @@ void EditorSceneImporterGLTF::_generate_node(GLTFState &state, int p_node, Node if (n->mesh >= 0) { ERR_FAIL_INDEX(n->mesh, state.meshes.size()); MeshInstance *mi = memnew(MeshInstance); - GLTFMesh &mesh = state.meshes[n->mesh]; + GLTFMesh &mesh = state.meshes.write[n->mesh]; mi->set_mesh(mesh.mesh); if (mesh.mesh->get_name() == "") { mesh.mesh->set_name(n->name); @@ -1750,7 +1750,7 @@ void EditorSceneImporterGLTF::_generate_bone(GLTFState &state, int p_node, Vecto s->set_bone_rest(bone_index, state.skins[skin].bones[n->joints[i].bone].inverse_bind.affine_inverse()); n->godot_nodes.push_back(s); - n->joints[i].godot_bone_index = bone_index; + n->joints.write[i].godot_bone_index = bone_index; } for (int i = 0; i < n->children.size(); i++) { diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp index ec0500361d..cf850eef03 100644 --- a/editor/import/resource_importer_csv_translation.cpp +++ b/editor/import/resource_importer_csv_translation.cpp @@ -119,7 +119,7 @@ Error ResourceImporterCSVTranslation::import(const String &p_source_file, const if (key != "") { for (int i = 1; i < line.size(); i++) { - translations[i - 1]->add_message(key, line[i]); + translations.write[i - 1]->add_message(key, line[i]); } } diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index a5ad34f377..b5e3466b12 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -750,7 +750,7 @@ void ResourceImporterScene::_filter_tracks(Node *scene, const String &p_text) { Vector<String> strings = p_text.split("\n"); for (int i = 0; i < strings.size(); i++) { - strings[i] = strings[i].strip_edges(); + strings.write[i] = strings[i].strip_edges(); } List<StringName> anim_names; diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index debdeb1c4a..41f5a892eb 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -215,19 +215,19 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s for (int i = 0; i < frames * format_channels; i++) { // 8 bit samples are UNSIGNED - data[i] = int8_t(file->get_8() - 128) / 128.f; + data.write[i] = int8_t(file->get_8() - 128) / 128.f; } } else if (format_bits == 32 && compression_code == 3) { for (int i = 0; i < frames * format_channels; i++) { //32 bit IEEE Float - data[i] = file->get_float(); + data.write[i] = file->get_float(); } } else if (format_bits == 16) { for (int i = 0; i < frames * format_channels; i++) { //16 bit SIGNED - data[i] = int16_t(file->get_16()) / 32768.f; + data.write[i] = int16_t(file->get_16()) / 32768.f; } } else { for (int i = 0; i < frames * format_channels; i++) { @@ -241,7 +241,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s } s <<= (32 - format_bits); - data[i] = (int32_t(s) >> 16) / 32768.f; + data.write[i] = (int32_t(s) >> 16) / 32768.f; } } @@ -335,7 +335,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s float res = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3); - new_data[i * format_channels + c] = res; + new_data.write[i * format_channels + c] = res; // update position and always keep fractional part within ]0...1] // in order to avoid 32bit floating point precision errors @@ -374,7 +374,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s float mult = 1.0 / max; for (int i = 0; i < data.size(); i++) { - data[i] *= mult; + data.write[i] *= mult; } } } @@ -408,7 +408,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s Vector<float> new_data; new_data.resize((last - first + 1) * format_channels); for (int i = first * format_channels; i < (last + 1) * format_channels; i++) { - new_data[i - first * format_channels] = data[i]; + new_data.write[i - first * format_channels] = data[i]; } data = new_data; @@ -433,7 +433,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s Vector<float> new_data; new_data.resize(data.size() / 2); for (int i = 0; i < frames; i++) { - new_data[i] = (data[i * 2 + 0] + data[i * 2 + 1]) / 2.0; + new_data.write[i] = (data[i * 2 + 0] + data[i * 2 + 1]) / 2.0; } data = new_data; @@ -465,8 +465,8 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s right.resize(tframes); for (int i = 0; i < tframes; i++) { - left[i] = data[i * 2 + 0]; - right[i] = data[i * 2 + 1]; + left.write[i] = data[i * 2 + 0]; + right.write[i] = data[i * 2 + 1]; } PoolVector<uint8_t> bleft; @@ -526,119 +526,5 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s return OK; } -void ResourceImporterWAV::_compress_ima_adpcm(const Vector<float> &p_data, PoolVector<uint8_t> &dst_data) { - - /*p_sample_data->data = (void*)malloc(len); - xm_s8 *dataptr=(xm_s8*)p_sample_data->data;*/ - - 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 - }; - - int datalen = p_data.size(); - int datamax = datalen; - if (datalen & 1) - datalen++; - - dst_data.resize(datalen / 2 + 4); - PoolVector<uint8_t>::Write w = dst_data.write(); - - int i, step_idx = 0, prev = 0; - uint8_t *out = w.ptr(); - //int16_t xm_prev=0; - const float *in = p_data.ptr(); - - /* initial value is zero */ - *(out++) = 0; - *(out++) = 0; - /* Table index initial value */ - *(out++) = 0; - /* unused */ - *(out++) = 0; - - for (i = 0; i < datalen; i++) { - int step, diff, vpdiff, mask; - uint8_t nibble; - int16_t xm_sample; - - if (i >= datamax) - xm_sample = 0; - else { - - xm_sample = CLAMP(in[i] * 32767.0, -32768, 32767); - /* - if (xm_sample==32767 || xm_sample==-32768) - printf("clippy!\n",xm_sample); - */ - } - - //xm_sample=xm_sample+xm_prev; - //xm_prev=xm_sample; - - diff = (int)xm_sample - prev; - - nibble = 0; - step = _ima_adpcm_step_table[step_idx]; - vpdiff = step >> 3; - if (diff < 0) { - nibble = 8; - diff = -diff; - } - mask = 4; - while (mask) { - - if (diff >= step) { - - nibble |= mask; - diff -= step; - vpdiff += step; - } - - step >>= 1; - mask >>= 1; - }; - - if (nibble & 8) - prev -= vpdiff; - else - prev += vpdiff; - - if (prev > 32767) { - //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip up %i\n",i,xm_sample,prev,diff,vpdiff,prev); - prev = 32767; - } else if (prev < -32768) { - //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip down %i\n",i,xm_sample,prev,diff,vpdiff,prev); - prev = -32768; - } - - step_idx += _ima_adpcm_index_table[nibble]; - if (step_idx < 0) - step_idx = 0; - else if (step_idx > 88) - step_idx = 88; - - if (i & 1) { - *out |= nibble << 4; - out++; - } else { - *out = nibble; - } - /*dataptr[i]=prev>>8;*/ - } -} - ResourceImporterWAV::ResourceImporterWAV() { } diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h index cfce5a31ee..f78ab09e9b 100644 --- a/editor/import/resource_importer_wav.h +++ b/editor/import/resource_importer_wav.h @@ -48,7 +48,118 @@ public: virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; - void _compress_ima_adpcm(const Vector<float> &p_data, PoolVector<uint8_t> &dst_data); + static void _compress_ima_adpcm(const Vector<float> &p_data, PoolVector<uint8_t> &dst_data) { + /*p_sample_data->data = (void*)malloc(len); + xm_s8 *dataptr=(xm_s8*)p_sample_data->data;*/ + + 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 + }; + + int datalen = p_data.size(); + int datamax = datalen; + if (datalen & 1) + datalen++; + + dst_data.resize(datalen / 2 + 4); + PoolVector<uint8_t>::Write w = dst_data.write(); + + int i, step_idx = 0, prev = 0; + uint8_t *out = w.ptr(); + //int16_t xm_prev=0; + const float *in = p_data.ptr(); + + /* initial value is zero */ + *(out++) = 0; + *(out++) = 0; + /* Table index initial value */ + *(out++) = 0; + /* unused */ + *(out++) = 0; + + for (i = 0; i < datalen; i++) { + int step, diff, vpdiff, mask; + uint8_t nibble; + int16_t xm_sample; + + if (i >= datamax) + xm_sample = 0; + else { + + xm_sample = CLAMP(in[i] * 32767.0, -32768, 32767); + /* + if (xm_sample==32767 || xm_sample==-32768) + printf("clippy!\n",xm_sample); + */ + } + + //xm_sample=xm_sample+xm_prev; + //xm_prev=xm_sample; + + diff = (int)xm_sample - prev; + + nibble = 0; + step = _ima_adpcm_step_table[step_idx]; + vpdiff = step >> 3; + if (diff < 0) { + nibble = 8; + diff = -diff; + } + mask = 4; + while (mask) { + + if (diff >= step) { + + nibble |= mask; + diff -= step; + vpdiff += step; + } + + step >>= 1; + mask >>= 1; + }; + + if (nibble & 8) + prev -= vpdiff; + else + prev += vpdiff; + + if (prev > 32767) { + //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip up %i\n",i,xm_sample,prev,diff,vpdiff,prev); + prev = 32767; + } else if (prev < -32768) { + //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip down %i\n",i,xm_sample,prev,diff,vpdiff,prev); + prev = -32768; + } + + step_idx += _ima_adpcm_index_table[nibble]; + if (step_idx < 0) + step_idx = 0; + else if (step_idx > 88) + step_idx = 88; + + if (i & 1) { + *out |= nibble << 4; + out++; + } else { + *out = nibble; + } + /*dataptr[i]=prev>>8;*/ + } + } virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 5052b69e24..2d341cdd93 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -345,7 +345,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) Vector<Vector2> vertices = _get_polygon(edited_point.polygon); ERR_FAIL_INDEX_V(edited_point.vertex, vertices.size(), false); - vertices[edited_point.vertex] = edited_point.pos - _get_offset(edited_point.polygon); + vertices.write[edited_point.vertex] = edited_point.pos - _get_offset(edited_point.polygon); undo_redo->create_action(TTR("Edit Poly")); _action_set_polygon(edited_point.polygon, pre_move_edit, vertices); @@ -445,7 +445,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) Vector<Vector2> vertices = _get_polygon(edited_point.polygon); ERR_FAIL_INDEX_V(edited_point.vertex, vertices.size(), false); - vertices[edited_point.vertex] = cpoint - _get_offset(edited_point.polygon); + vertices.write[edited_point.vertex] = cpoint - _get_offset(edited_point.polygon); _set_polygon(edited_point.polygon, vertices); } diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index 8d17062248..27df60f87a 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -414,7 +414,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { 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; + points.write[j] = point; } for (int j = 0; j < 3; j++) { diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 23eeef9f20..9ab5436de8 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -1333,7 +1333,7 @@ void AnimationPlayerEditor::_allocate_onion_layers() { bool is_present = onion.differences_only && i == captures - 1; // Each capture is a viewport with a canvas item attached that renders a full-size rect with the contents of the main viewport - onion.captures[i] = VS::get_singleton()->viewport_create(); + onion.captures.write[i] = VS::get_singleton()->viewport_create(); VS::get_singleton()->viewport_set_usage(onion.captures[i], VS::VIEWPORT_USAGE_2D); VS::get_singleton()->viewport_set_size(onion.captures[i], capture_size.width, capture_size.height); VS::get_singleton()->viewport_set_update_mode(onion.captures[i], VS::VIEWPORT_UPDATE_ALWAYS); @@ -1473,7 +1473,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()); - onion.captures_valid[cidx] = valid; + onion.captures_valid.write[cidx] = valid; if (valid) { player->seek(pos, true); get_tree()->flush_transform_notifications(); // Needed for transforms of Spatials diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 04bd5f0cec..ee450333c8 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -679,7 +679,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<StyleBox> sb = name == selected_node ? style_selected : style; int strsize = font->get_string_size(name).width; - NodeRect &nr = node_rects[i]; + NodeRect &nr = node_rects.write[i]; Vector2 offset = nr.node.position; int h = nr.node.size.height; @@ -771,7 +771,7 @@ void AnimationNodeStateMachineEditor::_state_machine_pos_draw() { if (idx == -1) return; - NodeRect &nr = node_rects[idx]; + const NodeRect &nr = node_rects[idx]; Vector2 from; from.x = nr.play.position.x; diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 505dd4ab76..e98dfceb90 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -197,7 +197,7 @@ void EditorAssetLibraryItemDescription::set_image(int p_type, int p_index, const for (int i = 0; i < preview_images.size(); i++) { if (preview_images[i].id == p_index) { - preview_images[i].image = p_image; + preview_images.write[i].image = p_image; if (preview_images[i].button->is_pressed()) { _preview_click(p_index); } diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index ddb03d0250..454a5d72f2 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -81,8 +81,8 @@ void AudioStreamEditor::_draw_preview() { float min = preview->get_min(ofs, ofs_n) * 0.5 + 0.5; int idx = i; - lines[idx * 2 + 0] = Vector2(i + 1, rect.position.y + min * rect.size.y); - lines[idx * 2 + 1] = Vector2(i + 1, rect.position.y + max * rect.size.y); + lines.write[idx * 2 + 0] = Vector2(i + 1, rect.position.y + min * rect.size.y); + lines.write[idx * 2 + 1] = Vector2(i + 1, rect.position.y + max * rect.size.y); } Vector<Color> color; diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 1d20c63969..eed6b5a95c 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -533,7 +533,7 @@ void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_Sel r_items.remove(i); i--; } else { - r_items[i].item = canvas_item; + r_items.write[i].item = canvas_item; } } } diff --git a/editor/plugins/collision_polygon_editor_plugin.cpp b/editor/plugins/collision_polygon_editor_plugin.cpp index e837359d0c..5109379add 100644 --- a/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_editor_plugin.cpp @@ -276,7 +276,7 @@ bool Polygon3DEditor::forward_spatial_gui_input(Camera *p_camera, const Ref<Inpu //apply ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly[edited_point] = edited_point_pos; + poly.write[edited_point] = edited_point_pos; undo_redo->create_action(TTR("Edit Poly")); undo_redo->add_do_method(node, "set_polygon", poly); undo_redo->add_undo_method(node, "set_polygon", pre_move_edit); diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index b003664dca..9e052bb027 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -446,8 +446,8 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { float radius = shape->get_radius(); float height = shape->get_height() / 2; - handles[0] = Point2(radius, -height); - handles[1] = Point2(0, -(height + radius)); + handles.write[0] = Point2(radius, -height); + handles.write[1] = Point2(0, -(height + radius)); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); p_overlay->draw_texture(h, gt.xform(handles[1]) - size); @@ -458,7 +458,7 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { Ref<CircleShape2D> shape = node->get_shape(); handles.resize(1); - handles[0] = Point2(shape->get_radius(), 0); + handles.write[0] = Point2(shape->get_radius(), 0); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); @@ -476,8 +476,8 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { Ref<LineShape2D> shape = node->get_shape(); handles.resize(2); - handles[0] = shape->get_normal() * shape->get_d(); - handles[1] = shape->get_normal() * (shape->get_d() + 30.0); + handles.write[0] = shape->get_normal() * shape->get_d(); + handles.write[1] = shape->get_normal() * (shape->get_d() + 30.0); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); p_overlay->draw_texture(h, gt.xform(handles[1]) - size); @@ -488,7 +488,7 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { Ref<RayShape2D> shape = node->get_shape(); handles.resize(1); - handles[0] = Point2(0, shape->get_length()); + handles.write[0] = Point2(0, shape->get_length()); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); @@ -499,8 +499,8 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { handles.resize(2); Vector2 ext = shape->get_extents(); - handles[0] = Point2(ext.x, 0); - handles[1] = Point2(0, -ext.y); + handles.write[0] = Point2(ext.x, 0); + handles.write[1] = Point2(0, -ext.y); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); p_overlay->draw_texture(h, gt.xform(handles[1]) - size); @@ -511,8 +511,8 @@ void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) { Ref<SegmentShape2D> shape = node->get_shape(); handles.resize(2); - handles[0] = shape->get_a(); - handles[1] = shape->get_b(); + handles.write[0] = shape->get_a(); + handles.write[1] = shape->get_b(); p_overlay->draw_texture(h, gt.xform(handles[0]) - size); p_overlay->draw_texture(h, gt.xform(handles[1]) - size); diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp index a3be10dc33..3351e5918f 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.cpp +++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -255,7 +255,7 @@ bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { //apply ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly[edited_point] = edited_point_pos; + poly.write[edited_point] = edited_point_pos; undo_redo->create_action(TTR("Edit Poly")); undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", pre_move_edit); diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp index 6d11079759..c2b17189ef 100644 --- a/editor/plugins/particles_2d_editor_plugin.cpp +++ b/editor/plugins/particles_2d_editor_plugin.cpp @@ -165,12 +165,12 @@ void Particles2DEditorPlugin::_generate_emission_mask() { if (emode == EMISSION_MODE_SOLID) { if (capture_colors) { - valid_colors[vpc * 4 + 0] = r[(j * s.width + i) * 4 + 0]; - valid_colors[vpc * 4 + 1] = r[(j * s.width + i) * 4 + 1]; - valid_colors[vpc * 4 + 2] = r[(j * s.width + i) * 4 + 2]; - valid_colors[vpc * 4 + 3] = r[(j * s.width + i) * 4 + 3]; + valid_colors.write[vpc * 4 + 0] = r[(j * s.width + i) * 4 + 0]; + valid_colors.write[vpc * 4 + 1] = r[(j * s.width + i) * 4 + 1]; + valid_colors.write[vpc * 4 + 2] = r[(j * s.width + i) * 4 + 2]; + valid_colors.write[vpc * 4 + 3] = r[(j * s.width + i) * 4 + 3]; } - valid_positions[vpc++] = Point2(i, j); + valid_positions.write[vpc++] = Point2(i, j); } else { @@ -189,7 +189,7 @@ void Particles2DEditorPlugin::_generate_emission_mask() { } if (on_border) { - valid_positions[vpc] = Point2(i, j); + valid_positions.write[vpc] = Point2(i, j); if (emode == EMISSION_MODE_BORDER_DIRECTED) { Vector2 normal; @@ -206,14 +206,14 @@ void Particles2DEditorPlugin::_generate_emission_mask() { } normal.normalize(); - valid_normals[vpc] = normal; + valid_normals.write[vpc] = normal; } if (capture_colors) { - valid_colors[vpc * 4 + 0] = r[(j * s.width + i) * 4 + 0]; - valid_colors[vpc * 4 + 1] = r[(j * s.width + i) * 4 + 1]; - valid_colors[vpc * 4 + 2] = r[(j * s.width + i) * 4 + 2]; - valid_colors[vpc * 4 + 3] = r[(j * s.width + i) * 4 + 3]; + valid_colors.write[vpc * 4 + 0] = r[(j * s.width + i) * 4 + 0]; + valid_colors.write[vpc * 4 + 1] = r[(j * s.width + i) * 4 + 1]; + valid_colors.write[vpc * 4 + 2] = r[(j * s.width + i) * 4 + 2]; + valid_colors.write[vpc * 4 + 3] = r[(j * s.width + i) * 4 + 3]; } vpc++; diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 94d1b96b91..3b82e6578b 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -342,11 +342,11 @@ void ScriptEditor::_save_history() { if (Object::cast_to<ScriptEditorBase>(n)) { - history[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); + history.write[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); } if (Object::cast_to<EditorHelp>(n)) { - history[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); + history.write[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); } } @@ -373,11 +373,11 @@ void ScriptEditor::_go_to_tab(int p_idx) { if (Object::cast_to<ScriptEditorBase>(n)) { - history[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); + history.write[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); } if (Object::cast_to<EditorHelp>(n)) { - history[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); + history.write[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); } } @@ -1876,6 +1876,7 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra if ((debugger->get_dump_stack_script() != p_resource || debugger->get_debug_with_external_editor()) && p_resource->get_path().is_resource_file() && + p_resource->get_class_name() != StringName("VisualScript") && bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor"))) { String path = EditorSettings::get_singleton()->get("text_editor/external/exec_path"); @@ -2612,11 +2613,11 @@ void ScriptEditor::_update_history_pos(int p_new_pos) { if (Object::cast_to<ScriptEditorBase>(n)) { - history[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); + history.write[history_pos].state = Object::cast_to<ScriptEditorBase>(n)->get_edit_state(); } if (Object::cast_to<EditorHelp>(n)) { - history[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); + history.write[history_pos].state = Object::cast_to<EditorHelp>(n)->get_scroll(); } history_pos = p_new_pos; diff --git a/editor/plugins/skeleton_editor_plugin.cpp b/editor/plugins/skeleton_editor_plugin.cpp index 40a696119e..fe7d1df50c 100644 --- a/editor/plugins/skeleton_editor_plugin.cpp +++ b/editor/plugins/skeleton_editor_plugin.cpp @@ -68,16 +68,16 @@ void SkeletonEditor::create_physical_skeleton() { if (parent < 0) { - bones_infos[bone_id].relative_rest = skeleton->get_bone_rest(bone_id); + bones_infos.write[bone_id].relative_rest = skeleton->get_bone_rest(bone_id); } else { - bones_infos[bone_id].relative_rest = bones_infos[parent].relative_rest * skeleton->get_bone_rest(bone_id); + bones_infos.write[bone_id].relative_rest = bones_infos[parent].relative_rest * skeleton->get_bone_rest(bone_id); /// create physical bone on parent if (!bones_infos[parent].physical_bone) { - bones_infos[parent].physical_bone = create_physical_bone(parent, bone_id, bones_infos); + bones_infos.write[parent].physical_bone = create_physical_bone(parent, bone_id, bones_infos); ur->create_action(TTR("Create physical bones")); ur->add_do_method(skeleton, "add_child", bones_infos[parent].physical_bone); diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index f0c874a150..eab1588a55 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -1928,6 +1928,11 @@ void SpatialEditorViewport::_nav_zoom(Ref<InputEventWithModifiers> p_event, cons void SpatialEditorViewport::_nav_orbit(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative) { + if (lock_rotation) { + _nav_pan(p_event, p_relative); + return; + } + real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y-axis"); @@ -2151,6 +2156,21 @@ void SpatialEditorViewport::_notification(int p_what) { _update_freelook(delta); + Node *scene_root = editor->get_scene_tree_dock()->get_editor_data()->get_edited_scene_root(); + if (previewing_cinema == true && scene_root != NULL) { + Camera *cam = scene_root->get_viewport()->get_camera(); + if (cam != NULL && cam != previewing) { + //then switch the viewport's camera to the scene's viewport camera + if (previewing != NULL) { + previewing->disconnect("tree_exited", this, "_preview_exited_scene"); + } + previewing = cam; + previewing->connect("tree_exited", this, "_preview_exited_scene"); + VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), cam->get_camera()); + surface->update(); + } + } + _update_camera(delta); Map<Node *, Object *> &selection = editor_selection->get_selection(); @@ -2256,6 +2276,13 @@ void SpatialEditorViewport::_notification(int p_what) { text += TTR("FPS") + ": " + itos(temp_fps) + " (" + String::num(1000.0f / temp_fps, 2) + " ms)"; fps_label->set_text(text); } + + bool show_cinema = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW)); + cinema_label->set_visible(show_cinema); + if (show_cinema) { + float cinema_half_width = cinema_label->get_size().width / 2.0f; + cinema_label->set_anchor_and_margin(MARGIN_LEFT, 0.5f, -cinema_half_width); + } } if (p_what == NOTIFICATION_ENTER_TREE) { @@ -2268,6 +2295,7 @@ void SpatialEditorViewport::_notification(int p_what) { surface->connect("focus_exited", this, "_surface_focus_exit"); info_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); fps_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + cinema_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); preview_camera->set_icon(get_icon("Camera", "EditorIcons")); _init_gizmo_instance(index); } @@ -2563,6 +2591,19 @@ void SpatialEditorViewport::_menu_option(int p_option) { _update_name(); } break; + case VIEW_LOCK_ROTATION: { + + int idx = view_menu->get_popup()->get_item_index(VIEW_LOCK_ROTATION); + bool current = view_menu->get_popup()->is_item_checked(idx); + lock_rotation = !current; + view_menu->get_popup()->set_item_checked(idx, !current); + if (lock_rotation) { + view_menu->set_icon(get_icon("Lock", "EditorIcons")); + } else { + view_menu->set_icon(Ref<Texture>()); + } + + } break; case VIEW_AUDIO_LISTENER: { int idx = view_menu->get_popup()->get_item_index(VIEW_AUDIO_LISTENER); @@ -2581,6 +2622,22 @@ void SpatialEditorViewport::_menu_option(int p_option) { view_menu->get_popup()->set_item_checked(idx, current); } break; + case VIEW_CINEMATIC_PREVIEW: { + + int idx = view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW); + bool current = view_menu->get_popup()->is_item_checked(idx); + current = !current; + view_menu->get_popup()->set_item_checked(idx, current); + previewing_cinema = true; + _toggle_cinema_preview(current); + + if (current) { + preview_camera->hide(); + } else { + if (previewing != NULL) + preview_camera->show(); + } + } break; case VIEW_GIZMOS: { int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS); @@ -2744,6 +2801,25 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { } } +void SpatialEditorViewport::_toggle_cinema_preview(bool p_activate) { + previewing_cinema = p_activate; + if (!previewing_cinema) { + if (previewing != NULL) + previewing->disconnect("tree_exited", this, "_preview_exited_scene"); + + previewing = NULL; + VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), camera->get_camera()); //restore + preview_camera->set_pressed(false); + if (!preview) { + preview_camera->hide(); + } else { + preview_camera->show(); + } + view_menu->show(); + surface->update(); + } +} + void SpatialEditorViewport::_selection_result_pressed(int p_result) { if (selection_results.size() <= p_result) @@ -2768,7 +2844,7 @@ void SpatialEditorViewport::set_can_preview(Camera *p_preview) { preview = p_preview; - if (!preview_camera->is_pressed()) + if (!preview_camera->is_pressed() && !previewing_cinema) preview_camera->set_visible(p_preview); } @@ -2836,6 +2912,12 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { if (!view_menu->get_popup()->is_item_checked(idx)) _menu_option(display); } + if (p_state.has("lock_rotation")) { + lock_rotation = p_state["lock_rotation"]; + + int idx = view_menu->get_popup()->get_item_index(VIEW_LOCK_ROTATION); + view_menu->get_popup()->set_item_checked(idx, lock_rotation); + } if (p_state.has("use_environment")) { bool env = p_state["use_environment"]; @@ -2883,6 +2965,12 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { int idx = view_menu->get_popup()->get_item_index(VIEW_HALF_RESOLUTION); view_menu->get_popup()->set_item_checked(idx, half_res); } + if (p_state.has("cinematic_preview")) { + previewing_cinema = p_state["cinematic_preview"]; + + int idx = view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW); + view_menu->get_popup()->set_item_checked(idx, previewing_cinema); + } if (p_state.has("previewing")) { Node *pv = EditorNode::get_singleton()->get_edited_scene()->get_node(p_state["previewing"]); @@ -2921,8 +3009,11 @@ Dictionary SpatialEditorViewport::get_state() const { d["information"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION)); d["fps"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_FPS)); d["half_res"] = viewport_container->get_stretch_shrink() > 1; + d["cinematic_preview"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW)); if (previewing) d["previewing"] = EditorNode::get_singleton()->get_edited_scene()->get_path_to(previewing); + if (lock_rotation) + d["lock_rotation"] = lock_rotation; return d; } @@ -2951,6 +3042,7 @@ void SpatialEditorViewport::_bind_methods() { void SpatialEditorViewport::reset() { orthogonal = false; + lock_rotation = false; message_time = 0; message = ""; last_message = ""; @@ -3377,6 +3469,8 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed view_menu->get_popup()->add_radio_check_item(TTR("Orthogonal") + " (" + ED_GET_SHORTCUT("spatial_editor/switch_perspective_orthogonal")->get_as_text() + ")", VIEW_ORTHOGONAL); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_PERSPECTIVE), true); view_menu->get_popup()->add_separator(); + view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_lock_rotation", TTR("Lock View Rotation")), VIEW_LOCK_ROTATION); + view_menu->get_popup()->add_separator(); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_normal", TTR("Display Normal")), VIEW_DISPLAY_NORMAL); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_wireframe", TTR("Display Wireframe")), VIEW_DISPLAY_WIREFRAME); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_overdraw", TTR("Display Overdraw")), VIEW_DISPLAY_OVERDRAW); @@ -3396,6 +3490,9 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_GIZMOS), true); view_menu->get_popup()->add_separator(); + view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_cinematic_preview", TTR("Cinematic Preview")), VIEW_CINEMATIC_PREVIEW); + + view_menu->get_popup()->add_separator(); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/focus_origin"), VIEW_CENTER_TO_ORIGIN); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/focus_selection"), VIEW_CENTER_TO_SELECTION); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/align_selection_with_view"), VIEW_ALIGN_SELECTION_WITH_VIEW); @@ -3445,6 +3542,15 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed surface->add_child(fps_label); fps_label->hide(); + cinema_label = memnew(Label); + cinema_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); + cinema_label->set_h_grow_direction(GROW_DIRECTION_END); + cinema_label->set_align(Label::ALIGN_CENTER); + surface->add_child(cinema_label); + cinema_label->set_text(TTR("Cinematic Preview")); + cinema_label->hide(); + previewing_cinema = false; + accept = NULL; freelook_active = false; @@ -4241,6 +4347,9 @@ void SpatialEditor::_menu_item_pressed(int p_option) { settings_dialog->popup_centered(settings_vbc->get_combined_minimum_size() + Size2(50, 50)); } break; + case MENU_SNAP_TO_FLOOR: { + snap_selected_nodes_to_floor(); + } break; case MENU_LOCK_SELECTED: { List<Node *> &selection = editor_selection->get_selected_node_list(); @@ -4716,6 +4825,119 @@ void SpatialEditor::_refresh_menu_icons() { tool_button[TOOL_UNLOCK_SELECTED]->set_visible(all_locked); } +template <typename T> +Set<T *> _get_child_nodes(Node *parent_node) { + Set<T *> nodes = Set<T *>(); + T *node = Node::cast_to<T>(parent_node); + if (node) { + nodes.insert(node); + } + + for (int i = 0; i < parent_node->get_child_count(); i++) { + Node *child_node = parent_node->get_child(i); + Set<T *> child_nodes = _get_child_nodes<T>(child_node); + for (typename Set<T *>::Element *I = child_nodes.front(); I; I = I->next()) { + nodes.insert(I->get()); + } + } + + return nodes; +} + +Set<RID> _get_physics_bodies_rid(Node *node) { + Set<RID> rids = Set<RID>(); + PhysicsBody *pb = Node::cast_to<PhysicsBody>(node); + if (pb) { + rids.insert(pb->get_rid()); + } + Set<PhysicsBody *> child_nodes = _get_child_nodes<PhysicsBody>(node); + for (Set<PhysicsBody *>::Element *I = child_nodes.front(); I; I = I->next()) { + rids.insert(I->get()->get_rid()); + } + + return rids; +} + +void SpatialEditor::snap_selected_nodes_to_floor() { + List<Node *> &selection = editor_selection->get_selected_node_list(); + Dictionary snap_data; + + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + Spatial *sp = Object::cast_to<Spatial>(E->get()); + if (sp) { + Vector3 from = Vector3(); + Vector3 position_offset = Vector3(); + + // Priorities for snapping to floor are CollisionShapes, VisualInstances and then origin + Set<VisualInstance *> vi = _get_child_nodes<VisualInstance>(sp); + Set<CollisionShape *> cs = _get_child_nodes<CollisionShape>(sp); + + if (cs.size()) { + AABB aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb()); + for (Set<CollisionShape *>::Element *I = cs.front(); I; I = I->next()) { + aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb())); + } + Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); + from = aabb.position + size; + position_offset.y = from.y - sp->get_global_transform().origin.y; + } else if (vi.size()) { + AABB aabb = vi.front()->get()->get_transformed_aabb(); + for (Set<VisualInstance *>::Element *I = vi.front(); I; I = I->next()) { + aabb.merge_with(I->get()->get_transformed_aabb()); + } + Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); + from = aabb.position + size; + position_offset.y = from.y - sp->get_global_transform().origin.y; + } else { + from = sp->get_global_transform().origin; + } + + // We add a bit of margin to the from position to avoid it from snapping + // when the spatial is already on a floor and there's another floor under + // it + from = from + Vector3(0.0, 0.1, 0.0); + + Dictionary d; + + d["from"] = from; + d["position_offset"] = position_offset; + snap_data[sp] = d; + } + } + + PhysicsDirectSpaceState *ss = get_tree()->get_root()->get_world()->get_direct_space_state(); + PhysicsDirectSpaceState::RayResult result; + + Array keys = snap_data.keys(); + + if (keys.size()) { + undo_redo->create_action("Snap Nodes To Floor"); + + for (int i = 0; i < keys.size(); i++) { + Node *node = keys[i]; + Spatial *sp = Object::cast_to<Spatial>(node); + + Dictionary d = snap_data[node]; + Vector3 from = d["from"]; + Vector3 position_offset = d["position_offset"]; + + Vector3 to = from - Vector3(0.0, 10.0, 0.0); + Set<RID> excluded = _get_physics_bodies_rid(sp); + + if (ss->intersect_ray(from, to, result, excluded)) { + Transform new_transform = sp->get_global_transform(); + new_transform.origin.y = result.position.y; + new_transform.origin = new_transform.origin - position_offset; + + undo_redo->add_do_method(sp, "set_global_transform", new_transform); + undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_transform()); + } + } + + undo_redo->commit_action(); + } +} + void SpatialEditor::_unhandled_key_input(Ref<InputEvent> p_event) { if (!is_visible_in_tree() || get_viewport()->gui_has_modal_stack()) @@ -4744,6 +4966,8 @@ void SpatialEditor::_unhandled_key_input(Ref<InputEvent> p_event) { else if (ED_IS_SHORTCUT("spatial_editor/tool_scale", p_event)) _menu_item_pressed(MENU_TOOL_SCALE); + else if (ED_IS_SHORTCUT("spatial_editor/snap_to_floor", p_event)) + snap_selected_nodes_to_floor(); else if (ED_IS_SHORTCUT("spatial_editor/local_coords", p_event)) if (are_local_coords_enabled()) { @@ -5009,7 +5233,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_SELECT]->set_toggle_mode(true); tool_button[TOOL_MODE_SELECT]->set_flat(true); tool_button[TOOL_MODE_SELECT]->set_pressed(true); - button_binds[0] = MENU_TOOL_SELECT; + button_binds.write[0] = MENU_TOOL_SELECT; tool_button[TOOL_MODE_SELECT]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_SELECT]->set_tooltip(TTR("Select Mode (Q)") + "\n" + keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate\nAlt+Drag: Move\nAlt+RMB: Depth list selection")); @@ -5017,7 +5241,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_button[TOOL_MODE_MOVE]); tool_button[TOOL_MODE_MOVE]->set_toggle_mode(true); tool_button[TOOL_MODE_MOVE]->set_flat(true); - button_binds[0] = MENU_TOOL_MOVE; + button_binds.write[0] = MENU_TOOL_MOVE; tool_button[TOOL_MODE_MOVE]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_MOVE]->set_tooltip(TTR("Move Mode (W)")); @@ -5025,7 +5249,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_button[TOOL_MODE_ROTATE]); tool_button[TOOL_MODE_ROTATE]->set_toggle_mode(true); tool_button[TOOL_MODE_ROTATE]->set_flat(true); - button_binds[0] = MENU_TOOL_ROTATE; + button_binds.write[0] = MENU_TOOL_ROTATE; tool_button[TOOL_MODE_ROTATE]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_ROTATE]->set_tooltip(TTR("Rotate Mode (E)")); @@ -5033,7 +5257,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_button[TOOL_MODE_SCALE]); tool_button[TOOL_MODE_SCALE]->set_toggle_mode(true); tool_button[TOOL_MODE_SCALE]->set_flat(true); - button_binds[0] = MENU_TOOL_SCALE; + button_binds.write[0] = MENU_TOOL_SCALE; tool_button[TOOL_MODE_SCALE]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_SCALE]->set_tooltip(TTR("Scale Mode (R)")); @@ -5041,19 +5265,19 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_button[TOOL_MODE_LIST_SELECT]); tool_button[TOOL_MODE_LIST_SELECT]->set_toggle_mode(true); tool_button[TOOL_MODE_LIST_SELECT]->set_flat(true); - button_binds[0] = MENU_TOOL_LIST_SELECT; + button_binds.write[0] = MENU_TOOL_LIST_SELECT; tool_button[TOOL_MODE_LIST_SELECT]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_LIST_SELECT]->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode).")); tool_button[TOOL_LOCK_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_LOCK_SELECTED]); - button_binds[0] = MENU_LOCK_SELECTED; + button_binds.write[0] = MENU_LOCK_SELECTED; tool_button[TOOL_LOCK_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_LOCK_SELECTED]->set_tooltip(TTR("Lock the selected object in place (can't be moved).")); tool_button[TOOL_UNLOCK_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_UNLOCK_SELECTED]); - button_binds[0] = MENU_UNLOCK_SELECTED; + button_binds.write[0] = MENU_UNLOCK_SELECTED; tool_button[TOOL_UNLOCK_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_UNLOCK_SELECTED]->set_tooltip(TTR("Unlock the selected object (can be moved).")); @@ -5064,7 +5288,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_option_button[TOOL_OPT_LOCAL_COORDS]); tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_toggle_mode(true); tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_flat(true); - button_binds[0] = MENU_TOOL_LOCAL_COORDS; + button_binds.write[0] = MENU_TOOL_LOCAL_COORDS; tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect("toggled", this, "_menu_item_toggled", button_binds); ED_SHORTCUT("spatial_editor/local_coords", TTR("Local Coords"), KEY_T); sct = ED_GET_SHORTCUT("spatial_editor/local_coords").ptr()->get_as_text(); @@ -5074,7 +5298,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(tool_option_button[TOOL_OPT_USE_SNAP]); tool_option_button[TOOL_OPT_USE_SNAP]->set_toggle_mode(true); tool_option_button[TOOL_OPT_USE_SNAP]->set_flat(true); - button_binds[0] = MENU_TOOL_USE_SNAP; + button_binds.write[0] = MENU_TOOL_USE_SNAP; tool_option_button[TOOL_OPT_USE_SNAP]->connect("toggled", this, "_menu_item_toggled", button_binds); ED_SHORTCUT("spatial_editor/snap", TTR("Snap"), KEY_Y); sct = ED_GET_SHORTCUT("spatial_editor/snap").ptr()->get_as_text(); @@ -5103,6 +5327,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { ED_SHORTCUT("spatial_editor/tool_move", TTR("Tool Move"), KEY_W); ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Tool Rotate"), KEY_E); ED_SHORTCUT("spatial_editor/tool_scale", TTR("Tool Scale"), KEY_R); + ED_SHORTCUT("spatial_editor/snap_to_floor", TTR("Snap To Floor"), KEY_PAGEDOWN); ED_SHORTCUT("spatial_editor/freelook_toggle", TTR("Toggle Freelook"), KEY_MASK_SHIFT + KEY_F); @@ -5113,6 +5338,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { hbc_menu->add_child(transform_menu); p = transform_menu->get_popup(); + p->add_shortcut(ED_SHORTCUT("spatial_editor/snap_to_floor", TTR("Snap object to floor")), MENU_SNAP_TO_FLOOR); p->add_shortcut(ED_SHORTCUT("spatial_editor/configure_snap", TTR("Configure Snap...")), MENU_TRANSFORM_CONFIGURE_SNAP); p->add_separator(); p->add_shortcut(ED_SHORTCUT("spatial_editor/transform_dialog", TTR("Transform Dialog...")), MENU_TRANSFORM_DIALOG); diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index af882f6e05..bd449a28df 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -94,7 +94,9 @@ class SpatialEditorViewport : public Control { VIEW_DISPLAY_NORMAL, VIEW_DISPLAY_WIREFRAME, VIEW_DISPLAY_OVERDRAW, - VIEW_DISPLAY_SHADELESS + VIEW_DISPLAY_SHADELESS, + VIEW_LOCK_ROTATION, + VIEW_CINEMATIC_PREVIEW }; public: @@ -108,7 +110,6 @@ private: int index; String name; void _menu_option(int p_option); - Spatial *preview_node; AABB *preview_bounds; Vector<String> selected_files; @@ -132,6 +133,7 @@ private: Camera *camera; bool transforming; bool orthogonal; + bool lock_rotation; float gizmo_scale; bool freelook_active; @@ -139,6 +141,7 @@ private: Label *info_label; Label *fps_label; + Label *cinema_label; struct _RayResult { @@ -287,8 +290,11 @@ private: Camera *previewing; Camera *preview; + bool previewing_cinema; + void _preview_exited_scene(); void _toggle_camera_preview(bool); + void _toggle_cinema_preview(bool); void _init_gizmo_instance(int p_idx); void _finish_gizmo_instances(); void _selection_result_pressed(int); @@ -403,7 +409,6 @@ public: TOOL_LOCK_SELECTED, TOOL_UNLOCK_SELECTED, TOOL_MAX - }; enum ToolOptions { @@ -487,7 +492,8 @@ private: MENU_VIEW_CAMERA_SETTINGS, MENU_LOCK_SELECTED, MENU_UNLOCK_SELECTED, - MENU_VISIBILITY_SKELETON + MENU_VISIBILITY_SKELETON, + MENU_SNAP_TO_FLOOR }; Button *tool_button[TOOL_MAX]; @@ -596,7 +602,7 @@ public: void update_transform_gizmo(); void update_all_gizmos(); - + void snap_selected_nodes_to_floor(); void select_gizmo_highlight_axis(int p_axis); void set_custom_camera(Node *p_camera) { custom_camera = p_camera; } diff --git a/editor/plugins/sprite_editor_plugin.cpp b/editor/plugins/sprite_editor_plugin.cpp index 66673cca00..9bf1178b58 100644 --- a/editor/plugins/sprite_editor_plugin.cpp +++ b/editor/plugins/sprite_editor_plugin.cpp @@ -169,7 +169,7 @@ void SpriteEditor::_update_mesh_data() { Size2 img_size = Vector2(image->get_width(), image->get_height()); for (int j = 0; j < lines.size(); j++) { - lines[j] = expand(lines[j], rect, epsilon); + lines.write[j] = expand(lines[j], rect, epsilon); int index_ofs = computed_vertices.size(); diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 484da3b4f3..435ef229c5 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -196,7 +196,7 @@ Vector<int> TileMapEditor::get_selected_tiles() const { } for (int i = items.size() - 1; i >= 0; i--) { - items[i] = palette->get_item_metadata(items[i]); + items.write[i] = palette->get_item_metadata(items[i]); } return items; } @@ -983,7 +983,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { ids.push_back(0); for (List<TileData>::Element *E = copydata.front(); E; E = E->next()) { - ids[0] = E->get().cell; + ids.write[0] = E->get().cell; _set_cell(E->get().pos + ofs, ids, E->get().flip_h, E->get().flip_v, E->get().transpose); } _finish_undo(); @@ -1006,7 +1006,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } for (List<TileData>::Element *E = copydata.front(); E; E = E->next()) { - ids[0] = E->get().cell; + ids.write[0] = E->get().cell; _set_cell(E->get().pos + ofs, ids, E->get().flip_h, E->get().flip_v, E->get().transpose); } _finish_undo(); @@ -1228,7 +1228,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) { - tmp_cell[0] = E->get().idx; + tmp_cell.write[0] = E->get().idx; _set_cell(E->key(), tmp_cell, E->get().xf, E->get().yf, E->get().tr); } } @@ -1265,7 +1265,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) { - tmp_cell[0] = E->get().idx; + tmp_cell.write[0] = E->get().idx; _set_cell(E->key(), tmp_cell, E->get().xf, E->get().yf, E->get().tr); } } @@ -1750,7 +1750,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { bucket_cache_visited = 0; invalid_cell.resize(1); - invalid_cell[0] = TileMap::INVALID_CELL; + invalid_cell.write[0] = TileMap::INVALID_CELL; ED_SHORTCUT("tile_map_editor/erase_selection", TTR("Erase Selection"), KEY_DELETE); ED_SHORTCUT("tile_map_editor/find_tile", TTR("Find Tile"), KEY_MASK_CMD + KEY_F); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index b9b8b07a2e..9218fed907 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -190,7 +190,7 @@ void VisualShaderEditor::_update_graph() { } for (int i = 0; i < plugins.size(); i++) { - custom_editor = plugins[i]->create_editor(vsnode); + custom_editor = plugins.write[i]->create_editor(vsnode); if (custom_editor) { break; } diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index af7c4bb379..95d39953cf 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -1781,8 +1781,8 @@ ProjectManager::ProjectManager() { vb->add_constant_override("separation", 15 * EDSCALE); String cp; - cp.push_back(0xA9); - cp.push_back(0); + cp += 0xA9; + cp += '0'; OS::get_singleton()->set_window_title(VERSION_NAME + String(" - ") + TTR("Project Manager") + " - " + cp + " 2007-2018 Juan Linietsky, Ariel Manzur & Godot Contributors"); HBoxContainer *top_hb = memnew(HBoxContainer); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index e6ae2d64e7..2b2e03ce38 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -1462,7 +1462,7 @@ void ProjectSettingsEditor::_update_translations() { t->set_editable(0, true); t->set_tooltip(0, l); t->set_checked(0, l_filter.has(l)); - translation_filter_treeitems[i] = t; + translation_filter_treeitems.write[i] = t; } } else { for (int i = 0; i < s; i++) { @@ -1502,7 +1502,7 @@ void ProjectSettingsEditor::_update_translations() { if (langnames.length() > 0) langnames += ","; langnames += names[i]; - translation_locales_idxs_remap[l_idx] = i; + translation_locales_idxs_remap.write[l_idx] = i; l_idx++; } } diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 576227344b..b370a711e3 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -90,7 +90,7 @@ bool EditorResourceConversionPlugin::handles(const Ref<Resource> &p_resource) co return false; } -Ref<Resource> EditorResourceConversionPlugin::convert(const Ref<Resource> &p_resource) { +Ref<Resource> EditorResourceConversionPlugin::convert(const Ref<Resource> &p_resource) const { if (get_script_instance()) return get_script_instance()->call("_convert", p_resource); diff --git a/editor/property_editor.h b/editor/property_editor.h index 56743822d2..7d8fa22f3f 100644 --- a/editor/property_editor.h +++ b/editor/property_editor.h @@ -64,7 +64,7 @@ protected: public: virtual String converts_to() const; virtual bool handles(const Ref<Resource> &p_resource) const; - virtual Ref<Resource> convert(const Ref<Resource> &p_resource); + virtual Ref<Resource> convert(const Ref<Resource> &p_resource) const; }; class CustomPropertyEditor : public Popup { diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp index 26dd931321..907bb50f7e 100644 --- a/editor/quick_open.cpp +++ b/editor/quick_open.cpp @@ -195,7 +195,7 @@ Vector<Pair<String, Ref<Texture> > > EditorQuickOpen::_sort_fs(Vector<Pair<Strin Vector<float> scores; scores.resize(list.size()); for (int i = 0; i < list.size(); i++) - scores[i] = _path_cmp(search_text, list[i].first); + scores.write[i] = _path_cmp(search_text, list[i].first); while (list.size() > 0) { diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 8d38bf39b5..d8982c751c 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -349,21 +349,33 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { break; Ref<Script> existing = selected->get_script(); - if (existing.is_valid()) - editor->push_item(existing.ptr()); - else { - String path = selected->get_filename(); - if (path == "") { - String root_path = editor_data->get_edited_scene_root()->get_filename(); - if (root_path == "") { - path = "res://" + selected->get_name(); - } else { - path = root_path.get_base_dir() + "/" + selected->get_name(); + + String path = selected->get_filename(); + if (path == "") { + String root_path = editor_data->get_edited_scene_root()->get_filename(); + if (root_path == "") { + path = "res://" + selected->get_name(); + } else { + path = root_path.get_base_dir() + "/" + selected->get_name(); + } + } + + String inherits = selected->get_class(); + if (existing.is_valid()) { + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptLanguage *l = ScriptServer::get_language(i); + if (l->get_type() == existing->get_class()) { + if (EDITOR_GET("interface/editors/derive_script_globals_by_name").operator bool()) { + String name = l->get_global_class_name(existing->get_path(), NULL); + inherits = editor->get_editor_data().script_class_get_base(name); + } else if (l->can_inherit_from_file()) { + inherits = "\"" + existing->get_path() + "\""; + } } } - script_create_dialog->config(selected->get_class(), path); - script_create_dialog->popup_centered(); } + script_create_dialog->config(inherits, path); + script_create_dialog->popup_centered(); } break; case TOOL_CLEAR_SCRIPT: { @@ -1426,13 +1438,9 @@ void SceneTreeDock::_script_created(Ref<Script> p_script) { editor_data->get_undo_redo().add_undo_method(E->get(), "set_script", existing); } - editor_data->get_undo_redo().add_do_method(editor, "push_item", p_script.operator->()); - editor_data->get_undo_redo().add_undo_method(editor, "push_item", (Script *)NULL); - - editor_data->get_undo_redo().add_do_method(this, "_update_script_button"); - editor_data->get_undo_redo().add_undo_method(this, "_update_script_button"); - editor_data->get_undo_redo().commit_action(); + + editor->push_item(p_script.operator->()); } void SceneTreeDock::_delete_confirm() { @@ -1521,16 +1529,9 @@ void SceneTreeDock::_delete_confirm() { void SceneTreeDock::_update_script_button() { if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) { - if (EditorNode::get_singleton()->get_editor_selection()->get_selection().front()->key()->get_script().is_null()) { - button_create_script->show(); - button_clear_script->hide(); - } else { - button_create_script->hide(); - button_clear_script->show(); - } + button_create_script->show(); } else { button_create_script->hide(); - button_clear_script->hide(); } } diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index 9ce0e973f7..e483fde4bc 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -658,7 +658,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da Vector<float> p; p.resize(arr.size()); for (int i = 0; i < arr.size(); i++) { - p[i] = arr[i]; + p.write[i] = arr[i]; if (i < perf_items.size()) { float v = p[i]; @@ -693,7 +693,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da perf_items[i]->set_text(1, vs); perf_items[i]->set_tooltip(1, tt); if (p[i] > perf_max[i]) - perf_max[i] = p[i]; + perf_max.write[i] = p[i]; } } perf_history.push_front(p); @@ -807,7 +807,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da item.signature = "categ::" + name + "::" + item.name; item.name = item.name.capitalize(); c.total_time += item.total; - c.items[i / 2] = item; + c.items.write[i / 2] = item; } metric.categories.push_back(c); } @@ -844,7 +844,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da item.calls = calls; item.self = self; item.total = total; - funcs.items[i] = item; + funcs.items.write[i] = item; } metric.categories.push_back(funcs); @@ -1193,7 +1193,7 @@ void ScriptEditorDebugger::start() { perf_history.clear(); for (int i = 0; i < Performance::MONITOR_MAX; i++) { - perf_max[i] = 0; + perf_max.write[i] = 0; } int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port"); @@ -2076,7 +2076,7 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { it->set_selectable(1, false); it->set_text(0, name.capitalize()); perf_items.push_back(it); - perf_max[i] = 0; + perf_max.write[i] = 0; } } diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 35544f711b..c450c0fd4c 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -229,7 +229,7 @@ void EditorSpatialGizmo::add_collision_segments(const Vector<Vector3> &p_lines) collision_segments.resize(from + p_lines.size()); for (int i = 0; i < p_lines.size(); i++) { - collision_segments[from + i] = p_lines[i]; + collision_segments.write[from + i] = p_lines[i]; } } @@ -296,14 +296,14 @@ void EditorSpatialGizmo::add_handles(const Vector<Vector3> &p_handles, bool p_bi int chs = handles.size(); handles.resize(chs + p_handles.size()); for (int i = 0; i < p_handles.size(); i++) { - handles[i + chs] = p_handles[i]; + handles.write[i + chs] = p_handles[i]; } } else { int chs = secondary_handles.size(); secondary_handles.resize(chs + p_handles.size()); for (int i = 0; i < p_handles.size(); i++) { - secondary_handles[i + chs] = p_handles[i]; + secondary_handles.write[i + chs] = p_handles[i]; } } } @@ -597,7 +597,7 @@ void EditorSpatialGizmo::create() { for (int i = 0; i < instances.size(); i++) { - instances[i].create_instance(spatial_node); + instances.write[i].create_instance(spatial_node); } transform(); @@ -621,7 +621,7 @@ void EditorSpatialGizmo::free() { if (instances[i].instance.is_valid()) VS::get_singleton()->free(instances[i].instance); - instances[i].instance = RID(); + instances.write[i].instance = RID(); } valid = false; @@ -1124,8 +1124,8 @@ void AudioStreamPlayer3DSpatialGizmo::redraw() { Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); Vector3 to(Math::sin(an) * radius, Math::cos(an) * radius, ofs); - points[i * 2 + 0] = from; - points[i * 2 + 1] = to; + points.write[i * 2 + 0] = from; + points.write[i * 2 + 1] = to; } for (int i = 0; i < 4; i++) { @@ -1134,8 +1134,8 @@ void AudioStreamPlayer3DSpatialGizmo::redraw() { Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); - points[200 + i * 2 + 0] = from; - points[200 + i * 2 + 1] = Vector3(); + points.write[200 + i * 2 + 0] = from; + points.write[200 + i * 2 + 1] = Vector3(); } add_lines(points, material); @@ -1441,11 +1441,11 @@ void SkeletonSpatialGizmo::redraw() { weights.resize(4); for (int i = 0; i < 4; i++) { - bones[i] = 0; - weights[i] = 0; + bones.write[i] = 0; + weights.write[i] = 0; } - weights[0] = 1; + weights.write[0] = 1; AABB aabb; @@ -1457,7 +1457,7 @@ void SkeletonSpatialGizmo::redraw() { int parent = skel->get_bone_parent(i); if (parent >= 0) { - grests[i] = grests[parent] * skel->get_bone_rest(i); + grests.write[i] = grests[parent] * skel->get_bone_rest(i); Vector3 v0 = grests[parent].origin; Vector3 v1 = grests[i].origin; @@ -1480,7 +1480,7 @@ void SkeletonSpatialGizmo::redraw() { int pointidx = 0; for (int j = 0; j < 3; j++) { - bones[0] = parent; + bones.write[0] = parent; surface_tool->add_bones(bones); surface_tool->add_weights(weights); surface_tool->add_color(rootcolor); @@ -1508,7 +1508,7 @@ void SkeletonSpatialGizmo::redraw() { Vector3 point = v0 + d * dist * 0.2; point += axis * dist * 0.1; - bones[0] = parent; + bones.write[0] = parent; surface_tool->add_bones(bones); surface_tool->add_weights(weights); surface_tool->add_color(bonecolor); @@ -1518,12 +1518,12 @@ void SkeletonSpatialGizmo::redraw() { surface_tool->add_color(bonecolor); surface_tool->add_vertex(point); - bones[0] = parent; + bones.write[0] = parent; surface_tool->add_bones(bones); surface_tool->add_weights(weights); surface_tool->add_color(bonecolor); surface_tool->add_vertex(point); - bones[0] = i; + bones.write[0] = i; surface_tool->add_bones(bones); surface_tool->add_weights(weights); surface_tool->add_color(bonecolor); @@ -1535,7 +1535,7 @@ void SkeletonSpatialGizmo::redraw() { SWAP(points[1], points[2]); for (int j = 0; j < 4; j++) { - bones[0] = parent; + bones.write[0] = parent; surface_tool->add_bones(bones); surface_tool->add_weights(weights); surface_tool->add_color(bonecolor); @@ -1560,8 +1560,8 @@ void SkeletonSpatialGizmo::redraw() { */ } else { - grests[i] = skel->get_bone_rest(i); - bones[0] = i; + grests.write[i] = skel->get_bone_rest(i); + bones.write[0] = i; } /* Transform t = grests[i]; @@ -2542,8 +2542,8 @@ void CollisionShapeSpatialGizmo::redraw() { Vector<Vector3> points; points.resize(md.edges.size() * 2); for (int i = 0; i < md.edges.size(); i++) { - points[i * 2 + 0] = md.vertices[md.edges[i].a]; - points[i * 2 + 1] = md.vertices[md.edges[i].b]; + points.write[i * 2 + 0] = md.vertices[md.edges[i].a]; + points.write[i * 2 + 1] = md.vertices[md.edges[i].b]; } add_lines(points, material); diff --git a/editor/translations/af.po b/editor/translations/af.po index c5853bbb2f..d4c8bc26f4 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -7328,6 +7328,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index ccf2b97d9a..1535ccafb6 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.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. -# # Adel <dragonhunter250@gmail.com>, 2018. # athomield <athomield@hotmail.com>, 2017. # Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017. @@ -15,13 +14,12 @@ # 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. +# Rex_sa <asd1234567890m@gmail.com>, 2017, 2018. # Wajdi Feki <wajdi.feki@gmail.com>, 2017. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-28 18:34+0000\n" +"PO-Revision-Date: 2018-07-15 19: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" @@ -30,7 +28,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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -4331,11 +4329,11 @@ msgstr "ولد رؤية AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "" +msgstr "إزالة نقطة من المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "" +msgstr "أزل Out-Control من المنحنى" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" @@ -7392,6 +7390,11 @@ msgstr "بناء المشروع" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "إظهار الملفات" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -8076,7 +8079,7 @@ msgstr "" #: scene/resources/dynamic_font.cpp msgid "Invalid font size." -msgstr "" +msgstr "حجم الخط غير صالح" #~ msgid "Next" #~ msgstr "التالي" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 9f366b3d2f..71b9216b46 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -7383,6 +7383,11 @@ msgstr "Проект" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Преглед на файловете" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 3d00e3450c..aa36beefb6 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -7773,6 +7773,11 @@ msgstr "নতুন প্রকল্প" msgid "Warnings" msgstr "সতর্কতা" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "ফাইল" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index d2bffb0f84..085241296e 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -7438,6 +7438,11 @@ msgstr "Munta el Projecte" msgid "Warnings" msgstr "Avisos" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Visualitza Fitxers" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Final de la traça de la pila d'excepció interna" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 1066bbad94..b4cf176796 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -7372,6 +7372,11 @@ msgstr "Sestavit projekt" msgid "Warnings" msgstr "Varování" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Zobrazit soubory" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/da.po b/editor/translations/da.po index 3b5854334a..fcfdb6d249 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -7445,6 +7445,11 @@ msgstr "Projekt" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Vis filer" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/de.po b/editor/translations/de.po index d5d63f654b..c61d78e37e 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -27,12 +27,15 @@ # Tim Schellenberg <smwleod@gmail.com>, 2017. # Timo Schwarzer <account@timoschwarzer.com>, 2016-2018. # viernullvier <hannes.breul+github@gmail.com>, 2016. +# Arndt Heuvel <codeforpb@schatzkarten.net>, 2018. +# Gordon <gkone@gmx.net>, 2018. +# chillhelm <wilhelm@neubert.online>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-06-19 19:38+0000\n" -"Last-Translator: nimradium <nimra242001@gmail.com>\n" +"PO-Revision-Date: 2018-07-05 12:38+0000\n" +"Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -40,7 +43,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.1\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -331,8 +334,7 @@ msgstr "Optimieren" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "" -"Wählen Sie einen AnimationPlayer aus dem Szenenbaum aus, um Animationen zu " -"bearbeiten." +"AnimationPlayer aus dem Szenenbaum auswählen um Animationen zu bearbeiten." #: editor/animation_editor.cpp msgid "Key" @@ -1948,7 +1950,7 @@ msgstr "Umwandeln zu..." #: editor/editor_node.cpp msgid "MeshLibrary..." -msgstr "MeshLibrary..." +msgstr "Mesh-Bibliothek..." #: editor/editor_node.cpp msgid "TileSet..." @@ -2483,7 +2485,7 @@ 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." @@ -6048,8 +6050,8 @@ msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"Konnte project.godot im Projektpfad nicht laden (Fehler %d). Sie könnte " -"fehlen oder beschädigt worden sein." +"Die Datei project.godot im Projektpfad konnte nicht geladen werden (Fehler " +"%d). Sie könnte fehlen oder beschädigt sein." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -7490,6 +7492,11 @@ msgstr "Projekt bauen" msgid "Warnings" msgstr "Warnungen" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Dateien anzeigen" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Ende des inneren Exception-Stack-Traces" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index 26f824bc4b..7d11a9d09f 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -7424,6 +7424,11 @@ msgstr "Projektname:" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Datei(en) öffnen" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 1cb31e0ee9..d0f1d04a10 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -7265,6 +7265,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index b3275b4647..4a9560e602 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -2,13 +2,11 @@ # 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. -# # George Tsiamasiotis <gtsiam@windowslive.com>, 2017-2018. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-20 09:37+0000\n" +"PO-Revision-Date: 2018-07-21 22:38+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 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -1135,7 +1133,7 @@ msgstr "Εμφάνιση στη διαχείριση αρχείων" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "Νέος φάκελος" +msgstr "Νέος φάκελος..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -2698,7 +2696,7 @@ msgstr "Μετονομασία..." #: editor/filesystem_dock.cpp msgid "Move To..." -msgstr "Μετακίνηση σε" +msgstr "Μετακίνηση σε..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2710,15 +2708,15 @@ msgstr "Στιγμιότυπο" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "Επεξεργασία εξαρτήσεων" +msgstr "Επεξεργασία εξαρτήσεων..." #: editor/filesystem_dock.cpp msgid "View Owners..." -msgstr "Προβολή ιδιοκτητών" +msgstr "Προβολή ιδιοκτητών..." #: editor/filesystem_dock.cpp msgid "Duplicate..." -msgstr "Αναπαραγωγή" +msgstr "Αναπαραγωγή..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -4031,7 +4029,7 @@ msgstr "Δημιουργία περιγράμματος" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Πλέγμα" +msgstr "Πλέγμα..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -5712,9 +5710,8 @@ msgid "Options" msgstr "Επιλογές" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Has,Many,Options" -msgstr "Έχει,Πάρα,Πολλές,Επιλογές!" +msgstr "Έχει,Πολλές,Επιλογές" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6001,9 +5998,8 @@ msgid "Imported Project" msgstr "Εισαγμένο έργο" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid Project Name." -msgstr "Όνομα έργου:" +msgstr "Άκυρο όνομα έργου." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -6207,13 +6203,12 @@ msgid "Mouse Button" msgstr "Κουμπί ποντικιού" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" "Άκυρο όνομα ενέργειας. Δεν μπορεί να είναι άδειο ή να περιέχει '/', ':', " -"'=', '\\' ή '\"'" +"'=', '\\' ή '\"'." #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7474,6 +7469,11 @@ msgstr "Δόμηση έργου" msgid "Warnings" msgstr "Προειδοποιήσεις" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Προβολή αρχείων" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Τέλος ιχνηλάτησης στοίβας εσωτερικής εξαίρεσης" diff --git a/editor/translations/es.po b/editor/translations/es.po index 89118d2501..8e1f0b13c9 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -29,12 +29,13 @@ # Swyter <swyterzone@gmail.com>, 2016-2017. # Vazquinhos <vazquinhos@gmail.com>, 2018. # Yovani Damián <blackblex@gmail.com>, 2018. +# Andrus Diaz German <andrusdiazaleman@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-06-22 08:31+0000\n" -"Last-Translator: R. Joshua Seville <rjoshua@protonmail.com>\n" +"PO-Revision-Date: 2018-07-20 16:43+0000\n" +"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -54,19 +55,19 @@ msgstr "Toda la Selección" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Cambiar el tiempo del Fotograma 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 la Transición de Animación" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Cambiar transformación de animación" +msgstr "Cambiar la Transformación de la Animación" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Cambiar valor del Fotograma Clave de Animación" +msgstr "Cambiar valor de la Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -114,7 +115,7 @@ 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 Curva del Nodo" #: editor/animation_editor.cpp msgid "Edit Selection Curve" @@ -163,7 +164,7 @@ msgstr "Escalar Selección" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "Escalar desde cursor" +msgstr "Escalar Desde Cursor" #: editor/animation_editor.cpp msgid "Goto Next Step" @@ -212,11 +213,11 @@ msgstr "Limpiar Animación" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "¿Quieres crear una NUEVA pista para %s e insertar clave?" +msgstr "¿Crear NUEVA pista para %s e insertar clave?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "¿Quieres crear %d NUEVAS pistas e insertar claves?" +msgstr "¿Crear %d NUEVAS pistas e insertar claves?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -288,7 +289,7 @@ msgstr "Activar/Desactivar Bucle de Animación." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "Añadir Nuevas Pistas." +msgstr "Añadir nuevas pistas." #: editor/animation_editor.cpp msgid "Move current track up." @@ -308,7 +309,7 @@ msgstr "Herramientas de pistas" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "Habilitar la edición de claves individuales al hacer clic." +msgstr "Habilitar la edición de claves individuales haciendo clic en ellas." #: editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -366,7 +367,7 @@ msgstr "Limpiar todas las animaciones" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "Limpiar todas las animaciones (IRREVERSIBLE)" +msgstr "Limpiar las Animación(es) (¡IRREVERSIBLE!)" #: editor/animation_editor.cpp msgid "Clean-Up" @@ -374,39 +375,39 @@ msgstr "Limpiar" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "Redimensionar «array»" +msgstr "Redimensionar Array" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "Cambiar tipo de valor del «array»" +msgstr "Cambiar Tipo de Valor del Array" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "Cambiar valor del «array»" +msgstr "Cambiar Valor del Array" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Ir a línea" +msgstr "Ir a Línea" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Número de línea:" +msgstr "Número de Línea:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "Sin coincidencias" +msgstr "Sin Coincidencias" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "%d ocurrencia/s reemplazadas." +msgstr "%d Ocurrencia(s) Reemplazada(s)." #: editor/code_editor.cpp msgid "Match Case" -msgstr "Coincidir mayús/minúsculas" +msgstr "Coincidir Mayús/Minúsculas" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "Palabras completas" +msgstr "Palabras Completas" #: editor/code_editor.cpp msgid "Replace" @@ -414,11 +415,11 @@ msgstr "Reemplazar" #: editor/code_editor.cpp msgid "Replace All" -msgstr "Reemplazar todo" +msgstr "Reemplazar Todo" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "Sólo selección" +msgstr "Sólo Selección" #: editor/code_editor.cpp msgid "Zoom In" @@ -430,7 +431,7 @@ msgstr "Alejar" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "Restablecer zoom" +msgstr "Restablecer Zoom" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" @@ -449,8 +450,8 @@ msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"No se encontró el método del objetivo! Especifica un método válido o adjunta " -"un script al Nodo objetivo." +"¡Método objetivo no encontrado! Especifica un método válido o añade un " +"script al Nodo objetivo." #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -471,11 +472,11 @@ msgstr "Quitar" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "Añadir argumento extra de llamada:" +msgstr "Añadir Argumento Extra de Llamada:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "Argumentos extras de llamada:" +msgstr "Argumentos Extras de Llamada:" #: editor/connections_dialog.cpp msgid "Path to Node:" @@ -483,7 +484,7 @@ msgstr "Ruta al Nodo:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "Crear función" +msgstr "Crear Función" #: editor/connections_dialog.cpp msgid "Deferred" @@ -538,7 +539,7 @@ msgstr "Señales" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "Cambiar el tipo de %s" +msgstr "Cambiar el Tipo de %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -579,11 +580,11 @@ msgstr "Descripción:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "Buscar reemplazo para:" +msgstr "Buscar Reemplazo Para:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "Dependencias para:" +msgstr "Dependencias Para:" #: editor/dependency_editor.cpp msgid "" @@ -622,7 +623,7 @@ msgstr "Dependencias:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "Arreglar rota(s)" +msgstr "Arreglar Rota(s)" #: editor/dependency_editor.cpp msgid "Dependency Editor" @@ -630,7 +631,7 @@ msgstr "Editor de Dependencias" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Buscar recurso de reemplazo:" +msgstr "Buscar Recurso de Reemplazo:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp @@ -641,13 +642,11 @@ msgstr "Abrir" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "Dueños de:" +msgstr "Dueños De:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" -"¿Quieres quitar los archivos seleccionados del proyecto? (No puedes " -"deshacerlo)" +msgstr "¿Quitar los archivos seleccionados del proyecto? (irreversible)" #: editor/dependency_editor.cpp msgid "" @@ -657,7 +656,7 @@ msgid "" msgstr "" "Otros recursos necesitan los archivos que estás intentando quitar para " "funcionar.\n" -"¿Seguro que quieres quitarlos? (No puedes deshacerlo)" +"¿Quitarlos de todos modos? (irreversible)" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -673,7 +672,7 @@ msgstr "La escena no se pudo cargar porque faltan las siguientes dependencias:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "Abrir de todos modos" +msgstr "Abrir de Todos Modos" #: editor/dependency_editor.cpp msgid "Which action should be taken?" @@ -689,23 +688,23 @@ msgstr "¡Hubo errores al cargar!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "¿Quieres eliminar permanentemente %d elementos? (Irreversible)" +msgstr "¿Eliminar permanentemente %d elemento(s)? (¡Irreversible!)" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "Es dueño de" +msgstr "Dueño de" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "Recursos sin propietario explícito:" +msgstr "Recursos Sin Propietario Explícito:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "Explorador de recursos huérfanos" +msgstr "Explorador de Recursos Huérfanos" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "¿Quieres eliminar los archivos seleccionados?" +msgstr "¿Eliminar los archivos seleccionados?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -745,7 +744,7 @@ msgstr "Desarrollador Principal" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "Administrador de proyectos " +msgstr "Administrador de Proyectos " #: editor/editor_about.cpp msgid "Developers" @@ -757,11 +756,11 @@ msgstr "Autores" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "Patrocinadores Platinum" +msgstr "Patrocinadores de Platino" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "Patrocinadores Gold" +msgstr "Patrocinadores de Oro" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -769,11 +768,11 @@ msgstr "Mini Patrocinadores" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Donantes Gold" +msgstr "Donantes de Oro" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Donantes Silver" +msgstr "Donantes de Plata" #: editor/editor_about.cpp msgid "Bronze Donors" @@ -825,7 +824,7 @@ msgstr "Descomprimiendo Assets" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "¡El paquete se ha instalado correctamente!" +msgstr "¡Paquete Instalado Exitosamente!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -859,19 +858,19 @@ msgstr "Cambiar Volumen de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Act./Desact. Solo de Bus de Audio" +msgstr "Alternar Solo de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Alternar Mute del Bus de Audio" +msgstr "Alternar Silencio de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "Alternar puenteado de efectos en Bus de Audio" +msgstr "Alternar Puenteado de Efectos de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Seleccionar Envío de Audio Bus" +msgstr "Seleccionar Envío de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -928,7 +927,7 @@ msgstr "Añadir Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "¡No se puede borrar el Bus Maestro!" +msgstr "¡No se puede borrar el bus maestro!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" @@ -940,7 +939,7 @@ msgstr "Duplicar Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "Restablecer Volumen del Bus" +msgstr "Restablecer Volumen de Bus" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" @@ -948,7 +947,7 @@ msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "Guardar configuración de los Buses de Audio como..." +msgstr "Guardar Configuración de Bus de Audio Como..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." @@ -956,7 +955,7 @@ msgstr "Ubicación para Nueva Configuración..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Abrir configuración de Bus de Audio" +msgstr "Abrir Configuración de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -1002,7 +1001,7 @@ msgstr "Cargar configuración de Bus por defecto." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "El nombre no es correcto." +msgstr "Nombre inválido." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" @@ -1011,24 +1010,24 @@ msgstr "Letras válidas:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." msgstr "" -"El nombre no es correcto. No puede coincidir con el nombre de una clase que " -"ya exista en el motor gráfico." +"Nombre inválido. No debe coincidir con el nombre de una clase que ya exista " +"en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" -"El nombre no es correcto. No puede coincidir con un nombre de tipo que ya " -"esté integrado en el motor gráfico." +"Nombre inválido. No debe coincidir con un nombre de tipo que ya esté " +"integrado en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" -"El nombre no es correcto. No puede coincidir con un nombre de constante " -"global ya existente en el motor gráfico." +"Nombre inválido. No debe coincidir con un nombre de constante global ya " +"existente en el motor gráfico." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "Ruta incorrecta." +msgstr "Ruta Inválida." #: editor/editor_autoload_settings.cpp msgid "File does not exist." @@ -1052,7 +1051,7 @@ msgstr "Renombrar Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "Des/Activar Globales de Autoload" +msgstr "Alternar Globales de Autoload" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" @@ -1106,7 +1105,7 @@ msgstr "[vacío]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "[no guardado]" +msgstr "[sin guardar]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1114,12 +1113,12 @@ msgstr "Por favor, selecciona primero un directorio base" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "Elige una carpeta" +msgstr "Elige un Directorio" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "Crear carpeta" +msgstr "Crear Carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1139,7 +1138,7 @@ msgstr "Elegir" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "Archivo de almacenamiento:" +msgstr "Archivo de Almacenamiento:" #: editor/editor_export.cpp msgid "Packing" @@ -1147,11 +1146,11 @@ msgstr "Empaquetando" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "No se encontró archivo de plantilla:" +msgstr "Archivo de plantilla no encontrado:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "El archivo ya existe, ¿quieres sobreescribirlo?" +msgstr "El Archivo ya Existe, ¿Quieres Sobreescribirlo?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" @@ -1159,15 +1158,15 @@ msgstr "Seleccionar Carpeta Actual" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "Copiar ruta" +msgstr "Copiar Ruta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "Mostrar en el navegador de archivos" +msgstr "Mostrar en el Navegador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "Nueva carpeta..." +msgstr "Nueva Carpeta..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1183,19 +1182,19 @@ msgstr "Todos los archivos (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "Abrir un archivo" +msgstr "Abrir un Archivo" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "Abrir archivo/s" +msgstr "Abrir Archivo(s)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "Abrir una carpeta" +msgstr "Abrir un Directorio" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "Abrir un archivo o carpeta" +msgstr "Abrir un Archivo o Directorio" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1205,7 +1204,7 @@ msgstr "Guardar" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "Guardar un archivo" +msgstr "Guardar un Archivo" #: editor/editor_file_dialog.cpp msgid "Go Back" @@ -1221,27 +1220,27 @@ msgstr "Subir" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "Ver/ocultar archivos ocultos" +msgstr "Ver/ocultar Archivos Ocultos" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Añadir/quitar favorito" +msgstr "Añadir/quitar Favorito" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "Cambiar modo" +msgstr "Cambiar Modo" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "Seleccionar ruta" +msgstr "Seleccionar Ruta" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "Subir favorito" +msgstr "Subir Favorito" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "Bajar favorito" +msgstr "Bajar Favorito" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1249,7 +1248,7 @@ msgstr "Ir a la carpeta principal" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "Carpetas y archivos:" +msgstr "Directorios y Archivos:" #: editor/editor_file_dialog.cpp msgid "Preview:" @@ -1266,7 +1265,7 @@ msgstr "Debe tener una extensión válida." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "Analizando fuentes" +msgstr "Analizando Fuentes" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1275,15 +1274,15 @@ msgstr "(Re)Importando Assets" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "Ayuda de búsqueda" +msgstr "Ayuda de Búsqueda" #: editor/editor_help.cpp msgid "Class List:" -msgstr "Lista de clases:" +msgstr "Lista de Clases:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "Buscar clases" +msgstr "Buscar Clases" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -1303,7 +1302,7 @@ msgstr "Heredada por:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "Descripción breve:" +msgstr "Descripción Breve:" #: editor/editor_help.cpp msgid "Members" @@ -1323,11 +1322,11 @@ msgstr "Métodos públicos:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "Elementos del Tema de GUI" +msgstr "Elementos del Tema de Interfaz" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "Elementos de tema de interfaz:" +msgstr "Elementos del Tema de Interfaz:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1359,7 +1358,7 @@ msgstr "Descripción" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "Tutoriales en línea:" +msgstr "Tutoriales en Línea:" #: editor/editor_help.cpp msgid "" @@ -1367,8 +1366,8 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"De momento no hay tutoriales para esta clase, puedes [color=$color][url=" -"$url]añadir uno[/url][/color] o [color=$color][url=$url2]pedir uno[color=" +"Actualmente no hay tutoriales para esta clase, puedes [color=$color][url=" +"$url]aportar uno[/url][/color] o [color=$color][url=$url2]pedir uno[color=" "$color][url=$url2]." #: editor/editor_help.cpp @@ -1393,7 +1392,7 @@ msgstr "Métodos" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "Descripción de métodos:" +msgstr "Descripción del Método:" #: editor/editor_help.cpp msgid "" @@ -1405,11 +1404,11 @@ msgstr "" #: editor/editor_help.cpp msgid "Search Text" -msgstr "Texto de búsqueda" +msgstr "Texto de Búsqueda" #: editor/editor_help.cpp msgid "Find" -msgstr "Búsqueda" +msgstr "Buscar" #: editor/editor_log.cpp msgid "Output:" @@ -1420,11 +1419,11 @@ msgstr "Salida:" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "Borrar todo" +msgstr "Borrar Todo" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "Borrar salida" +msgstr "Borrar Salida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -1432,7 +1431,7 @@ 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!" +msgstr "¡Error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." @@ -1485,7 +1484,7 @@ msgstr "Analizando" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "Creando miniatura" +msgstr "Creando Miniatura" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." @@ -1501,7 +1500,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "Hubo un problema al cargar el recurso." +msgstr "Error al cargar el recurso." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1529,7 +1528,7 @@ msgstr "Se han sobrescrito los ajustes predeterminados del editor." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "¡No se encuentra el nombre del ajuste!" +msgstr "¡Nombre del ajuste no encontrado!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." @@ -1594,23 +1593,23 @@ msgstr "Ocultar todas las propiedades" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "Copiar parámetros" +msgstr "Copiar Parámetros" #: editor/editor_node.cpp msgid "Paste Params" -msgstr "Pegar parámetros" +msgstr "Pegar Parámetros" #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "Pegar recurso" +msgstr "Pegar Recurso" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "Copiar recurso" +msgstr "Copiar Recurso" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "Convertirlo en integrado" +msgstr "Convertirlo en Integrado" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" @@ -1618,7 +1617,7 @@ msgstr "Creación de Subrecursos Únicos" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "Abrir en la ayuda" +msgstr "Abrir en la Ayuda" #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -1711,11 +1710,11 @@ msgstr "Esta operación no puede realizarse sin una escena." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Exportar biblioteca de mallas" +msgstr "Exportar Librería de Mallas" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "Esta operación no puede realizarse sin un Nodo Raíz." +msgstr "Esta operación no puede realizarse sin un nodo raíz." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -1727,7 +1726,7 @@ msgstr "Esta operación no puede realizarse sin un nodo seleccionado." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "La escena actual no se ha guardado. ¿Quieres abrirla de todos modos?" +msgstr "Escena actual no guardada ¿Abrir de todos modos?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." @@ -2320,7 +2319,7 @@ msgstr "Abrir Editor anterior" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "Creando vistas previas de las mallas" +msgstr "Creación de Vistas Previas de Malla" #: editor/editor_plugin.cpp msgid "Thumbnail..." @@ -2851,7 +2850,7 @@ msgstr "Generando \"Lightmaps\"" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "Generando para modelo: " +msgstr "Generando para Malla: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -3122,7 +3121,7 @@ msgstr "Posterior" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "Profundidad" +msgstr "Depth" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" @@ -3996,7 +3995,7 @@ msgstr "Clic derecho: Borrar punto." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "¡La malla está vacía!" +msgstr "¡La Malla está vacía!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" @@ -4020,11 +4019,11 @@ msgstr "Crear forma convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "Crear malla de navegación" +msgstr "Crear Malla de Navegación" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "La malla que contiene no es del tipo ArrayMesh." +msgstr "La Malla contenedora no es del tipo ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" @@ -4042,7 +4041,7 @@ msgstr "El modelo no tiene UV en esta capa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "¡MeshInstance no tiene malla!" +msgstr "¡MeshInstance no tiene Malla!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" @@ -4050,7 +4049,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 "El tipo de la malla primitiva no es PRIMITIVE_TRIANGLES!" +msgstr "¡El tipo primitivo de malla no es PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4098,7 +4097,7 @@ msgstr "Desenvuelva UV2 para Lightmap/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "Crear contorno de malla" +msgstr "Crear Contorno de Malla" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" @@ -4107,12 +4106,14 @@ msgstr "Tamaño del contorno:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" -"No se especificó malla de origen (y no hay MultiMesh establecido en el nodo)." +"No se ha especificado ninguna malla de origen (y no hay MultiMesh " +"establecido en el nodo)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." msgstr "" -"No se especificó malla de origen (y MultiMesh no contiene ningún Mesh)." +"No se ha especificado ninguna malla de origen (y MultiMesh no contiene " +"ninguna Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -4120,11 +4121,11 @@ msgstr "El origen de la malla es inválido (ruta inválida)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "La malla elegida no es correcta (no es un MeshInstance)." +msgstr "El origen de la malla es inválido (no es un MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "La malla elegida no es correcta (no contiene ningún recurso Mesh)." +msgstr "El origen de la malla es inválido (no contiene ningún recurso Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -4152,7 +4153,7 @@ msgstr "No se pudo mapear el área." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "Elige un origen de malla:" +msgstr "Elige un origen de Malla:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" @@ -4172,7 +4173,7 @@ msgstr "Superficie objetivo:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "Modelo 3D elegido:" +msgstr "Malla de origen:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -4212,11 +4213,11 @@ msgstr "¡Calcular!" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake the navigation mesh." -msgstr "Pre-calcular la malla de navegación 3D." +msgstr "Pre-calcular la malla de navegación." #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "Vaciar malla de navegación 3D." +msgstr "Vaciar malla de navegación." #: editor/plugins/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -4501,7 +4502,7 @@ msgstr "Crear mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Transformar mapa UV" +msgstr "Transformar Mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5416,11 +5417,11 @@ msgstr "Activar Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "Transform" +msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." -msgstr "Ventana de transformación..." +msgstr "Dialogo de Transformación..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5497,7 +5498,7 @@ msgstr "Profundidad máxima de vista:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "Transformar" +msgstr "Cambio de Transformación" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" @@ -6644,7 +6645,7 @@ msgstr "Reemparentar ubicación (selecciona un nuevo padre):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "Mantener transformación global" +msgstr "Mantener Transformación Global" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" @@ -7498,6 +7499,11 @@ msgstr "Compilar Proyecto" msgid "Warnings" msgstr "Advertencias" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Ver Archivos" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin del reporte de la pila de excepciones" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 64ee2404f1..bea184b813 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -7464,6 +7464,11 @@ msgstr "Construir Proyecto" msgid "Warnings" msgstr "Advertencias" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Ver Archivos" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin del stack trace de excepción interna" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index f674ef99cc..eb192ececb 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -2,26 +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. -# # alabd14313 <alabd14313@yahoo.com>, 2016. # Dante Marshal <Marshal.Devilhunter@gmail.com>, 2018. # hamed nasib <cghamed752@chmail.ir>, 2016. # Hasan Hejdari Nasab <hsn6@openmailbox.org>, 2017. # rezapouya <r.pouya@chmail.ir>, 2016. # sayyed hamed nasib <cghamed752@chmail.ir>, 2017. -# +# Behrooz Kashani <bkashani@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-29 05:39+0000\n" -"Last-Translator: Dante Marshal <Marshal.Devilhunter@gmail.com>\n" +"PO-Revision-Date: 2018-07-24 19:42+0000\n" +"Last-Translator: Behrooz Kashani <bkashani@gmail.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -636,9 +635,8 @@ msgstr "" "آیا در هر صورت حذف شوند؟(بدون برگشت)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "ناتوانی در حذف :" +msgstr "امکان حذف وجود ندارد :" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -743,9 +741,8 @@ msgid "Gold Sponsors" msgstr "اسپانسرهای درجه ۲" #: editor/editor_about.cpp -#, fuzzy msgid "Mini Sponsors" -msgstr "اسپانسرهای دیگر" +msgstr "اسپانسرهای کوچک" #: editor/editor_about.cpp msgid "Gold Donors" @@ -789,7 +786,7 @@ msgstr "اجزا" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "گواهینامه" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." @@ -7420,6 +7417,11 @@ msgstr "پروژه" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "نمایش پرونده ها" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index f80efffd42..11f9bb51c7 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-14 20:37+0000\n" +"PO-Revision-Date: 2018-07-19 10:36+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -20,7 +20,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.1\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -2128,7 +2128,7 @@ msgstr "Käynnistä muokattavana oleva skene." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Toista skene" +msgstr "Pelaa skeneä" #: editor/editor_node.cpp msgid "Play custom scene" @@ -2414,7 +2414,7 @@ msgstr "Lataa uudelleen" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "Poista" +msgstr "Poista asennus" #: editor/export_template_manager.cpp msgid "(Installed)" @@ -2475,7 +2475,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "Yhdistäminen epäonnistui." +msgstr "Yhdeydenselvitys epäonnistui." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2520,11 +2520,11 @@ msgstr "Yhteys katkaistu" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "Selvitetään" +msgstr "Selvitetään yhteyttä" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "Yhdistäminen epäonnistui" +msgstr "Yhteyden selvittäminen epäonnistui" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2809,7 +2809,7 @@ msgstr "Luodaan meshille: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "Suorita valitsemasi skripti..." +msgstr "Suoritetaan mukautettua skriptiä..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2940,7 +2940,7 @@ msgstr "VIRHE: Virheellinen animaation nimi!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "VIrhe: Samanniminen animaatio on jo olemassa!" +msgstr "VIRHE: Samanniminen animaatio on jo olemassa!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3316,7 +3316,8 @@ msgstr "Pyyntö epäonnistui, liikaa uudelleenohjauksia" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "Latauksessa väärä hash, oletetaan että tiedostoa on näpelöity." +msgstr "" +"Latauksessa väärä hajautuskoodi, oletetaan että tiedostoa on näpelöity." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -3328,7 +3329,7 @@ msgstr "Saatiin:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "sha256 hash-tarkistus epäonnistui" +msgstr "sha256-hajautusarvon tarkistus epäonnistui" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -3442,7 +3443,7 @@ msgstr "" #: 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 " +"Lightmap-kuvien luonti epäonnistui. Varmista, että polku on " "kirjoituskelpoinen." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -5301,11 +5302,11 @@ msgstr "Tarttumisen tila (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "Pohjanäkymä" +msgstr "Alanäkymä" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "Huippunäkymä" +msgstr "Ylänäkymä" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" @@ -7110,7 +7111,7 @@ msgstr "Aseta puusta" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "Pikakuvakkeet" +msgstr "Pikanäppäimet" #: editor/settings_config_dialog.cpp msgid "Binding" @@ -7435,6 +7436,11 @@ msgstr "Käännä projekti" msgid "Warnings" msgstr "Varoitukset" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Näytä tiedostot" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Sisemmän poikkeuksen kutsupinon loppu" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index ee1d7b2cad..5c28d84a90 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -40,12 +40,14 @@ # Tommy Melançon-Roy <tommel1234@hotmail.com>, 2017-2018. # Willow <theotimefd@aol.com>, 2018. # Xananax <xananax@yelostudio.com>, 2017-2018. +# Perrier Mathis <mathis.perrier73@gmail.com>, 2018. +# Ewan Lehnebach <ewan.lehnebach@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-06-12 16:38+0000\n" -"Last-Translator: Philippe Gervaise <blah@malvese.org>\n" +"PO-Revision-Date: 2018-07-21 12:37+0000\n" +"Last-Translator: Perrier Mathis <mathis.perrier73@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -53,7 +55,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0.1\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -65,11 +67,11 @@ msgstr "Toute la sélection" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Changer l'heure de l'animation des images clés" +msgstr "Animation Changer l'heure de l'image clé" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Transition du changement d'animation" +msgstr "Animation Changer la transition" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -77,7 +79,7 @@ msgstr "Animation Changer la transformation" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Changer la valeur de l'animation des images clés" +msgstr "Animation Changer la valeur de l'image clé" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -4076,7 +4078,7 @@ msgstr "Créer le contour" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Maillage" +msgstr "Maillages" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -6512,7 +6514,7 @@ msgstr "Remaps par langue :" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Langue" +msgstr "Localisation" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -7513,6 +7515,11 @@ msgstr "Compiler le projet" msgid "Warnings" msgstr "Avertissements" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Voir Fichiers" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin de la trace d'appel (stack trace) intrinsèque" diff --git a/editor/translations/he.po b/editor/translations/he.po index 0f1881211f..6dfd0ab3a5 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -7294,6 +7294,10 @@ msgstr "" msgid "Warnings" msgstr "אזהרות" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 3340f13471..606da1d118 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -7327,6 +7327,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index b04dd073df..84c64138dc 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -7405,6 +7405,11 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Fájlok Megtekintése" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/id.po b/editor/translations/id.po index 3956378ce7..a0356b8178 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -10,7 +10,7 @@ # 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. +# Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018. # Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018. # Tito <ijavadroid@gmail.com>, 2018. # Tom My <tom.asadinawan@gmail.com>, 2017. @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-22 08:30+0000\n" -"Last-Translator: Fajar Ru <kzofajar@gmail.com>\n" +"PO-Revision-Date: 2018-07-15 12:38+0000\n" +"Last-Translator: Romi Kusuma Bakti <romikusumab@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -917,9 +917,8 @@ msgid "Delete Audio Bus" msgstr "Hapus Bus Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Duplikat Audio Bus" +msgstr "Duplikatkan Bus Audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" @@ -976,9 +975,8 @@ msgid "Save this Bus Layout to a file." msgstr "Simpan Layout Bus ke berkas." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Muat Konfigurasi Bawaan" +msgstr "Muat Default" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." @@ -1294,18 +1292,16 @@ msgid "Members:" msgstr "Member-member:" #: editor/editor_help.cpp -#, fuzzy msgid "Public Methods" -msgstr "Fungsi Publik" +msgstr "Metode Publik" #: editor/editor_help.cpp msgid "Public Methods:" msgstr "Metode Publik:" #: editor/editor_help.cpp -#, fuzzy msgid "GUI Theme Items" -msgstr "Item-item Tema GUI:" +msgstr "Item Tema GUI" #: editor/editor_help.cpp msgid "GUI Theme Items:" @@ -1422,9 +1418,8 @@ 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..." +msgstr "Mengerti..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1471,9 +1466,8 @@ msgid "Creating Thumbnail" msgstr "Membuat Thumbnail" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Tindakan ini tidak bisa dilakukan tanpa \"tree root\"" +msgstr "Operasi ini tidak dapat diselesaikan tanpa root pohon." #: editor/editor_node.cpp msgid "" @@ -2712,7 +2706,7 @@ msgstr "Buka Scene" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Instance" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2821,18 +2815,16 @@ msgid "Importing Scene..." msgstr "Mengimpor scene..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating Lightmaps" -msgstr "Sedang Membuat Pemetaan Cahaya" +msgstr "Membuat Pemetaan Cahaya" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Running Custom Script..." -msgstr "Menjalankan Skrip Buatan..." +msgstr "Menjalankan Script Khusus..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2868,7 +2860,7 @@ msgstr "Impor sebagai:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset..." -msgstr "" +msgstr "Prasetel..." #: editor/import_dock.cpp msgid "Reimport" @@ -7563,6 +7555,11 @@ msgstr "Proyek" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "File:" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/is.po b/editor/translations/is.po index 98a376edca..0d6200fba1 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -7301,6 +7301,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index 2d566fe163..afb8c5cfb8 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.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. -# # Alessio Corridori <alessiocorridori@hotmail.com>, 2018. # Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017. # Dario D'Ambra <legione0@gmail.com>, 2017. @@ -15,13 +14,13 @@ # RealAquilus <JamesHeller@live.it>, 2017. # Samuele Zolfanelli <samdazel@gmail.com>, 2018. # Sean Bone <seanbone@zumguy.com>, 2017. -# +# Red Pill <redpill902@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-05-18 16:39+0000\n" -"Last-Translator: Alessio Corridori <alessiocorridori@hotmail.com>\n" +"PO-Revision-Date: 2018-06-25 18:40+0000\n" +"Last-Translator: Red Pill <redpill902@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -29,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -40,9 +39,8 @@ msgid "All Selection" msgstr "Seleziona Tutto" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Cambia Valore" +msgstr "Anim Cambia Tempo di Keyframe" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -7640,6 +7638,11 @@ msgstr "Progetto" msgid "Warnings" msgstr "Avvertimento" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Vedi Files" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 5ce73d0442..d7e2c07ac2 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -8251,6 +8251,11 @@ msgstr "プロジェクト" msgid "Warnings" msgstr "警告" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "ビューファイル:" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index be6b540a9a..197a11efa2 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-06-07 16:40+0000\n" -"Last-Translator: pgyage3263 <pgyage3263@naver.com>\n" +"PO-Revision-Date: 2018-07-21 04:38+0000\n" +"Last-Translator: 송태섭 <xotjq237@gmail.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\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -4003,7 +4003,7 @@ msgstr "외곽선 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "메시" +msgstr "Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -7412,6 +7412,11 @@ msgstr "프로젝트 빌드" msgid "Warnings" msgstr "경고" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "파일 보기" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "내부 예외 스택 추적의 끝" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index bf4443627a..639e086d4c 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -7295,6 +7295,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index 19d8b6b7d8..09c7b39e08 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -2,22 +2,21 @@ # 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. -# +# Syaz Amirin <amirin123z@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" +"PO-Revision-Date: 2018-06-30 09:40+0000\n" +"Last-Translator: Syaz Amirin <amirin123z@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" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -2014,11 +2013,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Komuniti" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "Tentang" #: editor/editor_node.cpp msgid "Play the project." @@ -6244,7 +6243,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Am" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" @@ -7273,6 +7272,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index e76053150c..abc026771d 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-22 08:31+0000\n" -"Last-Translator: Frank T. Rambol <frank@d-fect.com>\n" +"PO-Revision-Date: 2018-06-28 14:40+0000\n" +"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-" "engine/godot/nb/>\n" "Language: nb\n" @@ -1756,7 +1756,9 @@ msgstr "Velg en HovedScene" #: editor/editor_node.cpp #, fuzzy msgid "Unable to enable addon plugin at: '%s' parsing of config failed." -msgstr "Kan ikke aktivere addon-plugin på: '%s' parsing av konfig feilet." +msgstr "" +"Kan ikke aktivere tilleggs-programtillegg på: \"%s\" tolking av oppsett " +"mislyktes." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." @@ -1912,9 +1914,8 @@ msgid "MeshLibrary..." msgstr "MeshBibliotek..." #: editor/editor_node.cpp -#, fuzzy msgid "TileSet..." -msgstr "TileSet…" +msgstr "Flissett…" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -7495,6 +7496,11 @@ msgstr "Prosjekt" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Vis Filer" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index bfedf322b3..240d99182f 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.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. -# # aelspire <aelspire@gmail.com>, 2017. # Aram Nap <xyphex.aram@gmail.com>, 2017. # Arjan219 <arjannugteren1@gmail.com>, 2017-2018. @@ -24,19 +23,19 @@ # Willem <studiebolmail@gmail.com>, 2018. # Wout Standaert <wout@blobkat.com>, 2017. # Zatherz <zatherz@linux.pl>, 2017. -# +# Tahar Meijs <tntmeijs@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-21 18:36+0000\n" -"Last-Translator: Johannes Smit <smitjohannes96@gmail.com>\n" +"PO-Revision-Date: 2018-06-30 15:36+0000\n" +"Last-Translator: Tahar Meijs <tntmeijs@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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -6427,7 +6426,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Algemeen" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" @@ -7492,6 +7491,11 @@ msgstr "Project" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Bekijk Bestanden" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 5ca2760249..a133a4d8d5 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -27,7 +27,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-22 08:31+0000\n" +"PO-Revision-Date: 2018-07-14 08:42+0000\n" "Last-Translator: RM <synaptykq@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -1975,7 +1975,7 @@ msgstr "Wyjdź do Listy Projektów" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "Debuguj" +msgstr "Debugowanie" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -3093,7 +3093,7 @@ msgstr "Poprzednie" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "Następne" +msgstr "Przyszłość" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" @@ -3154,7 +3154,7 @@ msgstr "Czas Przejścia Między Animacjami" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "Animacja" +msgstr "Animacje" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" @@ -6514,7 +6514,7 @@ msgstr "Mapowanie w zależności od lokalizacji:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Lokalizacja" +msgstr "Języki" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -7137,7 +7137,7 @@ msgstr "Monitor" #: editor/script_editor_debugger.cpp msgid "Value" -msgstr "Wartość" +msgstr "Value" #: editor/script_editor_debugger.cpp msgid "Monitors" @@ -7525,6 +7525,11 @@ msgstr "Zbuduj projekt" msgid "Warnings" msgstr "Ostrzeżenia" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Pokaż pliki" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -7672,11 +7677,11 @@ msgstr "Dodaj węzeł(y) z drzewa" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "" +msgstr "Dodaj właściwość Gettera" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "" +msgstr "Dodaj właściwość Settera" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -7712,7 +7717,7 @@ msgstr "Iterator" #: modules/visual_script/visual_script_editor.cpp msgid "While" -msgstr "" +msgstr "While" #: modules/visual_script/visual_script_editor.cpp msgid "Return" @@ -8045,7 +8050,7 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "ARVRCamera musi dziedziczyć po ARVROrigin node" +msgstr "ARVRCamera musi dziedziczyć po węźle ARVROrigin" #: scene/3d/arvr_nodes.cpp #, fuzzy @@ -8073,11 +8078,11 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "ARVROrigin wymaga by ARVRCamera dziedziczyła po node" +msgstr "ARVROrigin wymaga dziedziczącego po nim ARVRCamera" #: scene/3d/baked_lightmap.cpp msgid "%d%%" -msgstr "" +msgstr "%d%%" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" @@ -8106,6 +8111,10 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon 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 z przestrzenią.\n" +"Powinieneś dodać węzeł \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " +"jego podwęzeł aby zdefiniować jego kształt." #: scene/3d/collision_polygon.cpp msgid "" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 0c085024e0..ee30748cee 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -7350,6 +7350,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 6d26cbc500..472fb1e7bc 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -23,12 +23,13 @@ # Renato Rotenberg <renato.rotenberg@gmail.com>, 2017. # Rodolfo R Gomes <rodolforg@gmail.com>, 2017-2018. # Tiago Almeida <thyagoeap@gmail.com>, 2017. +# Mauricio Luan Carneiro deSouza <newmailmlcs@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2018-06-16 18:43+0000\n" -"Last-Translator: Rodolfo R Gomes <rodolforg@gmail.com>\n" +"PO-Revision-Date: 2018-07-26 09:14+0000\n" +"Last-Translator: Mauricio Luan Carneiro deSouza <newmailmlcs@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -36,7 +37,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0.1\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -4036,7 +4037,7 @@ msgstr "Criar Contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "Malha" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -5100,7 +5101,7 @@ msgstr "Transformação do Eixo-Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Visualizar Transformação do Plano." +msgstr "Transformação do Plano de Visão." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5236,7 +5237,7 @@ msgstr "Visualizar Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "VIsualizar Informação" +msgstr "Visualizar Informações" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" @@ -7049,7 +7050,7 @@ msgstr "Processo Filho Conectado" #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "Erro ao Copiar" +msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -7463,6 +7464,11 @@ msgstr "Compilar Projeto" msgid "Warnings" msgstr "Avisos" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Ver Arquivos" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fim da pilha de rastreamento de exceção interna" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 71275cd19a..d111d1dd4b 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -7442,6 +7442,11 @@ msgstr "Construir Projeto" msgid "Warnings" msgstr "Avisos" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Ver Ficheiros" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fim do stack trace de exceção interna" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index eaf931092a..c5a4e35903 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -7400,6 +7400,11 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Vizualizează Fișierele" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 97c7284404..1c888d3330 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -17,12 +17,15 @@ # Sergey <maligin.serega2010@yandex.ru>, 2018. # Sergey Agarkov <zorgsoft@gmail.com>, 2017. # teriva <spirin.cos@yandex.ru>, 2018. +# Aleksey Terentyev <terentjew.alexey@ya.ru>, 2018. +# Игорь Д <protorian.di@gmail.com>, 2018. +# Егор Бураков <fend.q@mail.ru>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-06-18 19:42+0000\n" -"Last-Translator: ijet <my-ijet@mail.ru>\n" +"PO-Revision-Date: 2018-07-22 04:43+0000\n" +"Last-Translator: Егор Бураков <fend.q@mail.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -31,7 +34,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.1\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -2347,7 +2350,7 @@ msgstr "Кадр %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "Физический шаг %" +msgstr "Кадр физики %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2359,7 +2362,7 @@ msgstr "Включительно" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Субъект" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -4029,7 +4032,7 @@ msgstr "Создать контур" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Полисетка" +msgstr "Массив" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -5561,7 +5564,7 @@ msgstr "Предпросмотр StyleBox:" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox" -msgstr "" +msgstr "StyleBox" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" @@ -5684,14 +5687,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" @@ -7233,7 +7234,7 @@ msgstr "Библиотеки: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7450,6 +7451,11 @@ msgstr "Собрать проект" msgid "Warnings" msgstr "Предупреждения" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Просмотр Файлов" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Конец трассировки внутреннего стека исключений" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 9716dee696..94b6c137d0 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -7354,6 +7354,11 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Súbor:" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 0fe619654f..66e3c43bee 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-10 08:44+0000\n" +"PO-Revision-Date: 2018-06-27 13:43+0000\n" "Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" @@ -19,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.1-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -3340,23 +3340,23 @@ msgstr "Razreševanje..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "" +msgstr "Napaka pri izdelavi zahteve" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "" +msgstr "Nedejaven" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Ponovi" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Napaka Pri Prenosu" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Prenos za ta dodatek je že v teku!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "first" @@ -3382,7 +3382,7 @@ msgstr "Vse" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "" +msgstr "Vtičniki" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" @@ -3390,7 +3390,7 @@ msgstr "Razvrsti:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "Obrni" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -3407,15 +3407,15 @@ msgstr "Podpora..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "Uradno" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "Preskušanje" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "Dodatki v ZIP Datoteki" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -3423,6 +3423,9 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Ni mogoče določiti poti shranjevanja slik svetlobnih kart.\n" +"Shrani prizor (za slike, da bodo shranjene v isti mapi), ali izberi pot za " +"shranitev iz lastnosti Zapečene Svetlobne karte." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -3435,53 +3438,54 @@ msgstr "" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Napaka pri izdelavi slik, svetlobnih kart. Poskrbite, da je pot zapisljiva." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "" +msgstr "Zapeči Svetlobne karte" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "Predogled" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "Nastavi Zaskok" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "Mrežni Zamik:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "Mrežni Korak:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "Rotacijski Odmik:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Rotacijski Korak:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "" +msgstr "Premakni Točko" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "Premakni Dejanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" -msgstr "" +msgstr "Premakni navpični vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new vertical guide" -msgstr "" +msgstr "Ustvari nov navpični vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove vertical guide" @@ -3489,59 +3493,61 @@ msgstr "Odstranite navpični vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move horizontal guide" -msgstr "" +msgstr "Premakni vodoravni vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal guide" -msgstr "" +msgstr "Ustvari nov vodoravni vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove horizontal guide" -msgstr "Odstrani vodoravno vodilo" +msgstr "Odstrani vodoravni vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" -msgstr "" +msgstr "Ustvari nov vodoravni in navpični vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit IK Chain" -msgstr "" +msgstr "Uredi Verigo IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "Uredi Platno Stvari" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" -msgstr "" +msgstr "Samo Sidrišča" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors and Margins" -msgstr "" +msgstr "Spremeni Sidrišča in Robove" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "" +msgstr "Spremeni Sidrišča" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Prilepi Pozicijo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" -msgstr "Izberite Način" +msgstr "Izberi Način" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "Povlecite: Zavrti" +msgstr "Povleci: Vrtenje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+Drag: Premakni" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Pritisni 'v' za Spremembo Točke in 'Shift+v' za Vleko Točke (med " +"premikanjem)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" @@ -3561,16 +3567,16 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Ob kliku prikaži seznam vseh objektov na tem mestu.\n" +"Ob kliku prikaži seznam vseh objektov na tem mestu\n" "(isto kot Alt+RMB v načinu izbire)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Klikni, če želiš spremeniti rotacijsko točko objekta." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Način Plošče" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" @@ -3578,66 +3584,66 @@ msgstr "Preklopi pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "Uporabi Pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping options" -msgstr "" +msgstr "Možnosti pripenjanja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" -msgstr "" +msgstr "Pripni na mrežo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "Uporabi Rotacijsko Pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Preoblikuj Zaskok..." +msgstr "Nastavi Pripenjanje..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "Pripni Relativno" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "Uporabi Pripenjanje Pikslov" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "" +msgstr "Pametno pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "" +msgstr "Pripni na Predhodnika" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "" +msgstr "Pripni na gradnik vodilo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "" +msgstr "Pripni na gradnik strani" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "" +msgstr "Pripni na druge gradnike" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "" +msgstr "Pripni na vodnike" #: 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 "Izbrani predmet zaklenite na svoje mesto (ga ni mogoče premakniti)." +msgstr "Izbrani predmet zakleni na svoje mesto (ni ga mogoče premakniti)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "Odklenite izbrani predmet (ga lahko premaknete)." +msgstr "Odkleni izbrani predmet (lahko ga premaknete)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." @@ -5945,9 +5951,8 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid Project Name." -msgstr "Ime Projekta:" +msgstr "Neveljavno Ime Projekta." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -7374,6 +7379,11 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Ogled datotek" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index c838174131..9998a16e3a 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -7461,6 +7461,11 @@ msgstr "Пројекат" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Погледај датотеке" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 975418d4fb..4d293a592d 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -7272,6 +7272,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 9ec654128a..f9e65bb600 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -2,24 +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. -# # bergmarklund <davemcgroin@gmail.com>, 2017, 2018. # Christoffer Sundbom <christoffer_karlsson@live.se>, 2017. # Jakob Sinclair <sinclair.jakob@mailbox.org>, 2018. # . <grenoscar@gmail.com>, 2018. -# +# Kristoffer Grundström <kristoffer.grundstrom1983@gmail.com>, 2018. +# Magnus Helander <helander@fastmail.net>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-07 11:42+0000\n" -"Last-Translator: anonymous <>\n" +"PO-Revision-Date: 2018-07-24 12:44+0000\n" +"Last-Translator: Magnus Helander <helander@fastmail.net>\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 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -30,9 +30,8 @@ msgid "All Selection" msgstr "Alla urval" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Ändra Värde" +msgstr "Anim Ändra Nyckelram Tid" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -88,16 +87,15 @@ msgstr "Ändra Anim Spårets Värde Läge" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "Anim Spåra Ändra Linda om Läge" #: editor/animation_editor.cpp msgid "Edit Node Curve" msgstr "Redigera Nodkurva" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Selection Curve" -msgstr "Redigera Urval Kurva" +msgstr "Redigera Urvalsurva" #: editor/animation_editor.cpp msgid "Anim Delete Keys" @@ -7903,6 +7901,11 @@ msgstr "Projekt" msgid "Warnings" msgstr "Varning" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Visa Filer" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index d7910c2c87..d3d80facc3 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -7274,6 +7274,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index 4db8459f1b..2393ca98a9 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -7359,6 +7359,11 @@ msgstr "Build โปรเจกต์" msgid "Warnings" msgstr "คำเตือน" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "ดูไฟล์" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "สิ้นสุดสแตคข้อผิดพลาดภายใน" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 292cec4063..abe7d485fa 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -17,18 +17,19 @@ # razah <icnikerazah@gmail.com>, 2017-2018. # stnmycri <satenmeycri@gmail.com>, 2017-2018. # Yavuz Günay <yavuzgunay@gmail.com>, 2017. +# Onur Sanır <onursanir@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-10 09:46+0000\n" -"Last-Translator: Aykut YILDIRIM <aykutyildirim@windowslive.com>\n" +"PO-Revision-Date: 2018-07-07 20:42+0000\n" +"Last-Translator: Onur Sanır <onursanir@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0.1-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -5696,9 +5697,8 @@ msgid "Options" msgstr "Seçenekler" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Has,Many,Options" -msgstr "Bir Çok,Seçenek,Var!" +msgstr "Birçok,Seçenek,Var" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -7438,6 +7438,11 @@ msgstr "Projeyi İnşa et" msgid "Warnings" msgstr "Uyarılar" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Dosyaları Görüntüle" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "İç özel durum yığını izlemesinin sonu" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 067c7be724..d940561131 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -7447,6 +7447,11 @@ msgstr "Зібрати проект" msgid "Warnings" msgstr "Попередження" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "Перегляд файлів" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Кінець трасування стека для внутрішнього виключення" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 0162eb0788..3857bff9b0 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -7331,6 +7331,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 6651bd170c..faf77300b8 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.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. -# # 01lifeleft <01lifeleft@gmail.com>, 2018. # Dlean Jeans <dleanjeans@gmail.com>, 2018. # Hai Le <dark.hades.1102@gmail.com>, 2017. # Nguyễn Tuấn Anh <anhnt.fami@gmail.com>, 2017. # Tung Le <tungkradle@gmail.com>, 2017. -# +# 38569459 <xxx38569459@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-18 15:44+0000\n" -"Last-Translator: 01lifeleft <01lifeleft@gmail.com>\n" +"PO-Revision-Date: 2018-07-22 06:42+0000\n" +"Last-Translator: 38569459 <xxx38569459@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -141,24 +140,24 @@ msgstr "Chọn Scale" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Scale từ trỏ chuột" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "Đến Step tiếp theo" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "Đến Step trước đó" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "Tuyến" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "Cố định" #: editor/animation_editor.cpp msgid "In" @@ -178,11 +177,11 @@ msgstr "Ngoài-Trong" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "Chuyển tiếp" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "Tối ưu Animation" #: editor/animation_editor.cpp msgid "Clean-Up Animation" @@ -190,11 +189,11 @@ msgstr "Dọn dẹp Animation" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Tạo track mới cho %s và chèn key?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Tạo %d track mới và chèn key?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -210,15 +209,15 @@ msgstr "Tạo & Chèn Anim" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "Chèn Track & Key Anim" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Chèn Key Anim" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Đổi độ dài Anim" #: editor/animation_editor.cpp msgid "Change Anim Loop" @@ -226,23 +225,25 @@ msgstr "Đổi vòng lặp Anim" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Tạo Key để nhập giá trị Anim" #: editor/animation_editor.cpp msgid "Anim Insert" msgstr "Chèn Anim" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Scale Keys" -msgstr "" +msgstr "Anim Scale Keys" #: editor/animation_editor.cpp msgid "Anim Add Call Track" msgstr "Thêm Track Gọi Function" #: editor/animation_editor.cpp +#, fuzzy msgid "Animation zoom." -msgstr "" +msgstr "Phóng Animation." #: editor/animation_editor.cpp msgid "Length (s):" @@ -266,27 +267,27 @@ msgstr "Mở/Tắt lặp animation." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "Thêm track mới." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "Di chuyển track lên." #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "Di chuyển track xuống." #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "Bỏ track đang chọn." #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "Công cụ Track" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "Cho phép chỉnh sửa từng key riêng bằng cách chọn chúng." #: editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -306,162 +307,171 @@ msgstr "" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Tối ưu" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "Chọn một AnimationPlayer từ Scene Tree để chỉnh sửa animation." #: editor/animation_editor.cpp +#, fuzzy msgid "Key" -msgstr "" +msgstr "Mã" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "Chuyển tiếp" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "Tỉ lệ Scale:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "Gọi Function từ Node nào?" #: editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "Hủy key không đúng chuẩn" #: editor/animation_editor.cpp +#, fuzzy msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Gỡ bỏ track trống và không tìm thấy" #: editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "Dọn dẹp tất cả animations" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "Dọn dẹp tất cả Animation (KHÔNG THỂ HỒI LẠI)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "Dọn dẹp" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "Đổi lại size Array" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "Đổi loại giá trị Array" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "Đổi giá trị Array" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Đến Dòng" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "Dòng số:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "Không tìm thấy" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." msgstr "" #: editor/code_editor.cpp +#, fuzzy msgid "Match Case" -msgstr "" +msgstr "Trùng khớp" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "Cả từ" #: editor/code_editor.cpp msgid "Replace" -msgstr "" +msgstr "Thay thế" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Thay thế tất cả" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Chỉ lựa chọn" #: editor/code_editor.cpp msgid "Zoom In" -msgstr "" +msgstr "Phóng to" #: editor/code_editor.cpp msgid "Zoom Out" -msgstr "" +msgstr "Thu nhỏ" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Đặt lại phóng" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "Dòng:" #: editor/code_editor.cpp +#, fuzzy msgid "Col:" -msgstr "" +msgstr "Col:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "Cách thức trong Node được chọn phải được ghi rõ!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"Cách thức của đối tượng không tìm thấy! ghi rõ một cách thức hợp lệ hoặc " +"đính kèm một script cho đối tượng Node." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "Kết nối đến Node:" #: 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 "Thêm" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "Xóa" #: editor/connections_dialog.cpp +#, fuzzy msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Thêm đối số:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" msgstr "" #: editor/connections_dialog.cpp +#, fuzzy msgid "Path to Node:" -msgstr "" +msgstr "Đường đến Node:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "Tạo Function" #: editor/connections_dialog.cpp +#, fuzzy msgid "Deferred" -msgstr "" +msgstr "Hoãn lại" #: editor/connections_dialog.cpp msgid "Oneshot" @@ -479,45 +489,45 @@ msgstr "" #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "" +msgstr "Tắt" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Kết nối" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Kết nối '%s' đến '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "Đang kết nối Signal:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Hủy kết nối '%s' từ '%s'" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "" +msgstr "Kết nối..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Hủy kết nối" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Tín hiệu" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "" +msgstr "Đổi %s Type" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Change" -msgstr "" +msgstr "Đổi" #: editor/create_dialog.cpp msgid "Create New %s" @@ -526,38 +536,39 @@ msgstr "Tạo %s Mới" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Ưa thích:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Gần đây:" #: 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 "Tìm kiếm:" #: 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 "Phù hợp:" #: 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 "Mô tả:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Tìm kiếm thay thế cho:" #: editor/dependency_editor.cpp +#, fuzzy msgid "Dependencies For:" -msgstr "" +msgstr "Phần phụ thuộc cho:" #: editor/dependency_editor.cpp msgid "" @@ -2017,12 +2028,14 @@ msgid "Issue Tracker" msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Community" -msgstr "" +msgstr "Cộng đồng" #: editor/editor_node.cpp +#, fuzzy msgid "About" -msgstr "" +msgstr "Thông tin" #: editor/editor_node.cpp msgid "Play the project." @@ -4223,7 +4236,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Âm lượng" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " @@ -4265,7 +4278,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "Chọn Points" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4275,12 +4288,12 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "Nhấp: Tạo Point" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "" +msgstr "Nhấp chuột phải: Xóa Point" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -4299,7 +4312,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Xóa Point" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4562,27 +4575,27 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Lưu Theme" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Lưu Theme thành" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Đóng Docs" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "" +msgstr "Đóng tất cả" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "" +msgstr "Đóng tất cả Tab" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Chạy" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" @@ -4591,12 +4604,12 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "" +msgstr "Tìm..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "" +msgstr "Tìm tiếp theo" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" @@ -4613,7 +4626,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "" +msgstr "Tiếp tục" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" @@ -4645,11 +4658,11 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "" +msgstr "Hủy" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "Tạo Script" #: editor/plugins/script_editor_plugin.cpp msgid "" @@ -4680,7 +4693,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "" +msgstr "Chọn màu" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" @@ -4701,13 +4714,13 @@ msgstr "" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Cut" -msgstr "" +msgstr "Cắt" #: editor/plugins/script_text_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" -msgstr "" +msgstr "Copy" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -6252,8 +6265,9 @@ msgid "Project Settings (project.godot)" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +#, fuzzy msgid "General" -msgstr "" +msgstr "Tổng quan" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" @@ -7283,6 +7297,10 @@ msgstr "" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 48e30ceab3..51e0181fc8 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -7372,6 +7372,11 @@ msgstr "构建项目" msgid "Warnings" msgstr "警告" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "查看文件" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "内部异常堆栈追朔结束" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 568390a7a8..de03512af1 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -7589,6 +7589,11 @@ msgstr "專案" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "檔案" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 38b565a37f..df0c474322 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.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. -# # Allen H <w84miracle@gmail.com>, 2017. # Billy SU <g4691821@gmail.com>, 2018. # Chao Yu <casd82@gmail.com>, 2017. @@ -12,19 +11,18 @@ # popcade <popcade@gmail.com>, 2016. # Qing <icinriiq@gmail.com>, 2018. # Sam Pan <sampan66@gmail.com>, 2016. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-24 09:35+0000\n" -"Last-Translator: Qing <icinriiq@gmail.com>\n" +"PO-Revision-Date: 2018-07-15 16:35+0000\n" +"Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" "Language: zh_TW\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.1-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -35,9 +33,8 @@ msgid "All Selection" msgstr "所有的選擇" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "動畫更改座標" +msgstr "動畫更改關鍵幀時間" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -52,9 +49,8 @@ msgid "Anim Change Keyframe Value" msgstr "動畫更改關鍵幀數值" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Call" -msgstr "動畫改變呼叫" +msgstr "動畫更改呼叫" #: editor/animation_editor.cpp msgid "Anim Add Track" @@ -345,7 +341,7 @@ msgstr "移除無效按鍵" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "刪除未解決或是空的軌道" #: editor/animation_editor.cpp msgid "Clean-up all animations" @@ -523,9 +519,8 @@ msgid "Signals" msgstr "信號" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "變更鏡頭尺寸" +msgstr "變更 %s 尺寸" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -533,9 +528,8 @@ msgid "Change" msgstr "更換" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "新增" +msgstr "新增 %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -618,7 +612,7 @@ msgstr "相依性編輯器" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "搜尋替代資源:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp @@ -670,7 +664,7 @@ msgstr "修復相依性" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "載入錯誤!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -682,7 +676,7 @@ msgstr "擁有" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "" +msgstr "沒有明定擁有者的資源:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" @@ -701,16 +695,19 @@ msgid "Delete" msgstr "刪除" #: editor/dictionary_property_edit.cpp +#, fuzzy msgid "Change Dictionary Key" -msgstr "" +msgstr "改變字典 key" #: editor/dictionary_property_edit.cpp +#, fuzzy msgid "Change Dictionary Value" -msgstr "" +msgstr "改變字典 value" #: editor/editor_about.cpp +#, fuzzy msgid "Thanks from the Godot community!" -msgstr "" +msgstr "Godot 社群感謝你!" #: editor/editor_about.cpp msgid "Thanks!" @@ -718,7 +715,7 @@ msgstr "謝謝!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "Godot Engine 貢獻者" #: editor/editor_about.cpp msgid "Project Founders" @@ -726,12 +723,11 @@ msgstr "專案創始人" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "主開發者" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "專案創始人" +msgstr "專案管理人 " #: editor/editor_about.cpp msgid "Developers" @@ -739,35 +735,38 @@ msgstr "開發者" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "作者" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "白金贊助" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "黃金贊助" #: editor/editor_about.cpp +#, fuzzy msgid "Mini Sponsors" -msgstr "" +msgstr "迷你贊助" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "黃金捐贈者" #: editor/editor_about.cpp +#, fuzzy msgid "Silver Donors" -msgstr "" +msgstr "白銀捐贈者" #: editor/editor_about.cpp +#, fuzzy msgid "Bronze Donors" -msgstr "" +msgstr "紅銅捐贈者" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "捐贈者" #: editor/editor_about.cpp msgid "License" @@ -775,7 +774,7 @@ msgstr "授權" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "第三方授權條款" #: editor/editor_about.cpp msgid "" @@ -784,14 +783,16 @@ msgid "" "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine 依賴著許多與 MIT 授權條款相容、自由開源的第三方函式庫。以下是這" +"些第三方元件的完整列表,附有它們各自的著作權宣示與授權條款。" #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "所有元件" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "元件" #: editor/editor_about.cpp msgid "Licenses" @@ -799,21 +800,20 @@ msgstr "授權" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "開啟套件檔案出錯,非 zip 格式。" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "(重新)載入素材" +msgstr "正在解壓縮素材" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "套件安裝成功!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "成功!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -821,147 +821,148 @@ msgid "Install" msgstr "安裝" #: editor/editor_asset_installer.cpp +#, fuzzy msgid "Package Installer" -msgstr "" +msgstr "套件安裝" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "喇叭" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "新增效果" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "" +msgstr "重新命名 Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "重設縮放大小" +msgstr "變更 Audio Bus 音量" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "" +msgstr "切換 Audio Bus 的 Solo" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "切換 Audio Bus 的 Mute" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "切換 Audio Bus 忽略效果" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "選擇 Audio Bus 輸出地點" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "新增 Audio Bus 效果" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "移動 Bus 效果" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "" +msgstr "刪除 Bus 效果" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" +msgstr "Audio Bus。拖放以重新排列。" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" msgstr "靜音" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Bypass" -msgstr "" +msgstr "忽略效果 (Bypass)" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus options" -msgstr "除錯選項" +msgstr "Bus 選項" #: 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 "製作複本" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Volume" -msgstr "重設縮放大小" +msgstr "重設音量" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Effect" -msgstr "刪除" +msgstr "刪除效果" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "聲音" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "" +msgstr "新增 Audio Bus" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Master Bus 不能被刪除!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "" +msgstr "刪除 Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "複製所選" +msgstr "製作 Audio Bus 的複本" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Bus Volume" -msgstr "重設縮放大小" +msgstr "重設 Bus 音量" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "" +msgstr "移動 Audio Bus" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "" +msgstr "另存 Audio Bus 配置為..." #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Location for New Layout..." -msgstr "" +msgstr "新配置的位置..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "開啟 Audio Bus 配置" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "「res://default_bus_layout.tres」檔案不存在。" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "檔案格式不正確,不是 Audio Bus 配置檔。" #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "新增 Bus" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "建立新的 Bus 配置。" #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp @@ -970,7 +971,7 @@ msgstr "載入" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "讀取現存的 Bus 配置。" #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -979,7 +980,7 @@ msgstr "另存新檔" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "儲存目前的 Bus 配置到檔案裡。" #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -987,7 +988,7 @@ msgstr "載入預設值" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "載入預設的 Bus 配置。" #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -999,7 +1000,7 @@ msgstr "合法字元:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "" +msgstr "不正確的名字。名字不能與現有的 engine class 名衝突。" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." @@ -1022,16 +1023,19 @@ msgid "Not in resource path." msgstr "在資源路徑中找不到" #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "Add AutoLoad" -msgstr "" +msgstr "新增 AutoLoad" #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "Autoload「%s」已經存在!" #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "Rename Autoload" -msgstr "" +msgstr "重新命名 Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" @@ -1039,19 +1043,21 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "移動 Autoload" #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "Remove Autoload" -msgstr "" +msgstr "刪除 Autoload" #: editor/editor_autoload_settings.cpp msgid "Enable" msgstr "啟用" #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "Rearrange Autoloads" -msgstr "" +msgstr "重新排列 Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp @@ -1084,16 +1090,18 @@ msgid "Updating scene..." msgstr "更新場景中..." #: editor/editor_data.cpp +#, fuzzy msgid "[empty]" -msgstr "" +msgstr "(空)" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "(未儲存)" #: editor/editor_dir_dialog.cpp +#, fuzzy msgid "Please select a base directory first" -msgstr "" +msgstr "請先選擇一個基底的資料夾" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1122,7 +1130,7 @@ msgstr "選擇" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "" +msgstr "儲存檔案:" #: editor/editor_export.cpp msgid "Packing" @@ -1137,22 +1145,20 @@ 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" -msgstr "" +msgstr "複製路徑" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "" +msgstr "在檔案管理員內顯示" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "New Folder..." -msgstr "新增資料夾" +msgstr "新增資料夾..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1160,7 +1166,7 @@ msgstr "重新整理" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "可認得全部" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1168,7 +1174,7 @@ msgstr "所有類型檔案" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "開啟檔案" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" @@ -1190,7 +1196,7 @@ 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" @@ -1209,12 +1215,13 @@ msgid "Toggle Hidden Files" msgstr "切換顯示隱藏檔案" #: editor/editor_file_dialog.cpp +#, fuzzy msgid "Toggle Favorite" -msgstr "" +msgstr "切換最愛" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "切換模式" #: editor/editor_file_dialog.cpp msgid "Focus Path" @@ -1247,8 +1254,9 @@ msgid "File:" msgstr "檔案:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "Must use a valid extension." -msgstr "" +msgstr "必須使用有效的副檔名。" #: editor/editor_file_system.cpp msgid "ScanSources" @@ -1261,27 +1269,28 @@ msgstr "(重新)載入素材" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "搜尋幫助" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "Class 列表:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "" +msgstr "搜尋 Class" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Top" -msgstr "" +msgstr "上面" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Class:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "繼承:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -1305,19 +1314,19 @@ msgstr "" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "公開 method:" #: 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:" -msgstr "" +msgstr "訊號:" #: editor/editor_help.cpp msgid "Enumerations" @@ -1333,11 +1342,11 @@ msgstr "" #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "定數" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "定數:" #: editor/editor_help.cpp msgid "Description" @@ -1345,7 +1354,7 @@ msgstr "描述:" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "" +msgstr "線上教學:" #: editor/editor_help.cpp msgid "" @@ -1353,20 +1362,25 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" +"目前沒有這個 class 的教學,你可以[color=$color][url=$url]貢獻一個[/url][/" +"color]或[color=$color][url=$url2]要求一個[/url][/color]。" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" -msgstr "" +msgstr "Property 說明:" #: 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 "" +"目前沒有這個 property 的說明。請幫我們[color=$color][url=$url]貢獻[/url][/" +"color]一個!" #: editor/editor_help.cpp msgid "Methods" @@ -1374,13 +1388,15 @@ msgstr "方法" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "" +msgstr "Method 說明:" #: 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 "" +"目前沒有這個 method 的說明。請幫我們[color=$color][url=$url]貢獻[/url][/" +"color]一個!" #: editor/editor_help.cpp msgid "Search Text" @@ -1408,15 +1424,15 @@ 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 "" +msgstr "儲存資源錯誤!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." -msgstr "" +msgstr "另存資源為..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1424,16 +1440,17 @@ msgid "I see..." msgstr "我知道了" #: editor/editor_node.cpp +#, fuzzy msgid "Can't open file for writing:" -msgstr "" +msgstr "無法以寫入模式開啟檔案:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "要求了不明的檔案格式:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "儲存中發生了錯誤。" #: editor/editor_node.cpp msgid "Can't open '%s'." @@ -1445,11 +1462,12 @@ msgstr "分析 \"%s\" 時發生錯誤。" #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "意料外的檔案結尾 (EOF) '%s'。" #: editor/editor_node.cpp +#, fuzzy msgid "Missing '%s' or its dependencies." -msgstr "" +msgstr "缺失 '%s' 或它的依存。" #: editor/editor_node.cpp msgid "Error while loading '%s'." @@ -1457,7 +1475,7 @@ msgstr "載入 \"%s\" 時發生錯誤。" #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "正在儲存場景" #: editor/editor_node.cpp msgid "Analyzing" @@ -7424,6 +7442,11 @@ msgstr "專案設定" msgid "Warnings" msgstr "" +#: modules/mono/editor/mono_bottom_panel.cpp +#, fuzzy +msgid "View log" +msgstr "過濾檔案..." + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" |